From: hansonr
Date: Thu, 23 Jul 2015 15:10:13 +0000 (+0100)
Subject: JAL-1807 test
X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=8ffd05b3abe52c0b6b79b011c0966361f82d5fe6;p=jalviewjs.git
JAL-1807 test
---
diff --git a/bin/.gitignore b/bin/.gitignore
new file mode 100644
index 0000000..77d60bf
--- /dev/null
+++ b/bin/.gitignore
@@ -0,0 +1,9 @@
+/MCview/
+/awt2swing/
+/com/
+/fr/
+/jalview/
+/javajs/
+/netscape/
+/org/
+/swingjs/
diff --git a/bin/MCview/Atom.js b/bin/MCview/Atom.js
index 1f4c66f..ff57b47 100644
--- a/bin/MCview/Atom.js
+++ b/bin/MCview/Atom.js
@@ -1,55 +1,55 @@
-Clazz.declarePackage ("MCview");
-Clazz.load (["java.awt.Color"], "MCview.Atom", ["java.lang.Float"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.x = 0;
-this.y = 0;
-this.z = 0;
-this.number = 0;
-this.name = null;
-this.resName = null;
-this.resNumber = 0;
-this.insCode = ' ';
-this.resNumIns = null;
-this.type = 0;
-this.color = null;
-this.chain = null;
-this.alignmentMapping = -1;
-this.atomIndex = 0;
-this.occupancy = 0;
-this.tfactor = 0;
-this.isSelected = false;
-Clazz.instantialize (this, arguments);
-}, MCview, "Atom");
-Clazz.prepareFields (c$, function () {
-this.color = java.awt.Color.lightGray;
-});
-Clazz.makeConstructor (c$,
-function (str) {
-this.atomIndex = Integer.parseInt (str.substring (6, 11).trim ());
-this.name = str.substring (12, 15).trim ();
-this.resName = str.substring (17, 20);
-this.chain = str.substring (21, 22);
-this.resNumber = Integer.parseInt (str.substring (22, 26).trim ());
-this.resNumIns = str.substring (22, 27).trim ();
-this.insCode = str.substring (26, 27).charAt (0);
-this.x = ( new Float (str.substring (30, 38).trim ()).floatValue ());
-this.y = ( new Float (str.substring (38, 46).trim ()).floatValue ());
-this.z = ( new Float (str.substring (47, 55).trim ()).floatValue ());
-var tm = str.substring (54, 60).trim ();
-if (tm.length > 0) {
-this.occupancy = ( new Float (tm)).floatValue ();
-} else {
-this.occupancy = 1;
-}tm = str.substring (60, 66).trim ();
-if (tm.length > 0) {
-this.tfactor = ( new Float (tm).floatValue ());
-} else {
-this.tfactor = 1;
-}}, "~S");
-Clazz.makeConstructor (c$,
-function (x, y, z) {
-this.x = x;
-this.y = y;
-this.z = z;
-}, "~N,~N,~N");
-});
+Clazz.declarePackage ("MCview");
+Clazz.load (["java.awt.Color"], "MCview.Atom", ["java.lang.Float"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.x = 0;
+this.y = 0;
+this.z = 0;
+this.number = 0;
+this.name = null;
+this.resName = null;
+this.resNumber = 0;
+this.insCode = ' ';
+this.resNumIns = null;
+this.type = 0;
+this.color = null;
+this.chain = null;
+this.alignmentMapping = -1;
+this.atomIndex = 0;
+this.occupancy = 0;
+this.tfactor = 0;
+this.isSelected = false;
+Clazz.instantialize (this, arguments);
+}, MCview, "Atom");
+Clazz.prepareFields (c$, function () {
+this.color = java.awt.Color.lightGray;
+});
+Clazz.makeConstructor (c$,
+function (str) {
+this.atomIndex = Integer.parseInt (str.substring (6, 11).trim ());
+this.name = str.substring (12, 15).trim ();
+this.resName = str.substring (17, 20);
+this.chain = str.substring (21, 22);
+this.resNumber = Integer.parseInt (str.substring (22, 26).trim ());
+this.resNumIns = str.substring (22, 27).trim ();
+this.insCode = str.substring (26, 27).charAt (0);
+this.x = ( new Float (str.substring (30, 38).trim ()).floatValue ());
+this.y = ( new Float (str.substring (38, 46).trim ()).floatValue ());
+this.z = ( new Float (str.substring (47, 55).trim ()).floatValue ());
+var tm = str.substring (54, 60).trim ();
+if (tm.length > 0) {
+this.occupancy = ( new Float (tm)).floatValue ();
+} else {
+this.occupancy = 1;
+}tm = str.substring (60, 66).trim ();
+if (tm.length > 0) {
+this.tfactor = ( new Float (tm).floatValue ());
+} else {
+this.tfactor = 1;
+}}, "~S");
+Clazz.makeConstructor (c$,
+function (x, y, z) {
+this.x = x;
+this.y = y;
+this.z = z;
+}, "~N,~N,~N");
+});
diff --git a/bin/MCview/Bond.js b/bin/MCview/Bond.js
index 539e323..9aaba45 100644
--- a/bin/MCview/Bond.js
+++ b/bin/MCview/Bond.js
@@ -1,34 +1,34 @@
-Clazz.declarePackage ("MCview");
-Clazz.load (["java.awt.Color"], "MCview.Bond", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.start = null;
-this.end = null;
-this.startCol = null;
-this.endCol = null;
-this.at1 = null;
-this.at2 = null;
-Clazz.instantialize (this, arguments);
-}, MCview, "Bond");
-Clazz.prepareFields (c$, function () {
-this.startCol = java.awt.Color.lightGray;
-this.endCol = java.awt.Color.lightGray;
-});
-Clazz.makeConstructor (c$,
-function (at1, at2) {
-this.start = Clazz.newFloatArray (-1, [at1.x, at1.y, at1.z]);
-this.end = Clazz.newFloatArray (-1, [at2.x, at2.y, at2.z]);
-this.startCol = at1.color;
-this.endCol = at2.color;
-this.at1 = at1;
-this.at2 = at2;
-}, "MCview.Atom,MCview.Atom");
-Clazz.defineMethod (c$, "translate",
-function (x, y, z) {
-this.start[0] = this.start[0] + x;
-this.end[0] = this.end[0] + x;
-this.start[1] = this.start[1] + y;
-this.end[1] = this.end[1] + y;
-this.start[2] = this.start[2] + z;
-this.end[2] = this.end[2] + z;
-}, "~N,~N,~N");
-});
+Clazz.declarePackage ("MCview");
+Clazz.load (["java.awt.Color"], "MCview.Bond", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.start = null;
+this.end = null;
+this.startCol = null;
+this.endCol = null;
+this.at1 = null;
+this.at2 = null;
+Clazz.instantialize (this, arguments);
+}, MCview, "Bond");
+Clazz.prepareFields (c$, function () {
+this.startCol = java.awt.Color.lightGray;
+this.endCol = java.awt.Color.lightGray;
+});
+Clazz.makeConstructor (c$,
+function (at1, at2) {
+this.start = Clazz.newFloatArray (-1, [at1.x, at1.y, at1.z]);
+this.end = Clazz.newFloatArray (-1, [at2.x, at2.y, at2.z]);
+this.startCol = at1.color;
+this.endCol = at2.color;
+this.at1 = at1;
+this.at2 = at2;
+}, "MCview.Atom,MCview.Atom");
+Clazz.defineMethod (c$, "translate",
+function (x, y, z) {
+this.start[0] = this.start[0] + x;
+this.end[0] = this.end[0] + x;
+this.start[1] = this.start[1] + y;
+this.end[1] = this.end[1] + y;
+this.start[2] = this.start[2] + z;
+this.end[2] = this.end[2] + z;
+}, "~N,~N,~N");
+});
diff --git a/bin/MCview/PDBChain.class b/bin/MCview/PDBChain.class
index 3e017ed..8244cf6 100644
Binary files a/bin/MCview/PDBChain.class and b/bin/MCview/PDBChain.class differ
diff --git a/bin/MCview/PDBChain.js b/bin/MCview/PDBChain.js
index b58d3dd..727e98e 100644
--- a/bin/MCview/PDBChain.js
+++ b/bin/MCview/PDBChain.js
@@ -1,286 +1,286 @@
-Clazz.declarePackage ("MCview");
-Clazz.load (["java.util.Vector"], "MCview.PDBChain", ["MCview.Bond", "$.Residue", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.Sequence", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "java.awt.Color", "java.lang.StringBuilder"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.id = null;
-this.bonds = null;
-this.atoms = null;
-this.residues = null;
-this.offset = 0;
-this.sequence = null;
-this.shadow = null;
-this.isNa = false;
-this.isVisible = true;
-this.pdbstart = 0;
-this.pdbend = 0;
-this.seqstart = 0;
-this.seqend = 0;
-this.pdbid = "";
-this.newline = null;
-this.shadowMap = null;
-Clazz.instantialize (this, arguments);
-}, MCview, "PDBChain");
-Clazz.prepareFields (c$, function () {
-this.bonds = new java.util.Vector ();
-this.atoms = new java.util.Vector ();
-this.residues = new java.util.Vector ();
-this.newline = System.getProperty ("line.separator");
-});
-Clazz.makeConstructor (c$,
-function (pdbid, id) {
-this.pdbid = pdbid.toLowerCase ();
-this.id = id;
-}, "~S,~S");
-Clazz.defineMethod (c$, "setNewlineString",
-function (nl) {
-this.newline = nl;
-}, "~S");
-Clazz.defineMethod (c$, "getNewlineString",
-function () {
-return this.newline;
-});
-Clazz.defineMethod (c$, "print",
-function () {
-var tmp = new StringBuilder (256);
-for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
-tmp.append (b.at1.resName).append (" ").append (b.at1.resNumber).append (" ").append (this.offset).append (this.newline);
-}
-return tmp.toString ();
-});
-Clazz.defineMethod (c$, "makeExactMapping",
-function (as, s1) {
-var pdbpos = as.getSeq2Start () - 2;
-var alignpos = s1.getStart () + as.getSeq1Start () - 3;
-for (var atom, $atom = this.atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
-atom.alignmentMapping = -1;
-}
-for (var i = 0; i < as.astr1.length; i++) {
-if (as.astr1.charAt (i) != '-') {
-alignpos++;
-}if (as.astr2.charAt (i) != '-') {
-pdbpos++;
-}if (as.astr1.charAt (i) == as.astr2.charAt (i)) {
-var res = this.residues.elementAt (pdbpos);
-for (var atom, $atom = res.atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
-atom.alignmentMapping = alignpos;
-}
-}}
-}, "jalview.analysis.AlignSeq,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "transferRESNUMFeatures",
-function (seq, status) {
-var sq = seq;
-while (sq != null && sq.getDatasetSequence () != null) {
-sq = sq.getDatasetSequence ();
-if (sq === this.sequence) {
-return null;
-}}
-if (status == null) {
-status = "IEA:jalview";
-}var features = this.sequence.getSequenceFeatures ();
-for (var i = 0; i < features.length; i++) {
-if (features[i].getFeatureGroup ().equals (this.pdbid)) {
-var tx = new jalview.datamodel.SequenceFeature (features[i]);
-tx.setBegin (1 + this.residues.elementAt (tx.getBegin () - this.offset).atoms.elementAt (0).alignmentMapping);
-tx.setEnd (1 + this.residues.elementAt (tx.getEnd () - this.offset).atoms.elementAt (0).alignmentMapping);
-tx.setStatus (status + ((tx.getStatus () == null || tx.getStatus ().length == 0) ? "" : ":" + tx.getStatus ()));
-if (tx.begin != 0 && tx.end != 0) {
-sq.addSequenceFeature (tx);
-}}}
-return features;
-}, "jalview.datamodel.SequenceI,~S");
-Clazz.defineMethod (c$, "makeCaBondList",
-function () {
-var na = false;
-var numNa = 0;
-for (var i = 0; i < (this.residues.size () - 1); i++) {
-var tmpres = this.residues.elementAt (i);
-var tmpres2 = this.residues.elementAt (i + 1);
-var at1 = tmpres.findAtom ("CA");
-var at2 = tmpres2.findAtom ("CA");
-na = false;
-if ((at1 == null) && (at2 == null)) {
-na = true;
-at1 = tmpres.findAtom ("P");
-at2 = tmpres2.findAtom ("P");
-}if ((at1 != null) && (at2 != null)) {
-if (at1.chain.equals (at2.chain)) {
-if (na) {
-numNa++;
-}this.makeBond (at1, at2);
-}} else {
-System.out.println ("not found " + i);
-}}
-if (this.residues.size () > 0 && (Clazz.doubleToInt (numNa / (this.residues.size () - 1)) > 0.99)) {
-this.isNa = true;
-}});
-Clazz.defineMethod (c$, "makeBond",
-function (at1, at2) {
-this.bonds.addElement ( new MCview.Bond (at1, at2));
-}, "MCview.Atom,MCview.Atom");
-Clazz.defineMethod (c$, "makeResidueList",
-function (visibleChainAnnotation) {
-var count = 0;
-var symbol;
-var deoxyn = false;
-var nucleotide = false;
-var seq = new StringBuilder (256);
-var resFeatures = new java.util.Vector ();
-var resAnnotation = new java.util.Vector ();
-var i;
-var iSize = this.atoms.size () - 1;
-var resNumber = -1;
-for (i = 0; i <= iSize; i++) {
-var tmp = this.atoms.elementAt (i);
-resNumber = tmp.resNumber;
-var res = resNumber;
-if (i == 0) {
-this.offset = resNumber;
-}var resAtoms = new java.util.Vector ();
-while ((resNumber == res) && (i < this.atoms.size ())) {
-resAtoms.add (this.atoms.elementAt (i));
-i++;
-if (i < this.atoms.size ()) {
-resNumber = this.atoms.elementAt (i).resNumber;
-} else {
-resNumber++;
-}}
-i--;
-this.residues.addElement ( new MCview.Residue (resAtoms, resNumber - 1, count));
-var tmpres = this.residues.lastElement ();
-var tmpat = tmpres.atoms.get (0);
-var sf = new jalview.datamodel.SequenceFeature ("RESNUM", tmpat.resName + ":" + tmpat.resNumIns + " " + this.pdbid + this.id, "", this.offset + count, this.offset + count, this.pdbid);
-resFeatures.addElement (sf);
-resAnnotation.addElement ( new jalview.datamodel.Annotation (tmpat.tfactor));
-if ((symbol = jalview.schemes.ResidueProperties.getAA3Hash ().get (tmpat.resName)) == null) {
-var nucname = tmpat.resName.trim ();
-deoxyn = nucname.length == 2 && jalview.schemes.ResidueProperties.aaIndex[nucname.charCodeAt (0)] == jalview.schemes.ResidueProperties.aaIndex['D'.charCodeAt (0)];
-if (tmpat.name.equalsIgnoreCase ("CA") || jalview.schemes.ResidueProperties.nucleotideIndex[nucname.charCodeAt ((deoxyn ? 1 : 0))] == -1) {
-seq.append ("X");
-} else {
-nucleotide = true;
-seq.append (nucname.charAt ((deoxyn ? 1 : 0)));
-}} else {
-if (nucleotide) {
-System.err.println ("Warning: mixed nucleotide and amino acid chain.. its gonna do bad things to you!");
-}seq.append (jalview.schemes.ResidueProperties.aa[(symbol).intValue ()]);
-}count++;
-}
-if (this.id.length < 1) {
-this.id = " ";
-}this.isNa = nucleotide;
-this.sequence = new jalview.datamodel.Sequence (this.id, seq.toString (), this.offset, resNumber - 1);
-for (i = 0, iSize = resFeatures.size (); i < iSize; i++) {
-this.sequence.addSequenceFeature (resFeatures.elementAt (i));
-resFeatures.setElementAt (null, i);
-}
-if (visibleChainAnnotation) {
-var annots = new Array (resAnnotation.size ());
-var max = 0;
-for (i = 0, iSize = annots.length; i < iSize; i++) {
-annots[i] = resAnnotation.elementAt (i);
-if (annots[i].value > max) {
-max = annots[i].value;
-}resAnnotation.setElementAt (null, i);
-}
-var tfactorann = new jalview.datamodel.AlignmentAnnotation ("Temperature Factor", "Temperature Factor for " + this.pdbid + this.id, annots, 0, max, 2);
-tfactorann.setSequenceRef (this.sequence);
-this.sequence.addAlignmentAnnotation (tfactorann);
-}}, "~B");
-Clazz.defineMethod (c$, "setChargeColours",
-function () {
-for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
-if (b.at1 != null && b.at2 != null) {
-b.startCol = MCview.PDBChain.getChargeColour (b.at1.resName);
-b.endCol = MCview.PDBChain.getChargeColour (b.at2.resName);
-} else {
-b.startCol = java.awt.Color.gray;
-b.endCol = java.awt.Color.gray;
-}}
-});
-c$.getChargeColour = Clazz.defineMethod (c$, "getChargeColour",
-function (resName) {
-var result = java.awt.Color.lightGray;
-if ("ASP".equals (resName) || "GLU".equals (resName)) {
-result = java.awt.Color.red;
-} else if ("LYS".equals (resName) || "ARG".equals (resName)) {
-result = java.awt.Color.blue;
-} else if ("CYS".equals (resName)) {
-result = java.awt.Color.yellow;
-}return result;
-}, "~S");
-Clazz.defineMethod (c$, "setChainColours",
-function (cs) {
-var index;
-for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
-try {
-index = jalview.schemes.ResidueProperties.aa3Hash.get (b.at1.resName).intValue ();
-b.startCol = cs.findColour (jalview.schemes.ResidueProperties.aa[index].charAt (0));
-index = jalview.schemes.ResidueProperties.aa3Hash.get (b.at2.resName).intValue ();
-b.endCol = cs.findColour (jalview.schemes.ResidueProperties.aa[index].charAt (0));
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-b.startCol = java.awt.Color.gray;
-b.endCol = java.awt.Color.gray;
-} else {
-throw e;
-}
-}
-}
-}, "jalview.schemes.ColourSchemeI");
-Clazz.defineMethod (c$, "setChainColours",
-function (col) {
-for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
-b.startCol = col;
-b.endCol = col;
-}
-}, "java.awt.Color");
-Clazz.defineMethod (c$, "transferResidueAnnotation",
-function (mapping, sqmpping) {
-var sq = mapping.getSequence ();
-var dsq = sq;
-if (sq != null) {
-while (dsq.getDatasetSequence () != null) {
-dsq = dsq.getDatasetSequence ();
-}
-if (this.shadow != null && this.shadow.getAnnotation () != null) {
-for (var ana, $ana = 0, $$ana = this.shadow.getAnnotation (); $ana < $$ana.length && ((ana = $$ana[$ana]) || true); $ana++) {
-var transfer = sq.getAlignmentAnnotations (ana.getCalcId (), ana.label);
-if (transfer == null || transfer.size () == 0) {
-ana = new jalview.datamodel.AlignmentAnnotation (ana);
-ana.liftOver (this.sequence, this.shadowMap);
-ana.liftOver (dsq, sqmpping);
-dsq.addAlignmentAnnotation (ana);
-} else {
-continue;
-}}
-} else {
-if (this.sequence != null && this.sequence.getAnnotation () != null) {
-for (var ana, $ana = 0, $$ana = this.sequence.getAnnotation (); $ana < $$ana.length && ((ana = $$ana[$ana]) || true); $ana++) {
-var transfer = sq.getAlignmentAnnotations (ana.getCalcId (), ana.label);
-if (transfer == null || transfer.size () == 0) {
-ana = new jalview.datamodel.AlignmentAnnotation (ana);
-ana.liftOver (dsq, sqmpping);
-} else {
-continue;
-}}
-}}if (false) {
-var min = -1;
-var max = 0;
-var an = new Array (sq.getEnd () - sq.getStart () + 1);
-for (var i = sq.getStart (), j = sq.getEnd (), k = 0; i <= j; i++, k++) {
-var prn = mapping.getPDBResNum (k + 1);
-an[k] = new jalview.datamodel.Annotation (prn);
-if (min == -1) {
-min = k;
-max = k;
-} else {
-if (min > k) {
-min = k;
-} else if (max < k) {
-max = k;
-}}}
-sq.addAlignmentAnnotation ( new jalview.datamodel.AlignmentAnnotation ("PDB.RESNUM", "PDB Residue Numbering for " + this.pdbid + ":" + this.id, an, min, max, 2));
-}}}, "jalview.structure.StructureMapping,jalview.datamodel.Mapping");
-Clazz.defineStatics (c$,
-"PDBFILEFEATURE", "PDBFile",
-"IEASTATUS", "IEA:jalview");
-});
+Clazz.declarePackage ("MCview");
+Clazz.load (["java.util.Vector"], "MCview.PDBChain", ["MCview.Bond", "$.Residue", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.Sequence", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "java.awt.Color", "java.lang.StringBuilder"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.id = null;
+this.bonds = null;
+this.atoms = null;
+this.residues = null;
+this.offset = 0;
+this.sequence = null;
+this.shadow = null;
+this.isNa = false;
+this.isVisible = true;
+this.pdbstart = 0;
+this.pdbend = 0;
+this.seqstart = 0;
+this.seqend = 0;
+this.pdbid = "";
+this.newline = null;
+this.shadowMap = null;
+Clazz.instantialize (this, arguments);
+}, MCview, "PDBChain");
+Clazz.prepareFields (c$, function () {
+this.bonds = new java.util.Vector ();
+this.atoms = new java.util.Vector ();
+this.residues = new java.util.Vector ();
+this.newline = System.getProperty ("line.separator");
+});
+Clazz.makeConstructor (c$,
+function (pdbid, id) {
+this.pdbid = pdbid.toLowerCase ();
+this.id = id;
+}, "~S,~S");
+Clazz.defineMethod (c$, "setNewlineString",
+function (nl) {
+this.newline = nl;
+}, "~S");
+Clazz.defineMethod (c$, "getNewlineString",
+function () {
+return this.newline;
+});
+Clazz.defineMethod (c$, "print",
+function () {
+var tmp = new StringBuilder (256);
+for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
+tmp.append (b.at1.resName).append (" ").append (b.at1.resNumber).append (" ").append (this.offset).append (this.newline);
+}
+return tmp.toString ();
+});
+Clazz.defineMethod (c$, "makeExactMapping",
+function (as, s1) {
+var pdbpos = as.getSeq2Start () - 2;
+var alignpos = s1.getStart () + as.getSeq1Start () - 3;
+for (var atom, $atom = this.atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
+atom.alignmentMapping = -1;
+}
+for (var i = 0; i < as.astr1.length; i++) {
+if (as.astr1.charAt (i) != '-') {
+alignpos++;
+}if (as.astr2.charAt (i) != '-') {
+pdbpos++;
+}if (as.astr1.charAt (i) == as.astr2.charAt (i)) {
+var res = this.residues.elementAt (pdbpos);
+for (var atom, $atom = res.atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
+atom.alignmentMapping = alignpos;
+}
+}}
+}, "jalview.analysis.AlignSeq,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "transferRESNUMFeatures",
+function (seq, status) {
+var sq = seq;
+while (sq != null && sq.getDatasetSequence () != null) {
+sq = sq.getDatasetSequence ();
+if (sq === this.sequence) {
+return null;
+}}
+if (status == null) {
+status = "IEA:jalview";
+}var features = this.sequence.getSequenceFeatures ();
+for (var i = 0; i < features.length; i++) {
+if (features[i].getFeatureGroup ().equals (this.pdbid)) {
+var tx = new jalview.datamodel.SequenceFeature (features[i]);
+tx.setBegin (1 + this.residues.elementAt (tx.getBegin () - this.offset).atoms.elementAt (0).alignmentMapping);
+tx.setEnd (1 + this.residues.elementAt (tx.getEnd () - this.offset).atoms.elementAt (0).alignmentMapping);
+tx.setStatus (status + ((tx.getStatus () == null || tx.getStatus ().length == 0) ? "" : ":" + tx.getStatus ()));
+if (tx.begin != 0 && tx.end != 0) {
+sq.addSequenceFeature (tx);
+}}}
+return features;
+}, "jalview.datamodel.SequenceI,~S");
+Clazz.defineMethod (c$, "makeCaBondList",
+function () {
+var na = false;
+var numNa = 0;
+for (var i = 0; i < (this.residues.size () - 1); i++) {
+var tmpres = this.residues.elementAt (i);
+var tmpres2 = this.residues.elementAt (i + 1);
+var at1 = tmpres.findAtom ("CA");
+var at2 = tmpres2.findAtom ("CA");
+na = false;
+if ((at1 == null) && (at2 == null)) {
+na = true;
+at1 = tmpres.findAtom ("P");
+at2 = tmpres2.findAtom ("P");
+}if ((at1 != null) && (at2 != null)) {
+if (at1.chain.equals (at2.chain)) {
+if (na) {
+numNa++;
+}this.makeBond (at1, at2);
+}} else {
+System.out.println ("not found " + i);
+}}
+if (this.residues.size () > 0 && (Clazz.doubleToInt (numNa / (this.residues.size () - 1)) > 0.99)) {
+this.isNa = true;
+}});
+Clazz.defineMethod (c$, "makeBond",
+function (at1, at2) {
+this.bonds.addElement ( new MCview.Bond (at1, at2));
+}, "MCview.Atom,MCview.Atom");
+Clazz.defineMethod (c$, "makeResidueList",
+function (visibleChainAnnotation) {
+var count = 0;
+var symbol;
+var deoxyn = false;
+var nucleotide = false;
+var seq = new StringBuilder (256);
+var resFeatures = new java.util.Vector ();
+var resAnnotation = new java.util.Vector ();
+var i;
+var iSize = this.atoms.size () - 1;
+var resNumber = -1;
+for (i = 0; i <= iSize; i++) {
+var tmp = this.atoms.elementAt (i);
+resNumber = tmp.resNumber;
+var res = resNumber;
+if (i == 0) {
+this.offset = resNumber;
+}var resAtoms = new java.util.Vector ();
+while ((resNumber == res) && (i < this.atoms.size ())) {
+resAtoms.add (this.atoms.elementAt (i));
+i++;
+if (i < this.atoms.size ()) {
+resNumber = this.atoms.elementAt (i).resNumber;
+} else {
+resNumber++;
+}}
+i--;
+this.residues.addElement ( new MCview.Residue (resAtoms, resNumber - 1, count));
+var tmpres = this.residues.lastElement ();
+var tmpat = tmpres.atoms.get (0);
+var sf = new jalview.datamodel.SequenceFeature ("RESNUM", tmpat.resName + ":" + tmpat.resNumIns + " " + this.pdbid + this.id, "", this.offset + count, this.offset + count, this.pdbid);
+resFeatures.addElement (sf);
+resAnnotation.addElement ( new jalview.datamodel.Annotation (tmpat.tfactor));
+if ((symbol = jalview.schemes.ResidueProperties.getAA3Hash ().get (tmpat.resName)) == null) {
+var nucname = tmpat.resName.trim ();
+deoxyn = nucname.length == 2 && jalview.schemes.ResidueProperties.aaIndex[nucname.charCodeAt (0)] == jalview.schemes.ResidueProperties.aaIndex['D'.charCodeAt (0)];
+if (tmpat.name.equalsIgnoreCase ("CA") || jalview.schemes.ResidueProperties.nucleotideIndex[nucname.charCodeAt ((deoxyn ? 1 : 0))] == -1) {
+seq.append ("X");
+} else {
+nucleotide = true;
+seq.append (nucname.charAt ((deoxyn ? 1 : 0)));
+}} else {
+if (nucleotide) {
+System.err.println ("Warning: mixed nucleotide and amino acid chain.. its gonna do bad things to you!");
+}seq.append (jalview.schemes.ResidueProperties.aa[(symbol).intValue ()]);
+}count++;
+}
+if (this.id.length < 1) {
+this.id = " ";
+}this.isNa = nucleotide;
+this.sequence = new jalview.datamodel.Sequence (this.id, seq.toString (), this.offset, resNumber - 1);
+for (i = 0, iSize = resFeatures.size (); i < iSize; i++) {
+this.sequence.addSequenceFeature (resFeatures.elementAt (i));
+resFeatures.setElementAt (null, i);
+}
+if (visibleChainAnnotation) {
+var annots = new Array (resAnnotation.size ());
+var max = 0;
+for (i = 0, iSize = annots.length; i < iSize; i++) {
+annots[i] = resAnnotation.elementAt (i);
+if (annots[i].value > max) {
+max = annots[i].value;
+}resAnnotation.setElementAt (null, i);
+}
+var tfactorann = new jalview.datamodel.AlignmentAnnotation ("Temperature Factor", "Temperature Factor for " + this.pdbid + this.id, annots, 0, max, 2);
+tfactorann.setSequenceRef (this.sequence);
+this.sequence.addAlignmentAnnotation (tfactorann);
+}}, "~B");
+Clazz.defineMethod (c$, "setChargeColours",
+function () {
+for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
+if (b.at1 != null && b.at2 != null) {
+b.startCol = MCview.PDBChain.getChargeColour (b.at1.resName);
+b.endCol = MCview.PDBChain.getChargeColour (b.at2.resName);
+} else {
+b.startCol = java.awt.Color.gray;
+b.endCol = java.awt.Color.gray;
+}}
+});
+c$.getChargeColour = Clazz.defineMethod (c$, "getChargeColour",
+function (resName) {
+var result = java.awt.Color.lightGray;
+if ("ASP".equals (resName) || "GLU".equals (resName)) {
+result = java.awt.Color.red;
+} else if ("LYS".equals (resName) || "ARG".equals (resName)) {
+result = java.awt.Color.blue;
+} else if ("CYS".equals (resName)) {
+result = java.awt.Color.yellow;
+}return result;
+}, "~S");
+Clazz.defineMethod (c$, "setChainColours",
+function (cs) {
+var index;
+for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
+try {
+index = jalview.schemes.ResidueProperties.aa3Hash.get (b.at1.resName).intValue ();
+b.startCol = cs.findColour (jalview.schemes.ResidueProperties.aa[index].charAt (0));
+index = jalview.schemes.ResidueProperties.aa3Hash.get (b.at2.resName).intValue ();
+b.endCol = cs.findColour (jalview.schemes.ResidueProperties.aa[index].charAt (0));
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+b.startCol = java.awt.Color.gray;
+b.endCol = java.awt.Color.gray;
+} else {
+throw e;
+}
+}
+}
+}, "jalview.schemes.ColourSchemeI");
+Clazz.defineMethod (c$, "setChainColours",
+function (col) {
+for (var b, $b = this.bonds.iterator (); $b.hasNext () && ((b = $b.next ()) || true);) {
+b.startCol = col;
+b.endCol = col;
+}
+}, "java.awt.Color");
+Clazz.defineMethod (c$, "transferResidueAnnotation",
+function (mapping, sqmpping) {
+var sq = mapping.getSequence ();
+var dsq = sq;
+if (sq != null) {
+while (dsq.getDatasetSequence () != null) {
+dsq = dsq.getDatasetSequence ();
+}
+if (this.shadow != null && this.shadow.getAnnotation () != null) {
+for (var ana, $ana = 0, $$ana = this.shadow.getAnnotation (); $ana < $$ana.length && ((ana = $$ana[$ana]) || true); $ana++) {
+var transfer = sq.getAlignmentAnnotations (ana.getCalcId (), ana.label);
+if (transfer == null || transfer.size () == 0) {
+ana = new jalview.datamodel.AlignmentAnnotation (ana);
+ana.liftOver (this.sequence, this.shadowMap);
+ana.liftOver (dsq, sqmpping);
+dsq.addAlignmentAnnotation (ana);
+} else {
+continue;
+}}
+} else {
+if (this.sequence != null && this.sequence.getAnnotation () != null) {
+for (var ana, $ana = 0, $$ana = this.sequence.getAnnotation (); $ana < $$ana.length && ((ana = $$ana[$ana]) || true); $ana++) {
+var transfer = sq.getAlignmentAnnotations (ana.getCalcId (), ana.label);
+if (transfer == null || transfer.size () == 0) {
+ana = new jalview.datamodel.AlignmentAnnotation (ana);
+ana.liftOver (dsq, sqmpping);
+} else {
+continue;
+}}
+}}if (false) {
+var min = -1;
+var max = 0;
+var an = new Array (sq.getEnd () - sq.getStart () + 1);
+for (var i = sq.getStart (), j = sq.getEnd (), k = 0; i <= j; i++, k++) {
+var prn = mapping.getPDBResNum (k + 1);
+an[k] = new jalview.datamodel.Annotation (prn);
+if (min == -1) {
+min = k;
+max = k;
+} else {
+if (min > k) {
+min = k;
+} else if (max < k) {
+max = k;
+}}}
+sq.addAlignmentAnnotation ( new jalview.datamodel.AlignmentAnnotation ("PDB.RESNUM", "PDB Residue Numbering for " + this.pdbid + ":" + this.id, an, min, max, 2));
+}}}, "jalview.structure.StructureMapping,jalview.datamodel.Mapping");
+Clazz.defineStatics (c$,
+"PDBFILEFEATURE", "PDBFile",
+"IEASTATUS", "IEA:jalview");
+});
diff --git a/bin/MCview/PDBfile.class b/bin/MCview/PDBfile.class
index 251deb7..a9bf874 100644
Binary files a/bin/MCview/PDBfile.class and b/bin/MCview/PDBfile.class differ
diff --git a/bin/MCview/PDBfile.js b/bin/MCview/PDBfile.js
index dfc40cc..c6af5ca 100644
--- a/bin/MCview/PDBfile.js
+++ b/bin/MCview/PDBfile.js
@@ -1,320 +1,320 @@
-Clazz.declarePackage ("MCview");
-Clazz.load (["jalview.io.AlignFile"], "MCview.PDBfile", ["MCview.Atom", "$.PDBChain", "jalview.analysis.AlignSeq", "jalview.datamodel.Alignment", "$.AlignmentI", "$.PDBEntry", "jalview.io.FileParse", "jalview.util.MessageManager", "java.awt.Color", "java.io.IOException", "java.util.ArrayList", "$.Hashtable", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.chains = null;
-this.id = null;
-this.visibleChainAnnotation = false;
-this.$predictSecondaryStructure = true;
-this.externalSecondaryStructure = false;
-Clazz.instantialize (this, arguments);
-}, MCview, "PDBfile", jalview.io.AlignFile);
-Clazz.makeConstructor (c$,
-function (addAlignmentAnnotations, predictSecondaryStructure, externalSecStr) {
-Clazz.superConstructor (this, MCview.PDBfile);
-this.visibleChainAnnotation = addAlignmentAnnotations;
-this.$predictSecondaryStructure = predictSecondaryStructure;
-this.externalSecondaryStructure = externalSecStr;
-}, "~B,~B,~B");
-Clazz.makeConstructor (c$,
-function (addAlignmentAnnotations, predictSecondaryStructure, externalSecStr, file, protocol) {
-Clazz.superConstructor (this, MCview.PDBfile, [false, file, protocol]);
-this.visibleChainAnnotation = addAlignmentAnnotations;
-this.$predictSecondaryStructure = predictSecondaryStructure;
-this.externalSecondaryStructure = externalSecStr;
-this.doParse ();
-}, "~B,~B,~B,~S,~S");
-Clazz.makeConstructor (c$,
-function (addAlignmentAnnotations, predictSecondaryStructure, externalSecStr, source) {
-Clazz.superConstructor (this, MCview.PDBfile, [false, source]);
-this.visibleChainAnnotation = addAlignmentAnnotations;
-this.$predictSecondaryStructure = predictSecondaryStructure;
-this.externalSecondaryStructure = externalSecStr;
-this.doParse ();
-}, "~B,~B,~B,jalview.io.FileParse");
-Clazz.overrideMethod (c$, "print",
-function () {
-return null;
-});
-Clazz.overrideMethod (c$, "parse",
-function () {
-this.id = this.safeName (this.getDataName ());
-this.chains = new java.util.Vector ();
-var rna = new java.util.ArrayList ();
-var prot = new java.util.ArrayList ();
-var tmpchain;
-var line = null;
-var modelFlag = false;
-var terFlag = false;
-var lastID = "";
-var indexx = 0;
-var atomnam = null;
-try {
-while ((line = this.nextLine ()) != null) {
-if (line.indexOf ("HEADER") == 0) {
-if (line.length > 62) {
-var tid;
-if (line.length > 67) {
-tid = line.substring (62, 67).trim ();
-} else {
-tid = line.substring (62).trim ();
-}if (tid.length > 0) {
-this.id = tid;
-}continue;
-}}if (line.indexOf ("SEQRES") == 0) {
-}if (line.indexOf ("MODEL") == 0) {
-modelFlag = true;
-}if (line.indexOf ("TER") == 0) {
-terFlag = true;
-}if (modelFlag && line.indexOf ("ENDMDL") == 0) {
-break;
-}if (line.indexOf ("ATOM") == 0 || (line.indexOf ("HETATM") == 0 && !terFlag)) {
-terFlag = false;
-atomnam = line.substring (12, 15).trim ();
-if (!atomnam.equals ("CA") && !atomnam.equals ("P")) {
-continue;
-}var tmpatom = new MCview.Atom (line);
-tmpchain = this.findChain (tmpatom.chain);
-if (tmpchain != null) {
-if (tmpatom.resNumIns.trim ().equals (lastID)) {
-continue;
-}tmpchain.atoms.addElement (tmpatom);
-} else {
-tmpchain = new MCview.PDBChain (this.id, tmpatom.chain);
-this.chains.addElement (tmpchain);
-tmpchain.atoms.addElement (tmpatom);
-}lastID = tmpatom.resNumIns.trim ();
-}this.index++;
-}
-this.makeResidueList ();
-this.makeCaBondList ();
-if (this.id == null) {
-this.id = this.inFile.getName ();
-}for (var chain, $chain = this.chains.iterator (); $chain.hasNext () && ((chain = $chain.next ()) || true);) {
-var chainseq = this.postProcessChain (chain);
-if (MCview.PDBfile.isRNA (chainseq)) {
-rna.add (chainseq);
-} else {
-prot.add (chainseq);
-}}
-if (this.$predictSecondaryStructure) {
-this.predictSecondaryStructure (rna, prot);
-}} catch (e$$) {
-if (Clazz.exceptionOf (e$$, OutOfMemoryError)) {
-var er = e$$;
-{
-System.out.println ("OUT OF MEMORY LOADING PDB FILE");
-throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.outofmemory_loading_pdb_file"));
-}
-} else if (Clazz.exceptionOf (e$$, NumberFormatException)) {
-var ex = e$$;
-{
-if (line != null) {
-System.err.println ("Couldn't read number from line:");
-System.err.println (line);
-}}
-} else {
-throw e$$;
-}
-}
-this.markCalcIds ();
-});
-Clazz.defineMethod (c$, "predictSecondaryStructure",
-function (rnaSequences, proteinSequences) {
-if (this.externalSecondaryStructure && rnaSequences.size () > 0) {
-try {
-this.processPdbFileWithAnnotate3d (rnaSequences);
-} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-System.err.println ("Exceptions when dealing with RNA in pdb file");
-x.printStackTrace ();
-} else {
-throw x;
-}
-}
-}if (proteinSequences.size () > 0) {
-try {
-this.processPdbFileWithJmol (proteinSequences);
-} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-System.err.println ("Exceptions from Jmol when processing data in pdb file");
-x.printStackTrace ();
-} else {
-throw x;
-}
-}
-}}, "java.util.List,java.util.List");
-Clazz.defineMethod (c$, "postProcessChain",
-function (chain) {
-var dataset = chain.sequence;
-dataset.setName (this.id + "|" + dataset.getName ());
-var entry = new jalview.datamodel.PDBEntry ();
-entry.setId (this.id);
-entry.setType (jalview.datamodel.PDBEntry.Type.PDB);
-entry.setProperty ( new java.util.Hashtable ());
-if (chain.id != null) {
-entry.setChainCode (String.valueOf (chain.id));
-}if (this.inFile != null) {
-entry.setFile (this.inFile.getAbsolutePath ());
-} else {
-entry.setFile (this.getDataName ());
-}dataset.addPDBId (entry);
-var chainseq = dataset.deriveSequence ();
-this.seqs.addElement (chainseq);
-var chainannot = chainseq.getAnnotation ();
-if (chainannot != null && this.visibleChainAnnotation) {
-for (var ai = 0; ai < chainannot.length; ai++) {
-chainannot[ai].visible = this.visibleChainAnnotation;
-this.annotations.addElement (chainannot[ai]);
-}
-}return chainseq;
-}, "MCview.PDBChain");
-c$.isCalcIdHandled = Clazz.defineMethod (c$, "isCalcIdHandled",
-function (calcId) {
-return calcId != null && (MCview.PDBfile.CALC_ID_PREFIX.equals (calcId));
-}, "~S");
-c$.isCalcIdForFile = Clazz.defineMethod (c$, "isCalcIdForFile",
-function (alan, pdbFile) {
-return alan.getCalcId () != null && MCview.PDBfile.CALC_ID_PREFIX.equals (alan.getCalcId ()) && pdbFile.equals (alan.getProperty ("PDBID"));
-}, "jalview.datamodel.AlignmentAnnotation,~S");
-c$.relocateCalcId = Clazz.defineMethod (c$, "relocateCalcId",
-function (calcId, alreadyLoadedPDB) {
-var s = MCview.PDBfile.CALC_ID_PREFIX.length;
-var end = calcId.indexOf (MCview.PDBfile.CALC_ID_PREFIX, s);
-var between = calcId.substring (s, end - 1);
-return MCview.PDBfile.CALC_ID_PREFIX + alreadyLoadedPDB.get (between) + ":" + calcId.substring (end);
-}, "~S,java.util.Hashtable");
-Clazz.defineMethod (c$, "markCalcIds",
-($fz = function () {
-for (var sq, $sq = this.seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-if (sq.getAnnotation () != null) {
-for (var aa, $aa = 0, $$aa = sq.getAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
-var oldId = aa.getCalcId ();
-if (oldId == null) {
-oldId = "";
-}aa.setCalcId (MCview.PDBfile.CALC_ID_PREFIX);
-aa.setProperty ("PDBID", this.id);
-aa.setProperty ("oldCalcId", oldId);
-}
-}}
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "processPdbFileWithJmol",
-($fz = function (prot) {
-try {
-var cl = Class.forName ("jalview.ext.jmol.PDBFileWithJmol");
-if (cl != null) {
-var constructor = cl.getConstructor ( Clazz.newArray (-1, [jalview.io.FileParse]));
-var args = Clazz.newArray (-1, [ new jalview.io.FileParse (this.getDataName (), this.type)]);
-var jmf = constructor.newInstance (args);
-var al = new jalview.datamodel.Alignment (cl.getMethod ("getSeqsAsArray", Clazz.newArray (-1, [])).invoke (jmf, []));
-cl.getMethod ("addAnnotations", Clazz.newArray (-1, [jalview.datamodel.AlignmentI])).invoke (jmf, [al]);
-for (var sq, $sq = al.getSequences ().iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-if (sq.getDatasetSequence () != null) {
-sq.getDatasetSequence ().getPDBId ().clear ();
-} else {
-sq.getPDBId ().clear ();
-}}
-this.replaceAndUpdateChains (prot, al, "pep", false);
-}} catch (q) {
-if (Clazz.exceptionOf (q, ClassNotFoundException)) {
-} else {
-throw q;
-}
-}
-}, $fz.isPrivate = true, $fz), "java.util.List");
-Clazz.defineMethod (c$, "replaceAndUpdateChains",
-($fz = function (prot, al, pep, b) {
-var replaced = jalview.analysis.AlignSeq.replaceMatchingSeqsWith (this.seqs, this.annotations, prot, al, pep, false);
-for (var ch, $ch = this.chains.iterator (); $ch.hasNext () && ((ch = $ch.next ()) || true);) {
-var p = 0;
-for (var sq, $sq = replaced.get (0).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-p++;
-if (sq === ch.sequence || sq.getDatasetSequence () === ch.sequence) {
-p = -p;
-break;
-}}
-if (p < 0) {
-p = -p - 1;
-ch.shadow = replaced.get (1).get (p);
-ch.shadowMap = (replaced.get (2).get (p)).getMappingFromS1 (false);
-}}
-}, $fz.isPrivate = true, $fz), "java.util.List,jalview.datamodel.AlignmentI,~S,~B");
-Clazz.defineMethod (c$, "processPdbFileWithAnnotate3d",
-($fz = function (rna) {
-try {
-var cl = Class.forName ("jalview.ws.jws1.Annotate3D");
-if (cl != null) {
-var annotate3d = cl.getConstructor ( Clazz.newArray (-1, [])).newInstance ( Clazz.newArray (-1, []));
-var al = (cl.getMethod ("getRNAMLFor", Clazz.newArray (-1, [jalview.io.FileParse])).invoke (annotate3d, Clazz.newArray (-1, [ new jalview.io.FileParse (this.getDataName (), this.type)])));
-for (var sq, $sq = al.getSequences ().iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-if (sq.getDatasetSequence () != null) {
-if (sq.getDatasetSequence ().getPDBId () != null) {
-sq.getDatasetSequence ().getPDBId ().clear ();
-}} else {
-if (sq.getPDBId () != null) {
-sq.getPDBId ().clear ();
-}}}
-this.replaceAndUpdateChains (rna, al, "dna", false);
-}} catch (x) {
-if (Clazz.exceptionOf (x, ClassNotFoundException)) {
-} else {
-throw x;
-}
-}
-;}, $fz.isPrivate = true, $fz), "java.util.List");
-Clazz.defineMethod (c$, "safeName",
-($fz = function (dataName) {
-var p = 0;
-while ((p = dataName.indexOf ("/")) > -1 && p < dataName.length) {
-dataName = dataName.substring (p + 1);
-}
-return dataName;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "makeResidueList",
-function () {
-for (var i = 0; i < this.chains.size (); i++) {
-this.chains.elementAt (i).makeResidueList (this.visibleChainAnnotation);
-}
-});
-Clazz.defineMethod (c$, "makeCaBondList",
-function () {
-for (var i = 0; i < this.chains.size (); i++) {
-this.chains.elementAt (i).makeCaBondList ();
-}
-});
-Clazz.defineMethod (c$, "findChain",
-function (id) {
-for (var i = 0; i < this.chains.size (); i++) {
-if (this.chains.elementAt (i).id.equals (id)) {
-return this.chains.elementAt (i);
-}}
-return null;
-}, "~S");
-Clazz.defineMethod (c$, "setChargeColours",
-function () {
-for (var i = 0; i < this.chains.size (); i++) {
-this.chains.elementAt (i).setChargeColours ();
-}
-});
-Clazz.defineMethod (c$, "setColours",
-function (cs) {
-for (var i = 0; i < this.chains.size (); i++) {
-this.chains.elementAt (i).setChainColours (cs);
-}
-}, "jalview.schemes.ColourSchemeI");
-Clazz.defineMethod (c$, "setChainColours",
-function () {
-for (var i = 0; i < this.chains.size (); i++) {
-this.chains.elementAt (i).setChainColours (java.awt.Color.getHSBColor (1.0 / i, .4, 1.0));
-}
-});
-c$.isRNA = Clazz.defineMethod (c$, "isRNA",
-function (seq) {
-for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
-if ((c != 'A') && (c != 'C') && (c != 'G') && (c != 'U')) {
-return false;
-}}
-return true;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineStatics (c$,
-"CALC_ID_PREFIX", "JalviewPDB");
-});
+Clazz.declarePackage ("MCview");
+Clazz.load (["jalview.io.AlignFile"], "MCview.PDBfile", ["MCview.Atom", "$.PDBChain", "jalview.analysis.AlignSeq", "jalview.datamodel.Alignment", "$.AlignmentI", "$.PDBEntry", "jalview.io.FileParse", "jalview.util.MessageManager", "java.awt.Color", "java.io.IOException", "java.util.ArrayList", "$.Hashtable", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.chains = null;
+this.id = null;
+this.visibleChainAnnotation = false;
+this.$predictSecondaryStructure = true;
+this.externalSecondaryStructure = false;
+Clazz.instantialize (this, arguments);
+}, MCview, "PDBfile", jalview.io.AlignFile);
+Clazz.makeConstructor (c$,
+function (addAlignmentAnnotations, predictSecondaryStructure, externalSecStr) {
+Clazz.superConstructor (this, MCview.PDBfile);
+this.visibleChainAnnotation = addAlignmentAnnotations;
+this.$predictSecondaryStructure = predictSecondaryStructure;
+this.externalSecondaryStructure = externalSecStr;
+}, "~B,~B,~B");
+Clazz.makeConstructor (c$,
+function (addAlignmentAnnotations, predictSecondaryStructure, externalSecStr, file, protocol) {
+Clazz.superConstructor (this, MCview.PDBfile, [false, file, protocol]);
+this.visibleChainAnnotation = addAlignmentAnnotations;
+this.$predictSecondaryStructure = predictSecondaryStructure;
+this.externalSecondaryStructure = externalSecStr;
+this.doParse ();
+}, "~B,~B,~B,~S,~S");
+Clazz.makeConstructor (c$,
+function (addAlignmentAnnotations, predictSecondaryStructure, externalSecStr, source) {
+Clazz.superConstructor (this, MCview.PDBfile, [false, source]);
+this.visibleChainAnnotation = addAlignmentAnnotations;
+this.$predictSecondaryStructure = predictSecondaryStructure;
+this.externalSecondaryStructure = externalSecStr;
+this.doParse ();
+}, "~B,~B,~B,jalview.io.FileParse");
+Clazz.overrideMethod (c$, "print",
+function () {
+return null;
+});
+Clazz.overrideMethod (c$, "parse",
+function () {
+this.id = this.safeName (this.getDataName ());
+this.chains = new java.util.Vector ();
+var rna = new java.util.ArrayList ();
+var prot = new java.util.ArrayList ();
+var tmpchain;
+var line = null;
+var modelFlag = false;
+var terFlag = false;
+var lastID = "";
+var indexx = 0;
+var atomnam = null;
+try {
+while ((line = this.nextLine ()) != null) {
+if (line.indexOf ("HEADER") == 0) {
+if (line.length > 62) {
+var tid;
+if (line.length > 67) {
+tid = line.substring (62, 67).trim ();
+} else {
+tid = line.substring (62).trim ();
+}if (tid.length > 0) {
+this.id = tid;
+}continue;
+}}if (line.indexOf ("SEQRES") == 0) {
+}if (line.indexOf ("MODEL") == 0) {
+modelFlag = true;
+}if (line.indexOf ("TER") == 0) {
+terFlag = true;
+}if (modelFlag && line.indexOf ("ENDMDL") == 0) {
+break;
+}if (line.indexOf ("ATOM") == 0 || (line.indexOf ("HETATM") == 0 && !terFlag)) {
+terFlag = false;
+atomnam = line.substring (12, 15).trim ();
+if (!atomnam.equals ("CA") && !atomnam.equals ("P")) {
+continue;
+}var tmpatom = new MCview.Atom (line);
+tmpchain = this.findChain (tmpatom.chain);
+if (tmpchain != null) {
+if (tmpatom.resNumIns.trim ().equals (lastID)) {
+continue;
+}tmpchain.atoms.addElement (tmpatom);
+} else {
+tmpchain = new MCview.PDBChain (this.id, tmpatom.chain);
+this.chains.addElement (tmpchain);
+tmpchain.atoms.addElement (tmpatom);
+}lastID = tmpatom.resNumIns.trim ();
+}this.index++;
+}
+this.makeResidueList ();
+this.makeCaBondList ();
+if (this.id == null) {
+this.id = this.inFile.getName ();
+}for (var chain, $chain = this.chains.iterator (); $chain.hasNext () && ((chain = $chain.next ()) || true);) {
+var chainseq = this.postProcessChain (chain);
+if (MCview.PDBfile.isRNA (chainseq)) {
+rna.add (chainseq);
+} else {
+prot.add (chainseq);
+}}
+if (this.$predictSecondaryStructure) {
+this.predictSecondaryStructure (rna, prot);
+}} catch (e$$) {
+if (Clazz.exceptionOf (e$$, OutOfMemoryError)) {
+var er = e$$;
+{
+System.out.println ("OUT OF MEMORY LOADING PDB FILE");
+throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.outofmemory_loading_pdb_file"));
+}
+} else if (Clazz.exceptionOf (e$$, NumberFormatException)) {
+var ex = e$$;
+{
+if (line != null) {
+System.err.println ("Couldn't read number from line:");
+System.err.println (line);
+}}
+} else {
+throw e$$;
+}
+}
+this.markCalcIds ();
+});
+Clazz.defineMethod (c$, "predictSecondaryStructure",
+function (rnaSequences, proteinSequences) {
+if (this.externalSecondaryStructure && rnaSequences.size () > 0) {
+try {
+this.processPdbFileWithAnnotate3d (rnaSequences);
+} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+System.err.println ("Exceptions when dealing with RNA in pdb file");
+x.printStackTrace ();
+} else {
+throw x;
+}
+}
+}if (proteinSequences.size () > 0) {
+try {
+this.processPdbFileWithJmol (proteinSequences);
+} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+System.err.println ("Exceptions from Jmol when processing data in pdb file");
+x.printStackTrace ();
+} else {
+throw x;
+}
+}
+}}, "java.util.List,java.util.List");
+Clazz.defineMethod (c$, "postProcessChain",
+function (chain) {
+var dataset = chain.sequence;
+dataset.setName (this.id + "|" + dataset.getName ());
+var entry = new jalview.datamodel.PDBEntry ();
+entry.setId (this.id);
+entry.setType (jalview.datamodel.PDBEntry.Type.PDB);
+entry.setProperty ( new java.util.Hashtable ());
+if (chain.id != null) {
+entry.setChainCode (String.valueOf (chain.id));
+}if (this.inFile != null) {
+entry.setFile (this.inFile.getAbsolutePath ());
+} else {
+entry.setFile (this.getDataName ());
+}dataset.addPDBId (entry);
+var chainseq = dataset.deriveSequence ();
+this.seqs.addElement (chainseq);
+var chainannot = chainseq.getAnnotation ();
+if (chainannot != null && this.visibleChainAnnotation) {
+for (var ai = 0; ai < chainannot.length; ai++) {
+chainannot[ai].visible = this.visibleChainAnnotation;
+this.annotations.addElement (chainannot[ai]);
+}
+}return chainseq;
+}, "MCview.PDBChain");
+c$.isCalcIdHandled = Clazz.defineMethod (c$, "isCalcIdHandled",
+function (calcId) {
+return calcId != null && (MCview.PDBfile.CALC_ID_PREFIX.equals (calcId));
+}, "~S");
+c$.isCalcIdForFile = Clazz.defineMethod (c$, "isCalcIdForFile",
+function (alan, pdbFile) {
+return alan.getCalcId () != null && MCview.PDBfile.CALC_ID_PREFIX.equals (alan.getCalcId ()) && pdbFile.equals (alan.getProperty ("PDBID"));
+}, "jalview.datamodel.AlignmentAnnotation,~S");
+c$.relocateCalcId = Clazz.defineMethod (c$, "relocateCalcId",
+function (calcId, alreadyLoadedPDB) {
+var s = MCview.PDBfile.CALC_ID_PREFIX.length;
+var end = calcId.indexOf (MCview.PDBfile.CALC_ID_PREFIX, s);
+var between = calcId.substring (s, end - 1);
+return MCview.PDBfile.CALC_ID_PREFIX + alreadyLoadedPDB.get (between) + ":" + calcId.substring (end);
+}, "~S,java.util.Hashtable");
+Clazz.defineMethod (c$, "markCalcIds",
+($fz = function () {
+for (var sq, $sq = this.seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+if (sq.getAnnotation () != null) {
+for (var aa, $aa = 0, $$aa = sq.getAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
+var oldId = aa.getCalcId ();
+if (oldId == null) {
+oldId = "";
+}aa.setCalcId (MCview.PDBfile.CALC_ID_PREFIX);
+aa.setProperty ("PDBID", this.id);
+aa.setProperty ("oldCalcId", oldId);
+}
+}}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "processPdbFileWithJmol",
+($fz = function (prot) {
+try {
+var cl = Class.forName ("jalview.ext.jmol.PDBFileWithJmol");
+if (cl != null) {
+var constructor = cl.getConstructor ( Clazz.newArray (-1, [jalview.io.FileParse]));
+var args = Clazz.newArray (-1, [ new jalview.io.FileParse (this.getDataName (), this.type)]);
+var jmf = constructor.newInstance (args);
+var al = new jalview.datamodel.Alignment (cl.getMethod ("getSeqsAsArray", Clazz.newArray (-1, [])).invoke (jmf, []));
+cl.getMethod ("addAnnotations", Clazz.newArray (-1, [jalview.datamodel.AlignmentI])).invoke (jmf, [al]);
+for (var sq, $sq = al.getSequences ().iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+if (sq.getDatasetSequence () != null) {
+sq.getDatasetSequence ().getPDBId ().clear ();
+} else {
+sq.getPDBId ().clear ();
+}}
+this.replaceAndUpdateChains (prot, al, "pep", false);
+}} catch (q) {
+if (Clazz.exceptionOf (q, ClassNotFoundException)) {
+} else {
+throw q;
+}
+}
+}, $fz.isPrivate = true, $fz), "java.util.List");
+Clazz.defineMethod (c$, "replaceAndUpdateChains",
+($fz = function (prot, al, pep, b) {
+var replaced = jalview.analysis.AlignSeq.replaceMatchingSeqsWith (this.seqs, this.annotations, prot, al, pep, false);
+for (var ch, $ch = this.chains.iterator (); $ch.hasNext () && ((ch = $ch.next ()) || true);) {
+var p = 0;
+for (var sq, $sq = replaced.get (0).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+p++;
+if (sq === ch.sequence || sq.getDatasetSequence () === ch.sequence) {
+p = -p;
+break;
+}}
+if (p < 0) {
+p = -p - 1;
+ch.shadow = replaced.get (1).get (p);
+ch.shadowMap = (replaced.get (2).get (p)).getMappingFromS1 (false);
+}}
+}, $fz.isPrivate = true, $fz), "java.util.List,jalview.datamodel.AlignmentI,~S,~B");
+Clazz.defineMethod (c$, "processPdbFileWithAnnotate3d",
+($fz = function (rna) {
+try {
+var cl = Class.forName ("jalview.ws.jws1.Annotate3D");
+if (cl != null) {
+var annotate3d = cl.getConstructor ( Clazz.newArray (-1, [])).newInstance ( Clazz.newArray (-1, []));
+var al = (cl.getMethod ("getRNAMLFor", Clazz.newArray (-1, [jalview.io.FileParse])).invoke (annotate3d, Clazz.newArray (-1, [ new jalview.io.FileParse (this.getDataName (), this.type)])));
+for (var sq, $sq = al.getSequences ().iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+if (sq.getDatasetSequence () != null) {
+if (sq.getDatasetSequence ().getPDBId () != null) {
+sq.getDatasetSequence ().getPDBId ().clear ();
+}} else {
+if (sq.getPDBId () != null) {
+sq.getPDBId ().clear ();
+}}}
+this.replaceAndUpdateChains (rna, al, "dna", false);
+}} catch (x) {
+if (Clazz.exceptionOf (x, ClassNotFoundException)) {
+} else {
+throw x;
+}
+}
+;}, $fz.isPrivate = true, $fz), "java.util.List");
+Clazz.defineMethod (c$, "safeName",
+($fz = function (dataName) {
+var p = 0;
+while ((p = dataName.indexOf ("/")) > -1 && p < dataName.length) {
+dataName = dataName.substring (p + 1);
+}
+return dataName;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "makeResidueList",
+function () {
+for (var i = 0; i < this.chains.size (); i++) {
+this.chains.elementAt (i).makeResidueList (this.visibleChainAnnotation);
+}
+});
+Clazz.defineMethod (c$, "makeCaBondList",
+function () {
+for (var i = 0; i < this.chains.size (); i++) {
+this.chains.elementAt (i).makeCaBondList ();
+}
+});
+Clazz.defineMethod (c$, "findChain",
+function (id) {
+for (var i = 0; i < this.chains.size (); i++) {
+if (this.chains.elementAt (i).id.equals (id)) {
+return this.chains.elementAt (i);
+}}
+return null;
+}, "~S");
+Clazz.defineMethod (c$, "setChargeColours",
+function () {
+for (var i = 0; i < this.chains.size (); i++) {
+this.chains.elementAt (i).setChargeColours ();
+}
+});
+Clazz.defineMethod (c$, "setColours",
+function (cs) {
+for (var i = 0; i < this.chains.size (); i++) {
+this.chains.elementAt (i).setChainColours (cs);
+}
+}, "jalview.schemes.ColourSchemeI");
+Clazz.defineMethod (c$, "setChainColours",
+function () {
+for (var i = 0; i < this.chains.size (); i++) {
+this.chains.elementAt (i).setChainColours (java.awt.Color.getHSBColor (1.0 / i, .4, 1.0));
+}
+});
+c$.isRNA = Clazz.defineMethod (c$, "isRNA",
+function (seq) {
+for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
+if ((c != 'A') && (c != 'C') && (c != 'G') && (c != 'U')) {
+return false;
+}}
+return true;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineStatics (c$,
+"CALC_ID_PREFIX", "JalviewPDB");
+});
diff --git a/bin/MCview/Residue.js b/bin/MCview/Residue.js
index 93e2930..6cb43ed 100644
--- a/bin/MCview/Residue.js
+++ b/bin/MCview/Residue.js
@@ -1,21 +1,21 @@
-Clazz.declarePackage ("MCview");
-c$ = Clazz.decorateAsClass (function () {
-this.atoms = null;
-this.number = 0;
-this.count = 0;
-Clazz.instantialize (this, arguments);
-}, MCview, "Residue");
-Clazz.makeConstructor (c$,
-function (resAtoms, number, count) {
-this.atoms = resAtoms;
-this.number = number;
-this.count = count;
-}, "java.util.Vector,~N,~N");
-Clazz.defineMethod (c$, "findAtom",
-function (name) {
-for (var atom, $atom = this.atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
-if (atom.name.equals (name)) {
-return atom;
-}}
-return null;
-}, "~S");
+Clazz.declarePackage ("MCview");
+c$ = Clazz.decorateAsClass (function () {
+this.atoms = null;
+this.number = 0;
+this.count = 0;
+Clazz.instantialize (this, arguments);
+}, MCview, "Residue");
+Clazz.makeConstructor (c$,
+function (resAtoms, number, count) {
+this.atoms = resAtoms;
+this.number = number;
+this.count = count;
+}, "java.util.Vector,~N,~N");
+Clazz.defineMethod (c$, "findAtom",
+function (name) {
+for (var atom, $atom = this.atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
+if (atom.name.equals (name)) {
+return atom;
+}}
+return null;
+}, "~S");
diff --git a/bin/awt2swing/Button.js b/bin/awt2swing/Button.js
index b25baa7..80ce87e 100644
--- a/bin/awt2swing/Button.js
+++ b/bin/awt2swing/Button.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JButton"], "awt2swing.Button", null, function () {
-c$ = Clazz.declareType (awt2swing, "Button", javax.swing.JButton);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JButton"], "awt2swing.Button", null, function () {
+c$ = Clazz.declareType (awt2swing, "Button", javax.swing.JButton);
+});
diff --git a/bin/awt2swing/Canvas.js b/bin/awt2swing/Canvas.js
index df3f0b9..cf449b4 100644
--- a/bin/awt2swing/Canvas.js
+++ b/bin/awt2swing/Canvas.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["awt2swing.Panel"], "awt2swing.Canvas", null, function () {
-c$ = Clazz.declareType (awt2swing, "Canvas", awt2swing.Panel);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["awt2swing.Panel"], "awt2swing.Canvas", null, function () {
+c$ = Clazz.declareType (awt2swing, "Canvas", awt2swing.Panel);
+});
diff --git a/bin/awt2swing/Checkbox.js b/bin/awt2swing/Checkbox.js
index cd50679..cfc477c 100644
--- a/bin/awt2swing/Checkbox.js
+++ b/bin/awt2swing/Checkbox.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JCheckBox"], "awt2swing.Checkbox", null, function () {
-c$ = Clazz.declareType (awt2swing, "Checkbox", javax.swing.JCheckBox);
-Clazz.defineMethod (c$, "getState",
-function () {
-return this.isSelected ();
-});
-Clazz.defineMethod (c$, "setState",
-function (b) {
-this.setSelected (b);
-}, "~B");
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JCheckBox"], "awt2swing.Checkbox", null, function () {
+c$ = Clazz.declareType (awt2swing, "Checkbox", javax.swing.JCheckBox);
+Clazz.defineMethod (c$, "getState",
+function () {
+return this.isSelected ();
+});
+Clazz.defineMethod (c$, "setState",
+function (b) {
+this.setSelected (b);
+}, "~B");
+});
diff --git a/bin/awt2swing/CheckboxMenuItem.js b/bin/awt2swing/CheckboxMenuItem.js
index 782c150..9364af7 100644
--- a/bin/awt2swing/CheckboxMenuItem.js
+++ b/bin/awt2swing/CheckboxMenuItem.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JCheckBoxMenuItem"], "awt2swing.CheckboxMenuItem", null, function () {
-c$ = Clazz.declareType (awt2swing, "CheckboxMenuItem", javax.swing.JCheckBoxMenuItem);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, awt2swing.CheckboxMenuItem, []);
-});
-Clazz.overrideMethod (c$, "getState",
-function () {
-return this.isSelected ();
-});
-Clazz.overrideMethod (c$, "setState",
-function (tf) {
-this.setSelected (tf);
-}, "~B");
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JCheckBoxMenuItem"], "awt2swing.CheckboxMenuItem", null, function () {
+c$ = Clazz.declareType (awt2swing, "CheckboxMenuItem", javax.swing.JCheckBoxMenuItem);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, awt2swing.CheckboxMenuItem, []);
+});
+Clazz.overrideMethod (c$, "getState",
+function () {
+return this.isSelected ();
+});
+Clazz.overrideMethod (c$, "setState",
+function (tf) {
+this.setSelected (tf);
+}, "~B");
+});
diff --git a/bin/awt2swing/Choice.js b/bin/awt2swing/Choice.js
index a4208b1..0eb2843 100644
--- a/bin/awt2swing/Choice.js
+++ b/bin/awt2swing/Choice.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JComboBox"], "awt2swing.Choice", null, function () {
-c$ = Clazz.declareType (awt2swing, "Choice", javax.swing.JComboBox);
-Clazz.defineMethod (c$, "select",
-function (key) {
-this.setSelectedItem (key);
-}, "~O");
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JComboBox"], "awt2swing.Choice", null, function () {
+c$ = Clazz.declareType (awt2swing, "Choice", javax.swing.JComboBox);
+Clazz.defineMethod (c$, "select",
+function (key) {
+this.setSelectedItem (key);
+}, "~O");
+});
diff --git a/bin/awt2swing/Frame.js b/bin/awt2swing/Frame.js
index 027d871..a4e228b 100644
--- a/bin/awt2swing/Frame.js
+++ b/bin/awt2swing/Frame.js
@@ -1,21 +1,21 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JFrame"], "awt2swing.Frame", null, function () {
-c$ = Clazz.declareType (awt2swing, "Frame", javax.swing.JFrame);
-Clazz.defineMethod (c$, "remove",
-function (i) {
-{
-this.removeInt(i);
-}}, "~N");
-Clazz.defineMethod (c$, "setMenuBar",
-function (m) {
-this.setJMenuBar (m);
-}, "awt2swing.MenuBar");
-Clazz.defineMethod (c$, "unsetMenuBar",
-function () {
-this.setJMenuBar (null);
-});
-Clazz.defineMethod (c$, "getMenubar",
-function () {
-return this.getJMenuBar ();
-});
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JFrame"], "awt2swing.Frame", null, function () {
+c$ = Clazz.declareType (awt2swing, "Frame", javax.swing.JFrame);
+Clazz.defineMethod (c$, "remove",
+function (i) {
+{
+this.removeInt(i);
+}}, "~N");
+Clazz.defineMethod (c$, "setMenuBar",
+function (m) {
+this.setJMenuBar (m);
+}, "awt2swing.MenuBar");
+Clazz.defineMethod (c$, "unsetMenuBar",
+function () {
+this.setJMenuBar (null);
+});
+Clazz.defineMethod (c$, "getMenubar",
+function () {
+return this.getJMenuBar ();
+});
+});
diff --git a/bin/awt2swing/Label.js b/bin/awt2swing/Label.js
index 380eaf6..713f8b3 100644
--- a/bin/awt2swing/Label.js
+++ b/bin/awt2swing/Label.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JLabel"], "awt2swing.Label", null, function () {
-c$ = Clazz.declareType (awt2swing, "Label", javax.swing.JLabel);
-Clazz.defineMethod (c$, "setAlignment",
-function (alignment) {
-this.setAlignmentX (alignment);
-}, "~N");
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JLabel"], "awt2swing.Label", null, function () {
+c$ = Clazz.declareType (awt2swing, "Label", javax.swing.JLabel);
+Clazz.defineMethod (c$, "setAlignment",
+function (alignment) {
+this.setAlignmentX (alignment);
+}, "~N");
+});
diff --git a/bin/awt2swing/Menu.js b/bin/awt2swing/Menu.js
index da1b846..867b6ab 100644
--- a/bin/awt2swing/Menu.js
+++ b/bin/awt2swing/Menu.js
@@ -1,14 +1,14 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JMenu"], "awt2swing.Menu", null, function () {
-c$ = Clazz.declareType (awt2swing, "Menu", javax.swing.JMenu);
-Clazz.makeConstructor (c$,
-function (title) {
-Clazz.superConstructor (this, awt2swing.Menu, [title]);
-title = null;
-}, "~S");
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, awt2swing.Menu);
-var s = null;
-});
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JMenu"], "awt2swing.Menu", null, function () {
+c$ = Clazz.declareType (awt2swing, "Menu", javax.swing.JMenu);
+Clazz.makeConstructor (c$,
+function (title) {
+Clazz.superConstructor (this, awt2swing.Menu, [title]);
+title = null;
+}, "~S");
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, awt2swing.Menu);
+var s = null;
+});
+});
diff --git a/bin/awt2swing/MenuBar.js b/bin/awt2swing/MenuBar.js
index 4865fdd..3b43191 100644
--- a/bin/awt2swing/MenuBar.js
+++ b/bin/awt2swing/MenuBar.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JMenuBar"], "awt2swing.MenuBar", null, function () {
-c$ = Clazz.declareType (awt2swing, "MenuBar", javax.swing.JMenuBar);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JMenuBar"], "awt2swing.MenuBar", null, function () {
+c$ = Clazz.declareType (awt2swing, "MenuBar", javax.swing.JMenuBar);
+});
diff --git a/bin/awt2swing/MenuItem.js b/bin/awt2swing/MenuItem.js
index d20f729..f610760 100644
--- a/bin/awt2swing/MenuItem.js
+++ b/bin/awt2swing/MenuItem.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JMenuItem"], "awt2swing.MenuItem", null, function () {
-c$ = Clazz.declareType (awt2swing, "MenuItem", javax.swing.JMenuItem);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JMenuItem"], "awt2swing.MenuItem", null, function () {
+c$ = Clazz.declareType (awt2swing, "MenuItem", javax.swing.JMenuItem);
+});
diff --git a/bin/awt2swing/Panel.js b/bin/awt2swing/Panel.js
index 5e33047..b6061d0 100644
--- a/bin/awt2swing/Panel.js
+++ b/bin/awt2swing/Panel.js
@@ -1,9 +1,9 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JPanel"], "awt2swing.Panel", null, function () {
-c$ = Clazz.declareType (awt2swing, "Panel", javax.swing.JPanel);
-Clazz.defineMethod (c$, "setName",
-function (name) {
-System.out.println (name);
-Clazz.superCall (this, awt2swing.Panel, "setName", [name]);
-}, "~S");
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JPanel"], "awt2swing.Panel", null, function () {
+c$ = Clazz.declareType (awt2swing, "Panel", javax.swing.JPanel);
+Clazz.defineMethod (c$, "setName",
+function (name) {
+System.out.println (name);
+Clazz.superCall (this, awt2swing.Panel, "setName", [name]);
+}, "~S");
+});
diff --git a/bin/awt2swing/PopupMenu.js b/bin/awt2swing/PopupMenu.js
index 007642a..4af0e16 100644
--- a/bin/awt2swing/PopupMenu.js
+++ b/bin/awt2swing/PopupMenu.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JPopupMenu"], "awt2swing.PopupMenu", null, function () {
-c$ = Clazz.declareType (awt2swing, "PopupMenu", javax.swing.JPopupMenu);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JPopupMenu"], "awt2swing.PopupMenu", null, function () {
+c$ = Clazz.declareType (awt2swing, "PopupMenu", javax.swing.JPopupMenu);
+});
diff --git a/bin/awt2swing/ScrollPane.js b/bin/awt2swing/ScrollPane.js
index 2ea1cea..3ba78cf 100644
--- a/bin/awt2swing/ScrollPane.js
+++ b/bin/awt2swing/ScrollPane.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JScrollPane"], "awt2swing.ScrollPane", null, function () {
-c$ = Clazz.declareType (awt2swing, "ScrollPane", javax.swing.JScrollPane);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JScrollPane"], "awt2swing.ScrollPane", null, function () {
+c$ = Clazz.declareType (awt2swing, "ScrollPane", javax.swing.JScrollPane);
+});
diff --git a/bin/awt2swing/Scrollbar.js b/bin/awt2swing/Scrollbar.js
index b68bd0c..3859a96 100644
--- a/bin/awt2swing/Scrollbar.js
+++ b/bin/awt2swing/Scrollbar.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JScrollBar"], "awt2swing.Scrollbar", null, function () {
-c$ = Clazz.declareType (awt2swing, "Scrollbar", javax.swing.JScrollBar);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JScrollBar"], "awt2swing.Scrollbar", null, function () {
+c$ = Clazz.declareType (awt2swing, "Scrollbar", javax.swing.JScrollBar);
+});
diff --git a/bin/awt2swing/TextArea.js b/bin/awt2swing/TextArea.js
index 3aec891..4358c37 100644
--- a/bin/awt2swing/TextArea.js
+++ b/bin/awt2swing/TextArea.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JTextArea"], "awt2swing.TextArea", null, function () {
-c$ = Clazz.declareType (awt2swing, "TextArea", javax.swing.JTextArea);
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JTextArea"], "awt2swing.TextArea", null, function () {
+c$ = Clazz.declareType (awt2swing, "TextArea", javax.swing.JTextArea);
+});
diff --git a/bin/awt2swing/TextField.js b/bin/awt2swing/TextField.js
index e8c1558..ef48b75 100644
--- a/bin/awt2swing/TextField.js
+++ b/bin/awt2swing/TextField.js
@@ -1,23 +1,23 @@
-Clazz.declarePackage ("awt2swing");
-Clazz.load (["javax.swing.JTextField"], "awt2swing.TextField", ["java.awt.event.TextEvent", "javax.swing.event.DocumentListener"], function () {
-c$ = Clazz.declareType (awt2swing, "TextField", javax.swing.JTextField);
-Clazz.defineMethod (c$, "addTextListener",
-function (textListener) {
-this.getDocument ().addDocumentListener (((Clazz.isClassDefined ("awt2swing.TextField$1") ? 0 : awt2swing.TextField.$TextField$1$ ()), Clazz.innerTypeInstance (awt2swing.TextField$1, this, Clazz.cloneFinals ("textListener", textListener))));
-}, "java.awt.event.TextListener");
-c$.$TextField$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (awt2swing, "TextField$1", null, javax.swing.event.DocumentListener);
-Clazz.overrideMethod (c$, "insertUpdate",
-function (e) {
-}, "javax.swing.event.DocumentEvent");
-Clazz.overrideMethod (c$, "removeUpdate",
-function (e) {
-}, "javax.swing.event.DocumentEvent");
-Clazz.overrideMethod (c$, "changedUpdate",
-function (e) {
-this.f$.textListener.textValueChanged ( new java.awt.event.TextEvent (this, 0));
-}, "javax.swing.event.DocumentEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("awt2swing");
+Clazz.load (["javax.swing.JTextField"], "awt2swing.TextField", ["java.awt.event.TextEvent", "javax.swing.event.DocumentListener"], function () {
+c$ = Clazz.declareType (awt2swing, "TextField", javax.swing.JTextField);
+Clazz.defineMethod (c$, "addTextListener",
+function (textListener) {
+this.getDocument ().addDocumentListener (((Clazz.isClassDefined ("awt2swing.TextField$1") ? 0 : awt2swing.TextField.$TextField$1$ ()), Clazz.innerTypeInstance (awt2swing.TextField$1, this, Clazz.cloneFinals ("textListener", textListener))));
+}, "java.awt.event.TextListener");
+c$.$TextField$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (awt2swing, "TextField$1", null, javax.swing.event.DocumentListener);
+Clazz.overrideMethod (c$, "insertUpdate",
+function (e) {
+}, "javax.swing.event.DocumentEvent");
+Clazz.overrideMethod (c$, "removeUpdate",
+function (e) {
+}, "javax.swing.event.DocumentEvent");
+Clazz.overrideMethod (c$, "changedUpdate",
+function (e) {
+this.f$.textListener.textValueChanged ( new java.awt.event.TextEvent (this, 0));
+}, "javax.swing.event.DocumentEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/com/stevesoft/pat/AmpersandRule.js b/bin/com/stevesoft/pat/AmpersandRule.js
index ac1ce77..6d1f622 100644
--- a/bin/com/stevesoft/pat/AmpersandRule.js
+++ b/bin/com/stevesoft/pat/AmpersandRule.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.AmpersandRule", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "AmpersandRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.AmpersandRule, []);
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-sb.append (res.stringMatched ());
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "$&";
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.AmpersandRule", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "AmpersandRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.AmpersandRule, []);
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+sb.append (res.stringMatched ());
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "$&";
+});
+});
diff --git a/bin/com/stevesoft/pat/Any.js b/bin/com/stevesoft/pat/Any.js
index f129d92..503de21 100644
--- a/bin/com/stevesoft/pat/Any.js
+++ b/bin/com/stevesoft/pat/Any.js
@@ -1,30 +1,30 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Any", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "Any", com.stevesoft.pat.Pattern);
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (pos < pt.src.length ()) {
-if (pt.dotDoesntMatchCR) {
-if (pt.src.charAt (pos) != '\n') {
-return this.nextMatch (pos + 1, pt);
-}} else {
-return this.nextMatch (pos + 1, pt);
-}}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "." + this.nextString ();
-});
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.Any ();
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Any", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "Any", com.stevesoft.pat.Pattern);
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (pos < pt.src.length ()) {
+if (pt.dotDoesntMatchCR) {
+if (pt.src.charAt (pos) != '\n') {
+return this.nextMatch (pos + 1, pt);
+}} else {
+return this.nextMatch (pos + 1, pt);
+}}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "." + this.nextString ();
+});
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.Any ();
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/BackG.js b/bin/com/stevesoft/pat/BackG.js
index 28d17cd..a9d07b7 100644
--- a/bin/com/stevesoft/pat/BackG.js
+++ b/bin/com/stevesoft/pat/BackG.js
@@ -1,34 +1,34 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.BackG", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.c = '\0';
-this.altc = '\0';
-this.altc2 = '\0';
-this.mask = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "BackG", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.BackG, []);
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-return pos == pt.lastPos ? this.nextMatch (pos, pt) : -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "\\G" + this.nextString ();
-});
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.BackG ();
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.BackG", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.c = '\0';
+this.altc = '\0';
+this.altc2 = '\0';
+this.mask = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "BackG", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.BackG, []);
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+return pos == pt.lastPos ? this.nextMatch (pos, pt) : -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "\\G" + this.nextString ();
+});
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.BackG ();
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/BackMatch.js b/bin/com/stevesoft/pat/BackMatch.js
index 018cdda..f3a2ea9 100644
--- a/bin/com/stevesoft/pat/BackMatch.js
+++ b/bin/com/stevesoft/pat/BackMatch.js
@@ -1,36 +1,36 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.BackMatch", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.id = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "BackMatch", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (id) {
-Clazz.superConstructor (this, com.stevesoft.pat.BackMatch, []);
-this.id = id;
-}, "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "\\" + (this.id) + this.nextString ();
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, p) {
-var i1 = p.marks[this.id];
-var i2 = p.marks[this.id + p.nMarks];
-var imax = i2 - i1;
-if (i1 < 0 || imax < 0 || pos + imax > p.src.length ()) {
-return -1;
-}var ns = p.src.length () - pos;
-if (imax < ns) {
-ns = imax;
-}for (var i = 0; i < ns; i++) {
-if (p.src.charAt (i + i1) != p.src.charAt (pos + i)) {
-return -1;
-}}
-return this.nextMatch (pos + imax, p);
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.BackMatch (this.id);
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.BackMatch", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.id = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "BackMatch", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (id) {
+Clazz.superConstructor (this, com.stevesoft.pat.BackMatch, []);
+this.id = id;
+}, "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "\\" + (this.id) + this.nextString ();
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, p) {
+var i1 = p.marks[this.id];
+var i2 = p.marks[this.id + p.nMarks];
+var imax = i2 - i1;
+if (i1 < 0 || imax < 0 || pos + imax > p.src.length ()) {
+return -1;
+}var ns = p.src.length () - pos;
+if (imax < ns) {
+ns = imax;
+}for (var i = 0; i < ns; i++) {
+if (p.src.charAt (i + i1) != p.src.charAt (pos + i)) {
+return -1;
+}}
+return this.nextMatch (pos + imax, p);
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.BackMatch (this.id);
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/BackRefRule.js b/bin/com/stevesoft/pat/BackRefRule.js
index d6a1e2e..f744c08 100644
--- a/bin/com/stevesoft/pat/BackRefRule.js
+++ b/bin/com/stevesoft/pat/BackRefRule.js
@@ -1,25 +1,25 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.BackRefRule", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.n = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "BackRefRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function (n) {
-Clazz.superConstructor (this, com.stevesoft.pat.BackRefRule, []);
-this.n = n;
-}, "~N");
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-var x = res.stringMatchedI (this.n);
-sb.append (x == null ? "" : x);
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "$" + this.n;
-});
-Clazz.overrideMethod (c$, "clone1",
-function () {
-return new com.stevesoft.pat.BackRefRule (this.n);
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.BackRefRule", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.n = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "BackRefRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function (n) {
+Clazz.superConstructor (this, com.stevesoft.pat.BackRefRule, []);
+this.n = n;
+}, "~N");
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+var x = res.stringMatchedI (this.n);
+sb.append (x == null ? "" : x);
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "$" + this.n;
+});
+Clazz.overrideMethod (c$, "clone1",
+function () {
+return new com.stevesoft.pat.BackRefRule (this.n);
+});
+});
diff --git a/bin/com/stevesoft/pat/Backup.js b/bin/com/stevesoft/pat/Backup.js
index f155142..3063b71 100644
--- a/bin/com/stevesoft/pat/Backup.js
+++ b/bin/com/stevesoft/pat/Backup.js
@@ -1,34 +1,34 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Backup", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.bk = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Backup", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (ii) {
-Clazz.superConstructor (this, com.stevesoft.pat.Backup, []);
-this.bk = ii;
-}, "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(?" + (this.bk < 0 ? ">" + (-this.bk) : "<" + this.bk) + ")" + this.nextString ();
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (pos < this.bk) {
-return -1;
-}return this.nextMatch (pos - this.bk, pt);
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (-this.bk);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (-this.bk);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.Backup (this.bk);
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Backup", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.bk = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Backup", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (ii) {
+Clazz.superConstructor (this, com.stevesoft.pat.Backup, []);
+this.bk = ii;
+}, "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(?" + (this.bk < 0 ? ">" + (-this.bk) : "<" + this.bk) + ")" + this.nextString ();
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (pos < this.bk) {
+return -1;
+}return this.nextMatch (pos - this.bk, pt);
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (-this.bk);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (-this.bk);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.Backup (this.bk);
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/BasicStringBufferLike.js b/bin/com/stevesoft/pat/BasicStringBufferLike.js
index f4df37f..c492d08 100644
--- a/bin/com/stevesoft/pat/BasicStringBufferLike.js
+++ b/bin/com/stevesoft/pat/BasicStringBufferLike.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.declareInterface (com.stevesoft.pat, "BasicStringBufferLike");
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.declareInterface (com.stevesoft.pat, "BasicStringBufferLike");
diff --git a/bin/com/stevesoft/pat/Bits.js b/bin/com/stevesoft/pat/Bits.js
index ec8b74c..61bb0fd 100644
--- a/bin/com/stevesoft/pat/Bits.js
+++ b/bin/com/stevesoft/pat/Bits.js
@@ -1,2958 +1,2958 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-c$ = Clazz.decorateAsClass (function () {
-this.carray = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Bits");
-Clazz.makeConstructor (c$,
-function (carray) {
-this.carray = carray;
-}, "~A");
-Clazz.defineMethod (c$, "get",
-function (i) {
-return ((this.carray[i >> 4]).charCodeAt (0) & (1 << (i & 15))) != 0;
-}, "~N");
-Clazz.defineMethod (c$, "set",
-function (i, b) {
-if (b) {
-this.carray[i >> 4] = String.fromCharCode ((this.carray[i >> 4]).charCodeAt (0) | ((String.fromCharCode (1)).charCodeAt (0) << (i & 15)));
-} else {
-this.carray[i >> 4] = String.fromCharCode ((this.carray[i >> 4]).charCodeAt (0) & (String.fromCharCode (~(1 << (i & 15)))).charCodeAt (0));
-}}, "~N,~B");
-c$.upper_f = Clazz.defineMethod (c$, "upper_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.upper = new com.stevesoft.pat.Bits (data);
-data[4] = String.fromCharCode (0xfffe);
-data[5] = String.fromCharCode (0x07ff);
-data[12] = String.fromCharCode (0xffff);
-data[13] = String.fromCharCode (0x7f7f);
-data[16] = String.fromCharCode (0x5555);
-data[17] = String.fromCharCode (0x5555);
-data[18] = String.fromCharCode (0x5555);
-data[19] = String.fromCharCode (0xaa55);
-data[20] = String.fromCharCode (0x54aa);
-data[21] = String.fromCharCode (0x5555);
-data[22] = String.fromCharCode (0x5555);
-data[23] = String.fromCharCode (0x2b55);
-data[24] = String.fromCharCode (0xced6);
-data[25] = String.fromCharCode (0xb1db);
-data[26] = String.fromCharCode (0xd2d5);
-data[27] = String.fromCharCode (0x11ae);
-data[28] = String.fromCharCode (0xa490);
-data[29] = String.fromCharCode (0x4aaa);
-data[30] = String.fromCharCode (0x5555);
-data[31] = String.fromCharCode (0x5412);
-data[32] = String.fromCharCode (0x5555);
-data[33] = 'U';
-data[56] = String.fromCharCode (0xd740);
-data[57] = String.fromCharCode (0xfffe);
-data[58] = String.fromCharCode (0x0ffb);
-data[61] = String.fromCharCode (0x541c);
-data[62] = String.fromCharCode (0x5555);
-data[64] = String.fromCharCode (0xdffe);
-data[65] = String.fromCharCode (0xffff);
-data[66] = String.fromCharCode (0xffff);
-data[70] = String.fromCharCode (0x5555);
-data[71] = String.fromCharCode (0x5555);
-data[72] = String.fromCharCode (0x0001);
-data[73] = String.fromCharCode (0x5555);
-data[74] = String.fromCharCode (0x5555);
-data[75] = String.fromCharCode (0x5555);
-data[76] = String.fromCharCode (0x088a);
-data[77] = String.fromCharCode (0x5555);
-data[78] = String.fromCharCode (0x4555);
-data[79] = String.fromCharCode (0x0115);
-data[83] = String.fromCharCode (0xfffe);
-data[84] = String.fromCharCode (0xffff);
-data[85] = String.fromCharCode (0x007f);
-data[266] = String.fromCharCode (0xffff);
-data[267] = String.fromCharCode (0xffff);
-data[268] = String.fromCharCode (0x003f);
-data[480] = String.fromCharCode (0x5555);
-data[481] = String.fromCharCode (0x5555);
-data[482] = String.fromCharCode (0x5555);
-data[483] = String.fromCharCode (0x5555);
-data[484] = String.fromCharCode (0x5555);
-data[485] = String.fromCharCode (0x5555);
-data[486] = String.fromCharCode (0x5555);
-data[487] = String.fromCharCode (0x5555);
-data[488] = String.fromCharCode (0x5555);
-data[489] = String.fromCharCode (0x0015);
-data[490] = String.fromCharCode (0x5555);
-data[491] = String.fromCharCode (0x5555);
-data[492] = String.fromCharCode (0x5555);
-data[493] = String.fromCharCode (0x5555);
-data[494] = String.fromCharCode (0x5555);
-data[495] = String.fromCharCode (0x0155);
-data[496] = String.fromCharCode (0xff00);
-data[497] = String.fromCharCode (0x3f00);
-data[498] = String.fromCharCode (0xff00);
-data[499] = String.fromCharCode (0xff00);
-data[500] = String.fromCharCode (0x3f00);
-data[501] = String.fromCharCode (0xaa00);
-data[502] = String.fromCharCode (0xff00);
-data[504] = String.fromCharCode (0xff00);
-data[505] = String.fromCharCode (0xff00);
-data[506] = String.fromCharCode (0xff00);
-data[507] = String.fromCharCode (0x5f00);
-data[508] = String.fromCharCode (0x1f00);
-data[509] = String.fromCharCode (0x0f00);
-data[510] = String.fromCharCode (0x1f00);
-data[511] = String.fromCharCode (0x1f00);
-data[528] = String.fromCharCode (0x3884);
-data[529] = String.fromCharCode (0x3f27);
-data[530] = String.fromCharCode (0x3d50);
-data[531] = String.fromCharCode (0x000b);
-data[4082] = String.fromCharCode (0xfffe);
-data[4083] = String.fromCharCode (0x07ff);
-data[4100] = String.fromCharCode (0xfffe);
-data[4101] = String.fromCharCode (0x07ff);
-data[4108] = String.fromCharCode (0xffff);
-data[4109] = String.fromCharCode (0x7f7f);
-data[4112] = String.fromCharCode (0x5555);
-data[4113] = String.fromCharCode (0x5555);
-data[4114] = String.fromCharCode (0x5555);
-data[4115] = String.fromCharCode (0xaa55);
-data[4116] = String.fromCharCode (0x54aa);
-data[4117] = String.fromCharCode (0x5555);
-data[4118] = String.fromCharCode (0x5555);
-data[4119] = String.fromCharCode (0x2b55);
-data[4120] = String.fromCharCode (0xced6);
-data[4121] = String.fromCharCode (0xb1db);
-data[4122] = String.fromCharCode (0xd2d5);
-data[4123] = String.fromCharCode (0x11ae);
-data[4124] = String.fromCharCode (0xa490);
-data[4125] = String.fromCharCode (0x4aaa);
-data[4126] = String.fromCharCode (0x5555);
-data[4127] = String.fromCharCode (0x5412);
-data[4128] = String.fromCharCode (0x5555);
-data[4129] = 'U';
-data[4152] = String.fromCharCode (0xd740);
-data[4153] = String.fromCharCode (0xfffe);
-data[4154] = String.fromCharCode (0x0ffb);
-data[4157] = String.fromCharCode (0x541c);
-data[4158] = 'U';
-});
-c$.lower_f = Clazz.defineMethod (c$, "lower_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.lower = new com.stevesoft.pat.Bits (data);
-data[6] = String.fromCharCode (0xfffe);
-data[7] = String.fromCharCode (0x07ff);
-data[10] = String.fromCharCode (0x0400);
-data[11] = String.fromCharCode (0x0420);
-data[13] = String.fromCharCode (0x8000);
-data[14] = String.fromCharCode (0xffff);
-data[15] = String.fromCharCode (0xff7f);
-data[16] = String.fromCharCode (0xaaaa);
-data[17] = String.fromCharCode (0xaaaa);
-data[18] = String.fromCharCode (0xaaaa);
-data[19] = String.fromCharCode (0x55aa);
-data[20] = String.fromCharCode (0xab55);
-data[21] = String.fromCharCode (0xaaaa);
-data[22] = String.fromCharCode (0xaaaa);
-data[23] = String.fromCharCode (0xd4aa);
-data[24] = String.fromCharCode (0x3129);
-data[25] = String.fromCharCode (0x4e24);
-data[26] = String.fromCharCode (0x292a);
-data[27] = String.fromCharCode (0x2651);
-data[28] = String.fromCharCode (0x5240);
-data[29] = String.fromCharCode (0xb555);
-data[30] = String.fromCharCode (0xaaaa);
-data[31] = String.fromCharCode (0xa829);
-data[32] = String.fromCharCode (0xaaaa);
-data[33] = String.fromCharCode (0x00aa);
-data[37] = String.fromCharCode (0xffff);
-data[38] = String.fromCharCode (0xffff);
-data[39] = String.fromCharCode (0xffff);
-data[40] = String.fromCharCode (0xffff);
-data[41] = String.fromCharCode (0xffff);
-data[42] = String.fromCharCode (0x01ff);
-data[57] = String.fromCharCode (0x0001);
-data[58] = String.fromCharCode (0xf000);
-data[59] = String.fromCharCode (0xffff);
-data[60] = String.fromCharCode (0x7fff);
-data[61] = 'c';
-data[62] = String.fromCharCode (0xaaa8);
-data[63] = String.fromCharCode (0x0007);
-data[67] = String.fromCharCode (0xffff);
-data[68] = String.fromCharCode (0xffff);
-data[69] = String.fromCharCode (0xdffe);
-data[70] = String.fromCharCode (0xaaaa);
-data[71] = String.fromCharCode (0xaaaa);
-data[72] = String.fromCharCode (0x0002);
-data[73] = String.fromCharCode (0xaaaa);
-data[74] = String.fromCharCode (0xaaaa);
-data[75] = String.fromCharCode (0xaaaa);
-data[76] = String.fromCharCode (0x1114);
-data[77] = String.fromCharCode (0xaaaa);
-data[78] = String.fromCharCode (0x8aaa);
-data[79] = String.fromCharCode (0x022a);
-data[86] = String.fromCharCode (0xfffe);
-data[87] = String.fromCharCode (0xffff);
-data[88] = String.fromCharCode (0x00ff);
-data[269] = String.fromCharCode (0xffff);
-data[270] = String.fromCharCode (0xffff);
-data[271] = String.fromCharCode (0x007f);
-data[480] = String.fromCharCode (0xaaaa);
-data[481] = String.fromCharCode (0xaaaa);
-data[482] = String.fromCharCode (0xaaaa);
-data[483] = String.fromCharCode (0xaaaa);
-data[484] = String.fromCharCode (0xaaaa);
-data[485] = String.fromCharCode (0xaaaa);
-data[486] = String.fromCharCode (0xaaaa);
-data[487] = String.fromCharCode (0xaaaa);
-data[488] = String.fromCharCode (0xaaaa);
-data[489] = String.fromCharCode (0x0fea);
-data[490] = String.fromCharCode (0xaaaa);
-data[491] = String.fromCharCode (0xaaaa);
-data[492] = String.fromCharCode (0xaaaa);
-data[493] = String.fromCharCode (0xaaaa);
-data[494] = String.fromCharCode (0xaaaa);
-data[495] = String.fromCharCode (0x02aa);
-data[496] = String.fromCharCode (0x00ff);
-data[497] = String.fromCharCode (0x003f);
-data[498] = String.fromCharCode (0x00ff);
-data[499] = String.fromCharCode (0x00ff);
-data[500] = String.fromCharCode (0x003f);
-data[501] = String.fromCharCode (0x00ff);
-data[502] = String.fromCharCode (0x00ff);
-data[503] = String.fromCharCode (0x3fff);
-data[504] = String.fromCharCode (0x00ff);
-data[505] = String.fromCharCode (0x00ff);
-data[506] = String.fromCharCode (0x00ff);
-data[507] = String.fromCharCode (0x00df);
-data[508] = String.fromCharCode (0x00dc);
-data[509] = String.fromCharCode (0x00cf);
-data[510] = String.fromCharCode (0x00ff);
-data[511] = String.fromCharCode (0x00dc);
-data[519] = String.fromCharCode (0x8000);
-data[528] = String.fromCharCode (0xc400);
-data[529] = String.fromCharCode (0x0008);
-data[530] = String.fromCharCode (0xc000);
-data[531] = String.fromCharCode (0x0010);
-data[4016] = String.fromCharCode (0x007f);
-data[4017] = String.fromCharCode (0x00f8);
-data[4084] = String.fromCharCode (0xfffe);
-data[4085] = String.fromCharCode (0x07ff);
-data[4102] = String.fromCharCode (0xfffe);
-data[4103] = String.fromCharCode (0x07ff);
-data[4106] = String.fromCharCode (0x0400);
-data[4107] = String.fromCharCode (0x0420);
-data[4109] = String.fromCharCode (0x8000);
-data[4110] = String.fromCharCode (0xffff);
-data[4111] = String.fromCharCode (0xff7f);
-data[4112] = String.fromCharCode (0xaaaa);
-data[4113] = String.fromCharCode (0xaaaa);
-data[4114] = String.fromCharCode (0xaaaa);
-data[4115] = String.fromCharCode (0x55aa);
-data[4116] = String.fromCharCode (0xab55);
-data[4117] = String.fromCharCode (0xaaaa);
-data[4118] = String.fromCharCode (0xaaaa);
-data[4119] = String.fromCharCode (0xd4aa);
-data[4120] = String.fromCharCode (0x3129);
-data[4121] = String.fromCharCode (0x4e24);
-data[4122] = String.fromCharCode (0x292a);
-data[4123] = String.fromCharCode (0x2651);
-data[4124] = String.fromCharCode (0x5240);
-data[4125] = String.fromCharCode (0xb555);
-data[4126] = String.fromCharCode (0xaaaa);
-data[4127] = String.fromCharCode (0xa829);
-data[4128] = String.fromCharCode (0xaaaa);
-data[4129] = String.fromCharCode (0x00aa);
-data[4133] = String.fromCharCode (0xffff);
-data[4134] = String.fromCharCode (0xffff);
-data[4135] = String.fromCharCode (0xffff);
-data[4136] = String.fromCharCode (0xffff);
-data[4137] = String.fromCharCode (0xffff);
-data[4138] = String.fromCharCode (0x01ff);
-data[4153] = String.fromCharCode (0x0001);
-data[4154] = String.fromCharCode (0xf000);
-data[4155] = String.fromCharCode (0xffff);
-data[4156] = String.fromCharCode (0x7fff);
-data[4157] = 'c';
-data[4158] = String.fromCharCode (0x00a8);
-});
-c$.title_f = Clazz.defineMethod (c$, "title_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.title = new com.stevesoft.pat.Bits (data);
-data[6] = String.fromCharCode (0xfffe);
-data[7] = String.fromCharCode (0x07ff);
-data[10] = String.fromCharCode (0x0400);
-data[11] = String.fromCharCode (0x0420);
-data[13] = String.fromCharCode (0x8000);
-data[14] = String.fromCharCode (0xffff);
-data[15] = String.fromCharCode (0xff7f);
-data[16] = String.fromCharCode (0xaaaa);
-data[17] = String.fromCharCode (0xaaaa);
-data[18] = String.fromCharCode (0xaaaa);
-data[19] = String.fromCharCode (0x55aa);
-data[20] = String.fromCharCode (0xab55);
-data[21] = String.fromCharCode (0xaaaa);
-data[22] = String.fromCharCode (0xaaaa);
-data[23] = String.fromCharCode (0xd4aa);
-data[24] = String.fromCharCode (0x3129);
-data[25] = String.fromCharCode (0x4e24);
-data[26] = String.fromCharCode (0x292a);
-data[27] = String.fromCharCode (0x2651);
-data[28] = String.fromCharCode (0x5240);
-data[29] = String.fromCharCode (0xb555);
-data[30] = String.fromCharCode (0xaaaa);
-data[31] = String.fromCharCode (0xa829);
-data[32] = String.fromCharCode (0xaaaa);
-data[33] = String.fromCharCode (0x00aa);
-data[37] = String.fromCharCode (0xffff);
-data[38] = String.fromCharCode (0xffff);
-data[39] = String.fromCharCode (0xffff);
-data[40] = String.fromCharCode (0xffff);
-data[41] = String.fromCharCode (0xffff);
-data[42] = String.fromCharCode (0x01ff);
-data[57] = String.fromCharCode (0x0001);
-data[58] = String.fromCharCode (0xf000);
-data[59] = String.fromCharCode (0xffff);
-data[60] = String.fromCharCode (0x7fff);
-data[61] = 'c';
-data[62] = String.fromCharCode (0xaaa8);
-data[63] = String.fromCharCode (0x0007);
-data[67] = String.fromCharCode (0xffff);
-data[68] = String.fromCharCode (0xffff);
-data[69] = String.fromCharCode (0xdffe);
-data[70] = String.fromCharCode (0xaaaa);
-data[71] = String.fromCharCode (0xaaaa);
-data[72] = String.fromCharCode (0x0002);
-data[73] = String.fromCharCode (0xaaaa);
-data[74] = String.fromCharCode (0xaaaa);
-data[75] = String.fromCharCode (0xaaaa);
-data[76] = String.fromCharCode (0x1114);
-data[77] = String.fromCharCode (0xaaaa);
-data[78] = String.fromCharCode (0x8aaa);
-data[79] = String.fromCharCode (0x022a);
-data[86] = String.fromCharCode (0xfffe);
-data[87] = String.fromCharCode (0xffff);
-data[88] = String.fromCharCode (0x00ff);
-data[269] = String.fromCharCode (0xffff);
-data[270] = String.fromCharCode (0xffff);
-data[271] = String.fromCharCode (0x007f);
-data[480] = String.fromCharCode (0xaaaa);
-data[481] = String.fromCharCode (0xaaaa);
-data[482] = String.fromCharCode (0xaaaa);
-data[483] = String.fromCharCode (0xaaaa);
-data[484] = String.fromCharCode (0xaaaa);
-data[485] = String.fromCharCode (0xaaaa);
-data[486] = String.fromCharCode (0xaaaa);
-data[487] = String.fromCharCode (0xaaaa);
-data[488] = String.fromCharCode (0xaaaa);
-data[489] = String.fromCharCode (0x0fea);
-data[490] = String.fromCharCode (0xaaaa);
-data[491] = String.fromCharCode (0xaaaa);
-data[492] = String.fromCharCode (0xaaaa);
-data[493] = String.fromCharCode (0xaaaa);
-data[494] = String.fromCharCode (0xaaaa);
-data[495] = String.fromCharCode (0x02aa);
-data[496] = String.fromCharCode (0x00ff);
-data[497] = String.fromCharCode (0x003f);
-data[498] = String.fromCharCode (0x00ff);
-data[499] = String.fromCharCode (0x00ff);
-data[500] = String.fromCharCode (0x003f);
-data[501] = String.fromCharCode (0x00ff);
-data[502] = String.fromCharCode (0x00ff);
-data[503] = String.fromCharCode (0x3fff);
-data[504] = String.fromCharCode (0x00ff);
-data[505] = String.fromCharCode (0x00ff);
-data[506] = String.fromCharCode (0x00ff);
-data[507] = String.fromCharCode (0x00df);
-data[508] = String.fromCharCode (0x00dc);
-data[509] = String.fromCharCode (0x00cf);
-data[510] = String.fromCharCode (0x00ff);
-data[511] = String.fromCharCode (0x00dc);
-data[519] = String.fromCharCode (0x8000);
-data[528] = String.fromCharCode (0xc400);
-data[529] = String.fromCharCode (0x0008);
-data[530] = String.fromCharCode (0xc000);
-data[531] = String.fromCharCode (0x0010);
-data[4016] = String.fromCharCode (0x007f);
-data[4017] = String.fromCharCode (0x00f8);
-data[4084] = String.fromCharCode (0xfffe);
-data[4085] = String.fromCharCode (0x07ff);
-data[4102] = String.fromCharCode (0xfffe);
-data[4103] = String.fromCharCode (0x07ff);
-data[4106] = String.fromCharCode (0x0400);
-data[4107] = String.fromCharCode (0x0420);
-data[4109] = String.fromCharCode (0x8000);
-data[4110] = String.fromCharCode (0xffff);
-data[4111] = String.fromCharCode (0xff7f);
-data[4112] = String.fromCharCode (0xaaaa);
-data[4113] = String.fromCharCode (0xaaaa);
-data[4114] = String.fromCharCode (0xaaaa);
-data[4115] = String.fromCharCode (0x55aa);
-data[4116] = String.fromCharCode (0xab55);
-data[4117] = String.fromCharCode (0xaaaa);
-data[4118] = String.fromCharCode (0xaaaa);
-data[4119] = String.fromCharCode (0xd4aa);
-data[4120] = String.fromCharCode (0x3129);
-data[4121] = String.fromCharCode (0x4e24);
-data[4122] = String.fromCharCode (0x292a);
-data[4123] = String.fromCharCode (0x2651);
-data[4124] = String.fromCharCode (0x5240);
-data[4125] = String.fromCharCode (0xb555);
-data[4126] = String.fromCharCode (0xaaaa);
-data[4127] = String.fromCharCode (0xa829);
-data[4128] = String.fromCharCode (0xaaaa);
-data[4129] = String.fromCharCode (0x00aa);
-data[4133] = String.fromCharCode (0xffff);
-data[4134] = String.fromCharCode (0xffff);
-data[4135] = String.fromCharCode (0xffff);
-data[4136] = String.fromCharCode (0xffff);
-data[4137] = String.fromCharCode (0xffff);
-data[4138] = String.fromCharCode (0x01ff);
-data[4153] = String.fromCharCode (0x0001);
-data[4154] = String.fromCharCode (0xf000);
-data[4155] = String.fromCharCode (0xffff);
-data[4156] = String.fromCharCode (0x7fff);
-data[4157] = 'c';
-data[4158] = String.fromCharCode (0x00a8);
-});
-c$.currency_f = Clazz.defineMethod (c$, "currency_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.currency = new com.stevesoft.pat.Bits (data);
-data[2] = String.fromCharCode (0x0010);
-data[10] = String.fromCharCode (0x003c);
-data[159] = String.fromCharCode (0x000c);
-data[227] = String.fromCharCode (0x8000);
-data[522] = String.fromCharCode (0x1fff);
-data[4070] = String.fromCharCode (0x0200);
-data[4080] = String.fromCharCode (0x0010);
-data[4094] = 'c';
-data[4098] = String.fromCharCode (0x0010);
-data[4106] = String.fromCharCode (0x003c);
-});
-c$.decimal_digit_f = Clazz.defineMethod (c$, "decimal_digit_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.decimal_digit = new com.stevesoft.pat.Bits (data);
-data[3] = String.fromCharCode (0x03ff);
-data[102] = String.fromCharCode (0x03ff);
-data[111] = String.fromCharCode (0x03ff);
-data[150] = String.fromCharCode (0xffc0);
-data[158] = String.fromCharCode (0xffc0);
-data[166] = String.fromCharCode (0xffc0);
-data[174] = String.fromCharCode (0xffc0);
-data[182] = String.fromCharCode (0xffc0);
-data[190] = String.fromCharCode (0xff80);
-data[198] = String.fromCharCode (0xffc0);
-data[206] = String.fromCharCode (0xffc0);
-data[214] = String.fromCharCode (0xffc0);
-data[229] = String.fromCharCode (0x03ff);
-data[237] = String.fromCharCode (0x03ff);
-data[242] = String.fromCharCode (0x03ff);
-data[4081] = String.fromCharCode (0x03ff);
-data[4099] = String.fromCharCode (0x03ff);
-});
-c$.math_f = Clazz.defineMethod (c$, "math_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.math = new com.stevesoft.pat.Bits (data);
-data[2] = String.fromCharCode (0x0800);
-data[3] = String.fromCharCode (0x7000);
-data[7] = String.fromCharCode (0x5000);
-data[10] = String.fromCharCode (0x1000);
-data[11] = String.fromCharCode (0x0002);
-data[13] = String.fromCharCode (0x0080);
-data[15] = String.fromCharCode (0x0080);
-data[516] = String.fromCharCode (0x0010);
-data[519] = String.fromCharCode (0x1c00);
-data[520] = String.fromCharCode (0x1c00);
-data[537] = String.fromCharCode (0x001f);
-data[541] = String.fromCharCode (0x0014);
-data[544] = String.fromCharCode (0xffff);
-data[545] = String.fromCharCode (0xffff);
-data[546] = String.fromCharCode (0xffff);
-data[547] = String.fromCharCode (0xffff);
-data[548] = String.fromCharCode (0xffff);
-data[549] = String.fromCharCode (0xffff);
-data[550] = String.fromCharCode (0xffff);
-data[551] = String.fromCharCode (0xffff);
-data[552] = String.fromCharCode (0xffff);
-data[553] = String.fromCharCode (0xffff);
-data[554] = String.fromCharCode (0xffff);
-data[555] = String.fromCharCode (0xffff);
-data[556] = String.fromCharCode (0xffff);
-data[557] = String.fromCharCode (0xffff);
-data[558] = String.fromCharCode (0xffff);
-data[559] = String.fromCharCode (0x0003);
-data[560] = String.fromCharCode (0x0f00);
-data[562] = String.fromCharCode (0x0003);
-data[4018] = String.fromCharCode (0x0200);
-data[4070] = 't';
-data[4080] = String.fromCharCode (0x0800);
-data[4081] = String.fromCharCode (0x7000);
-data[4085] = String.fromCharCode (0x5000);
-data[4094] = String.fromCharCode (0x1f04);
-data[4098] = String.fromCharCode (0x0800);
-data[4099] = String.fromCharCode (0x7000);
-data[4103] = String.fromCharCode (0x5000);
-data[4106] = String.fromCharCode (0x1000);
-data[4107] = String.fromCharCode (0x0002);
-data[4109] = String.fromCharCode (0x0080);
-data[4111] = String.fromCharCode (0x0080);
-});
-c$.letter_f = Clazz.defineMethod (c$, "letter_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.letter = new com.stevesoft.pat.Bits (data);
-data[4] = String.fromCharCode (0xfffe);
-data[5] = String.fromCharCode (0x07ff);
-data[6] = String.fromCharCode (0xfffe);
-data[7] = String.fromCharCode (0x07ff);
-data[10] = String.fromCharCode (0x0400);
-data[11] = String.fromCharCode (0x0420);
-data[12] = String.fromCharCode (0xffff);
-data[13] = String.fromCharCode (0xff7f);
-data[14] = String.fromCharCode (0xffff);
-data[15] = String.fromCharCode (0xff7f);
-data[16] = String.fromCharCode (0xffff);
-data[17] = String.fromCharCode (0xffff);
-data[18] = String.fromCharCode (0xffff);
-data[19] = String.fromCharCode (0xffff);
-data[20] = String.fromCharCode (0xffff);
-data[21] = String.fromCharCode (0xffff);
-data[22] = String.fromCharCode (0xffff);
-data[23] = String.fromCharCode (0xffff);
-data[24] = String.fromCharCode (0xffff);
-data[25] = String.fromCharCode (0xffff);
-data[26] = String.fromCharCode (0xffff);
-data[27] = String.fromCharCode (0xffff);
-data[28] = String.fromCharCode (0xffff);
-data[29] = String.fromCharCode (0xffff);
-data[30] = String.fromCharCode (0xffff);
-data[31] = String.fromCharCode (0xfc3f);
-data[32] = String.fromCharCode (0xffff);
-data[33] = String.fromCharCode (0x00ff);
-data[37] = String.fromCharCode (0xffff);
-data[38] = String.fromCharCode (0xffff);
-data[39] = String.fromCharCode (0xffff);
-data[40] = String.fromCharCode (0xffff);
-data[41] = String.fromCharCode (0xffff);
-data[42] = String.fromCharCode (0x01ff);
-data[43] = String.fromCharCode (0xf9ff);
-data[44] = String.fromCharCode (0x0003);
-data[45] = String.fromCharCode (0x0003);
-data[46] = String.fromCharCode (0x001f);
-data[55] = String.fromCharCode (0x0400);
-data[56] = String.fromCharCode (0xd740);
-data[57] = String.fromCharCode (0xffff);
-data[58] = String.fromCharCode (0xfffb);
-data[59] = String.fromCharCode (0xffff);
-data[60] = String.fromCharCode (0x7fff);
-data[61] = String.fromCharCode (0x547f);
-data[62] = String.fromCharCode (0xfffd);
-data[63] = String.fromCharCode (0x000f);
-data[64] = String.fromCharCode (0xdffe);
-data[65] = String.fromCharCode (0xffff);
-data[66] = String.fromCharCode (0xffff);
-data[67] = String.fromCharCode (0xffff);
-data[68] = String.fromCharCode (0xffff);
-data[69] = String.fromCharCode (0xdffe);
-data[70] = String.fromCharCode (0xffff);
-data[71] = String.fromCharCode (0xffff);
-data[72] = String.fromCharCode (0x0003);
-data[73] = String.fromCharCode (0xffff);
-data[74] = String.fromCharCode (0xffff);
-data[75] = String.fromCharCode (0xffff);
-data[76] = String.fromCharCode (0x199f);
-data[77] = String.fromCharCode (0xffff);
-data[78] = String.fromCharCode (0xcfff);
-data[79] = String.fromCharCode (0x033f);
-data[83] = String.fromCharCode (0xfffe);
-data[84] = String.fromCharCode (0xffff);
-data[85] = String.fromCharCode (0x027f);
-data[86] = String.fromCharCode (0xfffe);
-data[87] = String.fromCharCode (0xffff);
-data[88] = String.fromCharCode (0x00ff);
-data[93] = String.fromCharCode (0xffff);
-data[94] = String.fromCharCode (0x07ff);
-data[95] = String.fromCharCode (0x0007);
-data[98] = String.fromCharCode (0xfffe);
-data[99] = String.fromCharCode (0x07ff);
-data[100] = String.fromCharCode (0x07ff);
-data[103] = String.fromCharCode (0xfffe);
-data[104] = String.fromCharCode (0xffff);
-data[105] = String.fromCharCode (0xffff);
-data[106] = String.fromCharCode (0xffff);
-data[107] = String.fromCharCode (0x7cff);
-data[108] = String.fromCharCode (0x7fff);
-data[109] = String.fromCharCode (0x002f);
-data[110] = String.fromCharCode (0x0060);
-data[144] = String.fromCharCode (0xffe0);
-data[145] = String.fromCharCode (0xffff);
-data[146] = String.fromCharCode (0xffff);
-data[147] = String.fromCharCode (0x23ff);
-data[149] = String.fromCharCode (0xff00);
-data[150] = String.fromCharCode (0x0003);
-data[152] = String.fromCharCode (0x9fe0);
-data[153] = String.fromCharCode (0xfff9);
-data[154] = String.fromCharCode (0xfdff);
-data[155] = String.fromCharCode (0x03c5);
-data[157] = String.fromCharCode (0xb000);
-data[158] = String.fromCharCode (0x0003);
-data[159] = String.fromCharCode (0x0003);
-data[160] = String.fromCharCode (0x87e0);
-data[161] = String.fromCharCode (0xfff9);
-data[162] = String.fromCharCode (0xfdff);
-data[163] = String.fromCharCode (0x036d);
-data[165] = String.fromCharCode (0x5e00);
-data[167] = String.fromCharCode (0x001c);
-data[168] = String.fromCharCode (0xafe0);
-data[169] = String.fromCharCode (0xfffb);
-data[170] = String.fromCharCode (0xfdff);
-data[171] = String.fromCharCode (0x23ed);
-data[174] = String.fromCharCode (0x0001);
-data[176] = String.fromCharCode (0x9fe0);
-data[177] = String.fromCharCode (0xfff9);
-data[178] = String.fromCharCode (0xfdff);
-data[179] = String.fromCharCode (0x23cd);
-data[181] = String.fromCharCode (0xb000);
-data[182] = String.fromCharCode (0x0003);
-data[184] = String.fromCharCode (0xc7e0);
-data[185] = String.fromCharCode (0xd63d);
-data[186] = String.fromCharCode (0xc718);
-data[187] = String.fromCharCode (0x03bf);
-data[192] = String.fromCharCode (0xdfe0);
-data[193] = String.fromCharCode (0xfffd);
-data[194] = String.fromCharCode (0xfdff);
-data[195] = String.fromCharCode (0x03ef);
-data[198] = String.fromCharCode (0x0003);
-data[200] = String.fromCharCode (0xdfe0);
-data[201] = String.fromCharCode (0xfffd);
-data[202] = String.fromCharCode (0xfdff);
-data[203] = String.fromCharCode (0x03ef);
-data[205] = String.fromCharCode (0x4000);
-data[206] = String.fromCharCode (0x0003);
-data[208] = String.fromCharCode (0xdfe0);
-data[209] = String.fromCharCode (0xfffd);
-data[210] = String.fromCharCode (0xfdff);
-data[211] = String.fromCharCode (0x03ff);
-data[214] = String.fromCharCode (0x0003);
-data[224] = String.fromCharCode (0xfffe);
-data[225] = String.fromCharCode (0xffff);
-data[226] = String.fromCharCode (0x7fff);
-data[227] = String.fromCharCode (0x000d);
-data[228] = String.fromCharCode (0x007f);
-data[232] = String.fromCharCode (0x2596);
-data[233] = String.fromCharCode (0xfef0);
-data[234] = String.fromCharCode (0x6cae);
-data[235] = String.fromCharCode (0x200d);
-data[236] = String.fromCharCode (0x005f);
-data[237] = String.fromCharCode (0x3000);
-data[244] = String.fromCharCode (0xfeff);
-data[245] = String.fromCharCode (0xffff);
-data[246] = String.fromCharCode (0x03ff);
-data[266] = String.fromCharCode (0xffff);
-data[267] = String.fromCharCode (0xffff);
-data[268] = String.fromCharCode (0x003f);
-data[269] = String.fromCharCode (0xffff);
-data[270] = String.fromCharCode (0xffff);
-data[271] = String.fromCharCode (0x007f);
-data[272] = String.fromCharCode (0xffff);
-data[273] = String.fromCharCode (0xffff);
-data[274] = String.fromCharCode (0xffff);
-data[275] = String.fromCharCode (0xffff);
-data[276] = String.fromCharCode (0xffff);
-data[277] = String.fromCharCode (0x83ff);
-data[278] = String.fromCharCode (0xffff);
-data[279] = String.fromCharCode (0xffff);
-data[280] = String.fromCharCode (0xffff);
-data[281] = String.fromCharCode (0xffff);
-data[282] = String.fromCharCode (0xff07);
-data[283] = String.fromCharCode (0xffff);
-data[284] = String.fromCharCode (0xffff);
-data[285] = String.fromCharCode (0xffff);
-data[286] = String.fromCharCode (0xffff);
-data[287] = String.fromCharCode (0x03ff);
-data[480] = String.fromCharCode (0xffff);
-data[481] = String.fromCharCode (0xffff);
-data[482] = String.fromCharCode (0xffff);
-data[483] = String.fromCharCode (0xffff);
-data[484] = String.fromCharCode (0xffff);
-data[485] = String.fromCharCode (0xffff);
-data[486] = String.fromCharCode (0xffff);
-data[487] = String.fromCharCode (0xffff);
-data[488] = String.fromCharCode (0xffff);
-data[489] = String.fromCharCode (0x0fff);
-data[490] = String.fromCharCode (0xffff);
-data[491] = String.fromCharCode (0xffff);
-data[492] = String.fromCharCode (0xffff);
-data[493] = String.fromCharCode (0xffff);
-data[494] = String.fromCharCode (0xffff);
-data[495] = String.fromCharCode (0x03ff);
-data[496] = String.fromCharCode (0xffff);
-data[497] = String.fromCharCode (0x3f3f);
-data[498] = String.fromCharCode (0xffff);
-data[499] = String.fromCharCode (0xffff);
-data[500] = String.fromCharCode (0x3f3f);
-data[501] = String.fromCharCode (0xaaff);
-data[502] = String.fromCharCode (0xffff);
-data[503] = String.fromCharCode (0x3fff);
-data[504] = String.fromCharCode (0xffff);
-data[505] = String.fromCharCode (0xffff);
-data[506] = String.fromCharCode (0xffff);
-data[507] = String.fromCharCode (0x5fdf);
-data[508] = String.fromCharCode (0x1fdc);
-data[509] = String.fromCharCode (0x0fcf);
-data[510] = String.fromCharCode (0x1fff);
-data[511] = String.fromCharCode (0x1fdc);
-data[519] = String.fromCharCode (0x8000);
-data[528] = String.fromCharCode (0xfc84);
-data[529] = String.fromCharCode (0x3f2f);
-data[530] = String.fromCharCode (0xfd50);
-data[531] = String.fromCharCode (0x01fb);
-data[768] = String.fromCharCode (0x0020);
-data[771] = String.fromCharCode (0x003e);
-data[772] = String.fromCharCode (0xfffe);
-data[773] = String.fromCharCode (0xffff);
-data[774] = String.fromCharCode (0xffff);
-data[775] = String.fromCharCode (0xffff);
-data[776] = String.fromCharCode (0xffff);
-data[777] = String.fromCharCode (0x781f);
-data[778] = String.fromCharCode (0xfffe);
-data[779] = String.fromCharCode (0xffff);
-data[780] = String.fromCharCode (0xffff);
-data[781] = String.fromCharCode (0xffff);
-data[782] = String.fromCharCode (0xffff);
-data[783] = String.fromCharCode (0x77ff);
-data[784] = String.fromCharCode (0xffe0);
-data[785] = String.fromCharCode (0xffff);
-data[786] = String.fromCharCode (0x1fff);
-data[787] = String.fromCharCode (0xfffe);
-data[788] = String.fromCharCode (0xffff);
-data[789] = String.fromCharCode (0xffff);
-data[790] = String.fromCharCode (0xffff);
-data[791] = String.fromCharCode (0xffff);
-data[792] = String.fromCharCode (0x7fff);
-data[1248] = String.fromCharCode (0xffff);
-data[1249] = String.fromCharCode (0xffff);
-data[1250] = String.fromCharCode (0xffff);
-data[1251] = String.fromCharCode (0xffff);
-data[1252] = String.fromCharCode (0xffff);
-data[1253] = String.fromCharCode (0xffff);
-data[1254] = String.fromCharCode (0xffff);
-data[1255] = String.fromCharCode (0xffff);
-data[1256] = String.fromCharCode (0xffff);
-data[1257] = String.fromCharCode (0xffff);
-data[1258] = String.fromCharCode (0xffff);
-data[1259] = String.fromCharCode (0xffff);
-data[1260] = String.fromCharCode (0xffff);
-data[1261] = String.fromCharCode (0xffff);
-data[1262] = String.fromCharCode (0xffff);
-data[1263] = String.fromCharCode (0xffff);
-data[1264] = String.fromCharCode (0xffff);
-data[1265] = String.fromCharCode (0xffff);
-data[1266] = String.fromCharCode (0xffff);
-data[1267] = String.fromCharCode (0xffff);
-data[1268] = String.fromCharCode (0xffff);
-data[1269] = String.fromCharCode (0xffff);
-data[1270] = String.fromCharCode (0xffff);
-data[1271] = String.fromCharCode (0xffff);
-data[1272] = String.fromCharCode (0xffff);
-data[1273] = String.fromCharCode (0xffff);
-data[1274] = String.fromCharCode (0xffff);
-data[1275] = String.fromCharCode (0xffff);
-data[1276] = String.fromCharCode (0xffff);
-data[1277] = String.fromCharCode (0xffff);
-data[1278] = String.fromCharCode (0xffff);
-data[1279] = String.fromCharCode (0xffff);
-data[1280] = String.fromCharCode (0xffff);
-data[1281] = String.fromCharCode (0xffff);
-data[1282] = String.fromCharCode (0xffff);
-data[1283] = String.fromCharCode (0xffff);
-data[1284] = String.fromCharCode (0xffff);
-data[1285] = String.fromCharCode (0xffff);
-data[1286] = String.fromCharCode (0xffff);
-data[1287] = String.fromCharCode (0xffff);
-data[1288] = String.fromCharCode (0xffff);
-data[1289] = String.fromCharCode (0xffff);
-data[1290] = String.fromCharCode (0xffff);
-data[1291] = String.fromCharCode (0xffff);
-data[1292] = String.fromCharCode (0xffff);
-data[1293] = String.fromCharCode (0xffff);
-data[1294] = String.fromCharCode (0xffff);
-data[1295] = String.fromCharCode (0xffff);
-data[1296] = String.fromCharCode (0xffff);
-data[1297] = String.fromCharCode (0xffff);
-data[1298] = String.fromCharCode (0xffff);
-data[1299] = String.fromCharCode (0xffff);
-data[1300] = String.fromCharCode (0xffff);
-data[1301] = String.fromCharCode (0xffff);
-data[1302] = String.fromCharCode (0xffff);
-data[1303] = String.fromCharCode (0xffff);
-data[1304] = String.fromCharCode (0xffff);
-data[1305] = String.fromCharCode (0xffff);
-data[1306] = String.fromCharCode (0xffff);
-data[1307] = String.fromCharCode (0xffff);
-data[1308] = String.fromCharCode (0xffff);
-data[1309] = String.fromCharCode (0xffff);
-data[1310] = String.fromCharCode (0xffff);
-data[1311] = String.fromCharCode (0xffff);
-data[1312] = String.fromCharCode (0xffff);
-data[1313] = String.fromCharCode (0xffff);
-data[1314] = String.fromCharCode (0xffff);
-data[1315] = String.fromCharCode (0xffff);
-data[1316] = String.fromCharCode (0xffff);
-data[1317] = String.fromCharCode (0xffff);
-data[1318] = String.fromCharCode (0xffff);
-data[1319] = String.fromCharCode (0xffff);
-data[1320] = String.fromCharCode (0xffff);
-data[1321] = String.fromCharCode (0xffff);
-data[1322] = String.fromCharCode (0xffff);
-data[1323] = String.fromCharCode (0xffff);
-data[1324] = String.fromCharCode (0xffff);
-data[1325] = String.fromCharCode (0xffff);
-data[1326] = String.fromCharCode (0xffff);
-data[1327] = String.fromCharCode (0xffff);
-data[1328] = String.fromCharCode (0xffff);
-data[1329] = String.fromCharCode (0xffff);
-data[1330] = String.fromCharCode (0xffff);
-data[1331] = String.fromCharCode (0xffff);
-data[1332] = String.fromCharCode (0xffff);
-data[1333] = String.fromCharCode (0xffff);
-data[1334] = String.fromCharCode (0xffff);
-data[1335] = String.fromCharCode (0xffff);
-data[1336] = String.fromCharCode (0xffff);
-data[1337] = String.fromCharCode (0xffff);
-data[1338] = String.fromCharCode (0xffff);
-data[1339] = String.fromCharCode (0xffff);
-data[1340] = String.fromCharCode (0xffff);
-data[1341] = String.fromCharCode (0xffff);
-data[1342] = String.fromCharCode (0xffff);
-data[1343] = String.fromCharCode (0xffff);
-data[1344] = String.fromCharCode (0xffff);
-data[1345] = String.fromCharCode (0xffff);
-data[1346] = String.fromCharCode (0xffff);
-data[1347] = String.fromCharCode (0xffff);
-data[1348] = String.fromCharCode (0xffff);
-data[1349] = String.fromCharCode (0xffff);
-data[1350] = String.fromCharCode (0xffff);
-data[1351] = String.fromCharCode (0xffff);
-data[1352] = String.fromCharCode (0xffff);
-data[1353] = String.fromCharCode (0xffff);
-data[1354] = String.fromCharCode (0xffff);
-data[1355] = String.fromCharCode (0xffff);
-data[1356] = String.fromCharCode (0xffff);
-data[1357] = String.fromCharCode (0xffff);
-data[1358] = String.fromCharCode (0xffff);
-data[1359] = String.fromCharCode (0xffff);
-data[1360] = String.fromCharCode (0xffff);
-data[1361] = String.fromCharCode (0xffff);
-data[1362] = String.fromCharCode (0xffff);
-data[1363] = String.fromCharCode (0xffff);
-data[1364] = String.fromCharCode (0xffff);
-data[1365] = String.fromCharCode (0xffff);
-data[1366] = String.fromCharCode (0xffff);
-data[1367] = String.fromCharCode (0xffff);
-data[1368] = String.fromCharCode (0xffff);
-data[1369] = String.fromCharCode (0xffff);
-data[1370] = String.fromCharCode (0xffff);
-data[1371] = String.fromCharCode (0xffff);
-data[1372] = String.fromCharCode (0xffff);
-data[1373] = String.fromCharCode (0xffff);
-data[1374] = String.fromCharCode (0xffff);
-data[1375] = String.fromCharCode (0xffff);
-data[1376] = String.fromCharCode (0xffff);
-data[1377] = String.fromCharCode (0xffff);
-data[1378] = String.fromCharCode (0xffff);
-data[1379] = String.fromCharCode (0xffff);
-data[1380] = String.fromCharCode (0xffff);
-data[1381] = String.fromCharCode (0xffff);
-data[1382] = String.fromCharCode (0xffff);
-data[1383] = String.fromCharCode (0xffff);
-data[1384] = String.fromCharCode (0xffff);
-data[1385] = String.fromCharCode (0xffff);
-data[1386] = String.fromCharCode (0xffff);
-data[1387] = String.fromCharCode (0xffff);
-data[1388] = String.fromCharCode (0xffff);
-data[1389] = String.fromCharCode (0xffff);
-data[1390] = String.fromCharCode (0xffff);
-data[1391] = String.fromCharCode (0xffff);
-data[1392] = String.fromCharCode (0xffff);
-data[1393] = String.fromCharCode (0xffff);
-data[1394] = String.fromCharCode (0xffff);
-data[1395] = String.fromCharCode (0xffff);
-data[1396] = String.fromCharCode (0xffff);
-data[1397] = String.fromCharCode (0xffff);
-data[1398] = String.fromCharCode (0xffff);
-data[1399] = String.fromCharCode (0xffff);
-data[1400] = String.fromCharCode (0xffff);
-data[1401] = String.fromCharCode (0xffff);
-data[1402] = String.fromCharCode (0xffff);
-data[1403] = String.fromCharCode (0xffff);
-data[1404] = String.fromCharCode (0xffff);
-data[1405] = String.fromCharCode (0xffff);
-data[1406] = String.fromCharCode (0xffff);
-data[1407] = String.fromCharCode (0xffff);
-data[1408] = String.fromCharCode (0xffff);
-data[1409] = String.fromCharCode (0xffff);
-data[1410] = String.fromCharCode (0xffff);
-data[1411] = String.fromCharCode (0xffff);
-data[1412] = String.fromCharCode (0xffff);
-data[1413] = String.fromCharCode (0xffff);
-data[1414] = String.fromCharCode (0xffff);
-data[1415] = String.fromCharCode (0xffff);
-data[1416] = String.fromCharCode (0xffff);
-data[1417] = String.fromCharCode (0xffff);
-data[1418] = String.fromCharCode (0xffff);
-data[1419] = String.fromCharCode (0xffff);
-data[1420] = String.fromCharCode (0xffff);
-data[1421] = String.fromCharCode (0xffff);
-data[1422] = String.fromCharCode (0xffff);
-data[1423] = String.fromCharCode (0xffff);
-data[1424] = String.fromCharCode (0xffff);
-data[1425] = String.fromCharCode (0xffff);
-data[1426] = String.fromCharCode (0xffff);
-data[1427] = String.fromCharCode (0xffff);
-data[1428] = String.fromCharCode (0xffff);
-data[1429] = String.fromCharCode (0xffff);
-data[1430] = String.fromCharCode (0xffff);
-data[1431] = String.fromCharCode (0xffff);
-data[1432] = String.fromCharCode (0xffff);
-data[1433] = String.fromCharCode (0xffff);
-data[1434] = String.fromCharCode (0xffff);
-data[1435] = String.fromCharCode (0xffff);
-data[1436] = String.fromCharCode (0xffff);
-data[1437] = String.fromCharCode (0xffff);
-data[1438] = String.fromCharCode (0xffff);
-data[1439] = String.fromCharCode (0xffff);
-data[1440] = String.fromCharCode (0xffff);
-data[1441] = String.fromCharCode (0xffff);
-data[1442] = String.fromCharCode (0xffff);
-data[1443] = String.fromCharCode (0xffff);
-data[1444] = String.fromCharCode (0xffff);
-data[1445] = String.fromCharCode (0xffff);
-data[1446] = String.fromCharCode (0xffff);
-data[1447] = String.fromCharCode (0xffff);
-data[1448] = String.fromCharCode (0xffff);
-data[1449] = String.fromCharCode (0xffff);
-data[1450] = String.fromCharCode (0xffff);
-data[1451] = String.fromCharCode (0xffff);
-data[1452] = String.fromCharCode (0xffff);
-data[1453] = String.fromCharCode (0xffff);
-data[1454] = String.fromCharCode (0xffff);
-data[1455] = String.fromCharCode (0xffff);
-data[1456] = String.fromCharCode (0xffff);
-data[1457] = String.fromCharCode (0xffff);
-data[1458] = String.fromCharCode (0xffff);
-data[1459] = String.fromCharCode (0xffff);
-data[1460] = String.fromCharCode (0xffff);
-data[1461] = String.fromCharCode (0xffff);
-data[1462] = String.fromCharCode (0xffff);
-data[1463] = String.fromCharCode (0xffff);
-data[1464] = String.fromCharCode (0xffff);
-data[1465] = String.fromCharCode (0xffff);
-data[1466] = String.fromCharCode (0xffff);
-data[1467] = String.fromCharCode (0xffff);
-data[1468] = String.fromCharCode (0xffff);
-data[1469] = String.fromCharCode (0xffff);
-data[1470] = String.fromCharCode (0xffff);
-data[1471] = String.fromCharCode (0xffff);
-data[1472] = String.fromCharCode (0xffff);
-data[1473] = String.fromCharCode (0xffff);
-data[1474] = String.fromCharCode (0xffff);
-data[1475] = String.fromCharCode (0xffff);
-data[1476] = String.fromCharCode (0xffff);
-data[1477] = String.fromCharCode (0xffff);
-data[1478] = String.fromCharCode (0xffff);
-data[1479] = String.fromCharCode (0xffff);
-data[1480] = String.fromCharCode (0xffff);
-data[1481] = String.fromCharCode (0xffff);
-data[1482] = String.fromCharCode (0xffff);
-data[1483] = String.fromCharCode (0xffff);
-data[1484] = String.fromCharCode (0xffff);
-data[1485] = String.fromCharCode (0xffff);
-data[1486] = String.fromCharCode (0xffff);
-data[1487] = String.fromCharCode (0xffff);
-data[1488] = String.fromCharCode (0xffff);
-data[1489] = String.fromCharCode (0xffff);
-data[1490] = String.fromCharCode (0xffff);
-data[1491] = String.fromCharCode (0xffff);
-data[1492] = String.fromCharCode (0xffff);
-data[1493] = String.fromCharCode (0xffff);
-data[1494] = String.fromCharCode (0xffff);
-data[1495] = String.fromCharCode (0xffff);
-data[1496] = String.fromCharCode (0xffff);
-data[1497] = String.fromCharCode (0xffff);
-data[1498] = String.fromCharCode (0xffff);
-data[1499] = String.fromCharCode (0xffff);
-data[1500] = String.fromCharCode (0xffff);
-data[1501] = String.fromCharCode (0xffff);
-data[1502] = String.fromCharCode (0xffff);
-data[1503] = String.fromCharCode (0xffff);
-data[1504] = String.fromCharCode (0xffff);
-data[1505] = String.fromCharCode (0xffff);
-data[1506] = String.fromCharCode (0xffff);
-data[1507] = String.fromCharCode (0xffff);
-data[1508] = String.fromCharCode (0xffff);
-data[1509] = String.fromCharCode (0xffff);
-data[1510] = String.fromCharCode (0xffff);
-data[1511] = String.fromCharCode (0xffff);
-data[1512] = String.fromCharCode (0xffff);
-data[1513] = String.fromCharCode (0xffff);
-data[1514] = String.fromCharCode (0xffff);
-data[1515] = String.fromCharCode (0xffff);
-data[1516] = String.fromCharCode (0xffff);
-data[1517] = String.fromCharCode (0xffff);
-data[1518] = String.fromCharCode (0xffff);
-data[1519] = String.fromCharCode (0xffff);
-data[1520] = String.fromCharCode (0xffff);
-data[1521] = String.fromCharCode (0xffff);
-data[1522] = String.fromCharCode (0xffff);
-data[1523] = String.fromCharCode (0xffff);
-data[1524] = String.fromCharCode (0xffff);
-data[1525] = String.fromCharCode (0xffff);
-data[1526] = String.fromCharCode (0xffff);
-data[1527] = String.fromCharCode (0xffff);
-data[1528] = String.fromCharCode (0xffff);
-data[1529] = String.fromCharCode (0xffff);
-data[1530] = String.fromCharCode (0xffff);
-data[1531] = String.fromCharCode (0xffff);
-data[1532] = String.fromCharCode (0xffff);
-data[1533] = String.fromCharCode (0xffff);
-data[1534] = String.fromCharCode (0xffff);
-data[1535] = String.fromCharCode (0xffff);
-data[1536] = String.fromCharCode (0xffff);
-data[1537] = String.fromCharCode (0xffff);
-data[1538] = String.fromCharCode (0xffff);
-data[1539] = String.fromCharCode (0xffff);
-data[1540] = String.fromCharCode (0xffff);
-data[1541] = String.fromCharCode (0xffff);
-data[1542] = String.fromCharCode (0xffff);
-data[1543] = String.fromCharCode (0xffff);
-data[1544] = String.fromCharCode (0xffff);
-data[1545] = String.fromCharCode (0xffff);
-data[1546] = String.fromCharCode (0xffff);
-data[1547] = String.fromCharCode (0xffff);
-data[1548] = String.fromCharCode (0xffff);
-data[1549] = String.fromCharCode (0xffff);
-data[1550] = String.fromCharCode (0xffff);
-data[1551] = String.fromCharCode (0xffff);
-data[1552] = String.fromCharCode (0xffff);
-data[1553] = String.fromCharCode (0xffff);
-data[1554] = String.fromCharCode (0xffff);
-data[1555] = String.fromCharCode (0xffff);
-data[1556] = String.fromCharCode (0xffff);
-data[1557] = String.fromCharCode (0xffff);
-data[1558] = String.fromCharCode (0xffff);
-data[1559] = String.fromCharCode (0xffff);
-data[1560] = String.fromCharCode (0xffff);
-data[1561] = String.fromCharCode (0xffff);
-data[1562] = String.fromCharCode (0xffff);
-data[1563] = String.fromCharCode (0xffff);
-data[1564] = String.fromCharCode (0xffff);
-data[1565] = String.fromCharCode (0xffff);
-data[1566] = String.fromCharCode (0xffff);
-data[1567] = String.fromCharCode (0xffff);
-data[1568] = String.fromCharCode (0xffff);
-data[1569] = String.fromCharCode (0xffff);
-data[1570] = String.fromCharCode (0xffff);
-data[1571] = String.fromCharCode (0xffff);
-data[1572] = String.fromCharCode (0xffff);
-data[1573] = String.fromCharCode (0xffff);
-data[1574] = String.fromCharCode (0xffff);
-data[1575] = String.fromCharCode (0xffff);
-data[1576] = String.fromCharCode (0xffff);
-data[1577] = String.fromCharCode (0xffff);
-data[1578] = String.fromCharCode (0xffff);
-data[1579] = String.fromCharCode (0xffff);
-data[1580] = String.fromCharCode (0xffff);
-data[1581] = String.fromCharCode (0xffff);
-data[1582] = String.fromCharCode (0xffff);
-data[1583] = String.fromCharCode (0xffff);
-data[1584] = String.fromCharCode (0xffff);
-data[1585] = String.fromCharCode (0xffff);
-data[1586] = String.fromCharCode (0xffff);
-data[1587] = String.fromCharCode (0xffff);
-data[1588] = String.fromCharCode (0xffff);
-data[1589] = String.fromCharCode (0xffff);
-data[1590] = String.fromCharCode (0xffff);
-data[1591] = String.fromCharCode (0xffff);
-data[1592] = String.fromCharCode (0xffff);
-data[1593] = String.fromCharCode (0xffff);
-data[1594] = String.fromCharCode (0xffff);
-data[1595] = String.fromCharCode (0xffff);
-data[1596] = String.fromCharCode (0xffff);
-data[1597] = String.fromCharCode (0xffff);
-data[1598] = String.fromCharCode (0xffff);
-data[1599] = String.fromCharCode (0xffff);
-data[1600] = String.fromCharCode (0xffff);
-data[1601] = String.fromCharCode (0xffff);
-data[1602] = String.fromCharCode (0xffff);
-data[1603] = String.fromCharCode (0xffff);
-data[1604] = String.fromCharCode (0xffff);
-data[1605] = String.fromCharCode (0xffff);
-data[1606] = String.fromCharCode (0xffff);
-data[1607] = String.fromCharCode (0xffff);
-data[1608] = String.fromCharCode (0xffff);
-data[1609] = String.fromCharCode (0xffff);
-data[1610] = String.fromCharCode (0xffff);
-data[1611] = String.fromCharCode (0xffff);
-data[1612] = String.fromCharCode (0xffff);
-data[1613] = String.fromCharCode (0xffff);
-data[1614] = String.fromCharCode (0xffff);
-data[1615] = String.fromCharCode (0xffff);
-data[1616] = String.fromCharCode (0xffff);
-data[1617] = String.fromCharCode (0xffff);
-data[1618] = String.fromCharCode (0xffff);
-data[1619] = String.fromCharCode (0xffff);
-data[1620] = String.fromCharCode (0xffff);
-data[1621] = String.fromCharCode (0xffff);
-data[1622] = String.fromCharCode (0xffff);
-data[1623] = String.fromCharCode (0xffff);
-data[1624] = String.fromCharCode (0xffff);
-data[1625] = String.fromCharCode (0xffff);
-data[1626] = String.fromCharCode (0xffff);
-data[1627] = String.fromCharCode (0xffff);
-data[1628] = String.fromCharCode (0xffff);
-data[1629] = String.fromCharCode (0xffff);
-data[1630] = String.fromCharCode (0xffff);
-data[1631] = String.fromCharCode (0xffff);
-data[1632] = String.fromCharCode (0xffff);
-data[1633] = String.fromCharCode (0xffff);
-data[1634] = String.fromCharCode (0xffff);
-data[1635] = String.fromCharCode (0xffff);
-data[1636] = String.fromCharCode (0xffff);
-data[1637] = String.fromCharCode (0xffff);
-data[1638] = String.fromCharCode (0xffff);
-data[1639] = String.fromCharCode (0xffff);
-data[1640] = String.fromCharCode (0xffff);
-data[1641] = String.fromCharCode (0xffff);
-data[1642] = String.fromCharCode (0xffff);
-data[1643] = String.fromCharCode (0xffff);
-data[1644] = String.fromCharCode (0xffff);
-data[1645] = String.fromCharCode (0xffff);
-data[1646] = String.fromCharCode (0xffff);
-data[1647] = String.fromCharCode (0xffff);
-data[1648] = String.fromCharCode (0xffff);
-data[1649] = String.fromCharCode (0xffff);
-data[1650] = String.fromCharCode (0xffff);
-data[1651] = String.fromCharCode (0xffff);
-data[1652] = String.fromCharCode (0xffff);
-data[1653] = String.fromCharCode (0xffff);
-data[1654] = String.fromCharCode (0xffff);
-data[1655] = String.fromCharCode (0xffff);
-data[1656] = String.fromCharCode (0xffff);
-data[1657] = String.fromCharCode (0xffff);
-data[1658] = String.fromCharCode (0xffff);
-data[1659] = String.fromCharCode (0xffff);
-data[1660] = String.fromCharCode (0xffff);
-data[1661] = String.fromCharCode (0xffff);
-data[1662] = String.fromCharCode (0xffff);
-data[1663] = String.fromCharCode (0xffff);
-data[1664] = String.fromCharCode (0xffff);
-data[1665] = String.fromCharCode (0xffff);
-data[1666] = String.fromCharCode (0xffff);
-data[1667] = String.fromCharCode (0xffff);
-data[1668] = String.fromCharCode (0xffff);
-data[1669] = String.fromCharCode (0xffff);
-data[1670] = String.fromCharCode (0xffff);
-data[1671] = String.fromCharCode (0xffff);
-data[1672] = String.fromCharCode (0xffff);
-data[1673] = String.fromCharCode (0xffff);
-data[1674] = String.fromCharCode (0xffff);
-data[1675] = String.fromCharCode (0xffff);
-data[1676] = String.fromCharCode (0xffff);
-data[1677] = String.fromCharCode (0xffff);
-data[1678] = String.fromCharCode (0xffff);
-data[1679] = String.fromCharCode (0xffff);
-data[1680] = String.fromCharCode (0xffff);
-data[1681] = String.fromCharCode (0xffff);
-data[1682] = String.fromCharCode (0xffff);
-data[1683] = String.fromCharCode (0xffff);
-data[1684] = String.fromCharCode (0xffff);
-data[1685] = String.fromCharCode (0xffff);
-data[1686] = String.fromCharCode (0xffff);
-data[1687] = String.fromCharCode (0xffff);
-data[1688] = String.fromCharCode (0xffff);
-data[1689] = String.fromCharCode (0xffff);
-data[1690] = String.fromCharCode (0xffff);
-data[1691] = String.fromCharCode (0xffff);
-data[1692] = String.fromCharCode (0xffff);
-data[1693] = String.fromCharCode (0xffff);
-data[1694] = String.fromCharCode (0xffff);
-data[1695] = String.fromCharCode (0xffff);
-data[1696] = String.fromCharCode (0xffff);
-data[1697] = String.fromCharCode (0xffff);
-data[1698] = String.fromCharCode (0xffff);
-data[1699] = String.fromCharCode (0xffff);
-data[1700] = String.fromCharCode (0xffff);
-data[1701] = String.fromCharCode (0xffff);
-data[1702] = String.fromCharCode (0xffff);
-data[1703] = String.fromCharCode (0xffff);
-data[1704] = String.fromCharCode (0xffff);
-data[1705] = String.fromCharCode (0xffff);
-data[1706] = String.fromCharCode (0xffff);
-data[1707] = String.fromCharCode (0xffff);
-data[1708] = String.fromCharCode (0xffff);
-data[1709] = String.fromCharCode (0xffff);
-data[1710] = String.fromCharCode (0xffff);
-data[1711] = String.fromCharCode (0xffff);
-data[1712] = String.fromCharCode (0xffff);
-data[1713] = String.fromCharCode (0xffff);
-data[1714] = String.fromCharCode (0xffff);
-data[1715] = String.fromCharCode (0xffff);
-data[1716] = String.fromCharCode (0xffff);
-data[1717] = String.fromCharCode (0xffff);
-data[1718] = String.fromCharCode (0xffff);
-data[1719] = String.fromCharCode (0xffff);
-data[1720] = String.fromCharCode (0xffff);
-data[1721] = String.fromCharCode (0xffff);
-data[1722] = String.fromCharCode (0xffff);
-data[1723] = String.fromCharCode (0xffff);
-data[1724] = String.fromCharCode (0xffff);
-data[1725] = String.fromCharCode (0xffff);
-data[1726] = String.fromCharCode (0xffff);
-data[1727] = String.fromCharCode (0xffff);
-data[1728] = String.fromCharCode (0xffff);
-data[1729] = String.fromCharCode (0xffff);
-data[1730] = String.fromCharCode (0xffff);
-data[1731] = String.fromCharCode (0xffff);
-data[1732] = String.fromCharCode (0xffff);
-data[1733] = String.fromCharCode (0xffff);
-data[1734] = String.fromCharCode (0xffff);
-data[1735] = String.fromCharCode (0xffff);
-data[1736] = String.fromCharCode (0xffff);
-data[1737] = String.fromCharCode (0xffff);
-data[1738] = String.fromCharCode (0xffff);
-data[1739] = String.fromCharCode (0xffff);
-data[1740] = String.fromCharCode (0xffff);
-data[1741] = String.fromCharCode (0xffff);
-data[1742] = String.fromCharCode (0xffff);
-data[1743] = String.fromCharCode (0xffff);
-data[1744] = String.fromCharCode (0xffff);
-data[1745] = String.fromCharCode (0xffff);
-data[1746] = String.fromCharCode (0xffff);
-data[1747] = String.fromCharCode (0xffff);
-data[1748] = String.fromCharCode (0xffff);
-data[1749] = String.fromCharCode (0xffff);
-data[1750] = String.fromCharCode (0xffff);
-data[1751] = String.fromCharCode (0xffff);
-data[1752] = String.fromCharCode (0xffff);
-data[1753] = String.fromCharCode (0xffff);
-data[1754] = String.fromCharCode (0xffff);
-data[1755] = String.fromCharCode (0xffff);
-data[1756] = String.fromCharCode (0xffff);
-data[1757] = String.fromCharCode (0xffff);
-data[1758] = String.fromCharCode (0xffff);
-data[1759] = String.fromCharCode (0xffff);
-data[1760] = String.fromCharCode (0xffff);
-data[1761] = String.fromCharCode (0xffff);
-data[1762] = String.fromCharCode (0xffff);
-data[1763] = String.fromCharCode (0xffff);
-data[1764] = String.fromCharCode (0xffff);
-data[1765] = String.fromCharCode (0xffff);
-data[1766] = String.fromCharCode (0xffff);
-data[1767] = String.fromCharCode (0xffff);
-data[1768] = String.fromCharCode (0xffff);
-data[1769] = String.fromCharCode (0xffff);
-data[1770] = String.fromCharCode (0xffff);
-data[1771] = String.fromCharCode (0xffff);
-data[1772] = String.fromCharCode (0xffff);
-data[1773] = String.fromCharCode (0xffff);
-data[1774] = String.fromCharCode (0xffff);
-data[1775] = String.fromCharCode (0xffff);
-data[1776] = String.fromCharCode (0xffff);
-data[1777] = String.fromCharCode (0xffff);
-data[1778] = String.fromCharCode (0xffff);
-data[1779] = String.fromCharCode (0xffff);
-data[1780] = String.fromCharCode (0xffff);
-data[1781] = String.fromCharCode (0xffff);
-data[1782] = String.fromCharCode (0xffff);
-data[1783] = String.fromCharCode (0xffff);
-data[1784] = String.fromCharCode (0xffff);
-data[1785] = String.fromCharCode (0xffff);
-data[1786] = String.fromCharCode (0xffff);
-data[1787] = String.fromCharCode (0xffff);
-data[1788] = String.fromCharCode (0xffff);
-data[1789] = String.fromCharCode (0xffff);
-data[1790] = String.fromCharCode (0xffff);
-data[1791] = String.fromCharCode (0xffff);
-data[1792] = String.fromCharCode (0xffff);
-data[1793] = String.fromCharCode (0xffff);
-data[1794] = String.fromCharCode (0xffff);
-data[1795] = String.fromCharCode (0xffff);
-data[1796] = String.fromCharCode (0xffff);
-data[1797] = String.fromCharCode (0xffff);
-data[1798] = String.fromCharCode (0xffff);
-data[1799] = String.fromCharCode (0xffff);
-data[1800] = String.fromCharCode (0xffff);
-data[1801] = String.fromCharCode (0xffff);
-data[1802] = String.fromCharCode (0xffff);
-data[1803] = String.fromCharCode (0xffff);
-data[1804] = String.fromCharCode (0xffff);
-data[1805] = String.fromCharCode (0xffff);
-data[1806] = String.fromCharCode (0xffff);
-data[1807] = String.fromCharCode (0xffff);
-data[1808] = String.fromCharCode (0xffff);
-data[1809] = String.fromCharCode (0xffff);
-data[1810] = String.fromCharCode (0xffff);
-data[1811] = String.fromCharCode (0xffff);
-data[1812] = String.fromCharCode (0xffff);
-data[1813] = String.fromCharCode (0xffff);
-data[1814] = String.fromCharCode (0xffff);
-data[1815] = String.fromCharCode (0xffff);
-data[1816] = String.fromCharCode (0xffff);
-data[1817] = String.fromCharCode (0xffff);
-data[1818] = String.fromCharCode (0xffff);
-data[1819] = String.fromCharCode (0xffff);
-data[1820] = String.fromCharCode (0xffff);
-data[1821] = String.fromCharCode (0xffff);
-data[1822] = String.fromCharCode (0xffff);
-data[1823] = String.fromCharCode (0xffff);
-data[1824] = String.fromCharCode (0xffff);
-data[1825] = String.fromCharCode (0xffff);
-data[1826] = String.fromCharCode (0xffff);
-data[1827] = String.fromCharCode (0xffff);
-data[1828] = String.fromCharCode (0xffff);
-data[1829] = String.fromCharCode (0xffff);
-data[1830] = String.fromCharCode (0xffff);
-data[1831] = String.fromCharCode (0xffff);
-data[1832] = String.fromCharCode (0xffff);
-data[1833] = String.fromCharCode (0xffff);
-data[1834] = String.fromCharCode (0xffff);
-data[1835] = String.fromCharCode (0xffff);
-data[1836] = String.fromCharCode (0xffff);
-data[1837] = String.fromCharCode (0xffff);
-data[1838] = String.fromCharCode (0xffff);
-data[1839] = String.fromCharCode (0xffff);
-data[1840] = String.fromCharCode (0xffff);
-data[1841] = String.fromCharCode (0xffff);
-data[1842] = String.fromCharCode (0xffff);
-data[1843] = String.fromCharCode (0xffff);
-data[1844] = String.fromCharCode (0xffff);
-data[1845] = String.fromCharCode (0xffff);
-data[1846] = String.fromCharCode (0xffff);
-data[1847] = String.fromCharCode (0xffff);
-data[1848] = String.fromCharCode (0xffff);
-data[1849] = String.fromCharCode (0xffff);
-data[1850] = String.fromCharCode (0xffff);
-data[1851] = String.fromCharCode (0xffff);
-data[1852] = String.fromCharCode (0xffff);
-data[1853] = String.fromCharCode (0xffff);
-data[1854] = String.fromCharCode (0xffff);
-data[1855] = String.fromCharCode (0xffff);
-data[1856] = String.fromCharCode (0xffff);
-data[1857] = String.fromCharCode (0xffff);
-data[1858] = String.fromCharCode (0xffff);
-data[1859] = String.fromCharCode (0xffff);
-data[1860] = String.fromCharCode (0xffff);
-data[1861] = String.fromCharCode (0xffff);
-data[1862] = String.fromCharCode (0xffff);
-data[1863] = String.fromCharCode (0xffff);
-data[1864] = String.fromCharCode (0xffff);
-data[1865] = String.fromCharCode (0xffff);
-data[1866] = String.fromCharCode (0xffff);
-data[1867] = String.fromCharCode (0xffff);
-data[1868] = String.fromCharCode (0xffff);
-data[1869] = String.fromCharCode (0xffff);
-data[1870] = String.fromCharCode (0xffff);
-data[1871] = String.fromCharCode (0xffff);
-data[1872] = String.fromCharCode (0xffff);
-data[1873] = String.fromCharCode (0xffff);
-data[1874] = String.fromCharCode (0xffff);
-data[1875] = String.fromCharCode (0xffff);
-data[1876] = String.fromCharCode (0xffff);
-data[1877] = String.fromCharCode (0xffff);
-data[1878] = String.fromCharCode (0xffff);
-data[1879] = String.fromCharCode (0xffff);
-data[1880] = String.fromCharCode (0xffff);
-data[1881] = String.fromCharCode (0xffff);
-data[1882] = String.fromCharCode (0xffff);
-data[1883] = String.fromCharCode (0xffff);
-data[1884] = String.fromCharCode (0xffff);
-data[1885] = String.fromCharCode (0xffff);
-data[1886] = String.fromCharCode (0xffff);
-data[1887] = String.fromCharCode (0xffff);
-data[1888] = String.fromCharCode (0xffff);
-data[1889] = String.fromCharCode (0xffff);
-data[1890] = String.fromCharCode (0xffff);
-data[1891] = String.fromCharCode (0xffff);
-data[1892] = String.fromCharCode (0xffff);
-data[1893] = String.fromCharCode (0xffff);
-data[1894] = String.fromCharCode (0xffff);
-data[1895] = String.fromCharCode (0xffff);
-data[1896] = String.fromCharCode (0xffff);
-data[1897] = String.fromCharCode (0xffff);
-data[1898] = String.fromCharCode (0xffff);
-data[1899] = String.fromCharCode (0xffff);
-data[1900] = String.fromCharCode (0xffff);
-data[1901] = String.fromCharCode (0xffff);
-data[1902] = String.fromCharCode (0xffff);
-data[1903] = String.fromCharCode (0xffff);
-data[1904] = String.fromCharCode (0xffff);
-data[1905] = String.fromCharCode (0xffff);
-data[1906] = String.fromCharCode (0xffff);
-data[1907] = String.fromCharCode (0xffff);
-data[1908] = String.fromCharCode (0xffff);
-data[1909] = String.fromCharCode (0xffff);
-data[1910] = String.fromCharCode (0xffff);
-data[1911] = String.fromCharCode (0xffff);
-data[1912] = String.fromCharCode (0xffff);
-data[1913] = String.fromCharCode (0xffff);
-data[1914] = String.fromCharCode (0xffff);
-data[1915] = String.fromCharCode (0xffff);
-data[1916] = String.fromCharCode (0xffff);
-data[1917] = String.fromCharCode (0xffff);
-data[1918] = String.fromCharCode (0xffff);
-data[1919] = String.fromCharCode (0xffff);
-data[1920] = String.fromCharCode (0xffff);
-data[1921] = String.fromCharCode (0xffff);
-data[1922] = String.fromCharCode (0xffff);
-data[1923] = String.fromCharCode (0xffff);
-data[1924] = String.fromCharCode (0xffff);
-data[1925] = String.fromCharCode (0xffff);
-data[1926] = String.fromCharCode (0xffff);
-data[1927] = String.fromCharCode (0xffff);
-data[1928] = String.fromCharCode (0xffff);
-data[1929] = String.fromCharCode (0xffff);
-data[1930] = String.fromCharCode (0xffff);
-data[1931] = String.fromCharCode (0xffff);
-data[1932] = String.fromCharCode (0xffff);
-data[1933] = String.fromCharCode (0xffff);
-data[1934] = String.fromCharCode (0xffff);
-data[1935] = String.fromCharCode (0xffff);
-data[1936] = String.fromCharCode (0xffff);
-data[1937] = String.fromCharCode (0xffff);
-data[1938] = String.fromCharCode (0xffff);
-data[1939] = String.fromCharCode (0xffff);
-data[1940] = String.fromCharCode (0xffff);
-data[1941] = String.fromCharCode (0xffff);
-data[1942] = String.fromCharCode (0xffff);
-data[1943] = String.fromCharCode (0xffff);
-data[1944] = String.fromCharCode (0xffff);
-data[1945] = String.fromCharCode (0xffff);
-data[1946] = String.fromCharCode (0xffff);
-data[1947] = String.fromCharCode (0xffff);
-data[1948] = String.fromCharCode (0xffff);
-data[1949] = String.fromCharCode (0xffff);
-data[1950] = String.fromCharCode (0xffff);
-data[1951] = String.fromCharCode (0xffff);
-data[1952] = String.fromCharCode (0xffff);
-data[1953] = String.fromCharCode (0xffff);
-data[1954] = String.fromCharCode (0xffff);
-data[1955] = String.fromCharCode (0xffff);
-data[1956] = String.fromCharCode (0xffff);
-data[1957] = String.fromCharCode (0xffff);
-data[1958] = String.fromCharCode (0xffff);
-data[1959] = String.fromCharCode (0xffff);
-data[1960] = String.fromCharCode (0xffff);
-data[1961] = String.fromCharCode (0xffff);
-data[1962] = String.fromCharCode (0xffff);
-data[1963] = String.fromCharCode (0xffff);
-data[1964] = String.fromCharCode (0xffff);
-data[1965] = String.fromCharCode (0xffff);
-data[1966] = String.fromCharCode (0xffff);
-data[1967] = String.fromCharCode (0xffff);
-data[1968] = String.fromCharCode (0xffff);
-data[1969] = String.fromCharCode (0xffff);
-data[1970] = String.fromCharCode (0xffff);
-data[1971] = String.fromCharCode (0xffff);
-data[1972] = String.fromCharCode (0xffff);
-data[1973] = String.fromCharCode (0xffff);
-data[1974] = String.fromCharCode (0xffff);
-data[1975] = String.fromCharCode (0xffff);
-data[1976] = String.fromCharCode (0xffff);
-data[1977] = String.fromCharCode (0xffff);
-data[1978] = String.fromCharCode (0xffff);
-data[1979] = String.fromCharCode (0xffff);
-data[1980] = String.fromCharCode (0xffff);
-data[1981] = String.fromCharCode (0xffff);
-data[1982] = String.fromCharCode (0xffff);
-data[1983] = String.fromCharCode (0xffff);
-data[1984] = String.fromCharCode (0xffff);
-data[1985] = String.fromCharCode (0xffff);
-data[1986] = String.fromCharCode (0xffff);
-data[1987] = String.fromCharCode (0xffff);
-data[1988] = String.fromCharCode (0xffff);
-data[1989] = String.fromCharCode (0xffff);
-data[1990] = String.fromCharCode (0xffff);
-data[1991] = String.fromCharCode (0xffff);
-data[1992] = String.fromCharCode (0xffff);
-data[1993] = String.fromCharCode (0xffff);
-data[1994] = String.fromCharCode (0xffff);
-data[1995] = String.fromCharCode (0xffff);
-data[1996] = String.fromCharCode (0xffff);
-data[1997] = String.fromCharCode (0xffff);
-data[1998] = String.fromCharCode (0xffff);
-data[1999] = String.fromCharCode (0xffff);
-data[2000] = String.fromCharCode (0xffff);
-data[2001] = String.fromCharCode (0xffff);
-data[2002] = String.fromCharCode (0xffff);
-data[2003] = String.fromCharCode (0xffff);
-data[2004] = String.fromCharCode (0xffff);
-data[2005] = String.fromCharCode (0xffff);
-data[2006] = String.fromCharCode (0xffff);
-data[2007] = String.fromCharCode (0xffff);
-data[2008] = String.fromCharCode (0xffff);
-data[2009] = String.fromCharCode (0xffff);
-data[2010] = String.fromCharCode (0xffff);
-data[2011] = String.fromCharCode (0xffff);
-data[2012] = String.fromCharCode (0xffff);
-data[2013] = String.fromCharCode (0xffff);
-data[2014] = String.fromCharCode (0xffff);
-data[2015] = String.fromCharCode (0xffff);
-data[2016] = String.fromCharCode (0xffff);
-data[2017] = String.fromCharCode (0xffff);
-data[2018] = String.fromCharCode (0xffff);
-data[2019] = String.fromCharCode (0xffff);
-data[2020] = String.fromCharCode (0xffff);
-data[2021] = String.fromCharCode (0xffff);
-data[2022] = String.fromCharCode (0xffff);
-data[2023] = String.fromCharCode (0xffff);
-data[2024] = String.fromCharCode (0xffff);
-data[2025] = String.fromCharCode (0xffff);
-data[2026] = String.fromCharCode (0xffff);
-data[2027] = String.fromCharCode (0xffff);
-data[2028] = String.fromCharCode (0xffff);
-data[2029] = String.fromCharCode (0xffff);
-data[2030] = String.fromCharCode (0xffff);
-data[2031] = String.fromCharCode (0xffff);
-data[2032] = String.fromCharCode (0xffff);
-data[2033] = String.fromCharCode (0xffff);
-data[2034] = String.fromCharCode (0xffff);
-data[2035] = String.fromCharCode (0xffff);
-data[2036] = String.fromCharCode (0xffff);
-data[2037] = String.fromCharCode (0xffff);
-data[2038] = String.fromCharCode (0xffff);
-data[2039] = String.fromCharCode (0xffff);
-data[2040] = String.fromCharCode (0xffff);
-data[2041] = String.fromCharCode (0xffff);
-data[2042] = String.fromCharCode (0xffff);
-data[2043] = String.fromCharCode (0xffff);
-data[2044] = String.fromCharCode (0xffff);
-data[2045] = String.fromCharCode (0xffff);
-data[2046] = String.fromCharCode (0xffff);
-data[2047] = String.fromCharCode (0xffff);
-data[2048] = String.fromCharCode (0xffff);
-data[2049] = String.fromCharCode (0xffff);
-data[2050] = String.fromCharCode (0xffff);
-data[2051] = String.fromCharCode (0xffff);
-data[2052] = String.fromCharCode (0xffff);
-data[2053] = String.fromCharCode (0xffff);
-data[2054] = String.fromCharCode (0xffff);
-data[2055] = String.fromCharCode (0xffff);
-data[2056] = String.fromCharCode (0xffff);
-data[2057] = String.fromCharCode (0xffff);
-data[2058] = String.fromCharCode (0xffff);
-data[2059] = String.fromCharCode (0xffff);
-data[2060] = String.fromCharCode (0xffff);
-data[2061] = String.fromCharCode (0xffff);
-data[2062] = String.fromCharCode (0xffff);
-data[2063] = String.fromCharCode (0xffff);
-data[2064] = String.fromCharCode (0xffff);
-data[2065] = String.fromCharCode (0xffff);
-data[2066] = String.fromCharCode (0xffff);
-data[2067] = String.fromCharCode (0xffff);
-data[2068] = String.fromCharCode (0xffff);
-data[2069] = String.fromCharCode (0xffff);
-data[2070] = String.fromCharCode (0xffff);
-data[2071] = String.fromCharCode (0xffff);
-data[2072] = String.fromCharCode (0xffff);
-data[2073] = String.fromCharCode (0xffff);
-data[2074] = String.fromCharCode (0xffff);
-data[2075] = String.fromCharCode (0xffff);
-data[2076] = String.fromCharCode (0xffff);
-data[2077] = String.fromCharCode (0xffff);
-data[2078] = String.fromCharCode (0xffff);
-data[2079] = String.fromCharCode (0xffff);
-data[2080] = String.fromCharCode (0xffff);
-data[2081] = String.fromCharCode (0xffff);
-data[2082] = String.fromCharCode (0xffff);
-data[2083] = String.fromCharCode (0xffff);
-data[2084] = String.fromCharCode (0xffff);
-data[2085] = String.fromCharCode (0xffff);
-data[2086] = String.fromCharCode (0xffff);
-data[2087] = String.fromCharCode (0xffff);
-data[2088] = String.fromCharCode (0xffff);
-data[2089] = String.fromCharCode (0xffff);
-data[2090] = String.fromCharCode (0xffff);
-data[2091] = String.fromCharCode (0xffff);
-data[2092] = String.fromCharCode (0xffff);
-data[2093] = String.fromCharCode (0xffff);
-data[2094] = String.fromCharCode (0xffff);
-data[2095] = String.fromCharCode (0xffff);
-data[2096] = String.fromCharCode (0xffff);
-data[2097] = String.fromCharCode (0xffff);
-data[2098] = String.fromCharCode (0xffff);
-data[2099] = String.fromCharCode (0xffff);
-data[2100] = String.fromCharCode (0xffff);
-data[2101] = String.fromCharCode (0xffff);
-data[2102] = String.fromCharCode (0xffff);
-data[2103] = String.fromCharCode (0xffff);
-data[2104] = String.fromCharCode (0xffff);
-data[2105] = String.fromCharCode (0xffff);
-data[2106] = String.fromCharCode (0xffff);
-data[2107] = String.fromCharCode (0xffff);
-data[2108] = String.fromCharCode (0xffff);
-data[2109] = String.fromCharCode (0xffff);
-data[2110] = String.fromCharCode (0xffff);
-data[2111] = String.fromCharCode (0xffff);
-data[2112] = String.fromCharCode (0xffff);
-data[2113] = String.fromCharCode (0xffff);
-data[2114] = String.fromCharCode (0xffff);
-data[2115] = String.fromCharCode (0xffff);
-data[2116] = String.fromCharCode (0xffff);
-data[2117] = String.fromCharCode (0xffff);
-data[2118] = String.fromCharCode (0xffff);
-data[2119] = String.fromCharCode (0xffff);
-data[2120] = String.fromCharCode (0xffff);
-data[2121] = String.fromCharCode (0xffff);
-data[2122] = String.fromCharCode (0xffff);
-data[2123] = String.fromCharCode (0xffff);
-data[2124] = String.fromCharCode (0xffff);
-data[2125] = String.fromCharCode (0xffff);
-data[2126] = String.fromCharCode (0xffff);
-data[2127] = String.fromCharCode (0xffff);
-data[2128] = String.fromCharCode (0xffff);
-data[2129] = String.fromCharCode (0xffff);
-data[2130] = String.fromCharCode (0xffff);
-data[2131] = String.fromCharCode (0xffff);
-data[2132] = String.fromCharCode (0xffff);
-data[2133] = String.fromCharCode (0xffff);
-data[2134] = String.fromCharCode (0xffff);
-data[2135] = String.fromCharCode (0xffff);
-data[2136] = String.fromCharCode (0xffff);
-data[2137] = String.fromCharCode (0xffff);
-data[2138] = String.fromCharCode (0xffff);
-data[2139] = String.fromCharCode (0xffff);
-data[2140] = String.fromCharCode (0xffff);
-data[2141] = String.fromCharCode (0xffff);
-data[2142] = String.fromCharCode (0xffff);
-data[2143] = String.fromCharCode (0xffff);
-data[2144] = String.fromCharCode (0xffff);
-data[2145] = String.fromCharCode (0xffff);
-data[2146] = String.fromCharCode (0xffff);
-data[2147] = String.fromCharCode (0xffff);
-data[2148] = String.fromCharCode (0xffff);
-data[2149] = String.fromCharCode (0xffff);
-data[2150] = String.fromCharCode (0xffff);
-data[2151] = String.fromCharCode (0xffff);
-data[2152] = String.fromCharCode (0xffff);
-data[2153] = String.fromCharCode (0xffff);
-data[2154] = String.fromCharCode (0xffff);
-data[2155] = String.fromCharCode (0xffff);
-data[2156] = String.fromCharCode (0xffff);
-data[2157] = String.fromCharCode (0xffff);
-data[2158] = String.fromCharCode (0xffff);
-data[2159] = String.fromCharCode (0xffff);
-data[2160] = String.fromCharCode (0xffff);
-data[2161] = String.fromCharCode (0xffff);
-data[2162] = String.fromCharCode (0xffff);
-data[2163] = String.fromCharCode (0xffff);
-data[2164] = String.fromCharCode (0xffff);
-data[2165] = String.fromCharCode (0xffff);
-data[2166] = String.fromCharCode (0xffff);
-data[2167] = String.fromCharCode (0xffff);
-data[2168] = String.fromCharCode (0xffff);
-data[2169] = String.fromCharCode (0xffff);
-data[2170] = String.fromCharCode (0xffff);
-data[2171] = String.fromCharCode (0xffff);
-data[2172] = String.fromCharCode (0xffff);
-data[2173] = String.fromCharCode (0xffff);
-data[2174] = String.fromCharCode (0xffff);
-data[2175] = String.fromCharCode (0xffff);
-data[2176] = String.fromCharCode (0xffff);
-data[2177] = String.fromCharCode (0xffff);
-data[2178] = String.fromCharCode (0xffff);
-data[2179] = String.fromCharCode (0xffff);
-data[2180] = String.fromCharCode (0xffff);
-data[2181] = String.fromCharCode (0xffff);
-data[2182] = String.fromCharCode (0xffff);
-data[2183] = String.fromCharCode (0xffff);
-data[2184] = String.fromCharCode (0xffff);
-data[2185] = String.fromCharCode (0xffff);
-data[2186] = String.fromCharCode (0xffff);
-data[2187] = String.fromCharCode (0xffff);
-data[2188] = String.fromCharCode (0xffff);
-data[2189] = String.fromCharCode (0xffff);
-data[2190] = String.fromCharCode (0xffff);
-data[2191] = String.fromCharCode (0xffff);
-data[2192] = String.fromCharCode (0xffff);
-data[2193] = String.fromCharCode (0xffff);
-data[2194] = String.fromCharCode (0xffff);
-data[2195] = String.fromCharCode (0xffff);
-data[2196] = String.fromCharCode (0xffff);
-data[2197] = String.fromCharCode (0xffff);
-data[2198] = String.fromCharCode (0xffff);
-data[2199] = String.fromCharCode (0xffff);
-data[2200] = String.fromCharCode (0xffff);
-data[2201] = String.fromCharCode (0xffff);
-data[2202] = String.fromCharCode (0xffff);
-data[2203] = String.fromCharCode (0xffff);
-data[2204] = String.fromCharCode (0xffff);
-data[2205] = String.fromCharCode (0xffff);
-data[2206] = String.fromCharCode (0xffff);
-data[2207] = String.fromCharCode (0xffff);
-data[2208] = String.fromCharCode (0xffff);
-data[2209] = String.fromCharCode (0xffff);
-data[2210] = String.fromCharCode (0xffff);
-data[2211] = String.fromCharCode (0xffff);
-data[2212] = String.fromCharCode (0xffff);
-data[2213] = String.fromCharCode (0xffff);
-data[2214] = String.fromCharCode (0xffff);
-data[2215] = String.fromCharCode (0xffff);
-data[2216] = String.fromCharCode (0xffff);
-data[2217] = String.fromCharCode (0xffff);
-data[2218] = String.fromCharCode (0xffff);
-data[2219] = String.fromCharCode (0xffff);
-data[2220] = String.fromCharCode (0xffff);
-data[2221] = String.fromCharCode (0xffff);
-data[2222] = String.fromCharCode (0xffff);
-data[2223] = String.fromCharCode (0xffff);
-data[2224] = String.fromCharCode (0xffff);
-data[2225] = String.fromCharCode (0xffff);
-data[2226] = String.fromCharCode (0xffff);
-data[2227] = String.fromCharCode (0xffff);
-data[2228] = String.fromCharCode (0xffff);
-data[2229] = String.fromCharCode (0xffff);
-data[2230] = String.fromCharCode (0xffff);
-data[2231] = String.fromCharCode (0xffff);
-data[2232] = String.fromCharCode (0xffff);
-data[2233] = String.fromCharCode (0xffff);
-data[2234] = String.fromCharCode (0xffff);
-data[2235] = String.fromCharCode (0xffff);
-data[2236] = String.fromCharCode (0xffff);
-data[2237] = String.fromCharCode (0xffff);
-data[2238] = String.fromCharCode (0xffff);
-data[2239] = String.fromCharCode (0xffff);
-data[2240] = String.fromCharCode (0xffff);
-data[2241] = String.fromCharCode (0xffff);
-data[2242] = String.fromCharCode (0xffff);
-data[2243] = String.fromCharCode (0xffff);
-data[2244] = String.fromCharCode (0xffff);
-data[2245] = String.fromCharCode (0xffff);
-data[2246] = String.fromCharCode (0xffff);
-data[2247] = String.fromCharCode (0xffff);
-data[2248] = String.fromCharCode (0xffff);
-data[2249] = String.fromCharCode (0xffff);
-data[2250] = String.fromCharCode (0xffff);
-data[2251] = String.fromCharCode (0xffff);
-data[2252] = String.fromCharCode (0xffff);
-data[2253] = String.fromCharCode (0xffff);
-data[2254] = String.fromCharCode (0xffff);
-data[2255] = String.fromCharCode (0xffff);
-data[2256] = String.fromCharCode (0xffff);
-data[2257] = String.fromCharCode (0xffff);
-data[2258] = String.fromCharCode (0xffff);
-data[2259] = String.fromCharCode (0xffff);
-data[2260] = String.fromCharCode (0xffff);
-data[2261] = String.fromCharCode (0xffff);
-data[2262] = String.fromCharCode (0xffff);
-data[2263] = String.fromCharCode (0xffff);
-data[2264] = String.fromCharCode (0xffff);
-data[2265] = String.fromCharCode (0xffff);
-data[2266] = String.fromCharCode (0xffff);
-data[2267] = String.fromCharCode (0xffff);
-data[2268] = String.fromCharCode (0xffff);
-data[2269] = String.fromCharCode (0xffff);
-data[2270] = String.fromCharCode (0xffff);
-data[2271] = String.fromCharCode (0xffff);
-data[2272] = String.fromCharCode (0xffff);
-data[2273] = String.fromCharCode (0xffff);
-data[2274] = String.fromCharCode (0xffff);
-data[2275] = String.fromCharCode (0xffff);
-data[2276] = String.fromCharCode (0xffff);
-data[2277] = String.fromCharCode (0xffff);
-data[2278] = String.fromCharCode (0xffff);
-data[2279] = String.fromCharCode (0xffff);
-data[2280] = String.fromCharCode (0xffff);
-data[2281] = String.fromCharCode (0xffff);
-data[2282] = String.fromCharCode (0xffff);
-data[2283] = String.fromCharCode (0xffff);
-data[2284] = String.fromCharCode (0xffff);
-data[2285] = String.fromCharCode (0xffff);
-data[2286] = String.fromCharCode (0xffff);
-data[2287] = String.fromCharCode (0xffff);
-data[2288] = String.fromCharCode (0xffff);
-data[2289] = String.fromCharCode (0xffff);
-data[2290] = String.fromCharCode (0xffff);
-data[2291] = String.fromCharCode (0xffff);
-data[2292] = String.fromCharCode (0xffff);
-data[2293] = String.fromCharCode (0xffff);
-data[2294] = String.fromCharCode (0xffff);
-data[2295] = String.fromCharCode (0xffff);
-data[2296] = String.fromCharCode (0xffff);
-data[2297] = String.fromCharCode (0xffff);
-data[2298] = String.fromCharCode (0xffff);
-data[2299] = String.fromCharCode (0xffff);
-data[2300] = String.fromCharCode (0xffff);
-data[2301] = String.fromCharCode (0xffff);
-data[2302] = String.fromCharCode (0xffff);
-data[2303] = String.fromCharCode (0xffff);
-data[2304] = String.fromCharCode (0xffff);
-data[2305] = String.fromCharCode (0xffff);
-data[2306] = String.fromCharCode (0xffff);
-data[2307] = String.fromCharCode (0xffff);
-data[2308] = String.fromCharCode (0xffff);
-data[2309] = String.fromCharCode (0xffff);
-data[2310] = String.fromCharCode (0xffff);
-data[2311] = String.fromCharCode (0xffff);
-data[2312] = String.fromCharCode (0xffff);
-data[2313] = String.fromCharCode (0xffff);
-data[2314] = String.fromCharCode (0xffff);
-data[2315] = String.fromCharCode (0xffff);
-data[2316] = String.fromCharCode (0xffff);
-data[2317] = String.fromCharCode (0xffff);
-data[2318] = String.fromCharCode (0xffff);
-data[2319] = String.fromCharCode (0xffff);
-data[2320] = String.fromCharCode (0xffff);
-data[2321] = String.fromCharCode (0xffff);
-data[2322] = String.fromCharCode (0xffff);
-data[2323] = String.fromCharCode (0xffff);
-data[2324] = String.fromCharCode (0xffff);
-data[2325] = String.fromCharCode (0xffff);
-data[2326] = String.fromCharCode (0xffff);
-data[2327] = String.fromCharCode (0xffff);
-data[2328] = String.fromCharCode (0xffff);
-data[2329] = String.fromCharCode (0xffff);
-data[2330] = String.fromCharCode (0xffff);
-data[2331] = String.fromCharCode (0xffff);
-data[2332] = String.fromCharCode (0xffff);
-data[2333] = String.fromCharCode (0xffff);
-data[2334] = String.fromCharCode (0xffff);
-data[2335] = String.fromCharCode (0xffff);
-data[2336] = String.fromCharCode (0xffff);
-data[2337] = String.fromCharCode (0xffff);
-data[2338] = String.fromCharCode (0xffff);
-data[2339] = String.fromCharCode (0xffff);
-data[2340] = String.fromCharCode (0xffff);
-data[2341] = String.fromCharCode (0xffff);
-data[2342] = String.fromCharCode (0xffff);
-data[2343] = String.fromCharCode (0xffff);
-data[2344] = String.fromCharCode (0xffff);
-data[2345] = String.fromCharCode (0xffff);
-data[2346] = String.fromCharCode (0xffff);
-data[2347] = String.fromCharCode (0xffff);
-data[2348] = String.fromCharCode (0xffff);
-data[2349] = String.fromCharCode (0xffff);
-data[2350] = String.fromCharCode (0xffff);
-data[2351] = String.fromCharCode (0xffff);
-data[2352] = String.fromCharCode (0xffff);
-data[2353] = String.fromCharCode (0xffff);
-data[2354] = String.fromCharCode (0xffff);
-data[2355] = String.fromCharCode (0xffff);
-data[2356] = String.fromCharCode (0xffff);
-data[2357] = String.fromCharCode (0xffff);
-data[2358] = String.fromCharCode (0xffff);
-data[2359] = String.fromCharCode (0xffff);
-data[2360] = String.fromCharCode (0xffff);
-data[2361] = String.fromCharCode (0xffff);
-data[2362] = String.fromCharCode (0xffff);
-data[2363] = String.fromCharCode (0xffff);
-data[2364] = String.fromCharCode (0xffff);
-data[2365] = String.fromCharCode (0xffff);
-data[2366] = String.fromCharCode (0xffff);
-data[2367] = String.fromCharCode (0xffff);
-data[2368] = String.fromCharCode (0xffff);
-data[2369] = String.fromCharCode (0xffff);
-data[2370] = String.fromCharCode (0xffff);
-data[2371] = String.fromCharCode (0xffff);
-data[2372] = String.fromCharCode (0xffff);
-data[2373] = String.fromCharCode (0xffff);
-data[2374] = String.fromCharCode (0xffff);
-data[2375] = String.fromCharCode (0xffff);
-data[2376] = String.fromCharCode (0xffff);
-data[2377] = String.fromCharCode (0xffff);
-data[2378] = String.fromCharCode (0xffff);
-data[2379] = String.fromCharCode (0xffff);
-data[2380] = String.fromCharCode (0xffff);
-data[2381] = String.fromCharCode (0xffff);
-data[2382] = String.fromCharCode (0xffff);
-data[2383] = String.fromCharCode (0xffff);
-data[2384] = String.fromCharCode (0xffff);
-data[2385] = String.fromCharCode (0xffff);
-data[2386] = String.fromCharCode (0xffff);
-data[2387] = String.fromCharCode (0xffff);
-data[2388] = String.fromCharCode (0xffff);
-data[2389] = String.fromCharCode (0xffff);
-data[2390] = String.fromCharCode (0xffff);
-data[2391] = String.fromCharCode (0xffff);
-data[2392] = String.fromCharCode (0xffff);
-data[2393] = String.fromCharCode (0xffff);
-data[2394] = String.fromCharCode (0xffff);
-data[2395] = String.fromCharCode (0xffff);
-data[2396] = String.fromCharCode (0xffff);
-data[2397] = String.fromCharCode (0xffff);
-data[2398] = String.fromCharCode (0xffff);
-data[2399] = String.fromCharCode (0xffff);
-data[2400] = String.fromCharCode (0xffff);
-data[2401] = String.fromCharCode (0xffff);
-data[2402] = String.fromCharCode (0xffff);
-data[2403] = String.fromCharCode (0xffff);
-data[2404] = String.fromCharCode (0xffff);
-data[2405] = String.fromCharCode (0xffff);
-data[2406] = String.fromCharCode (0xffff);
-data[2407] = String.fromCharCode (0xffff);
-data[2408] = String.fromCharCode (0xffff);
-data[2409] = String.fromCharCode (0xffff);
-data[2410] = String.fromCharCode (0xffff);
-data[2411] = String.fromCharCode (0xffff);
-data[2412] = String.fromCharCode (0xffff);
-data[2413] = String.fromCharCode (0xffff);
-data[2414] = String.fromCharCode (0xffff);
-data[2415] = String.fromCharCode (0xffff);
-data[2416] = String.fromCharCode (0xffff);
-data[2417] = String.fromCharCode (0xffff);
-data[2418] = String.fromCharCode (0xffff);
-data[2419] = String.fromCharCode (0xffff);
-data[2420] = String.fromCharCode (0xffff);
-data[2421] = String.fromCharCode (0xffff);
-data[2422] = String.fromCharCode (0xffff);
-data[2423] = String.fromCharCode (0xffff);
-data[2424] = String.fromCharCode (0xffff);
-data[2425] = String.fromCharCode (0xffff);
-data[2426] = String.fromCharCode (0xffff);
-data[2427] = String.fromCharCode (0xffff);
-data[2428] = String.fromCharCode (0xffff);
-data[2429] = String.fromCharCode (0xffff);
-data[2430] = String.fromCharCode (0xffff);
-data[2431] = String.fromCharCode (0xffff);
-data[2432] = String.fromCharCode (0xffff);
-data[2433] = String.fromCharCode (0xffff);
-data[2434] = String.fromCharCode (0xffff);
-data[2435] = String.fromCharCode (0xffff);
-data[2436] = String.fromCharCode (0xffff);
-data[2437] = String.fromCharCode (0xffff);
-data[2438] = String.fromCharCode (0xffff);
-data[2439] = String.fromCharCode (0xffff);
-data[2440] = String.fromCharCode (0xffff);
-data[2441] = String.fromCharCode (0xffff);
-data[2442] = String.fromCharCode (0xffff);
-data[2443] = String.fromCharCode (0xffff);
-data[2444] = String.fromCharCode (0xffff);
-data[2445] = String.fromCharCode (0xffff);
-data[2446] = String.fromCharCode (0xffff);
-data[2447] = String.fromCharCode (0xffff);
-data[2448] = String.fromCharCode (0xffff);
-data[2449] = String.fromCharCode (0xffff);
-data[2450] = String.fromCharCode (0xffff);
-data[2451] = String.fromCharCode (0xffff);
-data[2452] = String.fromCharCode (0xffff);
-data[2453] = String.fromCharCode (0xffff);
-data[2454] = String.fromCharCode (0xffff);
-data[2455] = String.fromCharCode (0xffff);
-data[2456] = String.fromCharCode (0xffff);
-data[2457] = String.fromCharCode (0xffff);
-data[2458] = String.fromCharCode (0xffff);
-data[2459] = String.fromCharCode (0xffff);
-data[2460] = String.fromCharCode (0xffff);
-data[2461] = String.fromCharCode (0xffff);
-data[2462] = String.fromCharCode (0xffff);
-data[2463] = String.fromCharCode (0xffff);
-data[2464] = String.fromCharCode (0xffff);
-data[2465] = String.fromCharCode (0xffff);
-data[2466] = String.fromCharCode (0xffff);
-data[2467] = String.fromCharCode (0xffff);
-data[2468] = String.fromCharCode (0xffff);
-data[2469] = String.fromCharCode (0xffff);
-data[2470] = String.fromCharCode (0xffff);
-data[2471] = String.fromCharCode (0xffff);
-data[2472] = String.fromCharCode (0xffff);
-data[2473] = String.fromCharCode (0xffff);
-data[2474] = String.fromCharCode (0xffff);
-data[2475] = String.fromCharCode (0xffff);
-data[2476] = String.fromCharCode (0xffff);
-data[2477] = String.fromCharCode (0xffff);
-data[2478] = String.fromCharCode (0xffff);
-data[2479] = String.fromCharCode (0xffff);
-data[2480] = String.fromCharCode (0xffff);
-data[2481] = String.fromCharCode (0xffff);
-data[2482] = String.fromCharCode (0xffff);
-data[2483] = String.fromCharCode (0xffff);
-data[2484] = String.fromCharCode (0xffff);
-data[2485] = String.fromCharCode (0xffff);
-data[2486] = String.fromCharCode (0xffff);
-data[2487] = String.fromCharCode (0xffff);
-data[2488] = String.fromCharCode (0xffff);
-data[2489] = String.fromCharCode (0xffff);
-data[2490] = String.fromCharCode (0xffff);
-data[2491] = String.fromCharCode (0xffff);
-data[2492] = String.fromCharCode (0xffff);
-data[2493] = String.fromCharCode (0xffff);
-data[2494] = String.fromCharCode (0xffff);
-data[2495] = String.fromCharCode (0xffff);
-data[2496] = String.fromCharCode (0xffff);
-data[2497] = String.fromCharCode (0xffff);
-data[2498] = String.fromCharCode (0xffff);
-data[2499] = String.fromCharCode (0xffff);
-data[2500] = String.fromCharCode (0xffff);
-data[2501] = String.fromCharCode (0xffff);
-data[2502] = String.fromCharCode (0xffff);
-data[2503] = String.fromCharCode (0xffff);
-data[2504] = String.fromCharCode (0xffff);
-data[2505] = String.fromCharCode (0xffff);
-data[2506] = String.fromCharCode (0xffff);
-data[2507] = String.fromCharCode (0xffff);
-data[2508] = String.fromCharCode (0xffff);
-data[2509] = String.fromCharCode (0xffff);
-data[2510] = String.fromCharCode (0xffff);
-data[2511] = String.fromCharCode (0xffff);
-data[2512] = String.fromCharCode (0xffff);
-data[2513] = String.fromCharCode (0xffff);
-data[2514] = String.fromCharCode (0xffff);
-data[2515] = String.fromCharCode (0xffff);
-data[2516] = String.fromCharCode (0xffff);
-data[2517] = String.fromCharCode (0xffff);
-data[2518] = String.fromCharCode (0xffff);
-data[2519] = String.fromCharCode (0xffff);
-data[2520] = String.fromCharCode (0xffff);
-data[2521] = String.fromCharCode (0xffff);
-data[2522] = String.fromCharCode (0xffff);
-data[2523] = String.fromCharCode (0xffff);
-data[2524] = String.fromCharCode (0xffff);
-data[2525] = String.fromCharCode (0xffff);
-data[2526] = String.fromCharCode (0xffff);
-data[2527] = String.fromCharCode (0xffff);
-data[2528] = String.fromCharCode (0xffff);
-data[2529] = String.fromCharCode (0xffff);
-data[2530] = String.fromCharCode (0xffff);
-data[2531] = String.fromCharCode (0xffff);
-data[2532] = String.fromCharCode (0xffff);
-data[2533] = String.fromCharCode (0xffff);
-data[2534] = String.fromCharCode (0xffff);
-data[2535] = String.fromCharCode (0xffff);
-data[2536] = String.fromCharCode (0xffff);
-data[2537] = String.fromCharCode (0xffff);
-data[2538] = String.fromCharCode (0xffff);
-data[2539] = String.fromCharCode (0xffff);
-data[2540] = String.fromCharCode (0xffff);
-data[2541] = String.fromCharCode (0xffff);
-data[2542] = String.fromCharCode (0xffff);
-data[2543] = String.fromCharCode (0xffff);
-data[2544] = String.fromCharCode (0xffff);
-data[2545] = String.fromCharCode (0xffff);
-data[2546] = String.fromCharCode (0xffff);
-data[2547] = String.fromCharCode (0xffff);
-data[2548] = String.fromCharCode (0xffff);
-data[2549] = String.fromCharCode (0xffff);
-data[2550] = String.fromCharCode (0xffff);
-data[2551] = String.fromCharCode (0xffff);
-data[2552] = String.fromCharCode (0xffff);
-data[2553] = String.fromCharCode (0xffff);
-data[2554] = String.fromCharCode (0x003f);
-data[2752] = String.fromCharCode (0xffff);
-data[2753] = String.fromCharCode (0xffff);
-data[2754] = String.fromCharCode (0xffff);
-data[2755] = String.fromCharCode (0xffff);
-data[2756] = String.fromCharCode (0xffff);
-data[2757] = String.fromCharCode (0xffff);
-data[2758] = String.fromCharCode (0xffff);
-data[2759] = String.fromCharCode (0xffff);
-data[2760] = String.fromCharCode (0xffff);
-data[2761] = String.fromCharCode (0xffff);
-data[2762] = String.fromCharCode (0xffff);
-data[2763] = String.fromCharCode (0xffff);
-data[2764] = String.fromCharCode (0xffff);
-data[2765] = String.fromCharCode (0xffff);
-data[2766] = String.fromCharCode (0xffff);
-data[2767] = String.fromCharCode (0xffff);
-data[2768] = String.fromCharCode (0xffff);
-data[2769] = String.fromCharCode (0xffff);
-data[2770] = String.fromCharCode (0xffff);
-data[2771] = String.fromCharCode (0xffff);
-data[2772] = String.fromCharCode (0xffff);
-data[2773] = String.fromCharCode (0xffff);
-data[2774] = String.fromCharCode (0xffff);
-data[2775] = String.fromCharCode (0xffff);
-data[2776] = String.fromCharCode (0xffff);
-data[2777] = String.fromCharCode (0xffff);
-data[2778] = String.fromCharCode (0xffff);
-data[2779] = String.fromCharCode (0xffff);
-data[2780] = String.fromCharCode (0xffff);
-data[2781] = String.fromCharCode (0xffff);
-data[2782] = String.fromCharCode (0xffff);
-data[2783] = String.fromCharCode (0xffff);
-data[2784] = String.fromCharCode (0xffff);
-data[2785] = String.fromCharCode (0xffff);
-data[2786] = String.fromCharCode (0xffff);
-data[2787] = String.fromCharCode (0xffff);
-data[2788] = String.fromCharCode (0xffff);
-data[2789] = String.fromCharCode (0xffff);
-data[2790] = String.fromCharCode (0xffff);
-data[2791] = String.fromCharCode (0xffff);
-data[2792] = String.fromCharCode (0xffff);
-data[2793] = String.fromCharCode (0xffff);
-data[2794] = String.fromCharCode (0xffff);
-data[2795] = String.fromCharCode (0xffff);
-data[2796] = String.fromCharCode (0xffff);
-data[2797] = String.fromCharCode (0xffff);
-data[2798] = String.fromCharCode (0xffff);
-data[2799] = String.fromCharCode (0xffff);
-data[2800] = String.fromCharCode (0xffff);
-data[2801] = String.fromCharCode (0xffff);
-data[2802] = String.fromCharCode (0xffff);
-data[2803] = String.fromCharCode (0xffff);
-data[2804] = String.fromCharCode (0xffff);
-data[2805] = String.fromCharCode (0xffff);
-data[2806] = String.fromCharCode (0xffff);
-data[2807] = String.fromCharCode (0xffff);
-data[2808] = String.fromCharCode (0xffff);
-data[2809] = String.fromCharCode (0xffff);
-data[2810] = String.fromCharCode (0xffff);
-data[2811] = String.fromCharCode (0xffff);
-data[2812] = String.fromCharCode (0xffff);
-data[2813] = String.fromCharCode (0xffff);
-data[2814] = String.fromCharCode (0xffff);
-data[2815] = String.fromCharCode (0xffff);
-data[2816] = String.fromCharCode (0xffff);
-data[2817] = String.fromCharCode (0xffff);
-data[2818] = String.fromCharCode (0xffff);
-data[2819] = String.fromCharCode (0xffff);
-data[2820] = String.fromCharCode (0xffff);
-data[2821] = String.fromCharCode (0xffff);
-data[2822] = String.fromCharCode (0xffff);
-data[2823] = String.fromCharCode (0xffff);
-data[2824] = String.fromCharCode (0xffff);
-data[2825] = String.fromCharCode (0xffff);
-data[2826] = String.fromCharCode (0xffff);
-data[2827] = String.fromCharCode (0xffff);
-data[2828] = String.fromCharCode (0xffff);
-data[2829] = String.fromCharCode (0xffff);
-data[2830] = String.fromCharCode (0xffff);
-data[2831] = String.fromCharCode (0xffff);
-data[2832] = String.fromCharCode (0xffff);
-data[2833] = String.fromCharCode (0xffff);
-data[2834] = String.fromCharCode (0xffff);
-data[2835] = String.fromCharCode (0xffff);
-data[2836] = String.fromCharCode (0xffff);
-data[2837] = String.fromCharCode (0xffff);
-data[2838] = String.fromCharCode (0xffff);
-data[2839] = String.fromCharCode (0xffff);
-data[2840] = String.fromCharCode (0xffff);
-data[2841] = String.fromCharCode (0xffff);
-data[2842] = String.fromCharCode (0xffff);
-data[2843] = String.fromCharCode (0xffff);
-data[2844] = String.fromCharCode (0xffff);
-data[2845] = String.fromCharCode (0xffff);
-data[2846] = String.fromCharCode (0xffff);
-data[2847] = String.fromCharCode (0xffff);
-data[2848] = String.fromCharCode (0xffff);
-data[2849] = String.fromCharCode (0xffff);
-data[2850] = String.fromCharCode (0xffff);
-data[2851] = String.fromCharCode (0xffff);
-data[2852] = String.fromCharCode (0xffff);
-data[2853] = String.fromCharCode (0xffff);
-data[2854] = String.fromCharCode (0xffff);
-data[2855] = String.fromCharCode (0xffff);
-data[2856] = String.fromCharCode (0xffff);
-data[2857] = String.fromCharCode (0xffff);
-data[2858] = String.fromCharCode (0xffff);
-data[2859] = String.fromCharCode (0xffff);
-data[2860] = String.fromCharCode (0xffff);
-data[2861] = String.fromCharCode (0xffff);
-data[2862] = String.fromCharCode (0xffff);
-data[2863] = String.fromCharCode (0xffff);
-data[2864] = String.fromCharCode (0xffff);
-data[2865] = String.fromCharCode (0xffff);
-data[2866] = String.fromCharCode (0xffff);
-data[2867] = String.fromCharCode (0xffff);
-data[2868] = String.fromCharCode (0xffff);
-data[2869] = String.fromCharCode (0xffff);
-data[2870] = String.fromCharCode (0xffff);
-data[2871] = String.fromCharCode (0xffff);
-data[2872] = String.fromCharCode (0xffff);
-data[2873] = String.fromCharCode (0xffff);
-data[2874] = String.fromCharCode (0xffff);
-data[2875] = String.fromCharCode (0xffff);
-data[2876] = String.fromCharCode (0xffff);
-data[2877] = String.fromCharCode (0xffff);
-data[2878] = String.fromCharCode (0xffff);
-data[2879] = String.fromCharCode (0xffff);
-data[2880] = String.fromCharCode (0xffff);
-data[2881] = String.fromCharCode (0xffff);
-data[2882] = String.fromCharCode (0xffff);
-data[2883] = String.fromCharCode (0xffff);
-data[2884] = String.fromCharCode (0xffff);
-data[2885] = String.fromCharCode (0xffff);
-data[2886] = String.fromCharCode (0xffff);
-data[2887] = String.fromCharCode (0xffff);
-data[2888] = String.fromCharCode (0xffff);
-data[2889] = String.fromCharCode (0xffff);
-data[2890] = String.fromCharCode (0xffff);
-data[2891] = String.fromCharCode (0xffff);
-data[2892] = String.fromCharCode (0xffff);
-data[2893] = String.fromCharCode (0xffff);
-data[2894] = String.fromCharCode (0xffff);
-data[2895] = String.fromCharCode (0xffff);
-data[2896] = String.fromCharCode (0xffff);
-data[2897] = String.fromCharCode (0xffff);
-data[2898] = String.fromCharCode (0xffff);
-data[2899] = String.fromCharCode (0xffff);
-data[2900] = String.fromCharCode (0xffff);
-data[2901] = String.fromCharCode (0xffff);
-data[2902] = String.fromCharCode (0xffff);
-data[2903] = String.fromCharCode (0xffff);
-data[2904] = String.fromCharCode (0xffff);
-data[2905] = String.fromCharCode (0xffff);
-data[2906] = String.fromCharCode (0xffff);
-data[2907] = String.fromCharCode (0xffff);
-data[2908] = String.fromCharCode (0xffff);
-data[2909] = String.fromCharCode (0xffff);
-data[2910] = String.fromCharCode (0xffff);
-data[2911] = String.fromCharCode (0xffff);
-data[2912] = String.fromCharCode (0xffff);
-data[2913] = String.fromCharCode (0xffff);
-data[2914] = String.fromCharCode (0xffff);
-data[2915] = String.fromCharCode (0xffff);
-data[2916] = String.fromCharCode (0xffff);
-data[2917] = String.fromCharCode (0xffff);
-data[2918] = String.fromCharCode (0xffff);
-data[2919] = String.fromCharCode (0xffff);
-data[2920] = String.fromCharCode (0xffff);
-data[2921] = String.fromCharCode (0xffff);
-data[2922] = String.fromCharCode (0xffff);
-data[2923] = String.fromCharCode (0xffff);
-data[2924] = String.fromCharCode (0xffff);
-data[2925] = String.fromCharCode (0xffff);
-data[2926] = String.fromCharCode (0xffff);
-data[2927] = String.fromCharCode (0xffff);
-data[2928] = String.fromCharCode (0xffff);
-data[2929] = String.fromCharCode (0xffff);
-data[2930] = String.fromCharCode (0xffff);
-data[2931] = String.fromCharCode (0xffff);
-data[2932] = String.fromCharCode (0xffff);
-data[2933] = String.fromCharCode (0xffff);
-data[2934] = String.fromCharCode (0xffff);
-data[2935] = String.fromCharCode (0xffff);
-data[2936] = String.fromCharCode (0xffff);
-data[2937] = String.fromCharCode (0xffff);
-data[2938] = String.fromCharCode (0xffff);
-data[2939] = String.fromCharCode (0xffff);
-data[2940] = String.fromCharCode (0xffff);
-data[2941] = String.fromCharCode (0xffff);
-data[2942] = String.fromCharCode (0xffff);
-data[2943] = String.fromCharCode (0xffff);
-data[2944] = String.fromCharCode (0xffff);
-data[2945] = String.fromCharCode (0xffff);
-data[2946] = String.fromCharCode (0xffff);
-data[2947] = String.fromCharCode (0xffff);
-data[2948] = String.fromCharCode (0xffff);
-data[2949] = String.fromCharCode (0xffff);
-data[2950] = String.fromCharCode (0xffff);
-data[2951] = String.fromCharCode (0xffff);
-data[2952] = String.fromCharCode (0xffff);
-data[2953] = String.fromCharCode (0xffff);
-data[2954] = String.fromCharCode (0xffff);
-data[2955] = String.fromCharCode (0xffff);
-data[2956] = String.fromCharCode (0xffff);
-data[2957] = String.fromCharCode (0xffff);
-data[2958] = String.fromCharCode (0xffff);
-data[2959] = String.fromCharCode (0xffff);
-data[2960] = String.fromCharCode (0xffff);
-data[2961] = String.fromCharCode (0xffff);
-data[2962] = String.fromCharCode (0xffff);
-data[2963] = String.fromCharCode (0xffff);
-data[2964] = String.fromCharCode (0xffff);
-data[2965] = String.fromCharCode (0xffff);
-data[2966] = String.fromCharCode (0xffff);
-data[2967] = String.fromCharCode (0xffff);
-data[2968] = String.fromCharCode (0xffff);
-data[2969] = String.fromCharCode (0xffff);
-data[2970] = String.fromCharCode (0xffff);
-data[2971] = String.fromCharCode (0xffff);
-data[2972] = String.fromCharCode (0xffff);
-data[2973] = String.fromCharCode (0xffff);
-data[2974] = String.fromCharCode (0xffff);
-data[2975] = String.fromCharCode (0xffff);
-data[2976] = String.fromCharCode (0xffff);
-data[2977] = String.fromCharCode (0xffff);
-data[2978] = String.fromCharCode (0xffff);
-data[2979] = String.fromCharCode (0xffff);
-data[2980] = String.fromCharCode (0xffff);
-data[2981] = String.fromCharCode (0xffff);
-data[2982] = String.fromCharCode (0xffff);
-data[2983] = String.fromCharCode (0xffff);
-data[2984] = String.fromCharCode (0xffff);
-data[2985] = String.fromCharCode (0xffff);
-data[2986] = String.fromCharCode (0xffff);
-data[2987] = String.fromCharCode (0xffff);
-data[2988] = String.fromCharCode (0xffff);
-data[2989] = String.fromCharCode (0xffff);
-data[2990] = String.fromCharCode (0xffff);
-data[2991] = String.fromCharCode (0xffff);
-data[2992] = String.fromCharCode (0xffff);
-data[2993] = String.fromCharCode (0xffff);
-data[2994] = String.fromCharCode (0xffff);
-data[2995] = String.fromCharCode (0xffff);
-data[2996] = String.fromCharCode (0xffff);
-data[2997] = String.fromCharCode (0xffff);
-data[2998] = String.fromCharCode (0xffff);
-data[2999] = String.fromCharCode (0xffff);
-data[3000] = String.fromCharCode (0xffff);
-data[3001] = String.fromCharCode (0xffff);
-data[3002] = String.fromCharCode (0xffff);
-data[3003] = String.fromCharCode (0xffff);
-data[3004] = String.fromCharCode (0xffff);
-data[3005] = String.fromCharCode (0xffff);
-data[3006] = String.fromCharCode (0xffff);
-data[3007] = String.fromCharCode (0xffff);
-data[3008] = String.fromCharCode (0xffff);
-data[3009] = String.fromCharCode (0xffff);
-data[3010] = String.fromCharCode (0xffff);
-data[3011] = String.fromCharCode (0xffff);
-data[3012] = String.fromCharCode (0xffff);
-data[3013] = String.fromCharCode (0xffff);
-data[3014] = String.fromCharCode (0xffff);
-data[3015] = String.fromCharCode (0xffff);
-data[3016] = String.fromCharCode (0xffff);
-data[3017] = String.fromCharCode (0xffff);
-data[3018] = String.fromCharCode (0xffff);
-data[3019] = String.fromCharCode (0xffff);
-data[3020] = String.fromCharCode (0xffff);
-data[3021] = String.fromCharCode (0xffff);
-data[3022] = String.fromCharCode (0xffff);
-data[3023] = String.fromCharCode (0xffff);
-data[3024] = String.fromCharCode (0xffff);
-data[3025] = String.fromCharCode (0xffff);
-data[3026] = String.fromCharCode (0xffff);
-data[3027] = String.fromCharCode (0xffff);
-data[3028] = String.fromCharCode (0xffff);
-data[3029] = String.fromCharCode (0xffff);
-data[3030] = String.fromCharCode (0xffff);
-data[3031] = String.fromCharCode (0xffff);
-data[3032] = String.fromCharCode (0xffff);
-data[3033] = String.fromCharCode (0xffff);
-data[3034] = String.fromCharCode (0xffff);
-data[3035] = String.fromCharCode (0xffff);
-data[3036] = String.fromCharCode (0xffff);
-data[3037] = String.fromCharCode (0xffff);
-data[3038] = String.fromCharCode (0xffff);
-data[3039] = String.fromCharCode (0xffff);
-data[3040] = String.fromCharCode (0xffff);
-data[3041] = String.fromCharCode (0xffff);
-data[3042] = String.fromCharCode (0xffff);
-data[3043] = String.fromCharCode (0xffff);
-data[3044] = String.fromCharCode (0xffff);
-data[3045] = String.fromCharCode (0xffff);
-data[3046] = String.fromCharCode (0xffff);
-data[3047] = String.fromCharCode (0xffff);
-data[3048] = String.fromCharCode (0xffff);
-data[3049] = String.fromCharCode (0xffff);
-data[3050] = String.fromCharCode (0xffff);
-data[3051] = String.fromCharCode (0xffff);
-data[3052] = String.fromCharCode (0xffff);
-data[3053] = String.fromCharCode (0xffff);
-data[3054] = String.fromCharCode (0xffff);
-data[3055] = String.fromCharCode (0xffff);
-data[3056] = String.fromCharCode (0xffff);
-data[3057] = String.fromCharCode (0xffff);
-data[3058] = String.fromCharCode (0xffff);
-data[3059] = String.fromCharCode (0xffff);
-data[3060] = String.fromCharCode (0xffff);
-data[3061] = String.fromCharCode (0xffff);
-data[3062] = String.fromCharCode (0xffff);
-data[3063] = String.fromCharCode (0xffff);
-data[3064] = String.fromCharCode (0xffff);
-data[3065] = String.fromCharCode (0xffff);
-data[3066] = String.fromCharCode (0xffff);
-data[3067] = String.fromCharCode (0xffff);
-data[3068] = String.fromCharCode (0xffff);
-data[3069] = String.fromCharCode (0xffff);
-data[3070] = String.fromCharCode (0xffff);
-data[3071] = String.fromCharCode (0xffff);
-data[3072] = String.fromCharCode (0xffff);
-data[3073] = String.fromCharCode (0xffff);
-data[3074] = String.fromCharCode (0xffff);
-data[3075] = String.fromCharCode (0xffff);
-data[3076] = String.fromCharCode (0xffff);
-data[3077] = String.fromCharCode (0xffff);
-data[3078] = String.fromCharCode (0xffff);
-data[3079] = String.fromCharCode (0xffff);
-data[3080] = String.fromCharCode (0xffff);
-data[3081] = String.fromCharCode (0xffff);
-data[3082] = String.fromCharCode (0xffff);
-data[3083] = String.fromCharCode (0xffff);
-data[3084] = String.fromCharCode (0xffff);
-data[3085] = String.fromCharCode (0xffff);
-data[3086] = String.fromCharCode (0xffff);
-data[3087] = String.fromCharCode (0xffff);
-data[3088] = String.fromCharCode (0xffff);
-data[3089] = String.fromCharCode (0xffff);
-data[3090] = String.fromCharCode (0xffff);
-data[3091] = String.fromCharCode (0xffff);
-data[3092] = String.fromCharCode (0xffff);
-data[3093] = String.fromCharCode (0xffff);
-data[3094] = String.fromCharCode (0xffff);
-data[3095] = String.fromCharCode (0xffff);
-data[3096] = String.fromCharCode (0xffff);
-data[3097] = String.fromCharCode (0xffff);
-data[3098] = String.fromCharCode (0xffff);
-data[3099] = String.fromCharCode (0xffff);
-data[3100] = String.fromCharCode (0xffff);
-data[3101] = String.fromCharCode (0xffff);
-data[3102] = String.fromCharCode (0xffff);
-data[3103] = String.fromCharCode (0xffff);
-data[3104] = String.fromCharCode (0xffff);
-data[3105] = String.fromCharCode (0xffff);
-data[3106] = String.fromCharCode (0xffff);
-data[3107] = String.fromCharCode (0xffff);
-data[3108] = String.fromCharCode (0xffff);
-data[3109] = String.fromCharCode (0xffff);
-data[3110] = String.fromCharCode (0xffff);
-data[3111] = String.fromCharCode (0xffff);
-data[3112] = String.fromCharCode (0xffff);
-data[3113] = String.fromCharCode (0xffff);
-data[3114] = String.fromCharCode (0xffff);
-data[3115] = String.fromCharCode (0xffff);
-data[3116] = String.fromCharCode (0xffff);
-data[3117] = String.fromCharCode (0xffff);
-data[3118] = String.fromCharCode (0xffff);
-data[3119] = String.fromCharCode (0xffff);
-data[3120] = String.fromCharCode (0xffff);
-data[3121] = String.fromCharCode (0xffff);
-data[3122] = String.fromCharCode (0xffff);
-data[3123] = String.fromCharCode (0xffff);
-data[3124] = String.fromCharCode (0xffff);
-data[3125] = String.fromCharCode (0xffff);
-data[3126] = String.fromCharCode (0xffff);
-data[3127] = String.fromCharCode (0xffff);
-data[3128] = String.fromCharCode (0xffff);
-data[3129] = String.fromCharCode (0xffff);
-data[3130] = String.fromCharCode (0xffff);
-data[3131] = String.fromCharCode (0xffff);
-data[3132] = String.fromCharCode (0xffff);
-data[3133] = String.fromCharCode (0xffff);
-data[3134] = String.fromCharCode (0xffff);
-data[3135] = String.fromCharCode (0xffff);
-data[3136] = String.fromCharCode (0xffff);
-data[3137] = String.fromCharCode (0xffff);
-data[3138] = String.fromCharCode (0xffff);
-data[3139] = String.fromCharCode (0xffff);
-data[3140] = String.fromCharCode (0xffff);
-data[3141] = String.fromCharCode (0xffff);
-data[3142] = String.fromCharCode (0xffff);
-data[3143] = String.fromCharCode (0xffff);
-data[3144] = String.fromCharCode (0xffff);
-data[3145] = String.fromCharCode (0xffff);
-data[3146] = String.fromCharCode (0xffff);
-data[3147] = String.fromCharCode (0xffff);
-data[3148] = String.fromCharCode (0xffff);
-data[3149] = String.fromCharCode (0xffff);
-data[3150] = String.fromCharCode (0xffff);
-data[3151] = String.fromCharCode (0xffff);
-data[3152] = String.fromCharCode (0xffff);
-data[3153] = String.fromCharCode (0xffff);
-data[3154] = String.fromCharCode (0xffff);
-data[3155] = String.fromCharCode (0xffff);
-data[3156] = String.fromCharCode (0xffff);
-data[3157] = String.fromCharCode (0xffff);
-data[3158] = String.fromCharCode (0xffff);
-data[3159] = String.fromCharCode (0xffff);
-data[3160] = String.fromCharCode (0xffff);
-data[3161] = String.fromCharCode (0xffff);
-data[3162] = String.fromCharCode (0xffff);
-data[3163] = String.fromCharCode (0xffff);
-data[3164] = String.fromCharCode (0xffff);
-data[3165] = String.fromCharCode (0xffff);
-data[3166] = String.fromCharCode (0xffff);
-data[3167] = String.fromCharCode (0xffff);
-data[3168] = String.fromCharCode (0xffff);
-data[3169] = String.fromCharCode (0xffff);
-data[3170] = String.fromCharCode (0xffff);
-data[3171] = String.fromCharCode (0xffff);
-data[3172] = String.fromCharCode (0xffff);
-data[3173] = String.fromCharCode (0xffff);
-data[3174] = String.fromCharCode (0xffff);
-data[3175] = String.fromCharCode (0xffff);
-data[3176] = String.fromCharCode (0xffff);
-data[3177] = String.fromCharCode (0xffff);
-data[3178] = String.fromCharCode (0xffff);
-data[3179] = String.fromCharCode (0xffff);
-data[3180] = String.fromCharCode (0xffff);
-data[3181] = String.fromCharCode (0xffff);
-data[3182] = String.fromCharCode (0xffff);
-data[3183] = String.fromCharCode (0xffff);
-data[3184] = String.fromCharCode (0xffff);
-data[3185] = String.fromCharCode (0xffff);
-data[3186] = String.fromCharCode (0xffff);
-data[3187] = String.fromCharCode (0xffff);
-data[3188] = String.fromCharCode (0xffff);
-data[3189] = String.fromCharCode (0xffff);
-data[3190] = String.fromCharCode (0xffff);
-data[3191] = String.fromCharCode (0xffff);
-data[3192] = String.fromCharCode (0xffff);
-data[3193] = String.fromCharCode (0xffff);
-data[3194] = String.fromCharCode (0xffff);
-data[3195] = String.fromCharCode (0xffff);
-data[3196] = String.fromCharCode (0xffff);
-data[3197] = String.fromCharCode (0xffff);
-data[3198] = String.fromCharCode (0xffff);
-data[3199] = String.fromCharCode (0xffff);
-data[3200] = String.fromCharCode (0xffff);
-data[3201] = String.fromCharCode (0xffff);
-data[3202] = String.fromCharCode (0xffff);
-data[3203] = String.fromCharCode (0xffff);
-data[3204] = String.fromCharCode (0xffff);
-data[3205] = String.fromCharCode (0xffff);
-data[3206] = String.fromCharCode (0xffff);
-data[3207] = String.fromCharCode (0xffff);
-data[3208] = String.fromCharCode (0xffff);
-data[3209] = String.fromCharCode (0xffff);
-data[3210] = String.fromCharCode (0xffff);
-data[3211] = String.fromCharCode (0xffff);
-data[3212] = String.fromCharCode (0xffff);
-data[3213] = String.fromCharCode (0xffff);
-data[3214] = String.fromCharCode (0xffff);
-data[3215] = String.fromCharCode (0xffff);
-data[3216] = String.fromCharCode (0xffff);
-data[3217] = String.fromCharCode (0xffff);
-data[3218] = String.fromCharCode (0xffff);
-data[3219] = String.fromCharCode (0xffff);
-data[3220] = String.fromCharCode (0xffff);
-data[3221] = String.fromCharCode (0xffff);
-data[3222] = String.fromCharCode (0xffff);
-data[3223] = String.fromCharCode (0xffff);
-data[3224] = String.fromCharCode (0xffff);
-data[3225] = String.fromCharCode (0xffff);
-data[3226] = String.fromCharCode (0xffff);
-data[3227] = String.fromCharCode (0xffff);
-data[3228] = String.fromCharCode (0xffff);
-data[3229] = String.fromCharCode (0xffff);
-data[3230] = String.fromCharCode (0xffff);
-data[3231] = String.fromCharCode (0xffff);
-data[3232] = String.fromCharCode (0xffff);
-data[3233] = String.fromCharCode (0xffff);
-data[3234] = String.fromCharCode (0xffff);
-data[3235] = String.fromCharCode (0xffff);
-data[3236] = String.fromCharCode (0xffff);
-data[3237] = String.fromCharCode (0xffff);
-data[3238] = String.fromCharCode (0xffff);
-data[3239] = String.fromCharCode (0xffff);
-data[3240] = String.fromCharCode (0xffff);
-data[3241] = String.fromCharCode (0xffff);
-data[3242] = String.fromCharCode (0xffff);
-data[3243] = String.fromCharCode (0xffff);
-data[3244] = String.fromCharCode (0xffff);
-data[3245] = String.fromCharCode (0xffff);
-data[3246] = String.fromCharCode (0xffff);
-data[3247] = String.fromCharCode (0xffff);
-data[3248] = String.fromCharCode (0xffff);
-data[3249] = String.fromCharCode (0xffff);
-data[3250] = String.fromCharCode (0xffff);
-data[3251] = String.fromCharCode (0xffff);
-data[3252] = String.fromCharCode (0xffff);
-data[3253] = String.fromCharCode (0xffff);
-data[3254] = String.fromCharCode (0xffff);
-data[3255] = String.fromCharCode (0xffff);
-data[3256] = String.fromCharCode (0xffff);
-data[3257] = String.fromCharCode (0xffff);
-data[3258] = String.fromCharCode (0xffff);
-data[3259] = String.fromCharCode (0xffff);
-data[3260] = String.fromCharCode (0xffff);
-data[3261] = String.fromCharCode (0xffff);
-data[3262] = String.fromCharCode (0xffff);
-data[3263] = String.fromCharCode (0xffff);
-data[3264] = String.fromCharCode (0xffff);
-data[3265] = String.fromCharCode (0xffff);
-data[3266] = String.fromCharCode (0xffff);
-data[3267] = String.fromCharCode (0xffff);
-data[3268] = String.fromCharCode (0xffff);
-data[3269] = String.fromCharCode (0xffff);
-data[3270] = String.fromCharCode (0xffff);
-data[3271] = String.fromCharCode (0xffff);
-data[3272] = String.fromCharCode (0xffff);
-data[3273] = String.fromCharCode (0xffff);
-data[3274] = String.fromCharCode (0xffff);
-data[3275] = String.fromCharCode (0xffff);
-data[3276] = String.fromCharCode (0xffff);
-data[3277] = String.fromCharCode (0xffff);
-data[3278] = String.fromCharCode (0xffff);
-data[3279] = String.fromCharCode (0xffff);
-data[3280] = String.fromCharCode (0xffff);
-data[3281] = String.fromCharCode (0xffff);
-data[3282] = String.fromCharCode (0xffff);
-data[3283] = String.fromCharCode (0xffff);
-data[3284] = String.fromCharCode (0xffff);
-data[3285] = String.fromCharCode (0xffff);
-data[3286] = String.fromCharCode (0xffff);
-data[3287] = String.fromCharCode (0xffff);
-data[3288] = String.fromCharCode (0xffff);
-data[3289] = String.fromCharCode (0xffff);
-data[3290] = String.fromCharCode (0xffff);
-data[3291] = String.fromCharCode (0xffff);
-data[3292] = String.fromCharCode (0xffff);
-data[3293] = String.fromCharCode (0xffff);
-data[3294] = String.fromCharCode (0xffff);
-data[3295] = String.fromCharCode (0xffff);
-data[3296] = String.fromCharCode (0xffff);
-data[3297] = String.fromCharCode (0xffff);
-data[3298] = String.fromCharCode (0xffff);
-data[3299] = String.fromCharCode (0xffff);
-data[3300] = String.fromCharCode (0xffff);
-data[3301] = String.fromCharCode (0xffff);
-data[3302] = String.fromCharCode (0xffff);
-data[3303] = String.fromCharCode (0xffff);
-data[3304] = String.fromCharCode (0xffff);
-data[3305] = String.fromCharCode (0xffff);
-data[3306] = String.fromCharCode (0xffff);
-data[3307] = String.fromCharCode (0xffff);
-data[3308] = String.fromCharCode (0xffff);
-data[3309] = String.fromCharCode (0xffff);
-data[3310] = String.fromCharCode (0xffff);
-data[3311] = String.fromCharCode (0xffff);
-data[3312] = String.fromCharCode (0xffff);
-data[3313] = String.fromCharCode (0xffff);
-data[3314] = String.fromCharCode (0xffff);
-data[3315] = String.fromCharCode (0xffff);
-data[3316] = String.fromCharCode (0xffff);
-data[3317] = String.fromCharCode (0xffff);
-data[3318] = String.fromCharCode (0xffff);
-data[3319] = String.fromCharCode (0xffff);
-data[3320] = String.fromCharCode (0xffff);
-data[3321] = String.fromCharCode (0xffff);
-data[3322] = String.fromCharCode (0xffff);
-data[3323] = String.fromCharCode (0xffff);
-data[3324] = String.fromCharCode (0xffff);
-data[3325] = String.fromCharCode (0xffff);
-data[3326] = String.fromCharCode (0xffff);
-data[3327] = String.fromCharCode (0xffff);
-data[3328] = String.fromCharCode (0xffff);
-data[3329] = String.fromCharCode (0xffff);
-data[3330] = String.fromCharCode (0xffff);
-data[3331] = String.fromCharCode (0xffff);
-data[3332] = String.fromCharCode (0xffff);
-data[3333] = String.fromCharCode (0xffff);
-data[3334] = String.fromCharCode (0xffff);
-data[3335] = String.fromCharCode (0xffff);
-data[3336] = String.fromCharCode (0xffff);
-data[3337] = String.fromCharCode (0xffff);
-data[3338] = String.fromCharCode (0xffff);
-data[3339] = String.fromCharCode (0xffff);
-data[3340] = String.fromCharCode (0xffff);
-data[3341] = String.fromCharCode (0xffff);
-data[3342] = String.fromCharCode (0xffff);
-data[3343] = String.fromCharCode (0xffff);
-data[3344] = String.fromCharCode (0xffff);
-data[3345] = String.fromCharCode (0xffff);
-data[3346] = String.fromCharCode (0xffff);
-data[3347] = String.fromCharCode (0xffff);
-data[3348] = String.fromCharCode (0xffff);
-data[3349] = String.fromCharCode (0xffff);
-data[3350] = String.fromCharCode (0xffff);
-data[3351] = String.fromCharCode (0xffff);
-data[3352] = String.fromCharCode (0xffff);
-data[3353] = String.fromCharCode (0xffff);
-data[3354] = String.fromCharCode (0xffff);
-data[3355] = String.fromCharCode (0xffff);
-data[3356] = String.fromCharCode (0xffff);
-data[3357] = String.fromCharCode (0xffff);
-data[3358] = String.fromCharCode (0xffff);
-data[3359] = String.fromCharCode (0xffff);
-data[3360] = String.fromCharCode (0xffff);
-data[3361] = String.fromCharCode (0xffff);
-data[3362] = String.fromCharCode (0xffff);
-data[3363] = String.fromCharCode (0xffff);
-data[3364] = String.fromCharCode (0xffff);
-data[3365] = String.fromCharCode (0xffff);
-data[3366] = String.fromCharCode (0xffff);
-data[3367] = String.fromCharCode (0xffff);
-data[3368] = String.fromCharCode (0xffff);
-data[3369] = String.fromCharCode (0xffff);
-data[3370] = String.fromCharCode (0xffff);
-data[3371] = String.fromCharCode (0xffff);
-data[3372] = String.fromCharCode (0xffff);
-data[3373] = String.fromCharCode (0xffff);
-data[3374] = String.fromCharCode (0xffff);
-data[3375] = String.fromCharCode (0xffff);
-data[3376] = String.fromCharCode (0xffff);
-data[3377] = String.fromCharCode (0xffff);
-data[3378] = String.fromCharCode (0xffff);
-data[3379] = String.fromCharCode (0xffff);
-data[3380] = String.fromCharCode (0xffff);
-data[3381] = String.fromCharCode (0xffff);
-data[3382] = String.fromCharCode (0xffff);
-data[3383] = String.fromCharCode (0xffff);
-data[3384] = String.fromCharCode (0xffff);
-data[3385] = String.fromCharCode (0xffff);
-data[3386] = String.fromCharCode (0xffff);
-data[3387] = String.fromCharCode (0xffff);
-data[3388] = String.fromCharCode (0xffff);
-data[3389] = String.fromCharCode (0xffff);
-data[3390] = String.fromCharCode (0xffff);
-data[3391] = String.fromCharCode (0xffff);
-data[3392] = String.fromCharCode (0xffff);
-data[3393] = String.fromCharCode (0xffff);
-data[3394] = String.fromCharCode (0xffff);
-data[3395] = String.fromCharCode (0xffff);
-data[3396] = String.fromCharCode (0xffff);
-data[3397] = String.fromCharCode (0xffff);
-data[3398] = String.fromCharCode (0xffff);
-data[3399] = String.fromCharCode (0xffff);
-data[3400] = String.fromCharCode (0xffff);
-data[3401] = String.fromCharCode (0xffff);
-data[3402] = String.fromCharCode (0xffff);
-data[3403] = String.fromCharCode (0xffff);
-data[3404] = String.fromCharCode (0xffff);
-data[3405] = String.fromCharCode (0xffff);
-data[3406] = String.fromCharCode (0xffff);
-data[3407] = String.fromCharCode (0xffff);
-data[3408] = String.fromCharCode (0xffff);
-data[3409] = String.fromCharCode (0xffff);
-data[3410] = String.fromCharCode (0xffff);
-data[3411] = String.fromCharCode (0xffff);
-data[3412] = String.fromCharCode (0xffff);
-data[3413] = String.fromCharCode (0xffff);
-data[3414] = String.fromCharCode (0xffff);
-data[3415] = String.fromCharCode (0xffff);
-data[3416] = String.fromCharCode (0xffff);
-data[3417] = String.fromCharCode (0xffff);
-data[3418] = String.fromCharCode (0xffff);
-data[3419] = String.fromCharCode (0xffff);
-data[3420] = String.fromCharCode (0xffff);
-data[3421] = String.fromCharCode (0xffff);
-data[3422] = String.fromCharCode (0xffff);
-data[3423] = String.fromCharCode (0xffff);
-data[3424] = String.fromCharCode (0xffff);
-data[3425] = String.fromCharCode (0xffff);
-data[3426] = String.fromCharCode (0xffff);
-data[3427] = String.fromCharCode (0xffff);
-data[3428] = String.fromCharCode (0xffff);
-data[3429] = String.fromCharCode (0xffff);
-data[3430] = String.fromCharCode (0xffff);
-data[3431] = String.fromCharCode (0xffff);
-data[3432] = String.fromCharCode (0xffff);
-data[3433] = String.fromCharCode (0xffff);
-data[3434] = String.fromCharCode (0xffff);
-data[3435] = String.fromCharCode (0xffff);
-data[3436] = String.fromCharCode (0xffff);
-data[3437] = String.fromCharCode (0xffff);
-data[3438] = String.fromCharCode (0xffff);
-data[3439] = String.fromCharCode (0xffff);
-data[3440] = String.fromCharCode (0xffff);
-data[3441] = String.fromCharCode (0xffff);
-data[3442] = String.fromCharCode (0xffff);
-data[3443] = String.fromCharCode (0xffff);
-data[3444] = String.fromCharCode (0xffff);
-data[3445] = String.fromCharCode (0xffff);
-data[3446] = String.fromCharCode (0xffff);
-data[3447] = String.fromCharCode (0xffff);
-data[3448] = String.fromCharCode (0xffff);
-data[3449] = String.fromCharCode (0xffff);
-data[3450] = String.fromCharCode (0x000f);
-data[3984] = String.fromCharCode (0xffff);
-data[3985] = String.fromCharCode (0xffff);
-data[3986] = String.fromCharCode (0xffff);
-data[3987] = String.fromCharCode (0xffff);
-data[3988] = String.fromCharCode (0xffff);
-data[3989] = String.fromCharCode (0xffff);
-data[3990] = String.fromCharCode (0xffff);
-data[3991] = String.fromCharCode (0xffff);
-data[3992] = String.fromCharCode (0xffff);
-data[3993] = String.fromCharCode (0xffff);
-data[3994] = String.fromCharCode (0xffff);
-data[3995] = String.fromCharCode (0xffff);
-data[3996] = String.fromCharCode (0xffff);
-data[3997] = String.fromCharCode (0xffff);
-data[3998] = String.fromCharCode (0xffff);
-data[3999] = String.fromCharCode (0xffff);
-data[4000] = String.fromCharCode (0xffff);
-data[4001] = String.fromCharCode (0xffff);
-data[4002] = String.fromCharCode (0x3fff);
-data[4016] = String.fromCharCode (0x007f);
-data[4017] = String.fromCharCode (0x80f8);
-data[4018] = String.fromCharCode (0xfdff);
-data[4019] = String.fromCharCode (0x5f7f);
-data[4020] = String.fromCharCode (0xffdb);
-data[4021] = String.fromCharCode (0xffff);
-data[4022] = String.fromCharCode (0xffff);
-data[4023] = String.fromCharCode (0xffff);
-data[4024] = String.fromCharCode (0xffff);
-data[4025] = String.fromCharCode (0xffff);
-data[4026] = String.fromCharCode (0xffff);
-data[4027] = String.fromCharCode (0x0003);
-data[4029] = String.fromCharCode (0xfff8);
-data[4030] = String.fromCharCode (0xffff);
-data[4031] = String.fromCharCode (0xffff);
-data[4032] = String.fromCharCode (0xffff);
-data[4033] = String.fromCharCode (0xffff);
-data[4034] = String.fromCharCode (0xffff);
-data[4035] = String.fromCharCode (0xffff);
-data[4036] = String.fromCharCode (0xffff);
-data[4037] = String.fromCharCode (0xffff);
-data[4038] = String.fromCharCode (0xffff);
-data[4039] = String.fromCharCode (0xffff);
-data[4040] = String.fromCharCode (0xffff);
-data[4041] = String.fromCharCode (0xffff);
-data[4042] = String.fromCharCode (0xffff);
-data[4043] = String.fromCharCode (0xffff);
-data[4044] = String.fromCharCode (0xffff);
-data[4045] = String.fromCharCode (0xffff);
-data[4046] = String.fromCharCode (0xffff);
-data[4047] = String.fromCharCode (0xffff);
-data[4048] = String.fromCharCode (0xffff);
-data[4049] = String.fromCharCode (0xffff);
-data[4050] = String.fromCharCode (0xffff);
-data[4051] = String.fromCharCode (0x3fff);
-data[4053] = String.fromCharCode (0xffff);
-data[4054] = String.fromCharCode (0xffff);
-data[4055] = String.fromCharCode (0xffff);
-data[4056] = String.fromCharCode (0xffff);
-data[4057] = String.fromCharCode (0xfffc);
-data[4058] = String.fromCharCode (0xffff);
-data[4059] = String.fromCharCode (0xffff);
-data[4060] = String.fromCharCode (0x00ff);
-data[4063] = String.fromCharCode (0x0fff);
-data[4071] = String.fromCharCode (0xffd7);
-data[4072] = String.fromCharCode (0xffff);
-data[4073] = String.fromCharCode (0xffff);
-data[4074] = String.fromCharCode (0xffff);
-data[4075] = String.fromCharCode (0xffff);
-data[4076] = String.fromCharCode (0xffff);
-data[4077] = String.fromCharCode (0xffff);
-data[4078] = String.fromCharCode (0xffff);
-data[4079] = String.fromCharCode (0x1fff);
-data[4082] = String.fromCharCode (0xfffe);
-data[4083] = String.fromCharCode (0x07ff);
-data[4084] = String.fromCharCode (0xfffe);
-data[4085] = String.fromCharCode (0x07ff);
-data[4086] = String.fromCharCode (0xffc0);
-data[4087] = String.fromCharCode (0xffff);
-data[4088] = String.fromCharCode (0xffff);
-data[4089] = String.fromCharCode (0xffff);
-data[4090] = String.fromCharCode (0xffff);
-data[4091] = String.fromCharCode (0x7fff);
-data[4092] = String.fromCharCode (0xfcfc);
-data[4093] = String.fromCharCode (0x1cfc);
-data[4100] = String.fromCharCode (0xfffe);
-data[4101] = String.fromCharCode (0x07ff);
-data[4102] = String.fromCharCode (0xfffe);
-data[4103] = String.fromCharCode (0x07ff);
-data[4106] = String.fromCharCode (0x0400);
-data[4107] = String.fromCharCode (0x0420);
-data[4108] = String.fromCharCode (0xffff);
-data[4109] = String.fromCharCode (0xff7f);
-data[4110] = String.fromCharCode (0xffff);
-data[4111] = String.fromCharCode (0xff7f);
-data[4112] = String.fromCharCode (0xffff);
-data[4113] = String.fromCharCode (0xffff);
-data[4114] = String.fromCharCode (0xffff);
-data[4115] = String.fromCharCode (0xffff);
-data[4116] = String.fromCharCode (0xffff);
-data[4117] = String.fromCharCode (0xffff);
-data[4118] = String.fromCharCode (0xffff);
-data[4119] = String.fromCharCode (0xffff);
-data[4120] = String.fromCharCode (0xffff);
-data[4121] = String.fromCharCode (0xffff);
-data[4122] = String.fromCharCode (0xffff);
-data[4123] = String.fromCharCode (0xffff);
-data[4124] = String.fromCharCode (0xffff);
-data[4125] = String.fromCharCode (0xffff);
-data[4126] = String.fromCharCode (0xffff);
-data[4127] = String.fromCharCode (0xfc3f);
-data[4128] = String.fromCharCode (0xffff);
-data[4129] = String.fromCharCode (0x00ff);
-data[4133] = String.fromCharCode (0xffff);
-data[4134] = String.fromCharCode (0xffff);
-data[4135] = String.fromCharCode (0xffff);
-data[4136] = String.fromCharCode (0xffff);
-data[4137] = String.fromCharCode (0xffff);
-data[4138] = String.fromCharCode (0x01ff);
-data[4139] = String.fromCharCode (0xf9ff);
-data[4140] = String.fromCharCode (0x0003);
-data[4141] = String.fromCharCode (0x0003);
-data[4142] = String.fromCharCode (0x001f);
-data[4151] = String.fromCharCode (0x0400);
-data[4152] = String.fromCharCode (0xd740);
-data[4153] = String.fromCharCode (0xffff);
-data[4154] = String.fromCharCode (0xfffb);
-data[4155] = String.fromCharCode (0xffff);
-data[4156] = String.fromCharCode (0x7fff);
-data[4157] = String.fromCharCode (0x547f);
-data[4158] = String.fromCharCode (0x00fd);
-});
-c$.white_f = Clazz.defineMethod (c$, "white_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.white = new com.stevesoft.pat.Bits (data);
-data[0] = String.fromCharCode (0x3e00);
-data[1] = String.fromCharCode (0xf000);
-data[2] = String.fromCharCode (0x0001);
-data[512] = String.fromCharCode (0x0fff);
-data[514] = String.fromCharCode (0x0300);
-data[768] = String.fromCharCode (0x0001);
-data[4096] = String.fromCharCode (0x3e00);
-data[4097] = String.fromCharCode (0xf000);
-data[4098] = String.fromCharCode (0x0001);
-});
-c$.punct_f = Clazz.defineMethod (c$, "punct_f",
-function () {
-var data = Clazz.newCharArray (4159, '\0');
-com.stevesoft.pat.Bits.punct = new com.stevesoft.pat.Bits (data);
-data[2] = String.fromCharCode (0xf7ee);
-data[3] = String.fromCharCode (0x8c00);
-data[4] = String.fromCharCode (0x0001);
-data[5] = String.fromCharCode (0xb800);
-data[7] = String.fromCharCode (0x2800);
-data[10] = String.fromCharCode (0x2802);
-data[11] = String.fromCharCode (0x8880);
-data[55] = String.fromCharCode (0x4030);
-data[56] = String.fromCharCode (0x0080);
-data[85] = String.fromCharCode (0xfc00);
-data[88] = String.fromCharCode (0x0200);
-data[91] = String.fromCharCode (0x4000);
-data[92] = String.fromCharCode (0x0009);
-data[95] = String.fromCharCode (0x0018);
-data[96] = String.fromCharCode (0x1000);
-data[97] = String.fromCharCode (0x8800);
-data[102] = String.fromCharCode (0x3c00);
-data[109] = String.fromCharCode (0x0010);
-data[150] = '0';
-data[151] = String.fromCharCode (0x0001);
-data[226] = String.fromCharCode (0x8000);
-data[229] = String.fromCharCode (0x0c00);
-data[234] = String.fromCharCode (0x8000);
-data[240] = String.fromCharCode (0xfff0);
-data[241] = String.fromCharCode (0x0007);
-data[243] = String.fromCharCode (0x3c00);
-data[248] = String.fromCharCode (0x0020);
-data[271] = String.fromCharCode (0x0800);
-data[513] = String.fromCharCode (0xffff);
-data[514] = String.fromCharCode (0x00ff);
-data[515] = String.fromCharCode (0xffff);
-data[516] = 'o';
-data[519] = String.fromCharCode (0x6000);
-data[520] = String.fromCharCode (0x6000);
-data[562] = String.fromCharCode (0x0600);
-data[768] = String.fromCharCode (0xff4e);
-data[769] = String.fromCharCode (0xfff3);
-data[771] = String.fromCharCode (0x0001);
-data[783] = String.fromCharCode (0x0800);
-data[4051] = String.fromCharCode (0xc000);
-data[4067] = String.fromCharCode (0xffff);
-data[4068] = String.fromCharCode (0xfe1f);
-data[4069] = String.fromCharCode (0xfff7);
-data[4070] = String.fromCharCode (0x0d0b);
-data[4080] = String.fromCharCode (0xf7ee);
-data[4081] = String.fromCharCode (0x8c00);
-data[4082] = String.fromCharCode (0x0001);
-data[4083] = String.fromCharCode (0xb800);
-data[4085] = String.fromCharCode (0x2800);
-data[4086] = String.fromCharCode (0x003e);
-data[4098] = String.fromCharCode (0xf7ee);
-data[4099] = String.fromCharCode (0x8c00);
-data[4100] = String.fromCharCode (0x0001);
-data[4101] = String.fromCharCode (0xb800);
-data[4103] = String.fromCharCode (0x2800);
-data[4106] = String.fromCharCode (0x2802);
-data[4107] = String.fromCharCode (0x8880);
-data[4151] = String.fromCharCode (0x4030);
-data[4152] = String.fromCharCode (0x0080);
-});
-Clazz.defineStatics (c$,
-"upper", null,
-"lower", null,
-"title", null,
-"currency", null,
-"decimal_digit", null,
-"math", null,
-"letter", null,
-"white", null,
-"punct", null);
+Clazz.declarePackage ("com.stevesoft.pat");
+c$ = Clazz.decorateAsClass (function () {
+this.carray = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Bits");
+Clazz.makeConstructor (c$,
+function (carray) {
+this.carray = carray;
+}, "~A");
+Clazz.defineMethod (c$, "get",
+function (i) {
+return ((this.carray[i >> 4]).charCodeAt (0) & (1 << (i & 15))) != 0;
+}, "~N");
+Clazz.defineMethod (c$, "set",
+function (i, b) {
+if (b) {
+this.carray[i >> 4] = String.fromCharCode ((this.carray[i >> 4]).charCodeAt (0) | ((String.fromCharCode (1)).charCodeAt (0) << (i & 15)));
+} else {
+this.carray[i >> 4] = String.fromCharCode ((this.carray[i >> 4]).charCodeAt (0) & (String.fromCharCode (~(1 << (i & 15)))).charCodeAt (0));
+}}, "~N,~B");
+c$.upper_f = Clazz.defineMethod (c$, "upper_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.upper = new com.stevesoft.pat.Bits (data);
+data[4] = String.fromCharCode (0xfffe);
+data[5] = String.fromCharCode (0x07ff);
+data[12] = String.fromCharCode (0xffff);
+data[13] = String.fromCharCode (0x7f7f);
+data[16] = String.fromCharCode (0x5555);
+data[17] = String.fromCharCode (0x5555);
+data[18] = String.fromCharCode (0x5555);
+data[19] = String.fromCharCode (0xaa55);
+data[20] = String.fromCharCode (0x54aa);
+data[21] = String.fromCharCode (0x5555);
+data[22] = String.fromCharCode (0x5555);
+data[23] = String.fromCharCode (0x2b55);
+data[24] = String.fromCharCode (0xced6);
+data[25] = String.fromCharCode (0xb1db);
+data[26] = String.fromCharCode (0xd2d5);
+data[27] = String.fromCharCode (0x11ae);
+data[28] = String.fromCharCode (0xa490);
+data[29] = String.fromCharCode (0x4aaa);
+data[30] = String.fromCharCode (0x5555);
+data[31] = String.fromCharCode (0x5412);
+data[32] = String.fromCharCode (0x5555);
+data[33] = 'U';
+data[56] = String.fromCharCode (0xd740);
+data[57] = String.fromCharCode (0xfffe);
+data[58] = String.fromCharCode (0x0ffb);
+data[61] = String.fromCharCode (0x541c);
+data[62] = String.fromCharCode (0x5555);
+data[64] = String.fromCharCode (0xdffe);
+data[65] = String.fromCharCode (0xffff);
+data[66] = String.fromCharCode (0xffff);
+data[70] = String.fromCharCode (0x5555);
+data[71] = String.fromCharCode (0x5555);
+data[72] = String.fromCharCode (0x0001);
+data[73] = String.fromCharCode (0x5555);
+data[74] = String.fromCharCode (0x5555);
+data[75] = String.fromCharCode (0x5555);
+data[76] = String.fromCharCode (0x088a);
+data[77] = String.fromCharCode (0x5555);
+data[78] = String.fromCharCode (0x4555);
+data[79] = String.fromCharCode (0x0115);
+data[83] = String.fromCharCode (0xfffe);
+data[84] = String.fromCharCode (0xffff);
+data[85] = String.fromCharCode (0x007f);
+data[266] = String.fromCharCode (0xffff);
+data[267] = String.fromCharCode (0xffff);
+data[268] = String.fromCharCode (0x003f);
+data[480] = String.fromCharCode (0x5555);
+data[481] = String.fromCharCode (0x5555);
+data[482] = String.fromCharCode (0x5555);
+data[483] = String.fromCharCode (0x5555);
+data[484] = String.fromCharCode (0x5555);
+data[485] = String.fromCharCode (0x5555);
+data[486] = String.fromCharCode (0x5555);
+data[487] = String.fromCharCode (0x5555);
+data[488] = String.fromCharCode (0x5555);
+data[489] = String.fromCharCode (0x0015);
+data[490] = String.fromCharCode (0x5555);
+data[491] = String.fromCharCode (0x5555);
+data[492] = String.fromCharCode (0x5555);
+data[493] = String.fromCharCode (0x5555);
+data[494] = String.fromCharCode (0x5555);
+data[495] = String.fromCharCode (0x0155);
+data[496] = String.fromCharCode (0xff00);
+data[497] = String.fromCharCode (0x3f00);
+data[498] = String.fromCharCode (0xff00);
+data[499] = String.fromCharCode (0xff00);
+data[500] = String.fromCharCode (0x3f00);
+data[501] = String.fromCharCode (0xaa00);
+data[502] = String.fromCharCode (0xff00);
+data[504] = String.fromCharCode (0xff00);
+data[505] = String.fromCharCode (0xff00);
+data[506] = String.fromCharCode (0xff00);
+data[507] = String.fromCharCode (0x5f00);
+data[508] = String.fromCharCode (0x1f00);
+data[509] = String.fromCharCode (0x0f00);
+data[510] = String.fromCharCode (0x1f00);
+data[511] = String.fromCharCode (0x1f00);
+data[528] = String.fromCharCode (0x3884);
+data[529] = String.fromCharCode (0x3f27);
+data[530] = String.fromCharCode (0x3d50);
+data[531] = String.fromCharCode (0x000b);
+data[4082] = String.fromCharCode (0xfffe);
+data[4083] = String.fromCharCode (0x07ff);
+data[4100] = String.fromCharCode (0xfffe);
+data[4101] = String.fromCharCode (0x07ff);
+data[4108] = String.fromCharCode (0xffff);
+data[4109] = String.fromCharCode (0x7f7f);
+data[4112] = String.fromCharCode (0x5555);
+data[4113] = String.fromCharCode (0x5555);
+data[4114] = String.fromCharCode (0x5555);
+data[4115] = String.fromCharCode (0xaa55);
+data[4116] = String.fromCharCode (0x54aa);
+data[4117] = String.fromCharCode (0x5555);
+data[4118] = String.fromCharCode (0x5555);
+data[4119] = String.fromCharCode (0x2b55);
+data[4120] = String.fromCharCode (0xced6);
+data[4121] = String.fromCharCode (0xb1db);
+data[4122] = String.fromCharCode (0xd2d5);
+data[4123] = String.fromCharCode (0x11ae);
+data[4124] = String.fromCharCode (0xa490);
+data[4125] = String.fromCharCode (0x4aaa);
+data[4126] = String.fromCharCode (0x5555);
+data[4127] = String.fromCharCode (0x5412);
+data[4128] = String.fromCharCode (0x5555);
+data[4129] = 'U';
+data[4152] = String.fromCharCode (0xd740);
+data[4153] = String.fromCharCode (0xfffe);
+data[4154] = String.fromCharCode (0x0ffb);
+data[4157] = String.fromCharCode (0x541c);
+data[4158] = 'U';
+});
+c$.lower_f = Clazz.defineMethod (c$, "lower_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.lower = new com.stevesoft.pat.Bits (data);
+data[6] = String.fromCharCode (0xfffe);
+data[7] = String.fromCharCode (0x07ff);
+data[10] = String.fromCharCode (0x0400);
+data[11] = String.fromCharCode (0x0420);
+data[13] = String.fromCharCode (0x8000);
+data[14] = String.fromCharCode (0xffff);
+data[15] = String.fromCharCode (0xff7f);
+data[16] = String.fromCharCode (0xaaaa);
+data[17] = String.fromCharCode (0xaaaa);
+data[18] = String.fromCharCode (0xaaaa);
+data[19] = String.fromCharCode (0x55aa);
+data[20] = String.fromCharCode (0xab55);
+data[21] = String.fromCharCode (0xaaaa);
+data[22] = String.fromCharCode (0xaaaa);
+data[23] = String.fromCharCode (0xd4aa);
+data[24] = String.fromCharCode (0x3129);
+data[25] = String.fromCharCode (0x4e24);
+data[26] = String.fromCharCode (0x292a);
+data[27] = String.fromCharCode (0x2651);
+data[28] = String.fromCharCode (0x5240);
+data[29] = String.fromCharCode (0xb555);
+data[30] = String.fromCharCode (0xaaaa);
+data[31] = String.fromCharCode (0xa829);
+data[32] = String.fromCharCode (0xaaaa);
+data[33] = String.fromCharCode (0x00aa);
+data[37] = String.fromCharCode (0xffff);
+data[38] = String.fromCharCode (0xffff);
+data[39] = String.fromCharCode (0xffff);
+data[40] = String.fromCharCode (0xffff);
+data[41] = String.fromCharCode (0xffff);
+data[42] = String.fromCharCode (0x01ff);
+data[57] = String.fromCharCode (0x0001);
+data[58] = String.fromCharCode (0xf000);
+data[59] = String.fromCharCode (0xffff);
+data[60] = String.fromCharCode (0x7fff);
+data[61] = 'c';
+data[62] = String.fromCharCode (0xaaa8);
+data[63] = String.fromCharCode (0x0007);
+data[67] = String.fromCharCode (0xffff);
+data[68] = String.fromCharCode (0xffff);
+data[69] = String.fromCharCode (0xdffe);
+data[70] = String.fromCharCode (0xaaaa);
+data[71] = String.fromCharCode (0xaaaa);
+data[72] = String.fromCharCode (0x0002);
+data[73] = String.fromCharCode (0xaaaa);
+data[74] = String.fromCharCode (0xaaaa);
+data[75] = String.fromCharCode (0xaaaa);
+data[76] = String.fromCharCode (0x1114);
+data[77] = String.fromCharCode (0xaaaa);
+data[78] = String.fromCharCode (0x8aaa);
+data[79] = String.fromCharCode (0x022a);
+data[86] = String.fromCharCode (0xfffe);
+data[87] = String.fromCharCode (0xffff);
+data[88] = String.fromCharCode (0x00ff);
+data[269] = String.fromCharCode (0xffff);
+data[270] = String.fromCharCode (0xffff);
+data[271] = String.fromCharCode (0x007f);
+data[480] = String.fromCharCode (0xaaaa);
+data[481] = String.fromCharCode (0xaaaa);
+data[482] = String.fromCharCode (0xaaaa);
+data[483] = String.fromCharCode (0xaaaa);
+data[484] = String.fromCharCode (0xaaaa);
+data[485] = String.fromCharCode (0xaaaa);
+data[486] = String.fromCharCode (0xaaaa);
+data[487] = String.fromCharCode (0xaaaa);
+data[488] = String.fromCharCode (0xaaaa);
+data[489] = String.fromCharCode (0x0fea);
+data[490] = String.fromCharCode (0xaaaa);
+data[491] = String.fromCharCode (0xaaaa);
+data[492] = String.fromCharCode (0xaaaa);
+data[493] = String.fromCharCode (0xaaaa);
+data[494] = String.fromCharCode (0xaaaa);
+data[495] = String.fromCharCode (0x02aa);
+data[496] = String.fromCharCode (0x00ff);
+data[497] = String.fromCharCode (0x003f);
+data[498] = String.fromCharCode (0x00ff);
+data[499] = String.fromCharCode (0x00ff);
+data[500] = String.fromCharCode (0x003f);
+data[501] = String.fromCharCode (0x00ff);
+data[502] = String.fromCharCode (0x00ff);
+data[503] = String.fromCharCode (0x3fff);
+data[504] = String.fromCharCode (0x00ff);
+data[505] = String.fromCharCode (0x00ff);
+data[506] = String.fromCharCode (0x00ff);
+data[507] = String.fromCharCode (0x00df);
+data[508] = String.fromCharCode (0x00dc);
+data[509] = String.fromCharCode (0x00cf);
+data[510] = String.fromCharCode (0x00ff);
+data[511] = String.fromCharCode (0x00dc);
+data[519] = String.fromCharCode (0x8000);
+data[528] = String.fromCharCode (0xc400);
+data[529] = String.fromCharCode (0x0008);
+data[530] = String.fromCharCode (0xc000);
+data[531] = String.fromCharCode (0x0010);
+data[4016] = String.fromCharCode (0x007f);
+data[4017] = String.fromCharCode (0x00f8);
+data[4084] = String.fromCharCode (0xfffe);
+data[4085] = String.fromCharCode (0x07ff);
+data[4102] = String.fromCharCode (0xfffe);
+data[4103] = String.fromCharCode (0x07ff);
+data[4106] = String.fromCharCode (0x0400);
+data[4107] = String.fromCharCode (0x0420);
+data[4109] = String.fromCharCode (0x8000);
+data[4110] = String.fromCharCode (0xffff);
+data[4111] = String.fromCharCode (0xff7f);
+data[4112] = String.fromCharCode (0xaaaa);
+data[4113] = String.fromCharCode (0xaaaa);
+data[4114] = String.fromCharCode (0xaaaa);
+data[4115] = String.fromCharCode (0x55aa);
+data[4116] = String.fromCharCode (0xab55);
+data[4117] = String.fromCharCode (0xaaaa);
+data[4118] = String.fromCharCode (0xaaaa);
+data[4119] = String.fromCharCode (0xd4aa);
+data[4120] = String.fromCharCode (0x3129);
+data[4121] = String.fromCharCode (0x4e24);
+data[4122] = String.fromCharCode (0x292a);
+data[4123] = String.fromCharCode (0x2651);
+data[4124] = String.fromCharCode (0x5240);
+data[4125] = String.fromCharCode (0xb555);
+data[4126] = String.fromCharCode (0xaaaa);
+data[4127] = String.fromCharCode (0xa829);
+data[4128] = String.fromCharCode (0xaaaa);
+data[4129] = String.fromCharCode (0x00aa);
+data[4133] = String.fromCharCode (0xffff);
+data[4134] = String.fromCharCode (0xffff);
+data[4135] = String.fromCharCode (0xffff);
+data[4136] = String.fromCharCode (0xffff);
+data[4137] = String.fromCharCode (0xffff);
+data[4138] = String.fromCharCode (0x01ff);
+data[4153] = String.fromCharCode (0x0001);
+data[4154] = String.fromCharCode (0xf000);
+data[4155] = String.fromCharCode (0xffff);
+data[4156] = String.fromCharCode (0x7fff);
+data[4157] = 'c';
+data[4158] = String.fromCharCode (0x00a8);
+});
+c$.title_f = Clazz.defineMethod (c$, "title_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.title = new com.stevesoft.pat.Bits (data);
+data[6] = String.fromCharCode (0xfffe);
+data[7] = String.fromCharCode (0x07ff);
+data[10] = String.fromCharCode (0x0400);
+data[11] = String.fromCharCode (0x0420);
+data[13] = String.fromCharCode (0x8000);
+data[14] = String.fromCharCode (0xffff);
+data[15] = String.fromCharCode (0xff7f);
+data[16] = String.fromCharCode (0xaaaa);
+data[17] = String.fromCharCode (0xaaaa);
+data[18] = String.fromCharCode (0xaaaa);
+data[19] = String.fromCharCode (0x55aa);
+data[20] = String.fromCharCode (0xab55);
+data[21] = String.fromCharCode (0xaaaa);
+data[22] = String.fromCharCode (0xaaaa);
+data[23] = String.fromCharCode (0xd4aa);
+data[24] = String.fromCharCode (0x3129);
+data[25] = String.fromCharCode (0x4e24);
+data[26] = String.fromCharCode (0x292a);
+data[27] = String.fromCharCode (0x2651);
+data[28] = String.fromCharCode (0x5240);
+data[29] = String.fromCharCode (0xb555);
+data[30] = String.fromCharCode (0xaaaa);
+data[31] = String.fromCharCode (0xa829);
+data[32] = String.fromCharCode (0xaaaa);
+data[33] = String.fromCharCode (0x00aa);
+data[37] = String.fromCharCode (0xffff);
+data[38] = String.fromCharCode (0xffff);
+data[39] = String.fromCharCode (0xffff);
+data[40] = String.fromCharCode (0xffff);
+data[41] = String.fromCharCode (0xffff);
+data[42] = String.fromCharCode (0x01ff);
+data[57] = String.fromCharCode (0x0001);
+data[58] = String.fromCharCode (0xf000);
+data[59] = String.fromCharCode (0xffff);
+data[60] = String.fromCharCode (0x7fff);
+data[61] = 'c';
+data[62] = String.fromCharCode (0xaaa8);
+data[63] = String.fromCharCode (0x0007);
+data[67] = String.fromCharCode (0xffff);
+data[68] = String.fromCharCode (0xffff);
+data[69] = String.fromCharCode (0xdffe);
+data[70] = String.fromCharCode (0xaaaa);
+data[71] = String.fromCharCode (0xaaaa);
+data[72] = String.fromCharCode (0x0002);
+data[73] = String.fromCharCode (0xaaaa);
+data[74] = String.fromCharCode (0xaaaa);
+data[75] = String.fromCharCode (0xaaaa);
+data[76] = String.fromCharCode (0x1114);
+data[77] = String.fromCharCode (0xaaaa);
+data[78] = String.fromCharCode (0x8aaa);
+data[79] = String.fromCharCode (0x022a);
+data[86] = String.fromCharCode (0xfffe);
+data[87] = String.fromCharCode (0xffff);
+data[88] = String.fromCharCode (0x00ff);
+data[269] = String.fromCharCode (0xffff);
+data[270] = String.fromCharCode (0xffff);
+data[271] = String.fromCharCode (0x007f);
+data[480] = String.fromCharCode (0xaaaa);
+data[481] = String.fromCharCode (0xaaaa);
+data[482] = String.fromCharCode (0xaaaa);
+data[483] = String.fromCharCode (0xaaaa);
+data[484] = String.fromCharCode (0xaaaa);
+data[485] = String.fromCharCode (0xaaaa);
+data[486] = String.fromCharCode (0xaaaa);
+data[487] = String.fromCharCode (0xaaaa);
+data[488] = String.fromCharCode (0xaaaa);
+data[489] = String.fromCharCode (0x0fea);
+data[490] = String.fromCharCode (0xaaaa);
+data[491] = String.fromCharCode (0xaaaa);
+data[492] = String.fromCharCode (0xaaaa);
+data[493] = String.fromCharCode (0xaaaa);
+data[494] = String.fromCharCode (0xaaaa);
+data[495] = String.fromCharCode (0x02aa);
+data[496] = String.fromCharCode (0x00ff);
+data[497] = String.fromCharCode (0x003f);
+data[498] = String.fromCharCode (0x00ff);
+data[499] = String.fromCharCode (0x00ff);
+data[500] = String.fromCharCode (0x003f);
+data[501] = String.fromCharCode (0x00ff);
+data[502] = String.fromCharCode (0x00ff);
+data[503] = String.fromCharCode (0x3fff);
+data[504] = String.fromCharCode (0x00ff);
+data[505] = String.fromCharCode (0x00ff);
+data[506] = String.fromCharCode (0x00ff);
+data[507] = String.fromCharCode (0x00df);
+data[508] = String.fromCharCode (0x00dc);
+data[509] = String.fromCharCode (0x00cf);
+data[510] = String.fromCharCode (0x00ff);
+data[511] = String.fromCharCode (0x00dc);
+data[519] = String.fromCharCode (0x8000);
+data[528] = String.fromCharCode (0xc400);
+data[529] = String.fromCharCode (0x0008);
+data[530] = String.fromCharCode (0xc000);
+data[531] = String.fromCharCode (0x0010);
+data[4016] = String.fromCharCode (0x007f);
+data[4017] = String.fromCharCode (0x00f8);
+data[4084] = String.fromCharCode (0xfffe);
+data[4085] = String.fromCharCode (0x07ff);
+data[4102] = String.fromCharCode (0xfffe);
+data[4103] = String.fromCharCode (0x07ff);
+data[4106] = String.fromCharCode (0x0400);
+data[4107] = String.fromCharCode (0x0420);
+data[4109] = String.fromCharCode (0x8000);
+data[4110] = String.fromCharCode (0xffff);
+data[4111] = String.fromCharCode (0xff7f);
+data[4112] = String.fromCharCode (0xaaaa);
+data[4113] = String.fromCharCode (0xaaaa);
+data[4114] = String.fromCharCode (0xaaaa);
+data[4115] = String.fromCharCode (0x55aa);
+data[4116] = String.fromCharCode (0xab55);
+data[4117] = String.fromCharCode (0xaaaa);
+data[4118] = String.fromCharCode (0xaaaa);
+data[4119] = String.fromCharCode (0xd4aa);
+data[4120] = String.fromCharCode (0x3129);
+data[4121] = String.fromCharCode (0x4e24);
+data[4122] = String.fromCharCode (0x292a);
+data[4123] = String.fromCharCode (0x2651);
+data[4124] = String.fromCharCode (0x5240);
+data[4125] = String.fromCharCode (0xb555);
+data[4126] = String.fromCharCode (0xaaaa);
+data[4127] = String.fromCharCode (0xa829);
+data[4128] = String.fromCharCode (0xaaaa);
+data[4129] = String.fromCharCode (0x00aa);
+data[4133] = String.fromCharCode (0xffff);
+data[4134] = String.fromCharCode (0xffff);
+data[4135] = String.fromCharCode (0xffff);
+data[4136] = String.fromCharCode (0xffff);
+data[4137] = String.fromCharCode (0xffff);
+data[4138] = String.fromCharCode (0x01ff);
+data[4153] = String.fromCharCode (0x0001);
+data[4154] = String.fromCharCode (0xf000);
+data[4155] = String.fromCharCode (0xffff);
+data[4156] = String.fromCharCode (0x7fff);
+data[4157] = 'c';
+data[4158] = String.fromCharCode (0x00a8);
+});
+c$.currency_f = Clazz.defineMethod (c$, "currency_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.currency = new com.stevesoft.pat.Bits (data);
+data[2] = String.fromCharCode (0x0010);
+data[10] = String.fromCharCode (0x003c);
+data[159] = String.fromCharCode (0x000c);
+data[227] = String.fromCharCode (0x8000);
+data[522] = String.fromCharCode (0x1fff);
+data[4070] = String.fromCharCode (0x0200);
+data[4080] = String.fromCharCode (0x0010);
+data[4094] = 'c';
+data[4098] = String.fromCharCode (0x0010);
+data[4106] = String.fromCharCode (0x003c);
+});
+c$.decimal_digit_f = Clazz.defineMethod (c$, "decimal_digit_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.decimal_digit = new com.stevesoft.pat.Bits (data);
+data[3] = String.fromCharCode (0x03ff);
+data[102] = String.fromCharCode (0x03ff);
+data[111] = String.fromCharCode (0x03ff);
+data[150] = String.fromCharCode (0xffc0);
+data[158] = String.fromCharCode (0xffc0);
+data[166] = String.fromCharCode (0xffc0);
+data[174] = String.fromCharCode (0xffc0);
+data[182] = String.fromCharCode (0xffc0);
+data[190] = String.fromCharCode (0xff80);
+data[198] = String.fromCharCode (0xffc0);
+data[206] = String.fromCharCode (0xffc0);
+data[214] = String.fromCharCode (0xffc0);
+data[229] = String.fromCharCode (0x03ff);
+data[237] = String.fromCharCode (0x03ff);
+data[242] = String.fromCharCode (0x03ff);
+data[4081] = String.fromCharCode (0x03ff);
+data[4099] = String.fromCharCode (0x03ff);
+});
+c$.math_f = Clazz.defineMethod (c$, "math_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.math = new com.stevesoft.pat.Bits (data);
+data[2] = String.fromCharCode (0x0800);
+data[3] = String.fromCharCode (0x7000);
+data[7] = String.fromCharCode (0x5000);
+data[10] = String.fromCharCode (0x1000);
+data[11] = String.fromCharCode (0x0002);
+data[13] = String.fromCharCode (0x0080);
+data[15] = String.fromCharCode (0x0080);
+data[516] = String.fromCharCode (0x0010);
+data[519] = String.fromCharCode (0x1c00);
+data[520] = String.fromCharCode (0x1c00);
+data[537] = String.fromCharCode (0x001f);
+data[541] = String.fromCharCode (0x0014);
+data[544] = String.fromCharCode (0xffff);
+data[545] = String.fromCharCode (0xffff);
+data[546] = String.fromCharCode (0xffff);
+data[547] = String.fromCharCode (0xffff);
+data[548] = String.fromCharCode (0xffff);
+data[549] = String.fromCharCode (0xffff);
+data[550] = String.fromCharCode (0xffff);
+data[551] = String.fromCharCode (0xffff);
+data[552] = String.fromCharCode (0xffff);
+data[553] = String.fromCharCode (0xffff);
+data[554] = String.fromCharCode (0xffff);
+data[555] = String.fromCharCode (0xffff);
+data[556] = String.fromCharCode (0xffff);
+data[557] = String.fromCharCode (0xffff);
+data[558] = String.fromCharCode (0xffff);
+data[559] = String.fromCharCode (0x0003);
+data[560] = String.fromCharCode (0x0f00);
+data[562] = String.fromCharCode (0x0003);
+data[4018] = String.fromCharCode (0x0200);
+data[4070] = 't';
+data[4080] = String.fromCharCode (0x0800);
+data[4081] = String.fromCharCode (0x7000);
+data[4085] = String.fromCharCode (0x5000);
+data[4094] = String.fromCharCode (0x1f04);
+data[4098] = String.fromCharCode (0x0800);
+data[4099] = String.fromCharCode (0x7000);
+data[4103] = String.fromCharCode (0x5000);
+data[4106] = String.fromCharCode (0x1000);
+data[4107] = String.fromCharCode (0x0002);
+data[4109] = String.fromCharCode (0x0080);
+data[4111] = String.fromCharCode (0x0080);
+});
+c$.letter_f = Clazz.defineMethod (c$, "letter_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.letter = new com.stevesoft.pat.Bits (data);
+data[4] = String.fromCharCode (0xfffe);
+data[5] = String.fromCharCode (0x07ff);
+data[6] = String.fromCharCode (0xfffe);
+data[7] = String.fromCharCode (0x07ff);
+data[10] = String.fromCharCode (0x0400);
+data[11] = String.fromCharCode (0x0420);
+data[12] = String.fromCharCode (0xffff);
+data[13] = String.fromCharCode (0xff7f);
+data[14] = String.fromCharCode (0xffff);
+data[15] = String.fromCharCode (0xff7f);
+data[16] = String.fromCharCode (0xffff);
+data[17] = String.fromCharCode (0xffff);
+data[18] = String.fromCharCode (0xffff);
+data[19] = String.fromCharCode (0xffff);
+data[20] = String.fromCharCode (0xffff);
+data[21] = String.fromCharCode (0xffff);
+data[22] = String.fromCharCode (0xffff);
+data[23] = String.fromCharCode (0xffff);
+data[24] = String.fromCharCode (0xffff);
+data[25] = String.fromCharCode (0xffff);
+data[26] = String.fromCharCode (0xffff);
+data[27] = String.fromCharCode (0xffff);
+data[28] = String.fromCharCode (0xffff);
+data[29] = String.fromCharCode (0xffff);
+data[30] = String.fromCharCode (0xffff);
+data[31] = String.fromCharCode (0xfc3f);
+data[32] = String.fromCharCode (0xffff);
+data[33] = String.fromCharCode (0x00ff);
+data[37] = String.fromCharCode (0xffff);
+data[38] = String.fromCharCode (0xffff);
+data[39] = String.fromCharCode (0xffff);
+data[40] = String.fromCharCode (0xffff);
+data[41] = String.fromCharCode (0xffff);
+data[42] = String.fromCharCode (0x01ff);
+data[43] = String.fromCharCode (0xf9ff);
+data[44] = String.fromCharCode (0x0003);
+data[45] = String.fromCharCode (0x0003);
+data[46] = String.fromCharCode (0x001f);
+data[55] = String.fromCharCode (0x0400);
+data[56] = String.fromCharCode (0xd740);
+data[57] = String.fromCharCode (0xffff);
+data[58] = String.fromCharCode (0xfffb);
+data[59] = String.fromCharCode (0xffff);
+data[60] = String.fromCharCode (0x7fff);
+data[61] = String.fromCharCode (0x547f);
+data[62] = String.fromCharCode (0xfffd);
+data[63] = String.fromCharCode (0x000f);
+data[64] = String.fromCharCode (0xdffe);
+data[65] = String.fromCharCode (0xffff);
+data[66] = String.fromCharCode (0xffff);
+data[67] = String.fromCharCode (0xffff);
+data[68] = String.fromCharCode (0xffff);
+data[69] = String.fromCharCode (0xdffe);
+data[70] = String.fromCharCode (0xffff);
+data[71] = String.fromCharCode (0xffff);
+data[72] = String.fromCharCode (0x0003);
+data[73] = String.fromCharCode (0xffff);
+data[74] = String.fromCharCode (0xffff);
+data[75] = String.fromCharCode (0xffff);
+data[76] = String.fromCharCode (0x199f);
+data[77] = String.fromCharCode (0xffff);
+data[78] = String.fromCharCode (0xcfff);
+data[79] = String.fromCharCode (0x033f);
+data[83] = String.fromCharCode (0xfffe);
+data[84] = String.fromCharCode (0xffff);
+data[85] = String.fromCharCode (0x027f);
+data[86] = String.fromCharCode (0xfffe);
+data[87] = String.fromCharCode (0xffff);
+data[88] = String.fromCharCode (0x00ff);
+data[93] = String.fromCharCode (0xffff);
+data[94] = String.fromCharCode (0x07ff);
+data[95] = String.fromCharCode (0x0007);
+data[98] = String.fromCharCode (0xfffe);
+data[99] = String.fromCharCode (0x07ff);
+data[100] = String.fromCharCode (0x07ff);
+data[103] = String.fromCharCode (0xfffe);
+data[104] = String.fromCharCode (0xffff);
+data[105] = String.fromCharCode (0xffff);
+data[106] = String.fromCharCode (0xffff);
+data[107] = String.fromCharCode (0x7cff);
+data[108] = String.fromCharCode (0x7fff);
+data[109] = String.fromCharCode (0x002f);
+data[110] = String.fromCharCode (0x0060);
+data[144] = String.fromCharCode (0xffe0);
+data[145] = String.fromCharCode (0xffff);
+data[146] = String.fromCharCode (0xffff);
+data[147] = String.fromCharCode (0x23ff);
+data[149] = String.fromCharCode (0xff00);
+data[150] = String.fromCharCode (0x0003);
+data[152] = String.fromCharCode (0x9fe0);
+data[153] = String.fromCharCode (0xfff9);
+data[154] = String.fromCharCode (0xfdff);
+data[155] = String.fromCharCode (0x03c5);
+data[157] = String.fromCharCode (0xb000);
+data[158] = String.fromCharCode (0x0003);
+data[159] = String.fromCharCode (0x0003);
+data[160] = String.fromCharCode (0x87e0);
+data[161] = String.fromCharCode (0xfff9);
+data[162] = String.fromCharCode (0xfdff);
+data[163] = String.fromCharCode (0x036d);
+data[165] = String.fromCharCode (0x5e00);
+data[167] = String.fromCharCode (0x001c);
+data[168] = String.fromCharCode (0xafe0);
+data[169] = String.fromCharCode (0xfffb);
+data[170] = String.fromCharCode (0xfdff);
+data[171] = String.fromCharCode (0x23ed);
+data[174] = String.fromCharCode (0x0001);
+data[176] = String.fromCharCode (0x9fe0);
+data[177] = String.fromCharCode (0xfff9);
+data[178] = String.fromCharCode (0xfdff);
+data[179] = String.fromCharCode (0x23cd);
+data[181] = String.fromCharCode (0xb000);
+data[182] = String.fromCharCode (0x0003);
+data[184] = String.fromCharCode (0xc7e0);
+data[185] = String.fromCharCode (0xd63d);
+data[186] = String.fromCharCode (0xc718);
+data[187] = String.fromCharCode (0x03bf);
+data[192] = String.fromCharCode (0xdfe0);
+data[193] = String.fromCharCode (0xfffd);
+data[194] = String.fromCharCode (0xfdff);
+data[195] = String.fromCharCode (0x03ef);
+data[198] = String.fromCharCode (0x0003);
+data[200] = String.fromCharCode (0xdfe0);
+data[201] = String.fromCharCode (0xfffd);
+data[202] = String.fromCharCode (0xfdff);
+data[203] = String.fromCharCode (0x03ef);
+data[205] = String.fromCharCode (0x4000);
+data[206] = String.fromCharCode (0x0003);
+data[208] = String.fromCharCode (0xdfe0);
+data[209] = String.fromCharCode (0xfffd);
+data[210] = String.fromCharCode (0xfdff);
+data[211] = String.fromCharCode (0x03ff);
+data[214] = String.fromCharCode (0x0003);
+data[224] = String.fromCharCode (0xfffe);
+data[225] = String.fromCharCode (0xffff);
+data[226] = String.fromCharCode (0x7fff);
+data[227] = String.fromCharCode (0x000d);
+data[228] = String.fromCharCode (0x007f);
+data[232] = String.fromCharCode (0x2596);
+data[233] = String.fromCharCode (0xfef0);
+data[234] = String.fromCharCode (0x6cae);
+data[235] = String.fromCharCode (0x200d);
+data[236] = String.fromCharCode (0x005f);
+data[237] = String.fromCharCode (0x3000);
+data[244] = String.fromCharCode (0xfeff);
+data[245] = String.fromCharCode (0xffff);
+data[246] = String.fromCharCode (0x03ff);
+data[266] = String.fromCharCode (0xffff);
+data[267] = String.fromCharCode (0xffff);
+data[268] = String.fromCharCode (0x003f);
+data[269] = String.fromCharCode (0xffff);
+data[270] = String.fromCharCode (0xffff);
+data[271] = String.fromCharCode (0x007f);
+data[272] = String.fromCharCode (0xffff);
+data[273] = String.fromCharCode (0xffff);
+data[274] = String.fromCharCode (0xffff);
+data[275] = String.fromCharCode (0xffff);
+data[276] = String.fromCharCode (0xffff);
+data[277] = String.fromCharCode (0x83ff);
+data[278] = String.fromCharCode (0xffff);
+data[279] = String.fromCharCode (0xffff);
+data[280] = String.fromCharCode (0xffff);
+data[281] = String.fromCharCode (0xffff);
+data[282] = String.fromCharCode (0xff07);
+data[283] = String.fromCharCode (0xffff);
+data[284] = String.fromCharCode (0xffff);
+data[285] = String.fromCharCode (0xffff);
+data[286] = String.fromCharCode (0xffff);
+data[287] = String.fromCharCode (0x03ff);
+data[480] = String.fromCharCode (0xffff);
+data[481] = String.fromCharCode (0xffff);
+data[482] = String.fromCharCode (0xffff);
+data[483] = String.fromCharCode (0xffff);
+data[484] = String.fromCharCode (0xffff);
+data[485] = String.fromCharCode (0xffff);
+data[486] = String.fromCharCode (0xffff);
+data[487] = String.fromCharCode (0xffff);
+data[488] = String.fromCharCode (0xffff);
+data[489] = String.fromCharCode (0x0fff);
+data[490] = String.fromCharCode (0xffff);
+data[491] = String.fromCharCode (0xffff);
+data[492] = String.fromCharCode (0xffff);
+data[493] = String.fromCharCode (0xffff);
+data[494] = String.fromCharCode (0xffff);
+data[495] = String.fromCharCode (0x03ff);
+data[496] = String.fromCharCode (0xffff);
+data[497] = String.fromCharCode (0x3f3f);
+data[498] = String.fromCharCode (0xffff);
+data[499] = String.fromCharCode (0xffff);
+data[500] = String.fromCharCode (0x3f3f);
+data[501] = String.fromCharCode (0xaaff);
+data[502] = String.fromCharCode (0xffff);
+data[503] = String.fromCharCode (0x3fff);
+data[504] = String.fromCharCode (0xffff);
+data[505] = String.fromCharCode (0xffff);
+data[506] = String.fromCharCode (0xffff);
+data[507] = String.fromCharCode (0x5fdf);
+data[508] = String.fromCharCode (0x1fdc);
+data[509] = String.fromCharCode (0x0fcf);
+data[510] = String.fromCharCode (0x1fff);
+data[511] = String.fromCharCode (0x1fdc);
+data[519] = String.fromCharCode (0x8000);
+data[528] = String.fromCharCode (0xfc84);
+data[529] = String.fromCharCode (0x3f2f);
+data[530] = String.fromCharCode (0xfd50);
+data[531] = String.fromCharCode (0x01fb);
+data[768] = String.fromCharCode (0x0020);
+data[771] = String.fromCharCode (0x003e);
+data[772] = String.fromCharCode (0xfffe);
+data[773] = String.fromCharCode (0xffff);
+data[774] = String.fromCharCode (0xffff);
+data[775] = String.fromCharCode (0xffff);
+data[776] = String.fromCharCode (0xffff);
+data[777] = String.fromCharCode (0x781f);
+data[778] = String.fromCharCode (0xfffe);
+data[779] = String.fromCharCode (0xffff);
+data[780] = String.fromCharCode (0xffff);
+data[781] = String.fromCharCode (0xffff);
+data[782] = String.fromCharCode (0xffff);
+data[783] = String.fromCharCode (0x77ff);
+data[784] = String.fromCharCode (0xffe0);
+data[785] = String.fromCharCode (0xffff);
+data[786] = String.fromCharCode (0x1fff);
+data[787] = String.fromCharCode (0xfffe);
+data[788] = String.fromCharCode (0xffff);
+data[789] = String.fromCharCode (0xffff);
+data[790] = String.fromCharCode (0xffff);
+data[791] = String.fromCharCode (0xffff);
+data[792] = String.fromCharCode (0x7fff);
+data[1248] = String.fromCharCode (0xffff);
+data[1249] = String.fromCharCode (0xffff);
+data[1250] = String.fromCharCode (0xffff);
+data[1251] = String.fromCharCode (0xffff);
+data[1252] = String.fromCharCode (0xffff);
+data[1253] = String.fromCharCode (0xffff);
+data[1254] = String.fromCharCode (0xffff);
+data[1255] = String.fromCharCode (0xffff);
+data[1256] = String.fromCharCode (0xffff);
+data[1257] = String.fromCharCode (0xffff);
+data[1258] = String.fromCharCode (0xffff);
+data[1259] = String.fromCharCode (0xffff);
+data[1260] = String.fromCharCode (0xffff);
+data[1261] = String.fromCharCode (0xffff);
+data[1262] = String.fromCharCode (0xffff);
+data[1263] = String.fromCharCode (0xffff);
+data[1264] = String.fromCharCode (0xffff);
+data[1265] = String.fromCharCode (0xffff);
+data[1266] = String.fromCharCode (0xffff);
+data[1267] = String.fromCharCode (0xffff);
+data[1268] = String.fromCharCode (0xffff);
+data[1269] = String.fromCharCode (0xffff);
+data[1270] = String.fromCharCode (0xffff);
+data[1271] = String.fromCharCode (0xffff);
+data[1272] = String.fromCharCode (0xffff);
+data[1273] = String.fromCharCode (0xffff);
+data[1274] = String.fromCharCode (0xffff);
+data[1275] = String.fromCharCode (0xffff);
+data[1276] = String.fromCharCode (0xffff);
+data[1277] = String.fromCharCode (0xffff);
+data[1278] = String.fromCharCode (0xffff);
+data[1279] = String.fromCharCode (0xffff);
+data[1280] = String.fromCharCode (0xffff);
+data[1281] = String.fromCharCode (0xffff);
+data[1282] = String.fromCharCode (0xffff);
+data[1283] = String.fromCharCode (0xffff);
+data[1284] = String.fromCharCode (0xffff);
+data[1285] = String.fromCharCode (0xffff);
+data[1286] = String.fromCharCode (0xffff);
+data[1287] = String.fromCharCode (0xffff);
+data[1288] = String.fromCharCode (0xffff);
+data[1289] = String.fromCharCode (0xffff);
+data[1290] = String.fromCharCode (0xffff);
+data[1291] = String.fromCharCode (0xffff);
+data[1292] = String.fromCharCode (0xffff);
+data[1293] = String.fromCharCode (0xffff);
+data[1294] = String.fromCharCode (0xffff);
+data[1295] = String.fromCharCode (0xffff);
+data[1296] = String.fromCharCode (0xffff);
+data[1297] = String.fromCharCode (0xffff);
+data[1298] = String.fromCharCode (0xffff);
+data[1299] = String.fromCharCode (0xffff);
+data[1300] = String.fromCharCode (0xffff);
+data[1301] = String.fromCharCode (0xffff);
+data[1302] = String.fromCharCode (0xffff);
+data[1303] = String.fromCharCode (0xffff);
+data[1304] = String.fromCharCode (0xffff);
+data[1305] = String.fromCharCode (0xffff);
+data[1306] = String.fromCharCode (0xffff);
+data[1307] = String.fromCharCode (0xffff);
+data[1308] = String.fromCharCode (0xffff);
+data[1309] = String.fromCharCode (0xffff);
+data[1310] = String.fromCharCode (0xffff);
+data[1311] = String.fromCharCode (0xffff);
+data[1312] = String.fromCharCode (0xffff);
+data[1313] = String.fromCharCode (0xffff);
+data[1314] = String.fromCharCode (0xffff);
+data[1315] = String.fromCharCode (0xffff);
+data[1316] = String.fromCharCode (0xffff);
+data[1317] = String.fromCharCode (0xffff);
+data[1318] = String.fromCharCode (0xffff);
+data[1319] = String.fromCharCode (0xffff);
+data[1320] = String.fromCharCode (0xffff);
+data[1321] = String.fromCharCode (0xffff);
+data[1322] = String.fromCharCode (0xffff);
+data[1323] = String.fromCharCode (0xffff);
+data[1324] = String.fromCharCode (0xffff);
+data[1325] = String.fromCharCode (0xffff);
+data[1326] = String.fromCharCode (0xffff);
+data[1327] = String.fromCharCode (0xffff);
+data[1328] = String.fromCharCode (0xffff);
+data[1329] = String.fromCharCode (0xffff);
+data[1330] = String.fromCharCode (0xffff);
+data[1331] = String.fromCharCode (0xffff);
+data[1332] = String.fromCharCode (0xffff);
+data[1333] = String.fromCharCode (0xffff);
+data[1334] = String.fromCharCode (0xffff);
+data[1335] = String.fromCharCode (0xffff);
+data[1336] = String.fromCharCode (0xffff);
+data[1337] = String.fromCharCode (0xffff);
+data[1338] = String.fromCharCode (0xffff);
+data[1339] = String.fromCharCode (0xffff);
+data[1340] = String.fromCharCode (0xffff);
+data[1341] = String.fromCharCode (0xffff);
+data[1342] = String.fromCharCode (0xffff);
+data[1343] = String.fromCharCode (0xffff);
+data[1344] = String.fromCharCode (0xffff);
+data[1345] = String.fromCharCode (0xffff);
+data[1346] = String.fromCharCode (0xffff);
+data[1347] = String.fromCharCode (0xffff);
+data[1348] = String.fromCharCode (0xffff);
+data[1349] = String.fromCharCode (0xffff);
+data[1350] = String.fromCharCode (0xffff);
+data[1351] = String.fromCharCode (0xffff);
+data[1352] = String.fromCharCode (0xffff);
+data[1353] = String.fromCharCode (0xffff);
+data[1354] = String.fromCharCode (0xffff);
+data[1355] = String.fromCharCode (0xffff);
+data[1356] = String.fromCharCode (0xffff);
+data[1357] = String.fromCharCode (0xffff);
+data[1358] = String.fromCharCode (0xffff);
+data[1359] = String.fromCharCode (0xffff);
+data[1360] = String.fromCharCode (0xffff);
+data[1361] = String.fromCharCode (0xffff);
+data[1362] = String.fromCharCode (0xffff);
+data[1363] = String.fromCharCode (0xffff);
+data[1364] = String.fromCharCode (0xffff);
+data[1365] = String.fromCharCode (0xffff);
+data[1366] = String.fromCharCode (0xffff);
+data[1367] = String.fromCharCode (0xffff);
+data[1368] = String.fromCharCode (0xffff);
+data[1369] = String.fromCharCode (0xffff);
+data[1370] = String.fromCharCode (0xffff);
+data[1371] = String.fromCharCode (0xffff);
+data[1372] = String.fromCharCode (0xffff);
+data[1373] = String.fromCharCode (0xffff);
+data[1374] = String.fromCharCode (0xffff);
+data[1375] = String.fromCharCode (0xffff);
+data[1376] = String.fromCharCode (0xffff);
+data[1377] = String.fromCharCode (0xffff);
+data[1378] = String.fromCharCode (0xffff);
+data[1379] = String.fromCharCode (0xffff);
+data[1380] = String.fromCharCode (0xffff);
+data[1381] = String.fromCharCode (0xffff);
+data[1382] = String.fromCharCode (0xffff);
+data[1383] = String.fromCharCode (0xffff);
+data[1384] = String.fromCharCode (0xffff);
+data[1385] = String.fromCharCode (0xffff);
+data[1386] = String.fromCharCode (0xffff);
+data[1387] = String.fromCharCode (0xffff);
+data[1388] = String.fromCharCode (0xffff);
+data[1389] = String.fromCharCode (0xffff);
+data[1390] = String.fromCharCode (0xffff);
+data[1391] = String.fromCharCode (0xffff);
+data[1392] = String.fromCharCode (0xffff);
+data[1393] = String.fromCharCode (0xffff);
+data[1394] = String.fromCharCode (0xffff);
+data[1395] = String.fromCharCode (0xffff);
+data[1396] = String.fromCharCode (0xffff);
+data[1397] = String.fromCharCode (0xffff);
+data[1398] = String.fromCharCode (0xffff);
+data[1399] = String.fromCharCode (0xffff);
+data[1400] = String.fromCharCode (0xffff);
+data[1401] = String.fromCharCode (0xffff);
+data[1402] = String.fromCharCode (0xffff);
+data[1403] = String.fromCharCode (0xffff);
+data[1404] = String.fromCharCode (0xffff);
+data[1405] = String.fromCharCode (0xffff);
+data[1406] = String.fromCharCode (0xffff);
+data[1407] = String.fromCharCode (0xffff);
+data[1408] = String.fromCharCode (0xffff);
+data[1409] = String.fromCharCode (0xffff);
+data[1410] = String.fromCharCode (0xffff);
+data[1411] = String.fromCharCode (0xffff);
+data[1412] = String.fromCharCode (0xffff);
+data[1413] = String.fromCharCode (0xffff);
+data[1414] = String.fromCharCode (0xffff);
+data[1415] = String.fromCharCode (0xffff);
+data[1416] = String.fromCharCode (0xffff);
+data[1417] = String.fromCharCode (0xffff);
+data[1418] = String.fromCharCode (0xffff);
+data[1419] = String.fromCharCode (0xffff);
+data[1420] = String.fromCharCode (0xffff);
+data[1421] = String.fromCharCode (0xffff);
+data[1422] = String.fromCharCode (0xffff);
+data[1423] = String.fromCharCode (0xffff);
+data[1424] = String.fromCharCode (0xffff);
+data[1425] = String.fromCharCode (0xffff);
+data[1426] = String.fromCharCode (0xffff);
+data[1427] = String.fromCharCode (0xffff);
+data[1428] = String.fromCharCode (0xffff);
+data[1429] = String.fromCharCode (0xffff);
+data[1430] = String.fromCharCode (0xffff);
+data[1431] = String.fromCharCode (0xffff);
+data[1432] = String.fromCharCode (0xffff);
+data[1433] = String.fromCharCode (0xffff);
+data[1434] = String.fromCharCode (0xffff);
+data[1435] = String.fromCharCode (0xffff);
+data[1436] = String.fromCharCode (0xffff);
+data[1437] = String.fromCharCode (0xffff);
+data[1438] = String.fromCharCode (0xffff);
+data[1439] = String.fromCharCode (0xffff);
+data[1440] = String.fromCharCode (0xffff);
+data[1441] = String.fromCharCode (0xffff);
+data[1442] = String.fromCharCode (0xffff);
+data[1443] = String.fromCharCode (0xffff);
+data[1444] = String.fromCharCode (0xffff);
+data[1445] = String.fromCharCode (0xffff);
+data[1446] = String.fromCharCode (0xffff);
+data[1447] = String.fromCharCode (0xffff);
+data[1448] = String.fromCharCode (0xffff);
+data[1449] = String.fromCharCode (0xffff);
+data[1450] = String.fromCharCode (0xffff);
+data[1451] = String.fromCharCode (0xffff);
+data[1452] = String.fromCharCode (0xffff);
+data[1453] = String.fromCharCode (0xffff);
+data[1454] = String.fromCharCode (0xffff);
+data[1455] = String.fromCharCode (0xffff);
+data[1456] = String.fromCharCode (0xffff);
+data[1457] = String.fromCharCode (0xffff);
+data[1458] = String.fromCharCode (0xffff);
+data[1459] = String.fromCharCode (0xffff);
+data[1460] = String.fromCharCode (0xffff);
+data[1461] = String.fromCharCode (0xffff);
+data[1462] = String.fromCharCode (0xffff);
+data[1463] = String.fromCharCode (0xffff);
+data[1464] = String.fromCharCode (0xffff);
+data[1465] = String.fromCharCode (0xffff);
+data[1466] = String.fromCharCode (0xffff);
+data[1467] = String.fromCharCode (0xffff);
+data[1468] = String.fromCharCode (0xffff);
+data[1469] = String.fromCharCode (0xffff);
+data[1470] = String.fromCharCode (0xffff);
+data[1471] = String.fromCharCode (0xffff);
+data[1472] = String.fromCharCode (0xffff);
+data[1473] = String.fromCharCode (0xffff);
+data[1474] = String.fromCharCode (0xffff);
+data[1475] = String.fromCharCode (0xffff);
+data[1476] = String.fromCharCode (0xffff);
+data[1477] = String.fromCharCode (0xffff);
+data[1478] = String.fromCharCode (0xffff);
+data[1479] = String.fromCharCode (0xffff);
+data[1480] = String.fromCharCode (0xffff);
+data[1481] = String.fromCharCode (0xffff);
+data[1482] = String.fromCharCode (0xffff);
+data[1483] = String.fromCharCode (0xffff);
+data[1484] = String.fromCharCode (0xffff);
+data[1485] = String.fromCharCode (0xffff);
+data[1486] = String.fromCharCode (0xffff);
+data[1487] = String.fromCharCode (0xffff);
+data[1488] = String.fromCharCode (0xffff);
+data[1489] = String.fromCharCode (0xffff);
+data[1490] = String.fromCharCode (0xffff);
+data[1491] = String.fromCharCode (0xffff);
+data[1492] = String.fromCharCode (0xffff);
+data[1493] = String.fromCharCode (0xffff);
+data[1494] = String.fromCharCode (0xffff);
+data[1495] = String.fromCharCode (0xffff);
+data[1496] = String.fromCharCode (0xffff);
+data[1497] = String.fromCharCode (0xffff);
+data[1498] = String.fromCharCode (0xffff);
+data[1499] = String.fromCharCode (0xffff);
+data[1500] = String.fromCharCode (0xffff);
+data[1501] = String.fromCharCode (0xffff);
+data[1502] = String.fromCharCode (0xffff);
+data[1503] = String.fromCharCode (0xffff);
+data[1504] = String.fromCharCode (0xffff);
+data[1505] = String.fromCharCode (0xffff);
+data[1506] = String.fromCharCode (0xffff);
+data[1507] = String.fromCharCode (0xffff);
+data[1508] = String.fromCharCode (0xffff);
+data[1509] = String.fromCharCode (0xffff);
+data[1510] = String.fromCharCode (0xffff);
+data[1511] = String.fromCharCode (0xffff);
+data[1512] = String.fromCharCode (0xffff);
+data[1513] = String.fromCharCode (0xffff);
+data[1514] = String.fromCharCode (0xffff);
+data[1515] = String.fromCharCode (0xffff);
+data[1516] = String.fromCharCode (0xffff);
+data[1517] = String.fromCharCode (0xffff);
+data[1518] = String.fromCharCode (0xffff);
+data[1519] = String.fromCharCode (0xffff);
+data[1520] = String.fromCharCode (0xffff);
+data[1521] = String.fromCharCode (0xffff);
+data[1522] = String.fromCharCode (0xffff);
+data[1523] = String.fromCharCode (0xffff);
+data[1524] = String.fromCharCode (0xffff);
+data[1525] = String.fromCharCode (0xffff);
+data[1526] = String.fromCharCode (0xffff);
+data[1527] = String.fromCharCode (0xffff);
+data[1528] = String.fromCharCode (0xffff);
+data[1529] = String.fromCharCode (0xffff);
+data[1530] = String.fromCharCode (0xffff);
+data[1531] = String.fromCharCode (0xffff);
+data[1532] = String.fromCharCode (0xffff);
+data[1533] = String.fromCharCode (0xffff);
+data[1534] = String.fromCharCode (0xffff);
+data[1535] = String.fromCharCode (0xffff);
+data[1536] = String.fromCharCode (0xffff);
+data[1537] = String.fromCharCode (0xffff);
+data[1538] = String.fromCharCode (0xffff);
+data[1539] = String.fromCharCode (0xffff);
+data[1540] = String.fromCharCode (0xffff);
+data[1541] = String.fromCharCode (0xffff);
+data[1542] = String.fromCharCode (0xffff);
+data[1543] = String.fromCharCode (0xffff);
+data[1544] = String.fromCharCode (0xffff);
+data[1545] = String.fromCharCode (0xffff);
+data[1546] = String.fromCharCode (0xffff);
+data[1547] = String.fromCharCode (0xffff);
+data[1548] = String.fromCharCode (0xffff);
+data[1549] = String.fromCharCode (0xffff);
+data[1550] = String.fromCharCode (0xffff);
+data[1551] = String.fromCharCode (0xffff);
+data[1552] = String.fromCharCode (0xffff);
+data[1553] = String.fromCharCode (0xffff);
+data[1554] = String.fromCharCode (0xffff);
+data[1555] = String.fromCharCode (0xffff);
+data[1556] = String.fromCharCode (0xffff);
+data[1557] = String.fromCharCode (0xffff);
+data[1558] = String.fromCharCode (0xffff);
+data[1559] = String.fromCharCode (0xffff);
+data[1560] = String.fromCharCode (0xffff);
+data[1561] = String.fromCharCode (0xffff);
+data[1562] = String.fromCharCode (0xffff);
+data[1563] = String.fromCharCode (0xffff);
+data[1564] = String.fromCharCode (0xffff);
+data[1565] = String.fromCharCode (0xffff);
+data[1566] = String.fromCharCode (0xffff);
+data[1567] = String.fromCharCode (0xffff);
+data[1568] = String.fromCharCode (0xffff);
+data[1569] = String.fromCharCode (0xffff);
+data[1570] = String.fromCharCode (0xffff);
+data[1571] = String.fromCharCode (0xffff);
+data[1572] = String.fromCharCode (0xffff);
+data[1573] = String.fromCharCode (0xffff);
+data[1574] = String.fromCharCode (0xffff);
+data[1575] = String.fromCharCode (0xffff);
+data[1576] = String.fromCharCode (0xffff);
+data[1577] = String.fromCharCode (0xffff);
+data[1578] = String.fromCharCode (0xffff);
+data[1579] = String.fromCharCode (0xffff);
+data[1580] = String.fromCharCode (0xffff);
+data[1581] = String.fromCharCode (0xffff);
+data[1582] = String.fromCharCode (0xffff);
+data[1583] = String.fromCharCode (0xffff);
+data[1584] = String.fromCharCode (0xffff);
+data[1585] = String.fromCharCode (0xffff);
+data[1586] = String.fromCharCode (0xffff);
+data[1587] = String.fromCharCode (0xffff);
+data[1588] = String.fromCharCode (0xffff);
+data[1589] = String.fromCharCode (0xffff);
+data[1590] = String.fromCharCode (0xffff);
+data[1591] = String.fromCharCode (0xffff);
+data[1592] = String.fromCharCode (0xffff);
+data[1593] = String.fromCharCode (0xffff);
+data[1594] = String.fromCharCode (0xffff);
+data[1595] = String.fromCharCode (0xffff);
+data[1596] = String.fromCharCode (0xffff);
+data[1597] = String.fromCharCode (0xffff);
+data[1598] = String.fromCharCode (0xffff);
+data[1599] = String.fromCharCode (0xffff);
+data[1600] = String.fromCharCode (0xffff);
+data[1601] = String.fromCharCode (0xffff);
+data[1602] = String.fromCharCode (0xffff);
+data[1603] = String.fromCharCode (0xffff);
+data[1604] = String.fromCharCode (0xffff);
+data[1605] = String.fromCharCode (0xffff);
+data[1606] = String.fromCharCode (0xffff);
+data[1607] = String.fromCharCode (0xffff);
+data[1608] = String.fromCharCode (0xffff);
+data[1609] = String.fromCharCode (0xffff);
+data[1610] = String.fromCharCode (0xffff);
+data[1611] = String.fromCharCode (0xffff);
+data[1612] = String.fromCharCode (0xffff);
+data[1613] = String.fromCharCode (0xffff);
+data[1614] = String.fromCharCode (0xffff);
+data[1615] = String.fromCharCode (0xffff);
+data[1616] = String.fromCharCode (0xffff);
+data[1617] = String.fromCharCode (0xffff);
+data[1618] = String.fromCharCode (0xffff);
+data[1619] = String.fromCharCode (0xffff);
+data[1620] = String.fromCharCode (0xffff);
+data[1621] = String.fromCharCode (0xffff);
+data[1622] = String.fromCharCode (0xffff);
+data[1623] = String.fromCharCode (0xffff);
+data[1624] = String.fromCharCode (0xffff);
+data[1625] = String.fromCharCode (0xffff);
+data[1626] = String.fromCharCode (0xffff);
+data[1627] = String.fromCharCode (0xffff);
+data[1628] = String.fromCharCode (0xffff);
+data[1629] = String.fromCharCode (0xffff);
+data[1630] = String.fromCharCode (0xffff);
+data[1631] = String.fromCharCode (0xffff);
+data[1632] = String.fromCharCode (0xffff);
+data[1633] = String.fromCharCode (0xffff);
+data[1634] = String.fromCharCode (0xffff);
+data[1635] = String.fromCharCode (0xffff);
+data[1636] = String.fromCharCode (0xffff);
+data[1637] = String.fromCharCode (0xffff);
+data[1638] = String.fromCharCode (0xffff);
+data[1639] = String.fromCharCode (0xffff);
+data[1640] = String.fromCharCode (0xffff);
+data[1641] = String.fromCharCode (0xffff);
+data[1642] = String.fromCharCode (0xffff);
+data[1643] = String.fromCharCode (0xffff);
+data[1644] = String.fromCharCode (0xffff);
+data[1645] = String.fromCharCode (0xffff);
+data[1646] = String.fromCharCode (0xffff);
+data[1647] = String.fromCharCode (0xffff);
+data[1648] = String.fromCharCode (0xffff);
+data[1649] = String.fromCharCode (0xffff);
+data[1650] = String.fromCharCode (0xffff);
+data[1651] = String.fromCharCode (0xffff);
+data[1652] = String.fromCharCode (0xffff);
+data[1653] = String.fromCharCode (0xffff);
+data[1654] = String.fromCharCode (0xffff);
+data[1655] = String.fromCharCode (0xffff);
+data[1656] = String.fromCharCode (0xffff);
+data[1657] = String.fromCharCode (0xffff);
+data[1658] = String.fromCharCode (0xffff);
+data[1659] = String.fromCharCode (0xffff);
+data[1660] = String.fromCharCode (0xffff);
+data[1661] = String.fromCharCode (0xffff);
+data[1662] = String.fromCharCode (0xffff);
+data[1663] = String.fromCharCode (0xffff);
+data[1664] = String.fromCharCode (0xffff);
+data[1665] = String.fromCharCode (0xffff);
+data[1666] = String.fromCharCode (0xffff);
+data[1667] = String.fromCharCode (0xffff);
+data[1668] = String.fromCharCode (0xffff);
+data[1669] = String.fromCharCode (0xffff);
+data[1670] = String.fromCharCode (0xffff);
+data[1671] = String.fromCharCode (0xffff);
+data[1672] = String.fromCharCode (0xffff);
+data[1673] = String.fromCharCode (0xffff);
+data[1674] = String.fromCharCode (0xffff);
+data[1675] = String.fromCharCode (0xffff);
+data[1676] = String.fromCharCode (0xffff);
+data[1677] = String.fromCharCode (0xffff);
+data[1678] = String.fromCharCode (0xffff);
+data[1679] = String.fromCharCode (0xffff);
+data[1680] = String.fromCharCode (0xffff);
+data[1681] = String.fromCharCode (0xffff);
+data[1682] = String.fromCharCode (0xffff);
+data[1683] = String.fromCharCode (0xffff);
+data[1684] = String.fromCharCode (0xffff);
+data[1685] = String.fromCharCode (0xffff);
+data[1686] = String.fromCharCode (0xffff);
+data[1687] = String.fromCharCode (0xffff);
+data[1688] = String.fromCharCode (0xffff);
+data[1689] = String.fromCharCode (0xffff);
+data[1690] = String.fromCharCode (0xffff);
+data[1691] = String.fromCharCode (0xffff);
+data[1692] = String.fromCharCode (0xffff);
+data[1693] = String.fromCharCode (0xffff);
+data[1694] = String.fromCharCode (0xffff);
+data[1695] = String.fromCharCode (0xffff);
+data[1696] = String.fromCharCode (0xffff);
+data[1697] = String.fromCharCode (0xffff);
+data[1698] = String.fromCharCode (0xffff);
+data[1699] = String.fromCharCode (0xffff);
+data[1700] = String.fromCharCode (0xffff);
+data[1701] = String.fromCharCode (0xffff);
+data[1702] = String.fromCharCode (0xffff);
+data[1703] = String.fromCharCode (0xffff);
+data[1704] = String.fromCharCode (0xffff);
+data[1705] = String.fromCharCode (0xffff);
+data[1706] = String.fromCharCode (0xffff);
+data[1707] = String.fromCharCode (0xffff);
+data[1708] = String.fromCharCode (0xffff);
+data[1709] = String.fromCharCode (0xffff);
+data[1710] = String.fromCharCode (0xffff);
+data[1711] = String.fromCharCode (0xffff);
+data[1712] = String.fromCharCode (0xffff);
+data[1713] = String.fromCharCode (0xffff);
+data[1714] = String.fromCharCode (0xffff);
+data[1715] = String.fromCharCode (0xffff);
+data[1716] = String.fromCharCode (0xffff);
+data[1717] = String.fromCharCode (0xffff);
+data[1718] = String.fromCharCode (0xffff);
+data[1719] = String.fromCharCode (0xffff);
+data[1720] = String.fromCharCode (0xffff);
+data[1721] = String.fromCharCode (0xffff);
+data[1722] = String.fromCharCode (0xffff);
+data[1723] = String.fromCharCode (0xffff);
+data[1724] = String.fromCharCode (0xffff);
+data[1725] = String.fromCharCode (0xffff);
+data[1726] = String.fromCharCode (0xffff);
+data[1727] = String.fromCharCode (0xffff);
+data[1728] = String.fromCharCode (0xffff);
+data[1729] = String.fromCharCode (0xffff);
+data[1730] = String.fromCharCode (0xffff);
+data[1731] = String.fromCharCode (0xffff);
+data[1732] = String.fromCharCode (0xffff);
+data[1733] = String.fromCharCode (0xffff);
+data[1734] = String.fromCharCode (0xffff);
+data[1735] = String.fromCharCode (0xffff);
+data[1736] = String.fromCharCode (0xffff);
+data[1737] = String.fromCharCode (0xffff);
+data[1738] = String.fromCharCode (0xffff);
+data[1739] = String.fromCharCode (0xffff);
+data[1740] = String.fromCharCode (0xffff);
+data[1741] = String.fromCharCode (0xffff);
+data[1742] = String.fromCharCode (0xffff);
+data[1743] = String.fromCharCode (0xffff);
+data[1744] = String.fromCharCode (0xffff);
+data[1745] = String.fromCharCode (0xffff);
+data[1746] = String.fromCharCode (0xffff);
+data[1747] = String.fromCharCode (0xffff);
+data[1748] = String.fromCharCode (0xffff);
+data[1749] = String.fromCharCode (0xffff);
+data[1750] = String.fromCharCode (0xffff);
+data[1751] = String.fromCharCode (0xffff);
+data[1752] = String.fromCharCode (0xffff);
+data[1753] = String.fromCharCode (0xffff);
+data[1754] = String.fromCharCode (0xffff);
+data[1755] = String.fromCharCode (0xffff);
+data[1756] = String.fromCharCode (0xffff);
+data[1757] = String.fromCharCode (0xffff);
+data[1758] = String.fromCharCode (0xffff);
+data[1759] = String.fromCharCode (0xffff);
+data[1760] = String.fromCharCode (0xffff);
+data[1761] = String.fromCharCode (0xffff);
+data[1762] = String.fromCharCode (0xffff);
+data[1763] = String.fromCharCode (0xffff);
+data[1764] = String.fromCharCode (0xffff);
+data[1765] = String.fromCharCode (0xffff);
+data[1766] = String.fromCharCode (0xffff);
+data[1767] = String.fromCharCode (0xffff);
+data[1768] = String.fromCharCode (0xffff);
+data[1769] = String.fromCharCode (0xffff);
+data[1770] = String.fromCharCode (0xffff);
+data[1771] = String.fromCharCode (0xffff);
+data[1772] = String.fromCharCode (0xffff);
+data[1773] = String.fromCharCode (0xffff);
+data[1774] = String.fromCharCode (0xffff);
+data[1775] = String.fromCharCode (0xffff);
+data[1776] = String.fromCharCode (0xffff);
+data[1777] = String.fromCharCode (0xffff);
+data[1778] = String.fromCharCode (0xffff);
+data[1779] = String.fromCharCode (0xffff);
+data[1780] = String.fromCharCode (0xffff);
+data[1781] = String.fromCharCode (0xffff);
+data[1782] = String.fromCharCode (0xffff);
+data[1783] = String.fromCharCode (0xffff);
+data[1784] = String.fromCharCode (0xffff);
+data[1785] = String.fromCharCode (0xffff);
+data[1786] = String.fromCharCode (0xffff);
+data[1787] = String.fromCharCode (0xffff);
+data[1788] = String.fromCharCode (0xffff);
+data[1789] = String.fromCharCode (0xffff);
+data[1790] = String.fromCharCode (0xffff);
+data[1791] = String.fromCharCode (0xffff);
+data[1792] = String.fromCharCode (0xffff);
+data[1793] = String.fromCharCode (0xffff);
+data[1794] = String.fromCharCode (0xffff);
+data[1795] = String.fromCharCode (0xffff);
+data[1796] = String.fromCharCode (0xffff);
+data[1797] = String.fromCharCode (0xffff);
+data[1798] = String.fromCharCode (0xffff);
+data[1799] = String.fromCharCode (0xffff);
+data[1800] = String.fromCharCode (0xffff);
+data[1801] = String.fromCharCode (0xffff);
+data[1802] = String.fromCharCode (0xffff);
+data[1803] = String.fromCharCode (0xffff);
+data[1804] = String.fromCharCode (0xffff);
+data[1805] = String.fromCharCode (0xffff);
+data[1806] = String.fromCharCode (0xffff);
+data[1807] = String.fromCharCode (0xffff);
+data[1808] = String.fromCharCode (0xffff);
+data[1809] = String.fromCharCode (0xffff);
+data[1810] = String.fromCharCode (0xffff);
+data[1811] = String.fromCharCode (0xffff);
+data[1812] = String.fromCharCode (0xffff);
+data[1813] = String.fromCharCode (0xffff);
+data[1814] = String.fromCharCode (0xffff);
+data[1815] = String.fromCharCode (0xffff);
+data[1816] = String.fromCharCode (0xffff);
+data[1817] = String.fromCharCode (0xffff);
+data[1818] = String.fromCharCode (0xffff);
+data[1819] = String.fromCharCode (0xffff);
+data[1820] = String.fromCharCode (0xffff);
+data[1821] = String.fromCharCode (0xffff);
+data[1822] = String.fromCharCode (0xffff);
+data[1823] = String.fromCharCode (0xffff);
+data[1824] = String.fromCharCode (0xffff);
+data[1825] = String.fromCharCode (0xffff);
+data[1826] = String.fromCharCode (0xffff);
+data[1827] = String.fromCharCode (0xffff);
+data[1828] = String.fromCharCode (0xffff);
+data[1829] = String.fromCharCode (0xffff);
+data[1830] = String.fromCharCode (0xffff);
+data[1831] = String.fromCharCode (0xffff);
+data[1832] = String.fromCharCode (0xffff);
+data[1833] = String.fromCharCode (0xffff);
+data[1834] = String.fromCharCode (0xffff);
+data[1835] = String.fromCharCode (0xffff);
+data[1836] = String.fromCharCode (0xffff);
+data[1837] = String.fromCharCode (0xffff);
+data[1838] = String.fromCharCode (0xffff);
+data[1839] = String.fromCharCode (0xffff);
+data[1840] = String.fromCharCode (0xffff);
+data[1841] = String.fromCharCode (0xffff);
+data[1842] = String.fromCharCode (0xffff);
+data[1843] = String.fromCharCode (0xffff);
+data[1844] = String.fromCharCode (0xffff);
+data[1845] = String.fromCharCode (0xffff);
+data[1846] = String.fromCharCode (0xffff);
+data[1847] = String.fromCharCode (0xffff);
+data[1848] = String.fromCharCode (0xffff);
+data[1849] = String.fromCharCode (0xffff);
+data[1850] = String.fromCharCode (0xffff);
+data[1851] = String.fromCharCode (0xffff);
+data[1852] = String.fromCharCode (0xffff);
+data[1853] = String.fromCharCode (0xffff);
+data[1854] = String.fromCharCode (0xffff);
+data[1855] = String.fromCharCode (0xffff);
+data[1856] = String.fromCharCode (0xffff);
+data[1857] = String.fromCharCode (0xffff);
+data[1858] = String.fromCharCode (0xffff);
+data[1859] = String.fromCharCode (0xffff);
+data[1860] = String.fromCharCode (0xffff);
+data[1861] = String.fromCharCode (0xffff);
+data[1862] = String.fromCharCode (0xffff);
+data[1863] = String.fromCharCode (0xffff);
+data[1864] = String.fromCharCode (0xffff);
+data[1865] = String.fromCharCode (0xffff);
+data[1866] = String.fromCharCode (0xffff);
+data[1867] = String.fromCharCode (0xffff);
+data[1868] = String.fromCharCode (0xffff);
+data[1869] = String.fromCharCode (0xffff);
+data[1870] = String.fromCharCode (0xffff);
+data[1871] = String.fromCharCode (0xffff);
+data[1872] = String.fromCharCode (0xffff);
+data[1873] = String.fromCharCode (0xffff);
+data[1874] = String.fromCharCode (0xffff);
+data[1875] = String.fromCharCode (0xffff);
+data[1876] = String.fromCharCode (0xffff);
+data[1877] = String.fromCharCode (0xffff);
+data[1878] = String.fromCharCode (0xffff);
+data[1879] = String.fromCharCode (0xffff);
+data[1880] = String.fromCharCode (0xffff);
+data[1881] = String.fromCharCode (0xffff);
+data[1882] = String.fromCharCode (0xffff);
+data[1883] = String.fromCharCode (0xffff);
+data[1884] = String.fromCharCode (0xffff);
+data[1885] = String.fromCharCode (0xffff);
+data[1886] = String.fromCharCode (0xffff);
+data[1887] = String.fromCharCode (0xffff);
+data[1888] = String.fromCharCode (0xffff);
+data[1889] = String.fromCharCode (0xffff);
+data[1890] = String.fromCharCode (0xffff);
+data[1891] = String.fromCharCode (0xffff);
+data[1892] = String.fromCharCode (0xffff);
+data[1893] = String.fromCharCode (0xffff);
+data[1894] = String.fromCharCode (0xffff);
+data[1895] = String.fromCharCode (0xffff);
+data[1896] = String.fromCharCode (0xffff);
+data[1897] = String.fromCharCode (0xffff);
+data[1898] = String.fromCharCode (0xffff);
+data[1899] = String.fromCharCode (0xffff);
+data[1900] = String.fromCharCode (0xffff);
+data[1901] = String.fromCharCode (0xffff);
+data[1902] = String.fromCharCode (0xffff);
+data[1903] = String.fromCharCode (0xffff);
+data[1904] = String.fromCharCode (0xffff);
+data[1905] = String.fromCharCode (0xffff);
+data[1906] = String.fromCharCode (0xffff);
+data[1907] = String.fromCharCode (0xffff);
+data[1908] = String.fromCharCode (0xffff);
+data[1909] = String.fromCharCode (0xffff);
+data[1910] = String.fromCharCode (0xffff);
+data[1911] = String.fromCharCode (0xffff);
+data[1912] = String.fromCharCode (0xffff);
+data[1913] = String.fromCharCode (0xffff);
+data[1914] = String.fromCharCode (0xffff);
+data[1915] = String.fromCharCode (0xffff);
+data[1916] = String.fromCharCode (0xffff);
+data[1917] = String.fromCharCode (0xffff);
+data[1918] = String.fromCharCode (0xffff);
+data[1919] = String.fromCharCode (0xffff);
+data[1920] = String.fromCharCode (0xffff);
+data[1921] = String.fromCharCode (0xffff);
+data[1922] = String.fromCharCode (0xffff);
+data[1923] = String.fromCharCode (0xffff);
+data[1924] = String.fromCharCode (0xffff);
+data[1925] = String.fromCharCode (0xffff);
+data[1926] = String.fromCharCode (0xffff);
+data[1927] = String.fromCharCode (0xffff);
+data[1928] = String.fromCharCode (0xffff);
+data[1929] = String.fromCharCode (0xffff);
+data[1930] = String.fromCharCode (0xffff);
+data[1931] = String.fromCharCode (0xffff);
+data[1932] = String.fromCharCode (0xffff);
+data[1933] = String.fromCharCode (0xffff);
+data[1934] = String.fromCharCode (0xffff);
+data[1935] = String.fromCharCode (0xffff);
+data[1936] = String.fromCharCode (0xffff);
+data[1937] = String.fromCharCode (0xffff);
+data[1938] = String.fromCharCode (0xffff);
+data[1939] = String.fromCharCode (0xffff);
+data[1940] = String.fromCharCode (0xffff);
+data[1941] = String.fromCharCode (0xffff);
+data[1942] = String.fromCharCode (0xffff);
+data[1943] = String.fromCharCode (0xffff);
+data[1944] = String.fromCharCode (0xffff);
+data[1945] = String.fromCharCode (0xffff);
+data[1946] = String.fromCharCode (0xffff);
+data[1947] = String.fromCharCode (0xffff);
+data[1948] = String.fromCharCode (0xffff);
+data[1949] = String.fromCharCode (0xffff);
+data[1950] = String.fromCharCode (0xffff);
+data[1951] = String.fromCharCode (0xffff);
+data[1952] = String.fromCharCode (0xffff);
+data[1953] = String.fromCharCode (0xffff);
+data[1954] = String.fromCharCode (0xffff);
+data[1955] = String.fromCharCode (0xffff);
+data[1956] = String.fromCharCode (0xffff);
+data[1957] = String.fromCharCode (0xffff);
+data[1958] = String.fromCharCode (0xffff);
+data[1959] = String.fromCharCode (0xffff);
+data[1960] = String.fromCharCode (0xffff);
+data[1961] = String.fromCharCode (0xffff);
+data[1962] = String.fromCharCode (0xffff);
+data[1963] = String.fromCharCode (0xffff);
+data[1964] = String.fromCharCode (0xffff);
+data[1965] = String.fromCharCode (0xffff);
+data[1966] = String.fromCharCode (0xffff);
+data[1967] = String.fromCharCode (0xffff);
+data[1968] = String.fromCharCode (0xffff);
+data[1969] = String.fromCharCode (0xffff);
+data[1970] = String.fromCharCode (0xffff);
+data[1971] = String.fromCharCode (0xffff);
+data[1972] = String.fromCharCode (0xffff);
+data[1973] = String.fromCharCode (0xffff);
+data[1974] = String.fromCharCode (0xffff);
+data[1975] = String.fromCharCode (0xffff);
+data[1976] = String.fromCharCode (0xffff);
+data[1977] = String.fromCharCode (0xffff);
+data[1978] = String.fromCharCode (0xffff);
+data[1979] = String.fromCharCode (0xffff);
+data[1980] = String.fromCharCode (0xffff);
+data[1981] = String.fromCharCode (0xffff);
+data[1982] = String.fromCharCode (0xffff);
+data[1983] = String.fromCharCode (0xffff);
+data[1984] = String.fromCharCode (0xffff);
+data[1985] = String.fromCharCode (0xffff);
+data[1986] = String.fromCharCode (0xffff);
+data[1987] = String.fromCharCode (0xffff);
+data[1988] = String.fromCharCode (0xffff);
+data[1989] = String.fromCharCode (0xffff);
+data[1990] = String.fromCharCode (0xffff);
+data[1991] = String.fromCharCode (0xffff);
+data[1992] = String.fromCharCode (0xffff);
+data[1993] = String.fromCharCode (0xffff);
+data[1994] = String.fromCharCode (0xffff);
+data[1995] = String.fromCharCode (0xffff);
+data[1996] = String.fromCharCode (0xffff);
+data[1997] = String.fromCharCode (0xffff);
+data[1998] = String.fromCharCode (0xffff);
+data[1999] = String.fromCharCode (0xffff);
+data[2000] = String.fromCharCode (0xffff);
+data[2001] = String.fromCharCode (0xffff);
+data[2002] = String.fromCharCode (0xffff);
+data[2003] = String.fromCharCode (0xffff);
+data[2004] = String.fromCharCode (0xffff);
+data[2005] = String.fromCharCode (0xffff);
+data[2006] = String.fromCharCode (0xffff);
+data[2007] = String.fromCharCode (0xffff);
+data[2008] = String.fromCharCode (0xffff);
+data[2009] = String.fromCharCode (0xffff);
+data[2010] = String.fromCharCode (0xffff);
+data[2011] = String.fromCharCode (0xffff);
+data[2012] = String.fromCharCode (0xffff);
+data[2013] = String.fromCharCode (0xffff);
+data[2014] = String.fromCharCode (0xffff);
+data[2015] = String.fromCharCode (0xffff);
+data[2016] = String.fromCharCode (0xffff);
+data[2017] = String.fromCharCode (0xffff);
+data[2018] = String.fromCharCode (0xffff);
+data[2019] = String.fromCharCode (0xffff);
+data[2020] = String.fromCharCode (0xffff);
+data[2021] = String.fromCharCode (0xffff);
+data[2022] = String.fromCharCode (0xffff);
+data[2023] = String.fromCharCode (0xffff);
+data[2024] = String.fromCharCode (0xffff);
+data[2025] = String.fromCharCode (0xffff);
+data[2026] = String.fromCharCode (0xffff);
+data[2027] = String.fromCharCode (0xffff);
+data[2028] = String.fromCharCode (0xffff);
+data[2029] = String.fromCharCode (0xffff);
+data[2030] = String.fromCharCode (0xffff);
+data[2031] = String.fromCharCode (0xffff);
+data[2032] = String.fromCharCode (0xffff);
+data[2033] = String.fromCharCode (0xffff);
+data[2034] = String.fromCharCode (0xffff);
+data[2035] = String.fromCharCode (0xffff);
+data[2036] = String.fromCharCode (0xffff);
+data[2037] = String.fromCharCode (0xffff);
+data[2038] = String.fromCharCode (0xffff);
+data[2039] = String.fromCharCode (0xffff);
+data[2040] = String.fromCharCode (0xffff);
+data[2041] = String.fromCharCode (0xffff);
+data[2042] = String.fromCharCode (0xffff);
+data[2043] = String.fromCharCode (0xffff);
+data[2044] = String.fromCharCode (0xffff);
+data[2045] = String.fromCharCode (0xffff);
+data[2046] = String.fromCharCode (0xffff);
+data[2047] = String.fromCharCode (0xffff);
+data[2048] = String.fromCharCode (0xffff);
+data[2049] = String.fromCharCode (0xffff);
+data[2050] = String.fromCharCode (0xffff);
+data[2051] = String.fromCharCode (0xffff);
+data[2052] = String.fromCharCode (0xffff);
+data[2053] = String.fromCharCode (0xffff);
+data[2054] = String.fromCharCode (0xffff);
+data[2055] = String.fromCharCode (0xffff);
+data[2056] = String.fromCharCode (0xffff);
+data[2057] = String.fromCharCode (0xffff);
+data[2058] = String.fromCharCode (0xffff);
+data[2059] = String.fromCharCode (0xffff);
+data[2060] = String.fromCharCode (0xffff);
+data[2061] = String.fromCharCode (0xffff);
+data[2062] = String.fromCharCode (0xffff);
+data[2063] = String.fromCharCode (0xffff);
+data[2064] = String.fromCharCode (0xffff);
+data[2065] = String.fromCharCode (0xffff);
+data[2066] = String.fromCharCode (0xffff);
+data[2067] = String.fromCharCode (0xffff);
+data[2068] = String.fromCharCode (0xffff);
+data[2069] = String.fromCharCode (0xffff);
+data[2070] = String.fromCharCode (0xffff);
+data[2071] = String.fromCharCode (0xffff);
+data[2072] = String.fromCharCode (0xffff);
+data[2073] = String.fromCharCode (0xffff);
+data[2074] = String.fromCharCode (0xffff);
+data[2075] = String.fromCharCode (0xffff);
+data[2076] = String.fromCharCode (0xffff);
+data[2077] = String.fromCharCode (0xffff);
+data[2078] = String.fromCharCode (0xffff);
+data[2079] = String.fromCharCode (0xffff);
+data[2080] = String.fromCharCode (0xffff);
+data[2081] = String.fromCharCode (0xffff);
+data[2082] = String.fromCharCode (0xffff);
+data[2083] = String.fromCharCode (0xffff);
+data[2084] = String.fromCharCode (0xffff);
+data[2085] = String.fromCharCode (0xffff);
+data[2086] = String.fromCharCode (0xffff);
+data[2087] = String.fromCharCode (0xffff);
+data[2088] = String.fromCharCode (0xffff);
+data[2089] = String.fromCharCode (0xffff);
+data[2090] = String.fromCharCode (0xffff);
+data[2091] = String.fromCharCode (0xffff);
+data[2092] = String.fromCharCode (0xffff);
+data[2093] = String.fromCharCode (0xffff);
+data[2094] = String.fromCharCode (0xffff);
+data[2095] = String.fromCharCode (0xffff);
+data[2096] = String.fromCharCode (0xffff);
+data[2097] = String.fromCharCode (0xffff);
+data[2098] = String.fromCharCode (0xffff);
+data[2099] = String.fromCharCode (0xffff);
+data[2100] = String.fromCharCode (0xffff);
+data[2101] = String.fromCharCode (0xffff);
+data[2102] = String.fromCharCode (0xffff);
+data[2103] = String.fromCharCode (0xffff);
+data[2104] = String.fromCharCode (0xffff);
+data[2105] = String.fromCharCode (0xffff);
+data[2106] = String.fromCharCode (0xffff);
+data[2107] = String.fromCharCode (0xffff);
+data[2108] = String.fromCharCode (0xffff);
+data[2109] = String.fromCharCode (0xffff);
+data[2110] = String.fromCharCode (0xffff);
+data[2111] = String.fromCharCode (0xffff);
+data[2112] = String.fromCharCode (0xffff);
+data[2113] = String.fromCharCode (0xffff);
+data[2114] = String.fromCharCode (0xffff);
+data[2115] = String.fromCharCode (0xffff);
+data[2116] = String.fromCharCode (0xffff);
+data[2117] = String.fromCharCode (0xffff);
+data[2118] = String.fromCharCode (0xffff);
+data[2119] = String.fromCharCode (0xffff);
+data[2120] = String.fromCharCode (0xffff);
+data[2121] = String.fromCharCode (0xffff);
+data[2122] = String.fromCharCode (0xffff);
+data[2123] = String.fromCharCode (0xffff);
+data[2124] = String.fromCharCode (0xffff);
+data[2125] = String.fromCharCode (0xffff);
+data[2126] = String.fromCharCode (0xffff);
+data[2127] = String.fromCharCode (0xffff);
+data[2128] = String.fromCharCode (0xffff);
+data[2129] = String.fromCharCode (0xffff);
+data[2130] = String.fromCharCode (0xffff);
+data[2131] = String.fromCharCode (0xffff);
+data[2132] = String.fromCharCode (0xffff);
+data[2133] = String.fromCharCode (0xffff);
+data[2134] = String.fromCharCode (0xffff);
+data[2135] = String.fromCharCode (0xffff);
+data[2136] = String.fromCharCode (0xffff);
+data[2137] = String.fromCharCode (0xffff);
+data[2138] = String.fromCharCode (0xffff);
+data[2139] = String.fromCharCode (0xffff);
+data[2140] = String.fromCharCode (0xffff);
+data[2141] = String.fromCharCode (0xffff);
+data[2142] = String.fromCharCode (0xffff);
+data[2143] = String.fromCharCode (0xffff);
+data[2144] = String.fromCharCode (0xffff);
+data[2145] = String.fromCharCode (0xffff);
+data[2146] = String.fromCharCode (0xffff);
+data[2147] = String.fromCharCode (0xffff);
+data[2148] = String.fromCharCode (0xffff);
+data[2149] = String.fromCharCode (0xffff);
+data[2150] = String.fromCharCode (0xffff);
+data[2151] = String.fromCharCode (0xffff);
+data[2152] = String.fromCharCode (0xffff);
+data[2153] = String.fromCharCode (0xffff);
+data[2154] = String.fromCharCode (0xffff);
+data[2155] = String.fromCharCode (0xffff);
+data[2156] = String.fromCharCode (0xffff);
+data[2157] = String.fromCharCode (0xffff);
+data[2158] = String.fromCharCode (0xffff);
+data[2159] = String.fromCharCode (0xffff);
+data[2160] = String.fromCharCode (0xffff);
+data[2161] = String.fromCharCode (0xffff);
+data[2162] = String.fromCharCode (0xffff);
+data[2163] = String.fromCharCode (0xffff);
+data[2164] = String.fromCharCode (0xffff);
+data[2165] = String.fromCharCode (0xffff);
+data[2166] = String.fromCharCode (0xffff);
+data[2167] = String.fromCharCode (0xffff);
+data[2168] = String.fromCharCode (0xffff);
+data[2169] = String.fromCharCode (0xffff);
+data[2170] = String.fromCharCode (0xffff);
+data[2171] = String.fromCharCode (0xffff);
+data[2172] = String.fromCharCode (0xffff);
+data[2173] = String.fromCharCode (0xffff);
+data[2174] = String.fromCharCode (0xffff);
+data[2175] = String.fromCharCode (0xffff);
+data[2176] = String.fromCharCode (0xffff);
+data[2177] = String.fromCharCode (0xffff);
+data[2178] = String.fromCharCode (0xffff);
+data[2179] = String.fromCharCode (0xffff);
+data[2180] = String.fromCharCode (0xffff);
+data[2181] = String.fromCharCode (0xffff);
+data[2182] = String.fromCharCode (0xffff);
+data[2183] = String.fromCharCode (0xffff);
+data[2184] = String.fromCharCode (0xffff);
+data[2185] = String.fromCharCode (0xffff);
+data[2186] = String.fromCharCode (0xffff);
+data[2187] = String.fromCharCode (0xffff);
+data[2188] = String.fromCharCode (0xffff);
+data[2189] = String.fromCharCode (0xffff);
+data[2190] = String.fromCharCode (0xffff);
+data[2191] = String.fromCharCode (0xffff);
+data[2192] = String.fromCharCode (0xffff);
+data[2193] = String.fromCharCode (0xffff);
+data[2194] = String.fromCharCode (0xffff);
+data[2195] = String.fromCharCode (0xffff);
+data[2196] = String.fromCharCode (0xffff);
+data[2197] = String.fromCharCode (0xffff);
+data[2198] = String.fromCharCode (0xffff);
+data[2199] = String.fromCharCode (0xffff);
+data[2200] = String.fromCharCode (0xffff);
+data[2201] = String.fromCharCode (0xffff);
+data[2202] = String.fromCharCode (0xffff);
+data[2203] = String.fromCharCode (0xffff);
+data[2204] = String.fromCharCode (0xffff);
+data[2205] = String.fromCharCode (0xffff);
+data[2206] = String.fromCharCode (0xffff);
+data[2207] = String.fromCharCode (0xffff);
+data[2208] = String.fromCharCode (0xffff);
+data[2209] = String.fromCharCode (0xffff);
+data[2210] = String.fromCharCode (0xffff);
+data[2211] = String.fromCharCode (0xffff);
+data[2212] = String.fromCharCode (0xffff);
+data[2213] = String.fromCharCode (0xffff);
+data[2214] = String.fromCharCode (0xffff);
+data[2215] = String.fromCharCode (0xffff);
+data[2216] = String.fromCharCode (0xffff);
+data[2217] = String.fromCharCode (0xffff);
+data[2218] = String.fromCharCode (0xffff);
+data[2219] = String.fromCharCode (0xffff);
+data[2220] = String.fromCharCode (0xffff);
+data[2221] = String.fromCharCode (0xffff);
+data[2222] = String.fromCharCode (0xffff);
+data[2223] = String.fromCharCode (0xffff);
+data[2224] = String.fromCharCode (0xffff);
+data[2225] = String.fromCharCode (0xffff);
+data[2226] = String.fromCharCode (0xffff);
+data[2227] = String.fromCharCode (0xffff);
+data[2228] = String.fromCharCode (0xffff);
+data[2229] = String.fromCharCode (0xffff);
+data[2230] = String.fromCharCode (0xffff);
+data[2231] = String.fromCharCode (0xffff);
+data[2232] = String.fromCharCode (0xffff);
+data[2233] = String.fromCharCode (0xffff);
+data[2234] = String.fromCharCode (0xffff);
+data[2235] = String.fromCharCode (0xffff);
+data[2236] = String.fromCharCode (0xffff);
+data[2237] = String.fromCharCode (0xffff);
+data[2238] = String.fromCharCode (0xffff);
+data[2239] = String.fromCharCode (0xffff);
+data[2240] = String.fromCharCode (0xffff);
+data[2241] = String.fromCharCode (0xffff);
+data[2242] = String.fromCharCode (0xffff);
+data[2243] = String.fromCharCode (0xffff);
+data[2244] = String.fromCharCode (0xffff);
+data[2245] = String.fromCharCode (0xffff);
+data[2246] = String.fromCharCode (0xffff);
+data[2247] = String.fromCharCode (0xffff);
+data[2248] = String.fromCharCode (0xffff);
+data[2249] = String.fromCharCode (0xffff);
+data[2250] = String.fromCharCode (0xffff);
+data[2251] = String.fromCharCode (0xffff);
+data[2252] = String.fromCharCode (0xffff);
+data[2253] = String.fromCharCode (0xffff);
+data[2254] = String.fromCharCode (0xffff);
+data[2255] = String.fromCharCode (0xffff);
+data[2256] = String.fromCharCode (0xffff);
+data[2257] = String.fromCharCode (0xffff);
+data[2258] = String.fromCharCode (0xffff);
+data[2259] = String.fromCharCode (0xffff);
+data[2260] = String.fromCharCode (0xffff);
+data[2261] = String.fromCharCode (0xffff);
+data[2262] = String.fromCharCode (0xffff);
+data[2263] = String.fromCharCode (0xffff);
+data[2264] = String.fromCharCode (0xffff);
+data[2265] = String.fromCharCode (0xffff);
+data[2266] = String.fromCharCode (0xffff);
+data[2267] = String.fromCharCode (0xffff);
+data[2268] = String.fromCharCode (0xffff);
+data[2269] = String.fromCharCode (0xffff);
+data[2270] = String.fromCharCode (0xffff);
+data[2271] = String.fromCharCode (0xffff);
+data[2272] = String.fromCharCode (0xffff);
+data[2273] = String.fromCharCode (0xffff);
+data[2274] = String.fromCharCode (0xffff);
+data[2275] = String.fromCharCode (0xffff);
+data[2276] = String.fromCharCode (0xffff);
+data[2277] = String.fromCharCode (0xffff);
+data[2278] = String.fromCharCode (0xffff);
+data[2279] = String.fromCharCode (0xffff);
+data[2280] = String.fromCharCode (0xffff);
+data[2281] = String.fromCharCode (0xffff);
+data[2282] = String.fromCharCode (0xffff);
+data[2283] = String.fromCharCode (0xffff);
+data[2284] = String.fromCharCode (0xffff);
+data[2285] = String.fromCharCode (0xffff);
+data[2286] = String.fromCharCode (0xffff);
+data[2287] = String.fromCharCode (0xffff);
+data[2288] = String.fromCharCode (0xffff);
+data[2289] = String.fromCharCode (0xffff);
+data[2290] = String.fromCharCode (0xffff);
+data[2291] = String.fromCharCode (0xffff);
+data[2292] = String.fromCharCode (0xffff);
+data[2293] = String.fromCharCode (0xffff);
+data[2294] = String.fromCharCode (0xffff);
+data[2295] = String.fromCharCode (0xffff);
+data[2296] = String.fromCharCode (0xffff);
+data[2297] = String.fromCharCode (0xffff);
+data[2298] = String.fromCharCode (0xffff);
+data[2299] = String.fromCharCode (0xffff);
+data[2300] = String.fromCharCode (0xffff);
+data[2301] = String.fromCharCode (0xffff);
+data[2302] = String.fromCharCode (0xffff);
+data[2303] = String.fromCharCode (0xffff);
+data[2304] = String.fromCharCode (0xffff);
+data[2305] = String.fromCharCode (0xffff);
+data[2306] = String.fromCharCode (0xffff);
+data[2307] = String.fromCharCode (0xffff);
+data[2308] = String.fromCharCode (0xffff);
+data[2309] = String.fromCharCode (0xffff);
+data[2310] = String.fromCharCode (0xffff);
+data[2311] = String.fromCharCode (0xffff);
+data[2312] = String.fromCharCode (0xffff);
+data[2313] = String.fromCharCode (0xffff);
+data[2314] = String.fromCharCode (0xffff);
+data[2315] = String.fromCharCode (0xffff);
+data[2316] = String.fromCharCode (0xffff);
+data[2317] = String.fromCharCode (0xffff);
+data[2318] = String.fromCharCode (0xffff);
+data[2319] = String.fromCharCode (0xffff);
+data[2320] = String.fromCharCode (0xffff);
+data[2321] = String.fromCharCode (0xffff);
+data[2322] = String.fromCharCode (0xffff);
+data[2323] = String.fromCharCode (0xffff);
+data[2324] = String.fromCharCode (0xffff);
+data[2325] = String.fromCharCode (0xffff);
+data[2326] = String.fromCharCode (0xffff);
+data[2327] = String.fromCharCode (0xffff);
+data[2328] = String.fromCharCode (0xffff);
+data[2329] = String.fromCharCode (0xffff);
+data[2330] = String.fromCharCode (0xffff);
+data[2331] = String.fromCharCode (0xffff);
+data[2332] = String.fromCharCode (0xffff);
+data[2333] = String.fromCharCode (0xffff);
+data[2334] = String.fromCharCode (0xffff);
+data[2335] = String.fromCharCode (0xffff);
+data[2336] = String.fromCharCode (0xffff);
+data[2337] = String.fromCharCode (0xffff);
+data[2338] = String.fromCharCode (0xffff);
+data[2339] = String.fromCharCode (0xffff);
+data[2340] = String.fromCharCode (0xffff);
+data[2341] = String.fromCharCode (0xffff);
+data[2342] = String.fromCharCode (0xffff);
+data[2343] = String.fromCharCode (0xffff);
+data[2344] = String.fromCharCode (0xffff);
+data[2345] = String.fromCharCode (0xffff);
+data[2346] = String.fromCharCode (0xffff);
+data[2347] = String.fromCharCode (0xffff);
+data[2348] = String.fromCharCode (0xffff);
+data[2349] = String.fromCharCode (0xffff);
+data[2350] = String.fromCharCode (0xffff);
+data[2351] = String.fromCharCode (0xffff);
+data[2352] = String.fromCharCode (0xffff);
+data[2353] = String.fromCharCode (0xffff);
+data[2354] = String.fromCharCode (0xffff);
+data[2355] = String.fromCharCode (0xffff);
+data[2356] = String.fromCharCode (0xffff);
+data[2357] = String.fromCharCode (0xffff);
+data[2358] = String.fromCharCode (0xffff);
+data[2359] = String.fromCharCode (0xffff);
+data[2360] = String.fromCharCode (0xffff);
+data[2361] = String.fromCharCode (0xffff);
+data[2362] = String.fromCharCode (0xffff);
+data[2363] = String.fromCharCode (0xffff);
+data[2364] = String.fromCharCode (0xffff);
+data[2365] = String.fromCharCode (0xffff);
+data[2366] = String.fromCharCode (0xffff);
+data[2367] = String.fromCharCode (0xffff);
+data[2368] = String.fromCharCode (0xffff);
+data[2369] = String.fromCharCode (0xffff);
+data[2370] = String.fromCharCode (0xffff);
+data[2371] = String.fromCharCode (0xffff);
+data[2372] = String.fromCharCode (0xffff);
+data[2373] = String.fromCharCode (0xffff);
+data[2374] = String.fromCharCode (0xffff);
+data[2375] = String.fromCharCode (0xffff);
+data[2376] = String.fromCharCode (0xffff);
+data[2377] = String.fromCharCode (0xffff);
+data[2378] = String.fromCharCode (0xffff);
+data[2379] = String.fromCharCode (0xffff);
+data[2380] = String.fromCharCode (0xffff);
+data[2381] = String.fromCharCode (0xffff);
+data[2382] = String.fromCharCode (0xffff);
+data[2383] = String.fromCharCode (0xffff);
+data[2384] = String.fromCharCode (0xffff);
+data[2385] = String.fromCharCode (0xffff);
+data[2386] = String.fromCharCode (0xffff);
+data[2387] = String.fromCharCode (0xffff);
+data[2388] = String.fromCharCode (0xffff);
+data[2389] = String.fromCharCode (0xffff);
+data[2390] = String.fromCharCode (0xffff);
+data[2391] = String.fromCharCode (0xffff);
+data[2392] = String.fromCharCode (0xffff);
+data[2393] = String.fromCharCode (0xffff);
+data[2394] = String.fromCharCode (0xffff);
+data[2395] = String.fromCharCode (0xffff);
+data[2396] = String.fromCharCode (0xffff);
+data[2397] = String.fromCharCode (0xffff);
+data[2398] = String.fromCharCode (0xffff);
+data[2399] = String.fromCharCode (0xffff);
+data[2400] = String.fromCharCode (0xffff);
+data[2401] = String.fromCharCode (0xffff);
+data[2402] = String.fromCharCode (0xffff);
+data[2403] = String.fromCharCode (0xffff);
+data[2404] = String.fromCharCode (0xffff);
+data[2405] = String.fromCharCode (0xffff);
+data[2406] = String.fromCharCode (0xffff);
+data[2407] = String.fromCharCode (0xffff);
+data[2408] = String.fromCharCode (0xffff);
+data[2409] = String.fromCharCode (0xffff);
+data[2410] = String.fromCharCode (0xffff);
+data[2411] = String.fromCharCode (0xffff);
+data[2412] = String.fromCharCode (0xffff);
+data[2413] = String.fromCharCode (0xffff);
+data[2414] = String.fromCharCode (0xffff);
+data[2415] = String.fromCharCode (0xffff);
+data[2416] = String.fromCharCode (0xffff);
+data[2417] = String.fromCharCode (0xffff);
+data[2418] = String.fromCharCode (0xffff);
+data[2419] = String.fromCharCode (0xffff);
+data[2420] = String.fromCharCode (0xffff);
+data[2421] = String.fromCharCode (0xffff);
+data[2422] = String.fromCharCode (0xffff);
+data[2423] = String.fromCharCode (0xffff);
+data[2424] = String.fromCharCode (0xffff);
+data[2425] = String.fromCharCode (0xffff);
+data[2426] = String.fromCharCode (0xffff);
+data[2427] = String.fromCharCode (0xffff);
+data[2428] = String.fromCharCode (0xffff);
+data[2429] = String.fromCharCode (0xffff);
+data[2430] = String.fromCharCode (0xffff);
+data[2431] = String.fromCharCode (0xffff);
+data[2432] = String.fromCharCode (0xffff);
+data[2433] = String.fromCharCode (0xffff);
+data[2434] = String.fromCharCode (0xffff);
+data[2435] = String.fromCharCode (0xffff);
+data[2436] = String.fromCharCode (0xffff);
+data[2437] = String.fromCharCode (0xffff);
+data[2438] = String.fromCharCode (0xffff);
+data[2439] = String.fromCharCode (0xffff);
+data[2440] = String.fromCharCode (0xffff);
+data[2441] = String.fromCharCode (0xffff);
+data[2442] = String.fromCharCode (0xffff);
+data[2443] = String.fromCharCode (0xffff);
+data[2444] = String.fromCharCode (0xffff);
+data[2445] = String.fromCharCode (0xffff);
+data[2446] = String.fromCharCode (0xffff);
+data[2447] = String.fromCharCode (0xffff);
+data[2448] = String.fromCharCode (0xffff);
+data[2449] = String.fromCharCode (0xffff);
+data[2450] = String.fromCharCode (0xffff);
+data[2451] = String.fromCharCode (0xffff);
+data[2452] = String.fromCharCode (0xffff);
+data[2453] = String.fromCharCode (0xffff);
+data[2454] = String.fromCharCode (0xffff);
+data[2455] = String.fromCharCode (0xffff);
+data[2456] = String.fromCharCode (0xffff);
+data[2457] = String.fromCharCode (0xffff);
+data[2458] = String.fromCharCode (0xffff);
+data[2459] = String.fromCharCode (0xffff);
+data[2460] = String.fromCharCode (0xffff);
+data[2461] = String.fromCharCode (0xffff);
+data[2462] = String.fromCharCode (0xffff);
+data[2463] = String.fromCharCode (0xffff);
+data[2464] = String.fromCharCode (0xffff);
+data[2465] = String.fromCharCode (0xffff);
+data[2466] = String.fromCharCode (0xffff);
+data[2467] = String.fromCharCode (0xffff);
+data[2468] = String.fromCharCode (0xffff);
+data[2469] = String.fromCharCode (0xffff);
+data[2470] = String.fromCharCode (0xffff);
+data[2471] = String.fromCharCode (0xffff);
+data[2472] = String.fromCharCode (0xffff);
+data[2473] = String.fromCharCode (0xffff);
+data[2474] = String.fromCharCode (0xffff);
+data[2475] = String.fromCharCode (0xffff);
+data[2476] = String.fromCharCode (0xffff);
+data[2477] = String.fromCharCode (0xffff);
+data[2478] = String.fromCharCode (0xffff);
+data[2479] = String.fromCharCode (0xffff);
+data[2480] = String.fromCharCode (0xffff);
+data[2481] = String.fromCharCode (0xffff);
+data[2482] = String.fromCharCode (0xffff);
+data[2483] = String.fromCharCode (0xffff);
+data[2484] = String.fromCharCode (0xffff);
+data[2485] = String.fromCharCode (0xffff);
+data[2486] = String.fromCharCode (0xffff);
+data[2487] = String.fromCharCode (0xffff);
+data[2488] = String.fromCharCode (0xffff);
+data[2489] = String.fromCharCode (0xffff);
+data[2490] = String.fromCharCode (0xffff);
+data[2491] = String.fromCharCode (0xffff);
+data[2492] = String.fromCharCode (0xffff);
+data[2493] = String.fromCharCode (0xffff);
+data[2494] = String.fromCharCode (0xffff);
+data[2495] = String.fromCharCode (0xffff);
+data[2496] = String.fromCharCode (0xffff);
+data[2497] = String.fromCharCode (0xffff);
+data[2498] = String.fromCharCode (0xffff);
+data[2499] = String.fromCharCode (0xffff);
+data[2500] = String.fromCharCode (0xffff);
+data[2501] = String.fromCharCode (0xffff);
+data[2502] = String.fromCharCode (0xffff);
+data[2503] = String.fromCharCode (0xffff);
+data[2504] = String.fromCharCode (0xffff);
+data[2505] = String.fromCharCode (0xffff);
+data[2506] = String.fromCharCode (0xffff);
+data[2507] = String.fromCharCode (0xffff);
+data[2508] = String.fromCharCode (0xffff);
+data[2509] = String.fromCharCode (0xffff);
+data[2510] = String.fromCharCode (0xffff);
+data[2511] = String.fromCharCode (0xffff);
+data[2512] = String.fromCharCode (0xffff);
+data[2513] = String.fromCharCode (0xffff);
+data[2514] = String.fromCharCode (0xffff);
+data[2515] = String.fromCharCode (0xffff);
+data[2516] = String.fromCharCode (0xffff);
+data[2517] = String.fromCharCode (0xffff);
+data[2518] = String.fromCharCode (0xffff);
+data[2519] = String.fromCharCode (0xffff);
+data[2520] = String.fromCharCode (0xffff);
+data[2521] = String.fromCharCode (0xffff);
+data[2522] = String.fromCharCode (0xffff);
+data[2523] = String.fromCharCode (0xffff);
+data[2524] = String.fromCharCode (0xffff);
+data[2525] = String.fromCharCode (0xffff);
+data[2526] = String.fromCharCode (0xffff);
+data[2527] = String.fromCharCode (0xffff);
+data[2528] = String.fromCharCode (0xffff);
+data[2529] = String.fromCharCode (0xffff);
+data[2530] = String.fromCharCode (0xffff);
+data[2531] = String.fromCharCode (0xffff);
+data[2532] = String.fromCharCode (0xffff);
+data[2533] = String.fromCharCode (0xffff);
+data[2534] = String.fromCharCode (0xffff);
+data[2535] = String.fromCharCode (0xffff);
+data[2536] = String.fromCharCode (0xffff);
+data[2537] = String.fromCharCode (0xffff);
+data[2538] = String.fromCharCode (0xffff);
+data[2539] = String.fromCharCode (0xffff);
+data[2540] = String.fromCharCode (0xffff);
+data[2541] = String.fromCharCode (0xffff);
+data[2542] = String.fromCharCode (0xffff);
+data[2543] = String.fromCharCode (0xffff);
+data[2544] = String.fromCharCode (0xffff);
+data[2545] = String.fromCharCode (0xffff);
+data[2546] = String.fromCharCode (0xffff);
+data[2547] = String.fromCharCode (0xffff);
+data[2548] = String.fromCharCode (0xffff);
+data[2549] = String.fromCharCode (0xffff);
+data[2550] = String.fromCharCode (0xffff);
+data[2551] = String.fromCharCode (0xffff);
+data[2552] = String.fromCharCode (0xffff);
+data[2553] = String.fromCharCode (0xffff);
+data[2554] = String.fromCharCode (0x003f);
+data[2752] = String.fromCharCode (0xffff);
+data[2753] = String.fromCharCode (0xffff);
+data[2754] = String.fromCharCode (0xffff);
+data[2755] = String.fromCharCode (0xffff);
+data[2756] = String.fromCharCode (0xffff);
+data[2757] = String.fromCharCode (0xffff);
+data[2758] = String.fromCharCode (0xffff);
+data[2759] = String.fromCharCode (0xffff);
+data[2760] = String.fromCharCode (0xffff);
+data[2761] = String.fromCharCode (0xffff);
+data[2762] = String.fromCharCode (0xffff);
+data[2763] = String.fromCharCode (0xffff);
+data[2764] = String.fromCharCode (0xffff);
+data[2765] = String.fromCharCode (0xffff);
+data[2766] = String.fromCharCode (0xffff);
+data[2767] = String.fromCharCode (0xffff);
+data[2768] = String.fromCharCode (0xffff);
+data[2769] = String.fromCharCode (0xffff);
+data[2770] = String.fromCharCode (0xffff);
+data[2771] = String.fromCharCode (0xffff);
+data[2772] = String.fromCharCode (0xffff);
+data[2773] = String.fromCharCode (0xffff);
+data[2774] = String.fromCharCode (0xffff);
+data[2775] = String.fromCharCode (0xffff);
+data[2776] = String.fromCharCode (0xffff);
+data[2777] = String.fromCharCode (0xffff);
+data[2778] = String.fromCharCode (0xffff);
+data[2779] = String.fromCharCode (0xffff);
+data[2780] = String.fromCharCode (0xffff);
+data[2781] = String.fromCharCode (0xffff);
+data[2782] = String.fromCharCode (0xffff);
+data[2783] = String.fromCharCode (0xffff);
+data[2784] = String.fromCharCode (0xffff);
+data[2785] = String.fromCharCode (0xffff);
+data[2786] = String.fromCharCode (0xffff);
+data[2787] = String.fromCharCode (0xffff);
+data[2788] = String.fromCharCode (0xffff);
+data[2789] = String.fromCharCode (0xffff);
+data[2790] = String.fromCharCode (0xffff);
+data[2791] = String.fromCharCode (0xffff);
+data[2792] = String.fromCharCode (0xffff);
+data[2793] = String.fromCharCode (0xffff);
+data[2794] = String.fromCharCode (0xffff);
+data[2795] = String.fromCharCode (0xffff);
+data[2796] = String.fromCharCode (0xffff);
+data[2797] = String.fromCharCode (0xffff);
+data[2798] = String.fromCharCode (0xffff);
+data[2799] = String.fromCharCode (0xffff);
+data[2800] = String.fromCharCode (0xffff);
+data[2801] = String.fromCharCode (0xffff);
+data[2802] = String.fromCharCode (0xffff);
+data[2803] = String.fromCharCode (0xffff);
+data[2804] = String.fromCharCode (0xffff);
+data[2805] = String.fromCharCode (0xffff);
+data[2806] = String.fromCharCode (0xffff);
+data[2807] = String.fromCharCode (0xffff);
+data[2808] = String.fromCharCode (0xffff);
+data[2809] = String.fromCharCode (0xffff);
+data[2810] = String.fromCharCode (0xffff);
+data[2811] = String.fromCharCode (0xffff);
+data[2812] = String.fromCharCode (0xffff);
+data[2813] = String.fromCharCode (0xffff);
+data[2814] = String.fromCharCode (0xffff);
+data[2815] = String.fromCharCode (0xffff);
+data[2816] = String.fromCharCode (0xffff);
+data[2817] = String.fromCharCode (0xffff);
+data[2818] = String.fromCharCode (0xffff);
+data[2819] = String.fromCharCode (0xffff);
+data[2820] = String.fromCharCode (0xffff);
+data[2821] = String.fromCharCode (0xffff);
+data[2822] = String.fromCharCode (0xffff);
+data[2823] = String.fromCharCode (0xffff);
+data[2824] = String.fromCharCode (0xffff);
+data[2825] = String.fromCharCode (0xffff);
+data[2826] = String.fromCharCode (0xffff);
+data[2827] = String.fromCharCode (0xffff);
+data[2828] = String.fromCharCode (0xffff);
+data[2829] = String.fromCharCode (0xffff);
+data[2830] = String.fromCharCode (0xffff);
+data[2831] = String.fromCharCode (0xffff);
+data[2832] = String.fromCharCode (0xffff);
+data[2833] = String.fromCharCode (0xffff);
+data[2834] = String.fromCharCode (0xffff);
+data[2835] = String.fromCharCode (0xffff);
+data[2836] = String.fromCharCode (0xffff);
+data[2837] = String.fromCharCode (0xffff);
+data[2838] = String.fromCharCode (0xffff);
+data[2839] = String.fromCharCode (0xffff);
+data[2840] = String.fromCharCode (0xffff);
+data[2841] = String.fromCharCode (0xffff);
+data[2842] = String.fromCharCode (0xffff);
+data[2843] = String.fromCharCode (0xffff);
+data[2844] = String.fromCharCode (0xffff);
+data[2845] = String.fromCharCode (0xffff);
+data[2846] = String.fromCharCode (0xffff);
+data[2847] = String.fromCharCode (0xffff);
+data[2848] = String.fromCharCode (0xffff);
+data[2849] = String.fromCharCode (0xffff);
+data[2850] = String.fromCharCode (0xffff);
+data[2851] = String.fromCharCode (0xffff);
+data[2852] = String.fromCharCode (0xffff);
+data[2853] = String.fromCharCode (0xffff);
+data[2854] = String.fromCharCode (0xffff);
+data[2855] = String.fromCharCode (0xffff);
+data[2856] = String.fromCharCode (0xffff);
+data[2857] = String.fromCharCode (0xffff);
+data[2858] = String.fromCharCode (0xffff);
+data[2859] = String.fromCharCode (0xffff);
+data[2860] = String.fromCharCode (0xffff);
+data[2861] = String.fromCharCode (0xffff);
+data[2862] = String.fromCharCode (0xffff);
+data[2863] = String.fromCharCode (0xffff);
+data[2864] = String.fromCharCode (0xffff);
+data[2865] = String.fromCharCode (0xffff);
+data[2866] = String.fromCharCode (0xffff);
+data[2867] = String.fromCharCode (0xffff);
+data[2868] = String.fromCharCode (0xffff);
+data[2869] = String.fromCharCode (0xffff);
+data[2870] = String.fromCharCode (0xffff);
+data[2871] = String.fromCharCode (0xffff);
+data[2872] = String.fromCharCode (0xffff);
+data[2873] = String.fromCharCode (0xffff);
+data[2874] = String.fromCharCode (0xffff);
+data[2875] = String.fromCharCode (0xffff);
+data[2876] = String.fromCharCode (0xffff);
+data[2877] = String.fromCharCode (0xffff);
+data[2878] = String.fromCharCode (0xffff);
+data[2879] = String.fromCharCode (0xffff);
+data[2880] = String.fromCharCode (0xffff);
+data[2881] = String.fromCharCode (0xffff);
+data[2882] = String.fromCharCode (0xffff);
+data[2883] = String.fromCharCode (0xffff);
+data[2884] = String.fromCharCode (0xffff);
+data[2885] = String.fromCharCode (0xffff);
+data[2886] = String.fromCharCode (0xffff);
+data[2887] = String.fromCharCode (0xffff);
+data[2888] = String.fromCharCode (0xffff);
+data[2889] = String.fromCharCode (0xffff);
+data[2890] = String.fromCharCode (0xffff);
+data[2891] = String.fromCharCode (0xffff);
+data[2892] = String.fromCharCode (0xffff);
+data[2893] = String.fromCharCode (0xffff);
+data[2894] = String.fromCharCode (0xffff);
+data[2895] = String.fromCharCode (0xffff);
+data[2896] = String.fromCharCode (0xffff);
+data[2897] = String.fromCharCode (0xffff);
+data[2898] = String.fromCharCode (0xffff);
+data[2899] = String.fromCharCode (0xffff);
+data[2900] = String.fromCharCode (0xffff);
+data[2901] = String.fromCharCode (0xffff);
+data[2902] = String.fromCharCode (0xffff);
+data[2903] = String.fromCharCode (0xffff);
+data[2904] = String.fromCharCode (0xffff);
+data[2905] = String.fromCharCode (0xffff);
+data[2906] = String.fromCharCode (0xffff);
+data[2907] = String.fromCharCode (0xffff);
+data[2908] = String.fromCharCode (0xffff);
+data[2909] = String.fromCharCode (0xffff);
+data[2910] = String.fromCharCode (0xffff);
+data[2911] = String.fromCharCode (0xffff);
+data[2912] = String.fromCharCode (0xffff);
+data[2913] = String.fromCharCode (0xffff);
+data[2914] = String.fromCharCode (0xffff);
+data[2915] = String.fromCharCode (0xffff);
+data[2916] = String.fromCharCode (0xffff);
+data[2917] = String.fromCharCode (0xffff);
+data[2918] = String.fromCharCode (0xffff);
+data[2919] = String.fromCharCode (0xffff);
+data[2920] = String.fromCharCode (0xffff);
+data[2921] = String.fromCharCode (0xffff);
+data[2922] = String.fromCharCode (0xffff);
+data[2923] = String.fromCharCode (0xffff);
+data[2924] = String.fromCharCode (0xffff);
+data[2925] = String.fromCharCode (0xffff);
+data[2926] = String.fromCharCode (0xffff);
+data[2927] = String.fromCharCode (0xffff);
+data[2928] = String.fromCharCode (0xffff);
+data[2929] = String.fromCharCode (0xffff);
+data[2930] = String.fromCharCode (0xffff);
+data[2931] = String.fromCharCode (0xffff);
+data[2932] = String.fromCharCode (0xffff);
+data[2933] = String.fromCharCode (0xffff);
+data[2934] = String.fromCharCode (0xffff);
+data[2935] = String.fromCharCode (0xffff);
+data[2936] = String.fromCharCode (0xffff);
+data[2937] = String.fromCharCode (0xffff);
+data[2938] = String.fromCharCode (0xffff);
+data[2939] = String.fromCharCode (0xffff);
+data[2940] = String.fromCharCode (0xffff);
+data[2941] = String.fromCharCode (0xffff);
+data[2942] = String.fromCharCode (0xffff);
+data[2943] = String.fromCharCode (0xffff);
+data[2944] = String.fromCharCode (0xffff);
+data[2945] = String.fromCharCode (0xffff);
+data[2946] = String.fromCharCode (0xffff);
+data[2947] = String.fromCharCode (0xffff);
+data[2948] = String.fromCharCode (0xffff);
+data[2949] = String.fromCharCode (0xffff);
+data[2950] = String.fromCharCode (0xffff);
+data[2951] = String.fromCharCode (0xffff);
+data[2952] = String.fromCharCode (0xffff);
+data[2953] = String.fromCharCode (0xffff);
+data[2954] = String.fromCharCode (0xffff);
+data[2955] = String.fromCharCode (0xffff);
+data[2956] = String.fromCharCode (0xffff);
+data[2957] = String.fromCharCode (0xffff);
+data[2958] = String.fromCharCode (0xffff);
+data[2959] = String.fromCharCode (0xffff);
+data[2960] = String.fromCharCode (0xffff);
+data[2961] = String.fromCharCode (0xffff);
+data[2962] = String.fromCharCode (0xffff);
+data[2963] = String.fromCharCode (0xffff);
+data[2964] = String.fromCharCode (0xffff);
+data[2965] = String.fromCharCode (0xffff);
+data[2966] = String.fromCharCode (0xffff);
+data[2967] = String.fromCharCode (0xffff);
+data[2968] = String.fromCharCode (0xffff);
+data[2969] = String.fromCharCode (0xffff);
+data[2970] = String.fromCharCode (0xffff);
+data[2971] = String.fromCharCode (0xffff);
+data[2972] = String.fromCharCode (0xffff);
+data[2973] = String.fromCharCode (0xffff);
+data[2974] = String.fromCharCode (0xffff);
+data[2975] = String.fromCharCode (0xffff);
+data[2976] = String.fromCharCode (0xffff);
+data[2977] = String.fromCharCode (0xffff);
+data[2978] = String.fromCharCode (0xffff);
+data[2979] = String.fromCharCode (0xffff);
+data[2980] = String.fromCharCode (0xffff);
+data[2981] = String.fromCharCode (0xffff);
+data[2982] = String.fromCharCode (0xffff);
+data[2983] = String.fromCharCode (0xffff);
+data[2984] = String.fromCharCode (0xffff);
+data[2985] = String.fromCharCode (0xffff);
+data[2986] = String.fromCharCode (0xffff);
+data[2987] = String.fromCharCode (0xffff);
+data[2988] = String.fromCharCode (0xffff);
+data[2989] = String.fromCharCode (0xffff);
+data[2990] = String.fromCharCode (0xffff);
+data[2991] = String.fromCharCode (0xffff);
+data[2992] = String.fromCharCode (0xffff);
+data[2993] = String.fromCharCode (0xffff);
+data[2994] = String.fromCharCode (0xffff);
+data[2995] = String.fromCharCode (0xffff);
+data[2996] = String.fromCharCode (0xffff);
+data[2997] = String.fromCharCode (0xffff);
+data[2998] = String.fromCharCode (0xffff);
+data[2999] = String.fromCharCode (0xffff);
+data[3000] = String.fromCharCode (0xffff);
+data[3001] = String.fromCharCode (0xffff);
+data[3002] = String.fromCharCode (0xffff);
+data[3003] = String.fromCharCode (0xffff);
+data[3004] = String.fromCharCode (0xffff);
+data[3005] = String.fromCharCode (0xffff);
+data[3006] = String.fromCharCode (0xffff);
+data[3007] = String.fromCharCode (0xffff);
+data[3008] = String.fromCharCode (0xffff);
+data[3009] = String.fromCharCode (0xffff);
+data[3010] = String.fromCharCode (0xffff);
+data[3011] = String.fromCharCode (0xffff);
+data[3012] = String.fromCharCode (0xffff);
+data[3013] = String.fromCharCode (0xffff);
+data[3014] = String.fromCharCode (0xffff);
+data[3015] = String.fromCharCode (0xffff);
+data[3016] = String.fromCharCode (0xffff);
+data[3017] = String.fromCharCode (0xffff);
+data[3018] = String.fromCharCode (0xffff);
+data[3019] = String.fromCharCode (0xffff);
+data[3020] = String.fromCharCode (0xffff);
+data[3021] = String.fromCharCode (0xffff);
+data[3022] = String.fromCharCode (0xffff);
+data[3023] = String.fromCharCode (0xffff);
+data[3024] = String.fromCharCode (0xffff);
+data[3025] = String.fromCharCode (0xffff);
+data[3026] = String.fromCharCode (0xffff);
+data[3027] = String.fromCharCode (0xffff);
+data[3028] = String.fromCharCode (0xffff);
+data[3029] = String.fromCharCode (0xffff);
+data[3030] = String.fromCharCode (0xffff);
+data[3031] = String.fromCharCode (0xffff);
+data[3032] = String.fromCharCode (0xffff);
+data[3033] = String.fromCharCode (0xffff);
+data[3034] = String.fromCharCode (0xffff);
+data[3035] = String.fromCharCode (0xffff);
+data[3036] = String.fromCharCode (0xffff);
+data[3037] = String.fromCharCode (0xffff);
+data[3038] = String.fromCharCode (0xffff);
+data[3039] = String.fromCharCode (0xffff);
+data[3040] = String.fromCharCode (0xffff);
+data[3041] = String.fromCharCode (0xffff);
+data[3042] = String.fromCharCode (0xffff);
+data[3043] = String.fromCharCode (0xffff);
+data[3044] = String.fromCharCode (0xffff);
+data[3045] = String.fromCharCode (0xffff);
+data[3046] = String.fromCharCode (0xffff);
+data[3047] = String.fromCharCode (0xffff);
+data[3048] = String.fromCharCode (0xffff);
+data[3049] = String.fromCharCode (0xffff);
+data[3050] = String.fromCharCode (0xffff);
+data[3051] = String.fromCharCode (0xffff);
+data[3052] = String.fromCharCode (0xffff);
+data[3053] = String.fromCharCode (0xffff);
+data[3054] = String.fromCharCode (0xffff);
+data[3055] = String.fromCharCode (0xffff);
+data[3056] = String.fromCharCode (0xffff);
+data[3057] = String.fromCharCode (0xffff);
+data[3058] = String.fromCharCode (0xffff);
+data[3059] = String.fromCharCode (0xffff);
+data[3060] = String.fromCharCode (0xffff);
+data[3061] = String.fromCharCode (0xffff);
+data[3062] = String.fromCharCode (0xffff);
+data[3063] = String.fromCharCode (0xffff);
+data[3064] = String.fromCharCode (0xffff);
+data[3065] = String.fromCharCode (0xffff);
+data[3066] = String.fromCharCode (0xffff);
+data[3067] = String.fromCharCode (0xffff);
+data[3068] = String.fromCharCode (0xffff);
+data[3069] = String.fromCharCode (0xffff);
+data[3070] = String.fromCharCode (0xffff);
+data[3071] = String.fromCharCode (0xffff);
+data[3072] = String.fromCharCode (0xffff);
+data[3073] = String.fromCharCode (0xffff);
+data[3074] = String.fromCharCode (0xffff);
+data[3075] = String.fromCharCode (0xffff);
+data[3076] = String.fromCharCode (0xffff);
+data[3077] = String.fromCharCode (0xffff);
+data[3078] = String.fromCharCode (0xffff);
+data[3079] = String.fromCharCode (0xffff);
+data[3080] = String.fromCharCode (0xffff);
+data[3081] = String.fromCharCode (0xffff);
+data[3082] = String.fromCharCode (0xffff);
+data[3083] = String.fromCharCode (0xffff);
+data[3084] = String.fromCharCode (0xffff);
+data[3085] = String.fromCharCode (0xffff);
+data[3086] = String.fromCharCode (0xffff);
+data[3087] = String.fromCharCode (0xffff);
+data[3088] = String.fromCharCode (0xffff);
+data[3089] = String.fromCharCode (0xffff);
+data[3090] = String.fromCharCode (0xffff);
+data[3091] = String.fromCharCode (0xffff);
+data[3092] = String.fromCharCode (0xffff);
+data[3093] = String.fromCharCode (0xffff);
+data[3094] = String.fromCharCode (0xffff);
+data[3095] = String.fromCharCode (0xffff);
+data[3096] = String.fromCharCode (0xffff);
+data[3097] = String.fromCharCode (0xffff);
+data[3098] = String.fromCharCode (0xffff);
+data[3099] = String.fromCharCode (0xffff);
+data[3100] = String.fromCharCode (0xffff);
+data[3101] = String.fromCharCode (0xffff);
+data[3102] = String.fromCharCode (0xffff);
+data[3103] = String.fromCharCode (0xffff);
+data[3104] = String.fromCharCode (0xffff);
+data[3105] = String.fromCharCode (0xffff);
+data[3106] = String.fromCharCode (0xffff);
+data[3107] = String.fromCharCode (0xffff);
+data[3108] = String.fromCharCode (0xffff);
+data[3109] = String.fromCharCode (0xffff);
+data[3110] = String.fromCharCode (0xffff);
+data[3111] = String.fromCharCode (0xffff);
+data[3112] = String.fromCharCode (0xffff);
+data[3113] = String.fromCharCode (0xffff);
+data[3114] = String.fromCharCode (0xffff);
+data[3115] = String.fromCharCode (0xffff);
+data[3116] = String.fromCharCode (0xffff);
+data[3117] = String.fromCharCode (0xffff);
+data[3118] = String.fromCharCode (0xffff);
+data[3119] = String.fromCharCode (0xffff);
+data[3120] = String.fromCharCode (0xffff);
+data[3121] = String.fromCharCode (0xffff);
+data[3122] = String.fromCharCode (0xffff);
+data[3123] = String.fromCharCode (0xffff);
+data[3124] = String.fromCharCode (0xffff);
+data[3125] = String.fromCharCode (0xffff);
+data[3126] = String.fromCharCode (0xffff);
+data[3127] = String.fromCharCode (0xffff);
+data[3128] = String.fromCharCode (0xffff);
+data[3129] = String.fromCharCode (0xffff);
+data[3130] = String.fromCharCode (0xffff);
+data[3131] = String.fromCharCode (0xffff);
+data[3132] = String.fromCharCode (0xffff);
+data[3133] = String.fromCharCode (0xffff);
+data[3134] = String.fromCharCode (0xffff);
+data[3135] = String.fromCharCode (0xffff);
+data[3136] = String.fromCharCode (0xffff);
+data[3137] = String.fromCharCode (0xffff);
+data[3138] = String.fromCharCode (0xffff);
+data[3139] = String.fromCharCode (0xffff);
+data[3140] = String.fromCharCode (0xffff);
+data[3141] = String.fromCharCode (0xffff);
+data[3142] = String.fromCharCode (0xffff);
+data[3143] = String.fromCharCode (0xffff);
+data[3144] = String.fromCharCode (0xffff);
+data[3145] = String.fromCharCode (0xffff);
+data[3146] = String.fromCharCode (0xffff);
+data[3147] = String.fromCharCode (0xffff);
+data[3148] = String.fromCharCode (0xffff);
+data[3149] = String.fromCharCode (0xffff);
+data[3150] = String.fromCharCode (0xffff);
+data[3151] = String.fromCharCode (0xffff);
+data[3152] = String.fromCharCode (0xffff);
+data[3153] = String.fromCharCode (0xffff);
+data[3154] = String.fromCharCode (0xffff);
+data[3155] = String.fromCharCode (0xffff);
+data[3156] = String.fromCharCode (0xffff);
+data[3157] = String.fromCharCode (0xffff);
+data[3158] = String.fromCharCode (0xffff);
+data[3159] = String.fromCharCode (0xffff);
+data[3160] = String.fromCharCode (0xffff);
+data[3161] = String.fromCharCode (0xffff);
+data[3162] = String.fromCharCode (0xffff);
+data[3163] = String.fromCharCode (0xffff);
+data[3164] = String.fromCharCode (0xffff);
+data[3165] = String.fromCharCode (0xffff);
+data[3166] = String.fromCharCode (0xffff);
+data[3167] = String.fromCharCode (0xffff);
+data[3168] = String.fromCharCode (0xffff);
+data[3169] = String.fromCharCode (0xffff);
+data[3170] = String.fromCharCode (0xffff);
+data[3171] = String.fromCharCode (0xffff);
+data[3172] = String.fromCharCode (0xffff);
+data[3173] = String.fromCharCode (0xffff);
+data[3174] = String.fromCharCode (0xffff);
+data[3175] = String.fromCharCode (0xffff);
+data[3176] = String.fromCharCode (0xffff);
+data[3177] = String.fromCharCode (0xffff);
+data[3178] = String.fromCharCode (0xffff);
+data[3179] = String.fromCharCode (0xffff);
+data[3180] = String.fromCharCode (0xffff);
+data[3181] = String.fromCharCode (0xffff);
+data[3182] = String.fromCharCode (0xffff);
+data[3183] = String.fromCharCode (0xffff);
+data[3184] = String.fromCharCode (0xffff);
+data[3185] = String.fromCharCode (0xffff);
+data[3186] = String.fromCharCode (0xffff);
+data[3187] = String.fromCharCode (0xffff);
+data[3188] = String.fromCharCode (0xffff);
+data[3189] = String.fromCharCode (0xffff);
+data[3190] = String.fromCharCode (0xffff);
+data[3191] = String.fromCharCode (0xffff);
+data[3192] = String.fromCharCode (0xffff);
+data[3193] = String.fromCharCode (0xffff);
+data[3194] = String.fromCharCode (0xffff);
+data[3195] = String.fromCharCode (0xffff);
+data[3196] = String.fromCharCode (0xffff);
+data[3197] = String.fromCharCode (0xffff);
+data[3198] = String.fromCharCode (0xffff);
+data[3199] = String.fromCharCode (0xffff);
+data[3200] = String.fromCharCode (0xffff);
+data[3201] = String.fromCharCode (0xffff);
+data[3202] = String.fromCharCode (0xffff);
+data[3203] = String.fromCharCode (0xffff);
+data[3204] = String.fromCharCode (0xffff);
+data[3205] = String.fromCharCode (0xffff);
+data[3206] = String.fromCharCode (0xffff);
+data[3207] = String.fromCharCode (0xffff);
+data[3208] = String.fromCharCode (0xffff);
+data[3209] = String.fromCharCode (0xffff);
+data[3210] = String.fromCharCode (0xffff);
+data[3211] = String.fromCharCode (0xffff);
+data[3212] = String.fromCharCode (0xffff);
+data[3213] = String.fromCharCode (0xffff);
+data[3214] = String.fromCharCode (0xffff);
+data[3215] = String.fromCharCode (0xffff);
+data[3216] = String.fromCharCode (0xffff);
+data[3217] = String.fromCharCode (0xffff);
+data[3218] = String.fromCharCode (0xffff);
+data[3219] = String.fromCharCode (0xffff);
+data[3220] = String.fromCharCode (0xffff);
+data[3221] = String.fromCharCode (0xffff);
+data[3222] = String.fromCharCode (0xffff);
+data[3223] = String.fromCharCode (0xffff);
+data[3224] = String.fromCharCode (0xffff);
+data[3225] = String.fromCharCode (0xffff);
+data[3226] = String.fromCharCode (0xffff);
+data[3227] = String.fromCharCode (0xffff);
+data[3228] = String.fromCharCode (0xffff);
+data[3229] = String.fromCharCode (0xffff);
+data[3230] = String.fromCharCode (0xffff);
+data[3231] = String.fromCharCode (0xffff);
+data[3232] = String.fromCharCode (0xffff);
+data[3233] = String.fromCharCode (0xffff);
+data[3234] = String.fromCharCode (0xffff);
+data[3235] = String.fromCharCode (0xffff);
+data[3236] = String.fromCharCode (0xffff);
+data[3237] = String.fromCharCode (0xffff);
+data[3238] = String.fromCharCode (0xffff);
+data[3239] = String.fromCharCode (0xffff);
+data[3240] = String.fromCharCode (0xffff);
+data[3241] = String.fromCharCode (0xffff);
+data[3242] = String.fromCharCode (0xffff);
+data[3243] = String.fromCharCode (0xffff);
+data[3244] = String.fromCharCode (0xffff);
+data[3245] = String.fromCharCode (0xffff);
+data[3246] = String.fromCharCode (0xffff);
+data[3247] = String.fromCharCode (0xffff);
+data[3248] = String.fromCharCode (0xffff);
+data[3249] = String.fromCharCode (0xffff);
+data[3250] = String.fromCharCode (0xffff);
+data[3251] = String.fromCharCode (0xffff);
+data[3252] = String.fromCharCode (0xffff);
+data[3253] = String.fromCharCode (0xffff);
+data[3254] = String.fromCharCode (0xffff);
+data[3255] = String.fromCharCode (0xffff);
+data[3256] = String.fromCharCode (0xffff);
+data[3257] = String.fromCharCode (0xffff);
+data[3258] = String.fromCharCode (0xffff);
+data[3259] = String.fromCharCode (0xffff);
+data[3260] = String.fromCharCode (0xffff);
+data[3261] = String.fromCharCode (0xffff);
+data[3262] = String.fromCharCode (0xffff);
+data[3263] = String.fromCharCode (0xffff);
+data[3264] = String.fromCharCode (0xffff);
+data[3265] = String.fromCharCode (0xffff);
+data[3266] = String.fromCharCode (0xffff);
+data[3267] = String.fromCharCode (0xffff);
+data[3268] = String.fromCharCode (0xffff);
+data[3269] = String.fromCharCode (0xffff);
+data[3270] = String.fromCharCode (0xffff);
+data[3271] = String.fromCharCode (0xffff);
+data[3272] = String.fromCharCode (0xffff);
+data[3273] = String.fromCharCode (0xffff);
+data[3274] = String.fromCharCode (0xffff);
+data[3275] = String.fromCharCode (0xffff);
+data[3276] = String.fromCharCode (0xffff);
+data[3277] = String.fromCharCode (0xffff);
+data[3278] = String.fromCharCode (0xffff);
+data[3279] = String.fromCharCode (0xffff);
+data[3280] = String.fromCharCode (0xffff);
+data[3281] = String.fromCharCode (0xffff);
+data[3282] = String.fromCharCode (0xffff);
+data[3283] = String.fromCharCode (0xffff);
+data[3284] = String.fromCharCode (0xffff);
+data[3285] = String.fromCharCode (0xffff);
+data[3286] = String.fromCharCode (0xffff);
+data[3287] = String.fromCharCode (0xffff);
+data[3288] = String.fromCharCode (0xffff);
+data[3289] = String.fromCharCode (0xffff);
+data[3290] = String.fromCharCode (0xffff);
+data[3291] = String.fromCharCode (0xffff);
+data[3292] = String.fromCharCode (0xffff);
+data[3293] = String.fromCharCode (0xffff);
+data[3294] = String.fromCharCode (0xffff);
+data[3295] = String.fromCharCode (0xffff);
+data[3296] = String.fromCharCode (0xffff);
+data[3297] = String.fromCharCode (0xffff);
+data[3298] = String.fromCharCode (0xffff);
+data[3299] = String.fromCharCode (0xffff);
+data[3300] = String.fromCharCode (0xffff);
+data[3301] = String.fromCharCode (0xffff);
+data[3302] = String.fromCharCode (0xffff);
+data[3303] = String.fromCharCode (0xffff);
+data[3304] = String.fromCharCode (0xffff);
+data[3305] = String.fromCharCode (0xffff);
+data[3306] = String.fromCharCode (0xffff);
+data[3307] = String.fromCharCode (0xffff);
+data[3308] = String.fromCharCode (0xffff);
+data[3309] = String.fromCharCode (0xffff);
+data[3310] = String.fromCharCode (0xffff);
+data[3311] = String.fromCharCode (0xffff);
+data[3312] = String.fromCharCode (0xffff);
+data[3313] = String.fromCharCode (0xffff);
+data[3314] = String.fromCharCode (0xffff);
+data[3315] = String.fromCharCode (0xffff);
+data[3316] = String.fromCharCode (0xffff);
+data[3317] = String.fromCharCode (0xffff);
+data[3318] = String.fromCharCode (0xffff);
+data[3319] = String.fromCharCode (0xffff);
+data[3320] = String.fromCharCode (0xffff);
+data[3321] = String.fromCharCode (0xffff);
+data[3322] = String.fromCharCode (0xffff);
+data[3323] = String.fromCharCode (0xffff);
+data[3324] = String.fromCharCode (0xffff);
+data[3325] = String.fromCharCode (0xffff);
+data[3326] = String.fromCharCode (0xffff);
+data[3327] = String.fromCharCode (0xffff);
+data[3328] = String.fromCharCode (0xffff);
+data[3329] = String.fromCharCode (0xffff);
+data[3330] = String.fromCharCode (0xffff);
+data[3331] = String.fromCharCode (0xffff);
+data[3332] = String.fromCharCode (0xffff);
+data[3333] = String.fromCharCode (0xffff);
+data[3334] = String.fromCharCode (0xffff);
+data[3335] = String.fromCharCode (0xffff);
+data[3336] = String.fromCharCode (0xffff);
+data[3337] = String.fromCharCode (0xffff);
+data[3338] = String.fromCharCode (0xffff);
+data[3339] = String.fromCharCode (0xffff);
+data[3340] = String.fromCharCode (0xffff);
+data[3341] = String.fromCharCode (0xffff);
+data[3342] = String.fromCharCode (0xffff);
+data[3343] = String.fromCharCode (0xffff);
+data[3344] = String.fromCharCode (0xffff);
+data[3345] = String.fromCharCode (0xffff);
+data[3346] = String.fromCharCode (0xffff);
+data[3347] = String.fromCharCode (0xffff);
+data[3348] = String.fromCharCode (0xffff);
+data[3349] = String.fromCharCode (0xffff);
+data[3350] = String.fromCharCode (0xffff);
+data[3351] = String.fromCharCode (0xffff);
+data[3352] = String.fromCharCode (0xffff);
+data[3353] = String.fromCharCode (0xffff);
+data[3354] = String.fromCharCode (0xffff);
+data[3355] = String.fromCharCode (0xffff);
+data[3356] = String.fromCharCode (0xffff);
+data[3357] = String.fromCharCode (0xffff);
+data[3358] = String.fromCharCode (0xffff);
+data[3359] = String.fromCharCode (0xffff);
+data[3360] = String.fromCharCode (0xffff);
+data[3361] = String.fromCharCode (0xffff);
+data[3362] = String.fromCharCode (0xffff);
+data[3363] = String.fromCharCode (0xffff);
+data[3364] = String.fromCharCode (0xffff);
+data[3365] = String.fromCharCode (0xffff);
+data[3366] = String.fromCharCode (0xffff);
+data[3367] = String.fromCharCode (0xffff);
+data[3368] = String.fromCharCode (0xffff);
+data[3369] = String.fromCharCode (0xffff);
+data[3370] = String.fromCharCode (0xffff);
+data[3371] = String.fromCharCode (0xffff);
+data[3372] = String.fromCharCode (0xffff);
+data[3373] = String.fromCharCode (0xffff);
+data[3374] = String.fromCharCode (0xffff);
+data[3375] = String.fromCharCode (0xffff);
+data[3376] = String.fromCharCode (0xffff);
+data[3377] = String.fromCharCode (0xffff);
+data[3378] = String.fromCharCode (0xffff);
+data[3379] = String.fromCharCode (0xffff);
+data[3380] = String.fromCharCode (0xffff);
+data[3381] = String.fromCharCode (0xffff);
+data[3382] = String.fromCharCode (0xffff);
+data[3383] = String.fromCharCode (0xffff);
+data[3384] = String.fromCharCode (0xffff);
+data[3385] = String.fromCharCode (0xffff);
+data[3386] = String.fromCharCode (0xffff);
+data[3387] = String.fromCharCode (0xffff);
+data[3388] = String.fromCharCode (0xffff);
+data[3389] = String.fromCharCode (0xffff);
+data[3390] = String.fromCharCode (0xffff);
+data[3391] = String.fromCharCode (0xffff);
+data[3392] = String.fromCharCode (0xffff);
+data[3393] = String.fromCharCode (0xffff);
+data[3394] = String.fromCharCode (0xffff);
+data[3395] = String.fromCharCode (0xffff);
+data[3396] = String.fromCharCode (0xffff);
+data[3397] = String.fromCharCode (0xffff);
+data[3398] = String.fromCharCode (0xffff);
+data[3399] = String.fromCharCode (0xffff);
+data[3400] = String.fromCharCode (0xffff);
+data[3401] = String.fromCharCode (0xffff);
+data[3402] = String.fromCharCode (0xffff);
+data[3403] = String.fromCharCode (0xffff);
+data[3404] = String.fromCharCode (0xffff);
+data[3405] = String.fromCharCode (0xffff);
+data[3406] = String.fromCharCode (0xffff);
+data[3407] = String.fromCharCode (0xffff);
+data[3408] = String.fromCharCode (0xffff);
+data[3409] = String.fromCharCode (0xffff);
+data[3410] = String.fromCharCode (0xffff);
+data[3411] = String.fromCharCode (0xffff);
+data[3412] = String.fromCharCode (0xffff);
+data[3413] = String.fromCharCode (0xffff);
+data[3414] = String.fromCharCode (0xffff);
+data[3415] = String.fromCharCode (0xffff);
+data[3416] = String.fromCharCode (0xffff);
+data[3417] = String.fromCharCode (0xffff);
+data[3418] = String.fromCharCode (0xffff);
+data[3419] = String.fromCharCode (0xffff);
+data[3420] = String.fromCharCode (0xffff);
+data[3421] = String.fromCharCode (0xffff);
+data[3422] = String.fromCharCode (0xffff);
+data[3423] = String.fromCharCode (0xffff);
+data[3424] = String.fromCharCode (0xffff);
+data[3425] = String.fromCharCode (0xffff);
+data[3426] = String.fromCharCode (0xffff);
+data[3427] = String.fromCharCode (0xffff);
+data[3428] = String.fromCharCode (0xffff);
+data[3429] = String.fromCharCode (0xffff);
+data[3430] = String.fromCharCode (0xffff);
+data[3431] = String.fromCharCode (0xffff);
+data[3432] = String.fromCharCode (0xffff);
+data[3433] = String.fromCharCode (0xffff);
+data[3434] = String.fromCharCode (0xffff);
+data[3435] = String.fromCharCode (0xffff);
+data[3436] = String.fromCharCode (0xffff);
+data[3437] = String.fromCharCode (0xffff);
+data[3438] = String.fromCharCode (0xffff);
+data[3439] = String.fromCharCode (0xffff);
+data[3440] = String.fromCharCode (0xffff);
+data[3441] = String.fromCharCode (0xffff);
+data[3442] = String.fromCharCode (0xffff);
+data[3443] = String.fromCharCode (0xffff);
+data[3444] = String.fromCharCode (0xffff);
+data[3445] = String.fromCharCode (0xffff);
+data[3446] = String.fromCharCode (0xffff);
+data[3447] = String.fromCharCode (0xffff);
+data[3448] = String.fromCharCode (0xffff);
+data[3449] = String.fromCharCode (0xffff);
+data[3450] = String.fromCharCode (0x000f);
+data[3984] = String.fromCharCode (0xffff);
+data[3985] = String.fromCharCode (0xffff);
+data[3986] = String.fromCharCode (0xffff);
+data[3987] = String.fromCharCode (0xffff);
+data[3988] = String.fromCharCode (0xffff);
+data[3989] = String.fromCharCode (0xffff);
+data[3990] = String.fromCharCode (0xffff);
+data[3991] = String.fromCharCode (0xffff);
+data[3992] = String.fromCharCode (0xffff);
+data[3993] = String.fromCharCode (0xffff);
+data[3994] = String.fromCharCode (0xffff);
+data[3995] = String.fromCharCode (0xffff);
+data[3996] = String.fromCharCode (0xffff);
+data[3997] = String.fromCharCode (0xffff);
+data[3998] = String.fromCharCode (0xffff);
+data[3999] = String.fromCharCode (0xffff);
+data[4000] = String.fromCharCode (0xffff);
+data[4001] = String.fromCharCode (0xffff);
+data[4002] = String.fromCharCode (0x3fff);
+data[4016] = String.fromCharCode (0x007f);
+data[4017] = String.fromCharCode (0x80f8);
+data[4018] = String.fromCharCode (0xfdff);
+data[4019] = String.fromCharCode (0x5f7f);
+data[4020] = String.fromCharCode (0xffdb);
+data[4021] = String.fromCharCode (0xffff);
+data[4022] = String.fromCharCode (0xffff);
+data[4023] = String.fromCharCode (0xffff);
+data[4024] = String.fromCharCode (0xffff);
+data[4025] = String.fromCharCode (0xffff);
+data[4026] = String.fromCharCode (0xffff);
+data[4027] = String.fromCharCode (0x0003);
+data[4029] = String.fromCharCode (0xfff8);
+data[4030] = String.fromCharCode (0xffff);
+data[4031] = String.fromCharCode (0xffff);
+data[4032] = String.fromCharCode (0xffff);
+data[4033] = String.fromCharCode (0xffff);
+data[4034] = String.fromCharCode (0xffff);
+data[4035] = String.fromCharCode (0xffff);
+data[4036] = String.fromCharCode (0xffff);
+data[4037] = String.fromCharCode (0xffff);
+data[4038] = String.fromCharCode (0xffff);
+data[4039] = String.fromCharCode (0xffff);
+data[4040] = String.fromCharCode (0xffff);
+data[4041] = String.fromCharCode (0xffff);
+data[4042] = String.fromCharCode (0xffff);
+data[4043] = String.fromCharCode (0xffff);
+data[4044] = String.fromCharCode (0xffff);
+data[4045] = String.fromCharCode (0xffff);
+data[4046] = String.fromCharCode (0xffff);
+data[4047] = String.fromCharCode (0xffff);
+data[4048] = String.fromCharCode (0xffff);
+data[4049] = String.fromCharCode (0xffff);
+data[4050] = String.fromCharCode (0xffff);
+data[4051] = String.fromCharCode (0x3fff);
+data[4053] = String.fromCharCode (0xffff);
+data[4054] = String.fromCharCode (0xffff);
+data[4055] = String.fromCharCode (0xffff);
+data[4056] = String.fromCharCode (0xffff);
+data[4057] = String.fromCharCode (0xfffc);
+data[4058] = String.fromCharCode (0xffff);
+data[4059] = String.fromCharCode (0xffff);
+data[4060] = String.fromCharCode (0x00ff);
+data[4063] = String.fromCharCode (0x0fff);
+data[4071] = String.fromCharCode (0xffd7);
+data[4072] = String.fromCharCode (0xffff);
+data[4073] = String.fromCharCode (0xffff);
+data[4074] = String.fromCharCode (0xffff);
+data[4075] = String.fromCharCode (0xffff);
+data[4076] = String.fromCharCode (0xffff);
+data[4077] = String.fromCharCode (0xffff);
+data[4078] = String.fromCharCode (0xffff);
+data[4079] = String.fromCharCode (0x1fff);
+data[4082] = String.fromCharCode (0xfffe);
+data[4083] = String.fromCharCode (0x07ff);
+data[4084] = String.fromCharCode (0xfffe);
+data[4085] = String.fromCharCode (0x07ff);
+data[4086] = String.fromCharCode (0xffc0);
+data[4087] = String.fromCharCode (0xffff);
+data[4088] = String.fromCharCode (0xffff);
+data[4089] = String.fromCharCode (0xffff);
+data[4090] = String.fromCharCode (0xffff);
+data[4091] = String.fromCharCode (0x7fff);
+data[4092] = String.fromCharCode (0xfcfc);
+data[4093] = String.fromCharCode (0x1cfc);
+data[4100] = String.fromCharCode (0xfffe);
+data[4101] = String.fromCharCode (0x07ff);
+data[4102] = String.fromCharCode (0xfffe);
+data[4103] = String.fromCharCode (0x07ff);
+data[4106] = String.fromCharCode (0x0400);
+data[4107] = String.fromCharCode (0x0420);
+data[4108] = String.fromCharCode (0xffff);
+data[4109] = String.fromCharCode (0xff7f);
+data[4110] = String.fromCharCode (0xffff);
+data[4111] = String.fromCharCode (0xff7f);
+data[4112] = String.fromCharCode (0xffff);
+data[4113] = String.fromCharCode (0xffff);
+data[4114] = String.fromCharCode (0xffff);
+data[4115] = String.fromCharCode (0xffff);
+data[4116] = String.fromCharCode (0xffff);
+data[4117] = String.fromCharCode (0xffff);
+data[4118] = String.fromCharCode (0xffff);
+data[4119] = String.fromCharCode (0xffff);
+data[4120] = String.fromCharCode (0xffff);
+data[4121] = String.fromCharCode (0xffff);
+data[4122] = String.fromCharCode (0xffff);
+data[4123] = String.fromCharCode (0xffff);
+data[4124] = String.fromCharCode (0xffff);
+data[4125] = String.fromCharCode (0xffff);
+data[4126] = String.fromCharCode (0xffff);
+data[4127] = String.fromCharCode (0xfc3f);
+data[4128] = String.fromCharCode (0xffff);
+data[4129] = String.fromCharCode (0x00ff);
+data[4133] = String.fromCharCode (0xffff);
+data[4134] = String.fromCharCode (0xffff);
+data[4135] = String.fromCharCode (0xffff);
+data[4136] = String.fromCharCode (0xffff);
+data[4137] = String.fromCharCode (0xffff);
+data[4138] = String.fromCharCode (0x01ff);
+data[4139] = String.fromCharCode (0xf9ff);
+data[4140] = String.fromCharCode (0x0003);
+data[4141] = String.fromCharCode (0x0003);
+data[4142] = String.fromCharCode (0x001f);
+data[4151] = String.fromCharCode (0x0400);
+data[4152] = String.fromCharCode (0xd740);
+data[4153] = String.fromCharCode (0xffff);
+data[4154] = String.fromCharCode (0xfffb);
+data[4155] = String.fromCharCode (0xffff);
+data[4156] = String.fromCharCode (0x7fff);
+data[4157] = String.fromCharCode (0x547f);
+data[4158] = String.fromCharCode (0x00fd);
+});
+c$.white_f = Clazz.defineMethod (c$, "white_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.white = new com.stevesoft.pat.Bits (data);
+data[0] = String.fromCharCode (0x3e00);
+data[1] = String.fromCharCode (0xf000);
+data[2] = String.fromCharCode (0x0001);
+data[512] = String.fromCharCode (0x0fff);
+data[514] = String.fromCharCode (0x0300);
+data[768] = String.fromCharCode (0x0001);
+data[4096] = String.fromCharCode (0x3e00);
+data[4097] = String.fromCharCode (0xf000);
+data[4098] = String.fromCharCode (0x0001);
+});
+c$.punct_f = Clazz.defineMethod (c$, "punct_f",
+function () {
+var data = Clazz.newCharArray (4159, '\0');
+com.stevesoft.pat.Bits.punct = new com.stevesoft.pat.Bits (data);
+data[2] = String.fromCharCode (0xf7ee);
+data[3] = String.fromCharCode (0x8c00);
+data[4] = String.fromCharCode (0x0001);
+data[5] = String.fromCharCode (0xb800);
+data[7] = String.fromCharCode (0x2800);
+data[10] = String.fromCharCode (0x2802);
+data[11] = String.fromCharCode (0x8880);
+data[55] = String.fromCharCode (0x4030);
+data[56] = String.fromCharCode (0x0080);
+data[85] = String.fromCharCode (0xfc00);
+data[88] = String.fromCharCode (0x0200);
+data[91] = String.fromCharCode (0x4000);
+data[92] = String.fromCharCode (0x0009);
+data[95] = String.fromCharCode (0x0018);
+data[96] = String.fromCharCode (0x1000);
+data[97] = String.fromCharCode (0x8800);
+data[102] = String.fromCharCode (0x3c00);
+data[109] = String.fromCharCode (0x0010);
+data[150] = '0';
+data[151] = String.fromCharCode (0x0001);
+data[226] = String.fromCharCode (0x8000);
+data[229] = String.fromCharCode (0x0c00);
+data[234] = String.fromCharCode (0x8000);
+data[240] = String.fromCharCode (0xfff0);
+data[241] = String.fromCharCode (0x0007);
+data[243] = String.fromCharCode (0x3c00);
+data[248] = String.fromCharCode (0x0020);
+data[271] = String.fromCharCode (0x0800);
+data[513] = String.fromCharCode (0xffff);
+data[514] = String.fromCharCode (0x00ff);
+data[515] = String.fromCharCode (0xffff);
+data[516] = 'o';
+data[519] = String.fromCharCode (0x6000);
+data[520] = String.fromCharCode (0x6000);
+data[562] = String.fromCharCode (0x0600);
+data[768] = String.fromCharCode (0xff4e);
+data[769] = String.fromCharCode (0xfff3);
+data[771] = String.fromCharCode (0x0001);
+data[783] = String.fromCharCode (0x0800);
+data[4051] = String.fromCharCode (0xc000);
+data[4067] = String.fromCharCode (0xffff);
+data[4068] = String.fromCharCode (0xfe1f);
+data[4069] = String.fromCharCode (0xfff7);
+data[4070] = String.fromCharCode (0x0d0b);
+data[4080] = String.fromCharCode (0xf7ee);
+data[4081] = String.fromCharCode (0x8c00);
+data[4082] = String.fromCharCode (0x0001);
+data[4083] = String.fromCharCode (0xb800);
+data[4085] = String.fromCharCode (0x2800);
+data[4086] = String.fromCharCode (0x003e);
+data[4098] = String.fromCharCode (0xf7ee);
+data[4099] = String.fromCharCode (0x8c00);
+data[4100] = String.fromCharCode (0x0001);
+data[4101] = String.fromCharCode (0xb800);
+data[4103] = String.fromCharCode (0x2800);
+data[4106] = String.fromCharCode (0x2802);
+data[4107] = String.fromCharCode (0x8880);
+data[4151] = String.fromCharCode (0x4030);
+data[4152] = String.fromCharCode (0x0080);
+});
+Clazz.defineStatics (c$,
+"upper", null,
+"lower", null,
+"title", null,
+"currency", null,
+"decimal_digit", null,
+"math", null,
+"letter", null,
+"white", null,
+"punct", null);
diff --git a/bin/com/stevesoft/pat/Boundary.js b/bin/com/stevesoft/pat/Boundary.js
index 58bb19c..9eaff99 100644
--- a/bin/com/stevesoft/pat/Boundary.js
+++ b/bin/com/stevesoft/pat/Boundary.js
@@ -1,52 +1,52 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Boundary", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "Boundary", com.stevesoft.pat.Pattern);
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "\\b" + this.nextString ();
-});
-Clazz.defineMethod (c$, "isAChar",
-function (c) {
-if (c >= 'a' && c <= 'z') {
-return true;
-}if (c >= 'A' && c <= 'Z') {
-return true;
-}if (c >= '0' && c <= '9') {
-return true;
-}if (c == '_') {
-return true;
-}return false;
-}, "~S");
-Clazz.defineMethod (c$, "matchLeft",
-function (pos, pt) {
-if (pos <= 0) {
-return true;
-}if (this.isAChar (pt.src.charAt (pos)) && this.isAChar (pt.src.charAt (pos - 1))) {
-return false;
-}return true;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "matchRight",
-function (pos, pt) {
-if (pos < 0) {
-return false;
-}if (pos + 1 >= pt.src.length ()) {
-return true;
-}if (this.isAChar (pt.src.charAt (pos)) && this.isAChar (pt.src.charAt (pos + 1))) {
-return false;
-}return true;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (this.matchRight (pos - 1, pt) || this.matchLeft (pos, pt)) {
-return this.nextMatch (pos, pt);
-}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (0);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.Boundary ();
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Boundary", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "Boundary", com.stevesoft.pat.Pattern);
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "\\b" + this.nextString ();
+});
+Clazz.defineMethod (c$, "isAChar",
+function (c) {
+if (c >= 'a' && c <= 'z') {
+return true;
+}if (c >= 'A' && c <= 'Z') {
+return true;
+}if (c >= '0' && c <= '9') {
+return true;
+}if (c == '_') {
+return true;
+}return false;
+}, "~S");
+Clazz.defineMethod (c$, "matchLeft",
+function (pos, pt) {
+if (pos <= 0) {
+return true;
+}if (this.isAChar (pt.src.charAt (pos)) && this.isAChar (pt.src.charAt (pos - 1))) {
+return false;
+}return true;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "matchRight",
+function (pos, pt) {
+if (pos < 0) {
+return false;
+}if (pos + 1 >= pt.src.length ()) {
+return true;
+}if (this.isAChar (pt.src.charAt (pos)) && this.isAChar (pt.src.charAt (pos + 1))) {
+return false;
+}return true;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (this.matchRight (pos - 1, pt) || this.matchLeft (pos, pt)) {
+return this.nextMatch (pos, pt);
+}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (0);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.Boundary ();
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/Bracket.js b/bin/com/stevesoft/pat/Bracket.js
index 26a2303..064ec34 100644
--- a/bin/com/stevesoft/pat/Bracket.js
+++ b/bin/com/stevesoft/pat/Bracket.js
@@ -1,60 +1,60 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Or"], "com.stevesoft.pat.Bracket", ["com.stevesoft.pat.patInt", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.neg = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Bracket", com.stevesoft.pat.Or);
-Clazz.makeConstructor (c$,
-function (n) {
-Clazz.superConstructor (this, com.stevesoft.pat.Bracket, []);
-this.neg = n;
-}, "~B");
-Clazz.overrideMethod (c$, "leftForm",
-function () {
-if (this.neg) {
-return "[^";
-} else {
-return "[";
-}});
-Clazz.overrideMethod (c$, "rightForm",
-function () {
-return "]";
-});
-Clazz.overrideMethod (c$, "sepForm",
-function () {
-return "";
-});
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-if (pos >= pt.src.length ()) {
-return -1;
-}var r = Clazz.superCall (this, com.stevesoft.pat.Bracket, "matchInternal", [pos, pt]);
-if ((this.neg && r < 0) || (!this.neg && r >= 0)) {
-return this.nextMatch (pos + 1, pt);
-}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "addOr",
-function (p) {
-this.pv = null;
-this.v.addElement (p);
-p.setParent (null);
-return this;
-}, "com.stevesoft.pat.Pattern");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-var b = new com.stevesoft.pat.Bracket (this.neg);
-b.v = new java.util.Vector ();
-for (var i = 0; i < this.v.size (); i++) {
-b.v.addElement ((this.v.elementAt (i)).clone1 (h));
-}
-return b;
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Or"], "com.stevesoft.pat.Bracket", ["com.stevesoft.pat.patInt", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.neg = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Bracket", com.stevesoft.pat.Or);
+Clazz.makeConstructor (c$,
+function (n) {
+Clazz.superConstructor (this, com.stevesoft.pat.Bracket, []);
+this.neg = n;
+}, "~B");
+Clazz.overrideMethod (c$, "leftForm",
+function () {
+if (this.neg) {
+return "[^";
+} else {
+return "[";
+}});
+Clazz.overrideMethod (c$, "rightForm",
+function () {
+return "]";
+});
+Clazz.overrideMethod (c$, "sepForm",
+function () {
+return "";
+});
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+if (pos >= pt.src.length ()) {
+return -1;
+}var r = Clazz.superCall (this, com.stevesoft.pat.Bracket, "matchInternal", [pos, pt]);
+if ((this.neg && r < 0) || (!this.neg && r >= 0)) {
+return this.nextMatch (pos + 1, pt);
+}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "addOr",
+function (p) {
+this.pv = null;
+this.v.addElement (p);
+p.setParent (null);
+return this;
+}, "com.stevesoft.pat.Pattern");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+var b = new com.stevesoft.pat.Bracket (this.neg);
+b.v = new java.util.Vector ();
+for (var i = 0; i < this.v.size (); i++) {
+b.v.addElement ((this.v.elementAt (i)).clone1 (h));
+}
+return b;
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/CaseMgr.js b/bin/com/stevesoft/pat/CaseMgr.js
index e35645b..30fe2ec 100644
--- a/bin/com/stevesoft/pat/CaseMgr.js
+++ b/bin/com/stevesoft/pat/CaseMgr.js
@@ -1,94 +1,94 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.CaseMgr", ["java.lang.Character"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "CaseMgr");
-c$.toUpperCaseC = Clazz.defineMethod (c$, "toUpperCaseC",
-function (c) {
-return Character.toUpperCase (c);
-}, "~S");
-c$.toLowerCaseC = Clazz.defineMethod (c$, "toLowerCaseC",
-function (c) {
-return Character.toLowerCase (c);
-}, "~S");
-c$.toUpperCase = Clazz.defineMethod (c$, "toUpperCase",
-function (s) {
-return s.toUpperCase ();
-}, "~S");
-c$.toLowerCase = Clazz.defineMethod (c$, "toLowerCase",
-function (s) {
-return s.toLowerCase ();
-}, "~S");
-c$.toTitleCaseC = Clazz.defineMethod (c$, "toTitleCaseC",
-function (c) {
-return Character.toUpperCase (c);
-}, "~S");
-c$.regionMatchesLike = Clazz.defineMethod (c$, "regionMatchesLike",
-function (s1, ign, i1, s2, i2, i3) {
-var itot = i2 + i3;
-if (itot > s2.length () || i1 + i3 > s1.length ()) {
-return false;
-}if (!ign) {
-for (var i = i2; i < itot; i++) {
-if (s2.charAt (i) != s1.charAt (i1++)) {
-return false;
-}}
-} else {
-for (var i = i2; i < itot; i++) {
-if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
-return false;
-}}
-}return true;
-}, "com.stevesoft.pat.StringLike,~B,~N,com.stevesoft.pat.StringLike,~N,~N");
-c$.regionMatches = Clazz.defineMethod (c$, "regionMatches",
-function (s1, ign, i1, s2, i2, i3) {
-var itot = i2 + i3;
-if (itot > s2.length () || i1 + i3 > s1.length) {
-return false;
-}if (!ign) {
-for (var i = i2; i < itot; i++) {
-if (s2.charAt (i) != s1.charAt (i1++)) {
-return false;
-}}
-} else {
-for (var i = i2; i < itot; i++) {
-if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
-return false;
-}}
-}return true;
-}, "~S,~B,~N,com.stevesoft.pat.StringLike,~N,~N");
-c$.regionMatchesLike2 = Clazz.defineMethod (c$, "regionMatchesLike2",
-function (s1, ign, i1, s2, i2, i3) {
-var itot = i2 + i3;
-if (itot > s2.length || i1 + i3 > s1.length ()) {
-return false;
-}if (!ign) {
-for (var i = i2; i < itot; i++) {
-if (s2.charAt (i) != s1.charAt (i1++)) {
-return false;
-}}
-} else {
-for (var i = i2; i < itot; i++) {
-if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
-return false;
-}}
-}return true;
-}, "com.stevesoft.pat.StringLike,~B,~N,~S,~N,~N");
-c$.regionMatches2 = Clazz.defineMethod (c$, "regionMatches2",
-function (s1, ign, i1, s2, i2, i3) {
-var itot = i2 + i3;
-if (itot > s2.length || i1 + i3 > s1.length) {
-return false;
-}if (!ign) {
-for (var i = i2; i < itot; i++) {
-if (s2.charAt (i) != s1.charAt (i1++)) {
-return false;
-}}
-} else {
-for (var i = i2; i < itot; i++) {
-if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
-return false;
-}}
-}return true;
-}, "~S,~B,~N,~S,~N,~N");
-Clazz.defineStatics (c$,
-"java_1_0", false);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.CaseMgr", ["java.lang.Character"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "CaseMgr");
+c$.toUpperCaseC = Clazz.defineMethod (c$, "toUpperCaseC",
+function (c) {
+return Character.toUpperCase (c);
+}, "~S");
+c$.toLowerCaseC = Clazz.defineMethod (c$, "toLowerCaseC",
+function (c) {
+return Character.toLowerCase (c);
+}, "~S");
+c$.toUpperCase = Clazz.defineMethod (c$, "toUpperCase",
+function (s) {
+return s.toUpperCase ();
+}, "~S");
+c$.toLowerCase = Clazz.defineMethod (c$, "toLowerCase",
+function (s) {
+return s.toLowerCase ();
+}, "~S");
+c$.toTitleCaseC = Clazz.defineMethod (c$, "toTitleCaseC",
+function (c) {
+return Character.toUpperCase (c);
+}, "~S");
+c$.regionMatchesLike = Clazz.defineMethod (c$, "regionMatchesLike",
+function (s1, ign, i1, s2, i2, i3) {
+var itot = i2 + i3;
+if (itot > s2.length () || i1 + i3 > s1.length ()) {
+return false;
+}if (!ign) {
+for (var i = i2; i < itot; i++) {
+if (s2.charAt (i) != s1.charAt (i1++)) {
+return false;
+}}
+} else {
+for (var i = i2; i < itot; i++) {
+if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
+return false;
+}}
+}return true;
+}, "com.stevesoft.pat.StringLike,~B,~N,com.stevesoft.pat.StringLike,~N,~N");
+c$.regionMatches = Clazz.defineMethod (c$, "regionMatches",
+function (s1, ign, i1, s2, i2, i3) {
+var itot = i2 + i3;
+if (itot > s2.length () || i1 + i3 > s1.length) {
+return false;
+}if (!ign) {
+for (var i = i2; i < itot; i++) {
+if (s2.charAt (i) != s1.charAt (i1++)) {
+return false;
+}}
+} else {
+for (var i = i2; i < itot; i++) {
+if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
+return false;
+}}
+}return true;
+}, "~S,~B,~N,com.stevesoft.pat.StringLike,~N,~N");
+c$.regionMatchesLike2 = Clazz.defineMethod (c$, "regionMatchesLike2",
+function (s1, ign, i1, s2, i2, i3) {
+var itot = i2 + i3;
+if (itot > s2.length || i1 + i3 > s1.length ()) {
+return false;
+}if (!ign) {
+for (var i = i2; i < itot; i++) {
+if (s2.charAt (i) != s1.charAt (i1++)) {
+return false;
+}}
+} else {
+for (var i = i2; i < itot; i++) {
+if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
+return false;
+}}
+}return true;
+}, "com.stevesoft.pat.StringLike,~B,~N,~S,~N,~N");
+c$.regionMatches2 = Clazz.defineMethod (c$, "regionMatches2",
+function (s1, ign, i1, s2, i2, i3) {
+var itot = i2 + i3;
+if (itot > s2.length || i1 + i3 > s1.length) {
+return false;
+}if (!ign) {
+for (var i = i2; i < itot; i++) {
+if (s2.charAt (i) != s1.charAt (i1++)) {
+return false;
+}}
+} else {
+for (var i = i2; i < itot; i++) {
+if (com.stevesoft.pat.CaseMgr.toLowerCaseC (s2.charAt (i)) != com.stevesoft.pat.CaseMgr.toLowerCaseC (s1.charAt (i1++))) {
+return false;
+}}
+}return true;
+}, "~S,~B,~N,~S,~N,~N");
+Clazz.defineStatics (c$,
+"java_1_0", false);
+});
diff --git a/bin/com/stevesoft/pat/ChangeRule.js b/bin/com/stevesoft/pat/ChangeRule.js
index 1a6f683..3edb0ff 100644
--- a/bin/com/stevesoft/pat/ChangeRule.js
+++ b/bin/com/stevesoft/pat/ChangeRule.js
@@ -1,35 +1,35 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.ChangeRule", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.NewRule = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "ChangeRule", com.stevesoft.pat.SpecialRule);
-Clazz.makeConstructor (c$,
-function (c) {
-Clazz.superConstructor (this, com.stevesoft.pat.ChangeRule, []);
-this.NewRule = c.NewRule;
-}, "com.stevesoft.pat.ChangeRule");
-Clazz.makeConstructor (c$,
-function (nm, rr) {
-Clazz.superConstructor (this, com.stevesoft.pat.ChangeRule, []);
-this.name = nm;
-this.NewRule = rr;
-}, "~S,com.stevesoft.pat.Regex");
-Clazz.makeConstructor (c$,
-function (nm, tr) {
-Clazz.superConstructor (this, com.stevesoft.pat.ChangeRule, []);
-this.name = nm;
-this.NewRule = tr.rp;
-}, "~S,com.stevesoft.pat.Transformer");
-Clazz.overrideMethod (c$, "clone1",
-function () {
-return new com.stevesoft.pat.ChangeRule (this);
-});
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "${=" + this.name + "}";
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, rr) {
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.ChangeRule", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.NewRule = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "ChangeRule", com.stevesoft.pat.SpecialRule);
+Clazz.makeConstructor (c$,
+function (c) {
+Clazz.superConstructor (this, com.stevesoft.pat.ChangeRule, []);
+this.NewRule = c.NewRule;
+}, "com.stevesoft.pat.ChangeRule");
+Clazz.makeConstructor (c$,
+function (nm, rr) {
+Clazz.superConstructor (this, com.stevesoft.pat.ChangeRule, []);
+this.name = nm;
+this.NewRule = rr;
+}, "~S,com.stevesoft.pat.Regex");
+Clazz.makeConstructor (c$,
+function (nm, tr) {
+Clazz.superConstructor (this, com.stevesoft.pat.ChangeRule, []);
+this.name = nm;
+this.NewRule = tr.rp;
+}, "~S,com.stevesoft.pat.Transformer");
+Clazz.overrideMethod (c$, "clone1",
+function () {
+return new com.stevesoft.pat.ChangeRule (this);
+});
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "${=" + this.name + "}";
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, rr) {
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+});
diff --git a/bin/com/stevesoft/pat/CodeRule.js b/bin/com/stevesoft/pat/CodeRule.js
index 85a0917..92c00f3 100644
--- a/bin/com/stevesoft/pat/CodeRule.js
+++ b/bin/com/stevesoft/pat/CodeRule.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.CodeRule", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.c = 'E';
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "CodeRule", com.stevesoft.pat.SpecialRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.CodeRule, []);
-});
-Clazz.makeConstructor (c$,
-function (c) {
-Clazz.superConstructor (this, com.stevesoft.pat.CodeRule, []);
-this.c = c;
-}, "~S");
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-sb.setMode (this.c);
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "\\" + this.c;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.CodeRule", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.c = 'E';
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "CodeRule", com.stevesoft.pat.SpecialRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.CodeRule, []);
+});
+Clazz.makeConstructor (c$,
+function (c) {
+Clazz.superConstructor (this, com.stevesoft.pat.CodeRule, []);
+this.c = c;
+}, "~S");
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+sb.setMode (this.c);
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "\\" + this.c;
+});
+});
diff --git a/bin/com/stevesoft/pat/Ctrl.js b/bin/com/stevesoft/pat/Ctrl.js
index 9a42c67..43250ce 100644
--- a/bin/com/stevesoft/pat/Ctrl.js
+++ b/bin/com/stevesoft/pat/Ctrl.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-c$ = Clazz.declareType (com.stevesoft.pat, "Ctrl");
-Clazz.defineStatics (c$,
-"cmap", Clazz.newCharArray (-1, [String.fromCharCode (64), 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', String.fromCharCode (91), String.fromCharCode (92), String.fromCharCode (93), String.fromCharCode (94), String.fromCharCode (95), String.fromCharCode (96), 'a', 'a', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', String.fromCharCode (123), String.fromCharCode (124), String.fromCharCode (125), String.fromCharCode (126), String.fromCharCode (127), String.fromCharCode (0), String.fromCharCode (1), String.fromCharCode (2), String.fromCharCode (3), String.fromCharCode (4), String.fromCharCode (5), String.fromCharCode (6), String.fromCharCode (7), String.fromCharCode (8), String.fromCharCode (9), String.fromCharCode (10), String.fromCharCode (11), String.fromCharCode (12), String.fromCharCode (13), String.fromCharCode (14), String.fromCharCode (15), String.fromCharCode (16), String.fromCharCode (17), String.fromCharCode (18), String.fromCharCode (19), String.fromCharCode (20), String.fromCharCode (21), String.fromCharCode (22), String.fromCharCode (23), String.fromCharCode (24), String.fromCharCode (25), String.fromCharCode (26), String.fromCharCode (27), String.fromCharCode (27), String.fromCharCode (29), String.fromCharCode (30), String.fromCharCode (31), String.fromCharCode (32), String.fromCharCode (1), String.fromCharCode (2), String.fromCharCode (3), String.fromCharCode (4), String.fromCharCode (5), String.fromCharCode (6), String.fromCharCode (7), String.fromCharCode (8), String.fromCharCode (9), String.fromCharCode (10), String.fromCharCode (11), String.fromCharCode (12), String.fromCharCode (13), String.fromCharCode (14), String.fromCharCode (15), String.fromCharCode (16), String.fromCharCode (17), String.fromCharCode (18), String.fromCharCode (19), String.fromCharCode (20), String.fromCharCode (21), String.fromCharCode (22), String.fromCharCode (23), String.fromCharCode (24), String.fromCharCode (25), String.fromCharCode (26), String.fromCharCode (59), String.fromCharCode (60), String.fromCharCode (61), String.fromCharCode (62), String.fromCharCode (63), String.fromCharCode (192), String.fromCharCode (193), String.fromCharCode (194), String.fromCharCode (195), String.fromCharCode (196), String.fromCharCode (197), String.fromCharCode (198), String.fromCharCode (199), String.fromCharCode (200), String.fromCharCode (201), String.fromCharCode (202), String.fromCharCode (203), String.fromCharCode (204), String.fromCharCode (205), String.fromCharCode (206), String.fromCharCode (207), String.fromCharCode (208), String.fromCharCode (209), String.fromCharCode (210), String.fromCharCode (211), String.fromCharCode (212), String.fromCharCode (213), String.fromCharCode (214), String.fromCharCode (215), String.fromCharCode (216), String.fromCharCode (217), String.fromCharCode (218), String.fromCharCode (219), String.fromCharCode (220), String.fromCharCode (221), String.fromCharCode (222), String.fromCharCode (223), String.fromCharCode (224), String.fromCharCode (225), String.fromCharCode (226), String.fromCharCode (227), String.fromCharCode (228), String.fromCharCode (229), String.fromCharCode (230), String.fromCharCode (231), String.fromCharCode (232), String.fromCharCode (233), String.fromCharCode (234), String.fromCharCode (235), String.fromCharCode (236), String.fromCharCode (237), String.fromCharCode (238), String.fromCharCode (239), String.fromCharCode (240), String.fromCharCode (241), String.fromCharCode (242), String.fromCharCode (243), String.fromCharCode (244), String.fromCharCode (245), String.fromCharCode (246), String.fromCharCode (247), String.fromCharCode (248), String.fromCharCode (249), String.fromCharCode (250), String.fromCharCode (251), String.fromCharCode (252), String.fromCharCode (253), String.fromCharCode (254), String.fromCharCode (255), String.fromCharCode (128), String.fromCharCode (129), String.fromCharCode (130), String.fromCharCode (131), String.fromCharCode (132), String.fromCharCode (133), String.fromCharCode (134), String.fromCharCode (135), String.fromCharCode (136), String.fromCharCode (137), String.fromCharCode (138), String.fromCharCode (139), String.fromCharCode (140), String.fromCharCode (141), String.fromCharCode (142), String.fromCharCode (143), String.fromCharCode (144), String.fromCharCode (145), String.fromCharCode (146), String.fromCharCode (147), String.fromCharCode (148), String.fromCharCode (149), String.fromCharCode (150), String.fromCharCode (151), String.fromCharCode (152), String.fromCharCode (153), String.fromCharCode (154), String.fromCharCode (155), String.fromCharCode (156), String.fromCharCode (157), String.fromCharCode (158), String.fromCharCode (159), String.fromCharCode (160), String.fromCharCode (161), String.fromCharCode (162), String.fromCharCode (163), String.fromCharCode (164), String.fromCharCode (165), String.fromCharCode (166), String.fromCharCode (167), String.fromCharCode (168), String.fromCharCode (169), String.fromCharCode (170), String.fromCharCode (171), String.fromCharCode (172), String.fromCharCode (173), String.fromCharCode (174), String.fromCharCode (175), String.fromCharCode (176), String.fromCharCode (177), String.fromCharCode (178), String.fromCharCode (179), String.fromCharCode (180), String.fromCharCode (181), String.fromCharCode (182), String.fromCharCode (183), String.fromCharCode (184), String.fromCharCode (185), String.fromCharCode (186), String.fromCharCode (187), String.fromCharCode (188), String.fromCharCode (189), String.fromCharCode (190), String.fromCharCode (191)]));
+Clazz.declarePackage ("com.stevesoft.pat");
+c$ = Clazz.declareType (com.stevesoft.pat, "Ctrl");
+Clazz.defineStatics (c$,
+"cmap", Clazz.newCharArray (-1, [String.fromCharCode (64), 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', String.fromCharCode (91), String.fromCharCode (92), String.fromCharCode (93), String.fromCharCode (94), String.fromCharCode (95), String.fromCharCode (96), 'a', 'a', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', String.fromCharCode (123), String.fromCharCode (124), String.fromCharCode (125), String.fromCharCode (126), String.fromCharCode (127), String.fromCharCode (0), String.fromCharCode (1), String.fromCharCode (2), String.fromCharCode (3), String.fromCharCode (4), String.fromCharCode (5), String.fromCharCode (6), String.fromCharCode (7), String.fromCharCode (8), String.fromCharCode (9), String.fromCharCode (10), String.fromCharCode (11), String.fromCharCode (12), String.fromCharCode (13), String.fromCharCode (14), String.fromCharCode (15), String.fromCharCode (16), String.fromCharCode (17), String.fromCharCode (18), String.fromCharCode (19), String.fromCharCode (20), String.fromCharCode (21), String.fromCharCode (22), String.fromCharCode (23), String.fromCharCode (24), String.fromCharCode (25), String.fromCharCode (26), String.fromCharCode (27), String.fromCharCode (27), String.fromCharCode (29), String.fromCharCode (30), String.fromCharCode (31), String.fromCharCode (32), String.fromCharCode (1), String.fromCharCode (2), String.fromCharCode (3), String.fromCharCode (4), String.fromCharCode (5), String.fromCharCode (6), String.fromCharCode (7), String.fromCharCode (8), String.fromCharCode (9), String.fromCharCode (10), String.fromCharCode (11), String.fromCharCode (12), String.fromCharCode (13), String.fromCharCode (14), String.fromCharCode (15), String.fromCharCode (16), String.fromCharCode (17), String.fromCharCode (18), String.fromCharCode (19), String.fromCharCode (20), String.fromCharCode (21), String.fromCharCode (22), String.fromCharCode (23), String.fromCharCode (24), String.fromCharCode (25), String.fromCharCode (26), String.fromCharCode (59), String.fromCharCode (60), String.fromCharCode (61), String.fromCharCode (62), String.fromCharCode (63), String.fromCharCode (192), String.fromCharCode (193), String.fromCharCode (194), String.fromCharCode (195), String.fromCharCode (196), String.fromCharCode (197), String.fromCharCode (198), String.fromCharCode (199), String.fromCharCode (200), String.fromCharCode (201), String.fromCharCode (202), String.fromCharCode (203), String.fromCharCode (204), String.fromCharCode (205), String.fromCharCode (206), String.fromCharCode (207), String.fromCharCode (208), String.fromCharCode (209), String.fromCharCode (210), String.fromCharCode (211), String.fromCharCode (212), String.fromCharCode (213), String.fromCharCode (214), String.fromCharCode (215), String.fromCharCode (216), String.fromCharCode (217), String.fromCharCode (218), String.fromCharCode (219), String.fromCharCode (220), String.fromCharCode (221), String.fromCharCode (222), String.fromCharCode (223), String.fromCharCode (224), String.fromCharCode (225), String.fromCharCode (226), String.fromCharCode (227), String.fromCharCode (228), String.fromCharCode (229), String.fromCharCode (230), String.fromCharCode (231), String.fromCharCode (232), String.fromCharCode (233), String.fromCharCode (234), String.fromCharCode (235), String.fromCharCode (236), String.fromCharCode (237), String.fromCharCode (238), String.fromCharCode (239), String.fromCharCode (240), String.fromCharCode (241), String.fromCharCode (242), String.fromCharCode (243), String.fromCharCode (244), String.fromCharCode (245), String.fromCharCode (246), String.fromCharCode (247), String.fromCharCode (248), String.fromCharCode (249), String.fromCharCode (250), String.fromCharCode (251), String.fromCharCode (252), String.fromCharCode (253), String.fromCharCode (254), String.fromCharCode (255), String.fromCharCode (128), String.fromCharCode (129), String.fromCharCode (130), String.fromCharCode (131), String.fromCharCode (132), String.fromCharCode (133), String.fromCharCode (134), String.fromCharCode (135), String.fromCharCode (136), String.fromCharCode (137), String.fromCharCode (138), String.fromCharCode (139), String.fromCharCode (140), String.fromCharCode (141), String.fromCharCode (142), String.fromCharCode (143), String.fromCharCode (144), String.fromCharCode (145), String.fromCharCode (146), String.fromCharCode (147), String.fromCharCode (148), String.fromCharCode (149), String.fromCharCode (150), String.fromCharCode (151), String.fromCharCode (152), String.fromCharCode (153), String.fromCharCode (154), String.fromCharCode (155), String.fromCharCode (156), String.fromCharCode (157), String.fromCharCode (158), String.fromCharCode (159), String.fromCharCode (160), String.fromCharCode (161), String.fromCharCode (162), String.fromCharCode (163), String.fromCharCode (164), String.fromCharCode (165), String.fromCharCode (166), String.fromCharCode (167), String.fromCharCode (168), String.fromCharCode (169), String.fromCharCode (170), String.fromCharCode (171), String.fromCharCode (172), String.fromCharCode (173), String.fromCharCode (174), String.fromCharCode (175), String.fromCharCode (176), String.fromCharCode (177), String.fromCharCode (178), String.fromCharCode (179), String.fromCharCode (180), String.fromCharCode (181), String.fromCharCode (182), String.fromCharCode (183), String.fromCharCode (184), String.fromCharCode (185), String.fromCharCode (186), String.fromCharCode (187), String.fromCharCode (188), String.fromCharCode (189), String.fromCharCode (190), String.fromCharCode (191)]));
diff --git a/bin/com/stevesoft/pat/Custom.js b/bin/com/stevesoft/pat/Custom.js
index 4e0fa72..44fa656 100644
--- a/bin/com/stevesoft/pat/Custom.js
+++ b/bin/com/stevesoft/pat/Custom.js
@@ -1,41 +1,41 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.Custom", ["com.stevesoft.pat.Regex"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.select = null;
-this.v = null;
-this.start = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Custom", com.stevesoft.pat.PatternSub);
-Clazz.makeConstructor (c$,
-function (s) {
-Clazz.superConstructor (this, com.stevesoft.pat.Custom, []);
-this.select = s;
-this.v = com.stevesoft.pat.Regex.validators.get (s);
-}, "~S");
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-this.start = pos;
-return this.sub.matchInternal (pos, pt);
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var a = this.v.argsave == null ? "" : ":" + this.v.argsave;
-return "(??" + this.select + a + ")" + this.nextString ();
-});
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return this.v.minChars ();
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return this.v.maxChars ();
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-var c = new com.stevesoft.pat.Custom (this.select);
-h.put (c, c);
-h.put (this, c);
-c.sub = this.sub.clone (h);
-return c;
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.Custom", ["com.stevesoft.pat.Regex"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.select = null;
+this.v = null;
+this.start = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Custom", com.stevesoft.pat.PatternSub);
+Clazz.makeConstructor (c$,
+function (s) {
+Clazz.superConstructor (this, com.stevesoft.pat.Custom, []);
+this.select = s;
+this.v = com.stevesoft.pat.Regex.validators.get (s);
+}, "~S");
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+this.start = pos;
+return this.sub.matchInternal (pos, pt);
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var a = this.v.argsave == null ? "" : ":" + this.v.argsave;
+return "(??" + this.select + a + ")" + this.nextString ();
+});
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return this.v.minChars ();
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return this.v.maxChars ();
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+var c = new com.stevesoft.pat.Custom (this.select);
+h.put (c, c);
+h.put (this, c);
+c.sub = this.sub.clone (h);
+return c;
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/CustomEndpoint.js b/bin/com/stevesoft/pat/CustomEndpoint.js
index f5cb0ed..800608f 100644
--- a/bin/com/stevesoft/pat/CustomEndpoint.js
+++ b/bin/com/stevesoft/pat/CustomEndpoint.js
@@ -1,27 +1,27 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.CustomEndpoint", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.c = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "CustomEndpoint", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (cm) {
-Clazz.superConstructor (this, com.stevesoft.pat.CustomEndpoint, []);
-this.c = cm;
-}, "com.stevesoft.pat.Custom");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-var npos = this.c.v.validate (pt.src, this.c.start, pos);
-if (npos >= 0) {
-return this.nextMatch (npos, pt);
-}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "";
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.CustomEndpoint (this.c.clone (h));
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.CustomEndpoint", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.c = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "CustomEndpoint", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (cm) {
+Clazz.superConstructor (this, com.stevesoft.pat.CustomEndpoint, []);
+this.c = cm;
+}, "com.stevesoft.pat.Custom");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+var npos = this.c.v.validate (pt.src, this.c.start, pos);
+if (npos >= 0) {
+return this.nextMatch (npos, pt);
+}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "";
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.CustomEndpoint (this.c.clone (h));
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/DirFileRegex.js b/bin/com/stevesoft/pat/DirFileRegex.js
index 0a2470f..b078e11 100644
--- a/bin/com/stevesoft/pat/DirFileRegex.js
+++ b/bin/com/stevesoft/pat/DirFileRegex.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.FileRegex"], "com.stevesoft.pat.DirFileRegex", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "DirFileRegex", com.stevesoft.pat.FileRegex);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.FileRegex"], "com.stevesoft.pat.DirFileRegex", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "DirFileRegex", com.stevesoft.pat.FileRegex);
+});
diff --git a/bin/com/stevesoft/pat/DotMulti.class b/bin/com/stevesoft/pat/DotMulti.class
index 3ec04e2..25dfe0a 100644
Binary files a/bin/com/stevesoft/pat/DotMulti.class and b/bin/com/stevesoft/pat/DotMulti.class differ
diff --git a/bin/com/stevesoft/pat/DotMulti.js b/bin/com/stevesoft/pat/DotMulti.js
index 3584af1..172397b 100644
--- a/bin/com/stevesoft/pat/DotMulti.js
+++ b/bin/com/stevesoft/pat/DotMulti.js
@@ -1,129 +1,129 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.DotMulti", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fewestMatches = null;
-this.mostMatches = null;
-this.matchFewest = false;
-this.src = null;
-this.srclength = 0;
-this.dotDoesntMatchCR = true;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "DotMulti", com.stevesoft.pat.PatternSub);
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return this.fewestMatches;
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return this.mostMatches;
-});
-Clazz.makeConstructor (c$,
-function (a, b) {
-Clazz.superConstructor (this, com.stevesoft.pat.DotMulti, []);
-this.fewestMatches = a;
-this.mostMatches = b;
-}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return ".{" + this.fewestMatches + "," + this.mostMatches + "}" + (this.matchFewest ? "?" : "") + "(?# <= dot multi)" + this.nextString ();
-});
-Clazz.defineMethod (c$, "submatchInternal",
-function (pos, pt) {
-if (pos < this.srclength) {
-if (this.dotDoesntMatchCR) {
-if (this.src.charAt (pos) != '\n') {
-return 1 + pos;
-}} else {
-return 1 + pos;
-}}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-var m = -1;
-var i = pos;
-this.src = pt.src;
-this.srclength = this.src.length ();
-this.dotDoesntMatchCR = pt.dotDoesntMatchCR;
-if (this.matchFewest) {
-var nMatches = 0;
-while (this.fewestMatches.intValue () > nMatches) {
-i = this.submatchInternal (i, pt);
-if (i < 0) {
-return -1;
-}nMatches++;
-}
-if (i < 0) {
-return -1;
-}var ii = this.nextMatch (i, pt);
-if (ii >= 0) {
-return ii;
-}if (!this.mostMatches.finite ()) {
-while (i >= 0) {
-i = this.submatchInternal (i, pt);
-if (i < 0) {
-return -1;
-}ii = this.nextMatch (i, pt);
-if (ii >= 0) {
-return ii;
-}}
-} else {
-while (i > 0) {
-i = this.submatchInternal (i, pt);
-if (i < 0) {
-return -1;
-}nMatches++;
-if (nMatches > this.mostMatches.intValue ()) {
-return -1;
-}ii = this.nextMatch (i, pt);
-if (ii >= 0) {
-return ii;
-}}
-}return -1;
-}var nMatches = 0;
-while (this.fewestMatches.intValue () > nMatches) {
-i = this.submatchInternal (i, pt);
-if (i >= 0) {
-nMatches++;
-} else {
-return -1;
-}}
-m = i;
-if (this.mostMatches.finite ()) {
-while (nMatches < this.mostMatches.intValue ()) {
-i = this.submatchInternal (i, pt);
-if (i >= 0) {
-m = i;
-nMatches++;
-} else {
-break;
-}}
-} else {
-while (true) {
-i = this.submatchInternal (i, pt);
-if (i >= 0) {
-m = i;
-nMatches++;
-} else {
-break;
-}}
-}while (m >= pos) {
-var r = this.nextMatch (m, pt);
-if (r >= 0) {
-return r;
-}m -= 1;
-nMatches--;
-if (nMatches < this.fewestMatches.intValue ()) {
-return -1;
-}}
-return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-var dm = new com.stevesoft.pat.DotMulti (this.fewestMatches, this.mostMatches);
-dm.matchFewest = this.matchFewest;
-return dm;
-}, "java.util.Hashtable");
-Clazz.defineStatics (c$,
-"step", 1,
-"idcount", 1);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.DotMulti", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fewestMatches = null;
+this.mostMatches = null;
+this.matchFewest = false;
+this.src = null;
+this.srclength = 0;
+this.dotDoesntMatchCR = true;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "DotMulti", com.stevesoft.pat.PatternSub);
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return this.fewestMatches;
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return this.mostMatches;
+});
+Clazz.makeConstructor (c$,
+function (a, b) {
+Clazz.superConstructor (this, com.stevesoft.pat.DotMulti, []);
+this.fewestMatches = a;
+this.mostMatches = b;
+}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return ".{" + this.fewestMatches + "," + this.mostMatches + "}" + (this.matchFewest ? "?" : "") + "(?# <= dot multi)" + this.nextString ();
+});
+Clazz.defineMethod (c$, "submatchInternal",
+function (pos, pt) {
+if (pos < this.srclength) {
+if (this.dotDoesntMatchCR) {
+if (this.src.charAt (pos) != '\n') {
+return 1 + pos;
+}} else {
+return 1 + pos;
+}}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+var m = -1;
+var i = pos;
+this.src = pt.src;
+this.srclength = this.src.length ();
+this.dotDoesntMatchCR = pt.dotDoesntMatchCR;
+if (this.matchFewest) {
+var nMatches = 0;
+while (this.fewestMatches.intValue () > nMatches) {
+i = this.submatchInternal (i, pt);
+if (i < 0) {
+return -1;
+}nMatches++;
+}
+if (i < 0) {
+return -1;
+}var ii = this.nextMatch (i, pt);
+if (ii >= 0) {
+return ii;
+}if (!this.mostMatches.finite ()) {
+while (i >= 0) {
+i = this.submatchInternal (i, pt);
+if (i < 0) {
+return -1;
+}ii = this.nextMatch (i, pt);
+if (ii >= 0) {
+return ii;
+}}
+} else {
+while (i > 0) {
+i = this.submatchInternal (i, pt);
+if (i < 0) {
+return -1;
+}nMatches++;
+if (nMatches > this.mostMatches.intValue ()) {
+return -1;
+}ii = this.nextMatch (i, pt);
+if (ii >= 0) {
+return ii;
+}}
+}return -1;
+}var nMatches = 0;
+while (this.fewestMatches.intValue () > nMatches) {
+i = this.submatchInternal (i, pt);
+if (i >= 0) {
+nMatches++;
+} else {
+return -1;
+}}
+m = i;
+if (this.mostMatches.finite ()) {
+while (nMatches < this.mostMatches.intValue ()) {
+i = this.submatchInternal (i, pt);
+if (i >= 0) {
+m = i;
+nMatches++;
+} else {
+break;
+}}
+} else {
+while (true) {
+i = this.submatchInternal (i, pt);
+if (i >= 0) {
+m = i;
+nMatches++;
+} else {
+break;
+}}
+}while (m >= pos) {
+var r = this.nextMatch (m, pt);
+if (r >= 0) {
+return r;
+}m -= 1;
+nMatches--;
+if (nMatches < this.fewestMatches.intValue ()) {
+return -1;
+}}
+return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+var dm = new com.stevesoft.pat.DotMulti (this.fewestMatches, this.mostMatches);
+dm.matchFewest = this.matchFewest;
+return dm;
+}, "java.util.Hashtable");
+Clazz.defineStatics (c$,
+"step", 1,
+"idcount", 1);
+});
diff --git a/bin/com/stevesoft/pat/End.js b/bin/com/stevesoft/pat/End.js
index b332682..3df399f 100644
--- a/bin/com/stevesoft/pat/End.js
+++ b/bin/com/stevesoft/pat/End.js
@@ -1,38 +1,38 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.End", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.retIsEnd = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "End", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (b) {
-Clazz.superConstructor (this, com.stevesoft.pat.End, []);
-this.retIsEnd = b;
-}, "~B");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (this.retIsEnd && pt.mFlag && pos < pt.src.length ()) {
-if (pt.src.charAt (pos) == '\n') {
-return this.nextMatch (pos, pt);
-}}if (pt.src.length () == pos) {
-return this.nextMatch (pos, pt);
-} else if (pos < pt.src.length ()) {
-pt.src.charAt (pos);
-}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-if (this.retIsEnd) {
-return "$";
-} else {
-return "\\Z";
-}});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.End (this.retIsEnd);
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.End", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.retIsEnd = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "End", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (b) {
+Clazz.superConstructor (this, com.stevesoft.pat.End, []);
+this.retIsEnd = b;
+}, "~B");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (this.retIsEnd && pt.mFlag && pos < pt.src.length ()) {
+if (pt.src.charAt (pos) == '\n') {
+return this.nextMatch (pos, pt);
+}}if (pt.src.length () == pos) {
+return this.nextMatch (pos, pt);
+} else if (pos < pt.src.length ()) {
+pt.src.charAt (pos);
+}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+if (this.retIsEnd) {
+return "$";
+} else {
+return "\\Z";
+}});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.End (this.retIsEnd);
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/FastBracket.js b/bin/com/stevesoft/pat/FastBracket.js
index 0e7d38a..d26c009 100644
--- a/bin/com/stevesoft/pat/FastBracket.js
+++ b/bin/com/stevesoft/pat/FastBracket.js
@@ -1,156 +1,156 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Bracket"], "com.stevesoft.pat.FastBracket", ["com.stevesoft.pat.Range", "$.oneChar", "java.util.BitSet", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.$min = 0;
-this.$max = 0;
-this.bs = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "FastBracket", com.stevesoft.pat.Bracket);
-c$.process = Clazz.defineMethod (c$, "process",
-function (b, ignc) {
-var v = b.v;
-b.pv = null;
-try {
-var nv = v;
-if (ignc) {
-nv = new java.util.Vector ();
-for (var i = 0; i < v.size (); i++) {
-var p = v.elementAt (i);
-nv.addElement (p);
-if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar)) {
-var oc = p;
-nv.addElement ( new com.stevesoft.pat.oneChar (oc.altc));
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.Range)) {
-var ra = p;
-nv.addElement ( new com.stevesoft.pat.Range (ra.altlo, ra.althi));
-}}
-}v = nv;
-for (var i = 0; i < v.size () - 1; i++) {
-for (var j = 0; j < v.size () - 1; j++) {
-var c1 = com.stevesoft.pat.FastBracket.getl (v.elementAt (j));
-var c2 = com.stevesoft.pat.FastBracket.getl (v.elementAt (j + 1));
-if (c2 < c1) {
-var o = v.elementAt (j);
-v.setElementAt (v.elementAt (j + 1), j);
-v.setElementAt (o, j + 1);
-}}
-}
-nv = new java.util.Vector ();
-var p = v.elementAt (0);
-nv.addElement (p);
-for (var i = 1; i < v.size (); i++) {
-if ((com.stevesoft.pat.FastBracket.geth (p)).charCodeAt (0) + 1 >= (com.stevesoft.pat.FastBracket.getl (v.elementAt (i))).charCodeAt (0)) {
-var p2 = v.elementAt (i);
-var lo = com.stevesoft.pat.FastBracket.min (com.stevesoft.pat.FastBracket.getl (p), com.stevesoft.pat.FastBracket.getl (p2));
-var hi = com.stevesoft.pat.FastBracket.max (com.stevesoft.pat.FastBracket.geth (p), com.stevesoft.pat.FastBracket.geth (p2));
-nv.setElementAt (p = com.stevesoft.pat.FastBracket.mkelem (lo, hi), nv.size () - 1);
-} else {
-p = v.elementAt (i);
-nv.addElement (p);
-}}
-b.v = v = nv;
-} catch (e) {
-if (Clazz.exceptionOf (e, com.stevesoft.pat.RegSyntax)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-var negv = com.stevesoft.pat.FastBracket.neg (v);
-if (v.size () == 1) {
-return b;
-}if (negv.size () == 1) {
-b.v = negv;
-b.neg = !b.neg;
-return b;
-}var fb = com.stevesoft.pat.FastBracket.newbrack (v, b.neg);
-if (fb == null) {
-fb = com.stevesoft.pat.FastBracket.newbrack (negv, !b.neg);
-}if (fb != null) {
-fb.parent = b.parent;
-fb.next = b.next;
-return fb;
-}return b;
-}, "com.stevesoft.pat.Bracket,~B");
-c$.newbrack = Clazz.defineMethod (c$, "newbrack",
-function (v, neg) {
-var fb = new com.stevesoft.pat.FastBracket (neg);
-fb.v = v;
-if (v.size () == 0) {
-return null;
-}fb.$min = (com.stevesoft.pat.FastBracket.getl (v.elementAt (0))).charCodeAt (0);
-fb.$max = (com.stevesoft.pat.FastBracket.geth (v.elementAt (v.size () - 1))).charCodeAt (0);
-if (fb.$max - fb.$min <= 256) {
-fb.bs = new java.util.BitSet (fb.$max - fb.$min + 1);
-for (var i = 0; i < v.size (); i++) {
-var o = v.elementAt (i);
-var min0 = (com.stevesoft.pat.FastBracket.getl (o)).charCodeAt (0) - fb.$min;
-var max0 = (com.stevesoft.pat.FastBracket.geth (o)).charCodeAt (0) - fb.$min;
-for (var j = min0; j <= max0; j++) {
-fb.bs.set (j);
-}
-}
-return fb;
-}return null;
-}, "java.util.Vector,~B");
-c$.neg = Clazz.defineMethod (c$, "neg",
-function (v) {
-try {
-var nv = new java.util.Vector ();
-if (v.size () == 0) {
-nv.addElement ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (65535)));
-return nv;
-}var p0 = (com.stevesoft.pat.FastBracket.getl (v.elementAt (0))).charCodeAt (0);
-if (p0 != 0) {
-nv.addElement (com.stevesoft.pat.FastBracket.mkelem (String.fromCharCode (0), String.fromCharCode (p0 - 1)));
-}for (var i = 0; i < v.size () - 1; i++) {
-var hi = (com.stevesoft.pat.FastBracket.getl (v.elementAt (i + 1))).charCodeAt (0) - 1;
-var lo = (com.stevesoft.pat.FastBracket.geth (v.elementAt (i))).charCodeAt (0) + 1;
-nv.addElement (com.stevesoft.pat.FastBracket.mkelem (String.fromCharCode (lo), String.fromCharCode (hi)));
-}
-var pN = (com.stevesoft.pat.FastBracket.geth (v.lastElement ())).charCodeAt (0);
-if (pN != 65535) {
-nv.addElement (com.stevesoft.pat.FastBracket.mkelem (String.fromCharCode (pN + 1), String.fromCharCode (65535)));
-}return nv;
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-return null;
-} else {
-throw rs;
-}
-}
-}, "java.util.Vector");
-c$.mkelem = Clazz.defineMethod (c$, "mkelem",
-function (lo, hi) {
-return lo == hi ? ( new com.stevesoft.pat.oneChar (lo)) : ( new com.stevesoft.pat.Range (lo, hi));
-}, "~S,~S");
-c$.min = Clazz.defineMethod (c$, "min",
-function (a, b) {
-return a < b ? a : b;
-}, "~S,~S");
-c$.max = Clazz.defineMethod (c$, "max",
-function (a, b) {
-return a > b ? a : b;
-}, "~S,~S");
-c$.getl = Clazz.defineMethod (c$, "getl",
-function (o) {
-var p = o;
-if (Clazz.instanceOf (p, com.stevesoft.pat.Range)) {
-return (p).lo;
-}return (p).c;
-}, "~O");
-c$.geth = Clazz.defineMethod (c$, "geth",
-function (o) {
-var p = o;
-if (Clazz.instanceOf (p, com.stevesoft.pat.Range)) {
-return (p).hi;
-}return (p).c;
-}, "~O");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (pos >= pt.src.length () || this.Masked (pos, pt)) {
-return -1;
-}var c = pt.src.charAt (pos);
-return ( new Boolean (this.neg ^ (c.charCodeAt (0) >= this.$min && c.charCodeAt (0) <= this.$max && this.bs.get (c.charCodeAt (0) - this.$min))).valueOf ()) ? this.nextMatch (pos + 1, pt) : -1;
-}, "~N,com.stevesoft.pat.Pthings");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Bracket"], "com.stevesoft.pat.FastBracket", ["com.stevesoft.pat.Range", "$.oneChar", "java.util.BitSet", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.$min = 0;
+this.$max = 0;
+this.bs = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "FastBracket", com.stevesoft.pat.Bracket);
+c$.process = Clazz.defineMethod (c$, "process",
+function (b, ignc) {
+var v = b.v;
+b.pv = null;
+try {
+var nv = v;
+if (ignc) {
+nv = new java.util.Vector ();
+for (var i = 0; i < v.size (); i++) {
+var p = v.elementAt (i);
+nv.addElement (p);
+if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar)) {
+var oc = p;
+nv.addElement ( new com.stevesoft.pat.oneChar (oc.altc));
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.Range)) {
+var ra = p;
+nv.addElement ( new com.stevesoft.pat.Range (ra.altlo, ra.althi));
+}}
+}v = nv;
+for (var i = 0; i < v.size () - 1; i++) {
+for (var j = 0; j < v.size () - 1; j++) {
+var c1 = com.stevesoft.pat.FastBracket.getl (v.elementAt (j));
+var c2 = com.stevesoft.pat.FastBracket.getl (v.elementAt (j + 1));
+if (c2 < c1) {
+var o = v.elementAt (j);
+v.setElementAt (v.elementAt (j + 1), j);
+v.setElementAt (o, j + 1);
+}}
+}
+nv = new java.util.Vector ();
+var p = v.elementAt (0);
+nv.addElement (p);
+for (var i = 1; i < v.size (); i++) {
+if ((com.stevesoft.pat.FastBracket.geth (p)).charCodeAt (0) + 1 >= (com.stevesoft.pat.FastBracket.getl (v.elementAt (i))).charCodeAt (0)) {
+var p2 = v.elementAt (i);
+var lo = com.stevesoft.pat.FastBracket.min (com.stevesoft.pat.FastBracket.getl (p), com.stevesoft.pat.FastBracket.getl (p2));
+var hi = com.stevesoft.pat.FastBracket.max (com.stevesoft.pat.FastBracket.geth (p), com.stevesoft.pat.FastBracket.geth (p2));
+nv.setElementAt (p = com.stevesoft.pat.FastBracket.mkelem (lo, hi), nv.size () - 1);
+} else {
+p = v.elementAt (i);
+nv.addElement (p);
+}}
+b.v = v = nv;
+} catch (e) {
+if (Clazz.exceptionOf (e, com.stevesoft.pat.RegSyntax)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+var negv = com.stevesoft.pat.FastBracket.neg (v);
+if (v.size () == 1) {
+return b;
+}if (negv.size () == 1) {
+b.v = negv;
+b.neg = !b.neg;
+return b;
+}var fb = com.stevesoft.pat.FastBracket.newbrack (v, b.neg);
+if (fb == null) {
+fb = com.stevesoft.pat.FastBracket.newbrack (negv, !b.neg);
+}if (fb != null) {
+fb.parent = b.parent;
+fb.next = b.next;
+return fb;
+}return b;
+}, "com.stevesoft.pat.Bracket,~B");
+c$.newbrack = Clazz.defineMethod (c$, "newbrack",
+function (v, neg) {
+var fb = new com.stevesoft.pat.FastBracket (neg);
+fb.v = v;
+if (v.size () == 0) {
+return null;
+}fb.$min = (com.stevesoft.pat.FastBracket.getl (v.elementAt (0))).charCodeAt (0);
+fb.$max = (com.stevesoft.pat.FastBracket.geth (v.elementAt (v.size () - 1))).charCodeAt (0);
+if (fb.$max - fb.$min <= 256) {
+fb.bs = new java.util.BitSet (fb.$max - fb.$min + 1);
+for (var i = 0; i < v.size (); i++) {
+var o = v.elementAt (i);
+var min0 = (com.stevesoft.pat.FastBracket.getl (o)).charCodeAt (0) - fb.$min;
+var max0 = (com.stevesoft.pat.FastBracket.geth (o)).charCodeAt (0) - fb.$min;
+for (var j = min0; j <= max0; j++) {
+fb.bs.set (j);
+}
+}
+return fb;
+}return null;
+}, "java.util.Vector,~B");
+c$.neg = Clazz.defineMethod (c$, "neg",
+function (v) {
+try {
+var nv = new java.util.Vector ();
+if (v.size () == 0) {
+nv.addElement ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (65535)));
+return nv;
+}var p0 = (com.stevesoft.pat.FastBracket.getl (v.elementAt (0))).charCodeAt (0);
+if (p0 != 0) {
+nv.addElement (com.stevesoft.pat.FastBracket.mkelem (String.fromCharCode (0), String.fromCharCode (p0 - 1)));
+}for (var i = 0; i < v.size () - 1; i++) {
+var hi = (com.stevesoft.pat.FastBracket.getl (v.elementAt (i + 1))).charCodeAt (0) - 1;
+var lo = (com.stevesoft.pat.FastBracket.geth (v.elementAt (i))).charCodeAt (0) + 1;
+nv.addElement (com.stevesoft.pat.FastBracket.mkelem (String.fromCharCode (lo), String.fromCharCode (hi)));
+}
+var pN = (com.stevesoft.pat.FastBracket.geth (v.lastElement ())).charCodeAt (0);
+if (pN != 65535) {
+nv.addElement (com.stevesoft.pat.FastBracket.mkelem (String.fromCharCode (pN + 1), String.fromCharCode (65535)));
+}return nv;
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+return null;
+} else {
+throw rs;
+}
+}
+}, "java.util.Vector");
+c$.mkelem = Clazz.defineMethod (c$, "mkelem",
+function (lo, hi) {
+return lo == hi ? ( new com.stevesoft.pat.oneChar (lo)) : ( new com.stevesoft.pat.Range (lo, hi));
+}, "~S,~S");
+c$.min = Clazz.defineMethod (c$, "min",
+function (a, b) {
+return a < b ? a : b;
+}, "~S,~S");
+c$.max = Clazz.defineMethod (c$, "max",
+function (a, b) {
+return a > b ? a : b;
+}, "~S,~S");
+c$.getl = Clazz.defineMethod (c$, "getl",
+function (o) {
+var p = o;
+if (Clazz.instanceOf (p, com.stevesoft.pat.Range)) {
+return (p).lo;
+}return (p).c;
+}, "~O");
+c$.geth = Clazz.defineMethod (c$, "geth",
+function (o) {
+var p = o;
+if (Clazz.instanceOf (p, com.stevesoft.pat.Range)) {
+return (p).hi;
+}return (p).c;
+}, "~O");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (pos >= pt.src.length () || this.Masked (pos, pt)) {
+return -1;
+}var c = pt.src.charAt (pos);
+return ( new Boolean (this.neg ^ (c.charCodeAt (0) >= this.$min && c.charCodeAt (0) <= this.$max && this.bs.get (c.charCodeAt (0) - this.$min))).valueOf ()) ? this.nextMatch (pos + 1, pt) : -1;
+}, "~N,com.stevesoft.pat.Pthings");
+});
diff --git a/bin/com/stevesoft/pat/FastMulti.class b/bin/com/stevesoft/pat/FastMulti.class
index 9de4ac6..5baa014 100644
Binary files a/bin/com/stevesoft/pat/FastMulti.class and b/bin/com/stevesoft/pat/FastMulti.class differ
diff --git a/bin/com/stevesoft/pat/FastMulti.js b/bin/com/stevesoft/pat/FastMulti.js
index 898aa9e..16ffec1 100644
--- a/bin/com/stevesoft/pat/FastMulti.js
+++ b/bin/com/stevesoft/pat/FastMulti.js
@@ -1,108 +1,108 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.FastMulti", ["com.stevesoft.pat.RegSyntaxError", "$.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fewestMatches = null;
-this.mostMatches = null;
-this.matchFewest = false;
-this.step = -1;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "FastMulti", com.stevesoft.pat.PatternSub);
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return this.sub.countMinChars ().mul (this.fewestMatches);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return this.sub.countMaxChars ().mul (this.mostMatches);
-});
-Clazz.makeConstructor (c$,
-function (a, b, p) {
-Clazz.superConstructor (this, com.stevesoft.pat.FastMulti, []);
-if (p == null) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Null length pattern followed by *, +, or other Multi.");
-}this.fewestMatches = a;
-this.mostMatches = b;
-this.sub = p;
-this.step = p.countMinChars ().intValue ();
-this.sub.setParent (null);
-}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
-Clazz.defineMethod (c$, "toString",
-function () {
-return this.sub.toString () + "{" + this.fewestMatches + "," + this.mostMatches + "}" + (this.matchFewest ? "?" : "") + "(?# <= fast multi)" + this.nextString ();
-});
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-var m = -1;
-var i = pos;
-var endstr = pt.src.length () - this.step;
-var matches = new com.stevesoft.pat.patInt (0);
-if (this.matchFewest) {
-if (this.fewestMatches.lessEq (matches)) {
-var ii = this.nextMatch (i, pt);
-if (ii >= 0) {
-return ii;
-}}while (i >= 0 && i <= endstr) {
-i = this.sub.matchInternal (i, pt);
-if (i >= 0) {
-matches.inc ();
-if (this.fewestMatches.lessEq (matches)) {
-var ii = this.nextMatch (i, pt);
-if (ii >= 0) {
-return ii;
-}}if (matches.equals (this.mostMatches)) {
-return -1;
-}}}
-return -1;
-}var nMatches = 0;
-while (this.fewestMatches.intValue () > nMatches) {
-i = this.sub.matchInternal (i, pt);
-if (i >= 0) {
-nMatches++;
-} else {
-return -1;
-}}
-m = i;
-if (this.mostMatches.finite ()) {
-while (nMatches < this.mostMatches.intValue ()) {
-i = this.sub.matchInternal (i, pt);
-if (i >= 0) {
-m = i;
-nMatches++;
-} else {
-break;
-}}
-} else {
-while (true) {
-i = this.sub.matchInternal (i, pt);
-if (i >= 0) {
-m = i;
-nMatches++;
-} else {
-break;
-}}
-}while (m >= pos) {
-var r = this.nextMatch (m, pt);
-if (r >= 0) {
-return r;
-}m -= this.step;
-nMatches--;
-if (nMatches < this.fewestMatches.intValue ()) {
-return -1;
-}}
-return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-try {
-var fm = new com.stevesoft.pat.FastMulti (this.fewestMatches, this.mostMatches, this.sub.clone (h));
-fm.matchFewest = this.matchFewest;
-return fm;
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-return null;
-} else {
-throw rs;
-}
-}
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.FastMulti", ["com.stevesoft.pat.RegSyntaxError", "$.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fewestMatches = null;
+this.mostMatches = null;
+this.matchFewest = false;
+this.step = -1;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "FastMulti", com.stevesoft.pat.PatternSub);
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return this.sub.countMinChars ().mul (this.fewestMatches);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return this.sub.countMaxChars ().mul (this.mostMatches);
+});
+Clazz.makeConstructor (c$,
+function (a, b, p) {
+Clazz.superConstructor (this, com.stevesoft.pat.FastMulti, []);
+if (p == null) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Null length pattern followed by *, +, or other Multi.");
+}this.fewestMatches = a;
+this.mostMatches = b;
+this.sub = p;
+this.step = p.countMinChars ().intValue ();
+this.sub.setParent (null);
+}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
+Clazz.defineMethod (c$, "toString",
+function () {
+return this.sub.toString () + "{" + this.fewestMatches + "," + this.mostMatches + "}" + (this.matchFewest ? "?" : "") + "(?# <= fast multi)" + this.nextString ();
+});
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+var m = -1;
+var i = pos;
+var endstr = pt.src.length () - this.step;
+var matches = new com.stevesoft.pat.patInt (0);
+if (this.matchFewest) {
+if (this.fewestMatches.lessEq (matches)) {
+var ii = this.nextMatch (i, pt);
+if (ii >= 0) {
+return ii;
+}}while (i >= 0 && i <= endstr) {
+i = this.sub.matchInternal (i, pt);
+if (i >= 0) {
+matches.inc ();
+if (this.fewestMatches.lessEq (matches)) {
+var ii = this.nextMatch (i, pt);
+if (ii >= 0) {
+return ii;
+}}if (matches.equals (this.mostMatches)) {
+return -1;
+}}}
+return -1;
+}var nMatches = 0;
+while (this.fewestMatches.intValue () > nMatches) {
+i = this.sub.matchInternal (i, pt);
+if (i >= 0) {
+nMatches++;
+} else {
+return -1;
+}}
+m = i;
+if (this.mostMatches.finite ()) {
+while (nMatches < this.mostMatches.intValue ()) {
+i = this.sub.matchInternal (i, pt);
+if (i >= 0) {
+m = i;
+nMatches++;
+} else {
+break;
+}}
+} else {
+while (true) {
+i = this.sub.matchInternal (i, pt);
+if (i >= 0) {
+m = i;
+nMatches++;
+} else {
+break;
+}}
+}while (m >= pos) {
+var r = this.nextMatch (m, pt);
+if (r >= 0) {
+return r;
+}m -= this.step;
+nMatches--;
+if (nMatches < this.fewestMatches.intValue ()) {
+return -1;
+}}
+return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+try {
+var fm = new com.stevesoft.pat.FastMulti (this.fewestMatches, this.mostMatches, this.sub.clone (h));
+fm.matchFewest = this.matchFewest;
+return fm;
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+return null;
+} else {
+throw rs;
+}
+}
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/FileRegex.js b/bin/com/stevesoft/pat/FileRegex.js
index ca23839..8327c7c 100644
--- a/bin/com/stevesoft/pat/FileRegex.js
+++ b/bin/com/stevesoft/pat/FileRegex.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Regex"], "com.stevesoft.pat.FileRegex", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "FileRegex", com.stevesoft.pat.Regex);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Regex"], "com.stevesoft.pat.FileRegex", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "FileRegex", com.stevesoft.pat.Regex);
+});
diff --git a/bin/com/stevesoft/pat/Group.js b/bin/com/stevesoft/pat/Group.js
index a9ebd1b..89fdd10 100644
--- a/bin/com/stevesoft/pat/Group.js
+++ b/bin/com/stevesoft/pat/Group.js
@@ -1,48 +1,48 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Group", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.op = '\0';
-this.cl = '\0';
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Group", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (opi, cli) {
-Clazz.superConstructor (this, com.stevesoft.pat.Group, []);
-this.op = opi;
-this.cl = cli;
-}, "~S,~S");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-var i;
-var count = 1;
-if (pos < pt.src.length ()) {
-if (!this.Masked (pos, pt) && pt.src.charAt (pos) != this.op) {
-return -1;
-}}for (i = pos + 1; i < pt.src.length (); i++) {
-var c = pt.src.charAt (i);
-var b = !this.Masked (i, pt);
-if (b && c == '\\') {
-i++;
-} else {
-if (b && c == this.cl) {
-count--;
-}if (count == 0) {
-return this.nextMatch (i + 1, pt);
-}if (b && c == this.op) {
-count++;
-}}}
-return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(?@" + this.op + this.cl + ")" + this.nextString ();
-});
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (2);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.Group (this.op, this.cl);
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Group", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.op = '\0';
+this.cl = '\0';
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Group", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (opi, cli) {
+Clazz.superConstructor (this, com.stevesoft.pat.Group, []);
+this.op = opi;
+this.cl = cli;
+}, "~S,~S");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+var i;
+var count = 1;
+if (pos < pt.src.length ()) {
+if (!this.Masked (pos, pt) && pt.src.charAt (pos) != this.op) {
+return -1;
+}}for (i = pos + 1; i < pt.src.length (); i++) {
+var c = pt.src.charAt (i);
+var b = !this.Masked (i, pt);
+if (b && c == '\\') {
+i++;
+} else {
+if (b && c == this.cl) {
+count--;
+}if (count == 0) {
+return this.nextMatch (i + 1, pt);
+}if (b && c == this.op) {
+count++;
+}}}
+return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(?@" + this.op + this.cl + ")" + this.nextString ();
+});
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (2);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.Group (this.op, this.cl);
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/LeftRule.js b/bin/com/stevesoft/pat/LeftRule.js
index f70f50c..df5c04a 100644
--- a/bin/com/stevesoft/pat/LeftRule.js
+++ b/bin/com/stevesoft/pat/LeftRule.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.LeftRule", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "LeftRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.LeftRule, []);
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-sb.append (res.left ());
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "$`";
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.LeftRule", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "LeftRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.LeftRule, []);
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+sb.append (res.left ());
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "$`";
+});
+});
diff --git a/bin/com/stevesoft/pat/MessageManager.js b/bin/com/stevesoft/pat/MessageManager.js
index 801e5de..23502c3 100644
--- a/bin/com/stevesoft/pat/MessageManager.js
+++ b/bin/com/stevesoft/pat/MessageManager.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-c$ = Clazz.declareType (com.stevesoft.pat, "MessageManager");
-c$.getString = Clazz.defineMethod (c$, "getString",
-function (string) {
-return string;
-}, "~S");
-c$.formatMessage = Clazz.defineMethod (c$, "formatMessage",
-function (s, fields) {
-for (var i = 0; i < fields.length; i++) s += " " + fields[i];
-
-return s;
-}, "~S,~A");
+Clazz.declarePackage ("com.stevesoft.pat");
+c$ = Clazz.declareType (com.stevesoft.pat, "MessageManager");
+c$.getString = Clazz.defineMethod (c$, "getString",
+function (string) {
+return string;
+}, "~S");
+c$.formatMessage = Clazz.defineMethod (c$, "formatMessage",
+function (s, fields) {
+for (var i = 0; i < fields.length; i++) s += " " + fields[i];
+
+return s;
+}, "~S,~A");
diff --git a/bin/com/stevesoft/pat/Multi.js b/bin/com/stevesoft/pat/Multi.js
index e98b4ff..e759c95 100644
--- a/bin/com/stevesoft/pat/Multi.js
+++ b/bin/com/stevesoft/pat/Multi.js
@@ -1,62 +1,62 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.Multi", ["com.stevesoft.pat.Multi_stage2"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.a = null;
-this.b = null;
-this.p = null;
-this.st2 = null;
-this.matchFewest = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Multi", com.stevesoft.pat.PatternSub);
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return this.a.mul (this.p.countMinChars ());
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return this.b.mul (this.p.countMaxChars ());
-});
-Clazz.makeConstructor (c$,
-function (a, b, p) {
-Clazz.superConstructor (this, com.stevesoft.pat.Multi, []);
-this.a = a;
-this.b = b;
-this.p = p;
-this.st2 = new com.stevesoft.pat.Multi_stage2 (a, b, p);
-this.st2.parent = this;
-this.sub = this.st2.sub;
-}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
-Clazz.overrideMethod (c$, "toString",
-function () {
-this.st2.matchFewest = this.matchFewest;
-return this.st2.toString ();
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-try {
-this.st2 = new com.stevesoft.pat.Multi_stage2 (this.a, this.b, this.p);
-} catch (r__) {
-if (Clazz.exceptionOf (r__, com.stevesoft.pat.RegSyntax)) {
-} else {
-throw r__;
-}
-}
-this.st2.matchFewest = this.matchFewest;
-this.st2.parent = this;
-return this.st2.matchInternal (pos, pt);
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-try {
-var m = new com.stevesoft.pat.Multi (this.a, this.b, (this.p).clone (h));
-m.matchFewest = this.matchFewest;
-return m;
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-return null;
-} else {
-throw rs;
-}
-}
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.Multi", ["com.stevesoft.pat.Multi_stage2"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.a = null;
+this.b = null;
+this.p = null;
+this.st2 = null;
+this.matchFewest = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Multi", com.stevesoft.pat.PatternSub);
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return this.a.mul (this.p.countMinChars ());
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return this.b.mul (this.p.countMaxChars ());
+});
+Clazz.makeConstructor (c$,
+function (a, b, p) {
+Clazz.superConstructor (this, com.stevesoft.pat.Multi, []);
+this.a = a;
+this.b = b;
+this.p = p;
+this.st2 = new com.stevesoft.pat.Multi_stage2 (a, b, p);
+this.st2.parent = this;
+this.sub = this.st2.sub;
+}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
+Clazz.overrideMethod (c$, "toString",
+function () {
+this.st2.matchFewest = this.matchFewest;
+return this.st2.toString ();
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+try {
+this.st2 = new com.stevesoft.pat.Multi_stage2 (this.a, this.b, this.p);
+} catch (r__) {
+if (Clazz.exceptionOf (r__, com.stevesoft.pat.RegSyntax)) {
+} else {
+throw r__;
+}
+}
+this.st2.matchFewest = this.matchFewest;
+this.st2.parent = this;
+return this.st2.matchInternal (pos, pt);
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+try {
+var m = new com.stevesoft.pat.Multi (this.a, this.b, (this.p).clone (h));
+m.matchFewest = this.matchFewest;
+return m;
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+return null;
+} else {
+throw rs;
+}
+}
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/MultiMin.js b/bin/com/stevesoft/pat/MultiMin.js
index f536031..e749758 100644
--- a/bin/com/stevesoft/pat/MultiMin.js
+++ b/bin/com/stevesoft/pat/MultiMin.js
@@ -1,9 +1,9 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Multi"], "com.stevesoft.pat.MultiMin", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "MultiMin", com.stevesoft.pat.Multi);
-Clazz.makeConstructor (c$,
-function (i1, i2, p) {
-Clazz.superConstructor (this, com.stevesoft.pat.MultiMin, [i1, i2, p]);
-this.matchFewest = true;
-}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Multi"], "com.stevesoft.pat.MultiMin", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "MultiMin", com.stevesoft.pat.Multi);
+Clazz.makeConstructor (c$,
+function (i1, i2, p) {
+Clazz.superConstructor (this, com.stevesoft.pat.MultiMin, [i1, i2, p]);
+this.matchFewest = true;
+}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
+});
diff --git a/bin/com/stevesoft/pat/Multi_stage2.js b/bin/com/stevesoft/pat/Multi_stage2.js
index 1d291ab..6d4f8fc 100644
--- a/bin/com/stevesoft/pat/Multi_stage2.js
+++ b/bin/com/stevesoft/pat/Multi_stage2.js
@@ -1,95 +1,95 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.Multi_stage2", ["com.stevesoft.pat.RegSyntaxError", "$.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.nextRet = null;
-this.count = null;
-this.matchMin = null;
-this.matchMax = null;
-this.matchFewest = false;
-this.pos_old = -1;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Multi_stage2", com.stevesoft.pat.PatternSub);
-Clazz.defineMethod (c$, "toString",
-function () {
-var ret = "";
-ret += this.sub.toString ();
-ret += "{" + this.matchMin + "," + this.matchMax + "}";
-if (this.matchFewest) {
-ret += "?";
-}ret += this.parent.nextString ();
-return ret;
-});
-Clazz.makeConstructor (c$,
-function (a, b, p) {
-Clazz.superConstructor (this, com.stevesoft.pat.Multi_stage2, []);
-if (p == null) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Multiple match of Null pattern requested.");
-}this.sub = p;
-this.nextRet = this;
-this.sub.setParent (this);
-this.matchMin = a;
-this.matchMax = b;
-this.count = new com.stevesoft.pat.patInt (0);
-if (!a.lessEq (b)) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Bad Multi Args: " + a + ">" + b);
-}var i = new com.stevesoft.pat.patInt (-1);
-if (a.lessEq (i)) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Bad Multi Args: " + a + "< 0");
-}}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
-Clazz.defineMethod (c$, "getNext",
-function () {
-return this.nextRet;
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-this.sub.setParent (this);
-var canUse = -1;
-if (this.pos_old >= 0 && pos == this.pos_old) {
-return -1;
-}this.pos_old = pos;
-if (this.matchMin.lessEq (this.count)) {
-canUse = pos;
-}if (!this.count.lessEq (this.matchMax) || pos > pt.src.length ()) {
-return -1;
-}if ((this.matchFewest || this.count.equals (this.matchMax)) && canUse >= 0) {
-var n = Clazz.superCall (this, com.stevesoft.pat.Multi_stage2, "getNext", []);
-if (n == null) {
-return canUse;
-}var ret = this.testMatch (n, pos, pt);
-if (ret >= 0) {
-return ret;
-} else {
-canUse = -1;
-}}this.count.inc ();
-try {
-if (this.count.lessEq (this.matchMax)) {
-var r = this.testMatch (this.sub, pos, pt);
-if (r >= 0) {
-return r;
-}}} finally {
-this.count.dec ();
-}
-if (!this.matchFewest && canUse >= 0) {
-var n = Clazz.superCall (this, com.stevesoft.pat.Multi_stage2, "getNext", []);
-if (n == null) {
-return canUse;
-}var ret = this.testMatch (n, pos, pt);
-return ret;
-} else {
-return canUse;
-}}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-try {
-var m = new com.stevesoft.pat.Multi_stage2 (this.matchMin, this.matchMax, this.sub.clone (h));
-m.matchFewest = this.matchFewest;
-return m;
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-return null;
-} else {
-throw rs;
-}
-}
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.PatternSub"], "com.stevesoft.pat.Multi_stage2", ["com.stevesoft.pat.RegSyntaxError", "$.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.nextRet = null;
+this.count = null;
+this.matchMin = null;
+this.matchMax = null;
+this.matchFewest = false;
+this.pos_old = -1;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Multi_stage2", com.stevesoft.pat.PatternSub);
+Clazz.defineMethod (c$, "toString",
+function () {
+var ret = "";
+ret += this.sub.toString ();
+ret += "{" + this.matchMin + "," + this.matchMax + "}";
+if (this.matchFewest) {
+ret += "?";
+}ret += this.parent.nextString ();
+return ret;
+});
+Clazz.makeConstructor (c$,
+function (a, b, p) {
+Clazz.superConstructor (this, com.stevesoft.pat.Multi_stage2, []);
+if (p == null) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Multiple match of Null pattern requested.");
+}this.sub = p;
+this.nextRet = this;
+this.sub.setParent (this);
+this.matchMin = a;
+this.matchMax = b;
+this.count = new com.stevesoft.pat.patInt (0);
+if (!a.lessEq (b)) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Bad Multi Args: " + a + ">" + b);
+}var i = new com.stevesoft.pat.patInt (-1);
+if (a.lessEq (i)) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Bad Multi Args: " + a + "< 0");
+}}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
+Clazz.defineMethod (c$, "getNext",
+function () {
+return this.nextRet;
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+this.sub.setParent (this);
+var canUse = -1;
+if (this.pos_old >= 0 && pos == this.pos_old) {
+return -1;
+}this.pos_old = pos;
+if (this.matchMin.lessEq (this.count)) {
+canUse = pos;
+}if (!this.count.lessEq (this.matchMax) || pos > pt.src.length ()) {
+return -1;
+}if ((this.matchFewest || this.count.equals (this.matchMax)) && canUse >= 0) {
+var n = Clazz.superCall (this, com.stevesoft.pat.Multi_stage2, "getNext", []);
+if (n == null) {
+return canUse;
+}var ret = this.testMatch (n, pos, pt);
+if (ret >= 0) {
+return ret;
+} else {
+canUse = -1;
+}}this.count.inc ();
+try {
+if (this.count.lessEq (this.matchMax)) {
+var r = this.testMatch (this.sub, pos, pt);
+if (r >= 0) {
+return r;
+}}} finally {
+this.count.dec ();
+}
+if (!this.matchFewest && canUse >= 0) {
+var n = Clazz.superCall (this, com.stevesoft.pat.Multi_stage2, "getNext", []);
+if (n == null) {
+return canUse;
+}var ret = this.testMatch (n, pos, pt);
+return ret;
+} else {
+return canUse;
+}}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+try {
+var m = new com.stevesoft.pat.Multi_stage2 (this.matchMin, this.matchMax, this.sub.clone (h));
+m.matchFewest = this.matchFewest;
+return m;
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+return null;
+} else {
+throw rs;
+}
+}
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/NoPattern.js b/bin/com/stevesoft/pat/NoPattern.js
index ec7438b..394e032 100644
--- a/bin/com/stevesoft/pat/NoPattern.js
+++ b/bin/com/stevesoft/pat/NoPattern.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.NoPattern", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "NoPattern", com.stevesoft.pat.Pattern);
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(?e=#)[^#d#D]";
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (i, p) {
-return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.NoPattern ();
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.NoPattern", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "NoPattern", com.stevesoft.pat.Pattern);
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(?e=#)[^#d#D]";
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (i, p) {
+return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.NoPattern ();
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/NonDirFileRegex.js b/bin/com/stevesoft/pat/NonDirFileRegex.js
index 59811e9..eb3a57d 100644
--- a/bin/com/stevesoft/pat/NonDirFileRegex.js
+++ b/bin/com/stevesoft/pat/NonDirFileRegex.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.FileRegex"], "com.stevesoft.pat.NonDirFileRegex", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "NonDirFileRegex", com.stevesoft.pat.FileRegex);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.FileRegex"], "com.stevesoft.pat.NonDirFileRegex", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "NonDirFileRegex", com.stevesoft.pat.FileRegex);
+});
diff --git a/bin/com/stevesoft/pat/NotImplementedError.js b/bin/com/stevesoft/pat/NotImplementedError.js
index 45dd68f..4c44ef5 100644
--- a/bin/com/stevesoft/pat/NotImplementedError.js
+++ b/bin/com/stevesoft/pat/NotImplementedError.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["java.lang.Error"], "com.stevesoft.pat.NotImplementedError", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "NotImplementedError", Error);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["java.lang.Error"], "com.stevesoft.pat.NotImplementedError", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "NotImplementedError", Error);
+});
diff --git a/bin/com/stevesoft/pat/NullPattern.js b/bin/com/stevesoft/pat/NullPattern.js
index 2198789..a8eda32 100644
--- a/bin/com/stevesoft/pat/NullPattern.js
+++ b/bin/com/stevesoft/pat/NullPattern.js
@@ -1,20 +1,20 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.NullPattern", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "NullPattern", com.stevesoft.pat.Pattern);
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.nextString ();
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (p, pt) {
-return this.nextMatch (p, pt);
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (0);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.NullPattern ();
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.NullPattern", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "NullPattern", com.stevesoft.pat.Pattern);
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.nextString ();
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (p, pt) {
+return this.nextMatch (p, pt);
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (0);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.NullPattern ();
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/NullRule.js b/bin/com/stevesoft/pat/NullRule.js
index f6a1485..f781239 100644
--- a/bin/com/stevesoft/pat/NullRule.js
+++ b/bin/com/stevesoft/pat/NullRule.js
@@ -1,15 +1,15 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.NullRule", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "NullRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.NullRule, []);
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "";
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.NullRule", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "NullRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.NullRule, []);
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "";
+});
+});
diff --git a/bin/com/stevesoft/pat/Or.js b/bin/com/stevesoft/pat/Or.js
index 1ca2671..9255825 100644
--- a/bin/com/stevesoft/pat/Or.js
+++ b/bin/com/stevesoft/pat/Or.js
@@ -1,92 +1,92 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Or", ["com.stevesoft.pat.patInt", "java.lang.StringBuffer", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.v = null;
-this.pv = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Or", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.Or, []);
-this.v = new java.util.Vector ();
-});
-Clazz.defineMethod (c$, "leftForm",
-function () {
-return "(?:";
-});
-Clazz.defineMethod (c$, "rightForm",
-function () {
-return ")";
-});
-Clazz.defineMethod (c$, "sepForm",
-function () {
-return "|";
-});
-Clazz.defineMethod (c$, "addOr",
-function (p) {
-this.pv = null;
-this.v.addElement (p);
-p.setParent (this);
-return this;
-}, "com.stevesoft.pat.Pattern");
-Clazz.defineMethod (c$, "toString",
-function () {
-var i;
-var sb = new StringBuffer ();
-sb.append (this.leftForm ());
-if (this.v.size () > 0) {
-sb.append ((this.v.elementAt (0)).toString ());
-}for (i = 1; i < this.v.size (); i++) {
-sb.append (this.sepForm ());
-sb.append ((this.v.elementAt (i)).toString ());
-}
-sb.append (this.rightForm ());
-sb.append (this.nextString ());
-return sb.toString ();
-});
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-if (this.pv == null) {
-this.pv = new Array (this.v.size ());
-this.v.copyInto (this.pv);
-}for (var i = 0; i < this.v.size (); i++) {
-var p = this.pv[i];
-var r = p.matchInternal (pos, pt);
-if (r >= 0) {
-return r;
-}}
-return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "minChars",
-function () {
-if (this.v.size () == 0) {
-return new com.stevesoft.pat.patInt (0);
-}var m = (this.v.elementAt (0)).countMinChars ();
-for (var i = 1; i < this.v.size (); i++) {
-var p = this.v.elementAt (i);
-m.mineq (p.countMinChars ());
-}
-return m;
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-if (this.v.size () == 0) {
-return new com.stevesoft.pat.patInt (0);
-}var m = (this.v.elementAt (0)).countMaxChars ();
-for (var i = 1; i < this.v.size (); i++) {
-var p = this.v.elementAt (i);
-m.maxeq (p.countMaxChars ());
-}
-return m;
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-var o = new com.stevesoft.pat.Or ();
-h.put (this, o);
-h.put (o, o);
-for (var i = 0; i < this.v.size (); i++) {
-o.v.addElement ((this.v.elementAt (i)).clone (h));
-}
-return o;
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Or", ["com.stevesoft.pat.patInt", "java.lang.StringBuffer", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.v = null;
+this.pv = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Or", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.Or, []);
+this.v = new java.util.Vector ();
+});
+Clazz.defineMethod (c$, "leftForm",
+function () {
+return "(?:";
+});
+Clazz.defineMethod (c$, "rightForm",
+function () {
+return ")";
+});
+Clazz.defineMethod (c$, "sepForm",
+function () {
+return "|";
+});
+Clazz.defineMethod (c$, "addOr",
+function (p) {
+this.pv = null;
+this.v.addElement (p);
+p.setParent (this);
+return this;
+}, "com.stevesoft.pat.Pattern");
+Clazz.defineMethod (c$, "toString",
+function () {
+var i;
+var sb = new StringBuffer ();
+sb.append (this.leftForm ());
+if (this.v.size () > 0) {
+sb.append ((this.v.elementAt (0)).toString ());
+}for (i = 1; i < this.v.size (); i++) {
+sb.append (this.sepForm ());
+sb.append ((this.v.elementAt (i)).toString ());
+}
+sb.append (this.rightForm ());
+sb.append (this.nextString ());
+return sb.toString ();
+});
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+if (this.pv == null) {
+this.pv = new Array (this.v.size ());
+this.v.copyInto (this.pv);
+}for (var i = 0; i < this.v.size (); i++) {
+var p = this.pv[i];
+var r = p.matchInternal (pos, pt);
+if (r >= 0) {
+return r;
+}}
+return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "minChars",
+function () {
+if (this.v.size () == 0) {
+return new com.stevesoft.pat.patInt (0);
+}var m = (this.v.elementAt (0)).countMinChars ();
+for (var i = 1; i < this.v.size (); i++) {
+var p = this.v.elementAt (i);
+m.mineq (p.countMinChars ());
+}
+return m;
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+if (this.v.size () == 0) {
+return new com.stevesoft.pat.patInt (0);
+}var m = (this.v.elementAt (0)).countMaxChars ();
+for (var i = 1; i < this.v.size (); i++) {
+var p = this.v.elementAt (i);
+m.maxeq (p.countMaxChars ());
+}
+return m;
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+var o = new com.stevesoft.pat.Or ();
+h.put (this, o);
+h.put (o, o);
+for (var i = 0; i < this.v.size (); i++) {
+o.v.addElement ((this.v.elementAt (i)).clone (h));
+}
+return o;
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/OrMark.js b/bin/com/stevesoft/pat/OrMark.js
index bf47fca..7590a74 100644
--- a/bin/com/stevesoft/pat/OrMark.js
+++ b/bin/com/stevesoft/pat/OrMark.js
@@ -1,54 +1,54 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Or", "$.SubMark"], "com.stevesoft.pat.OrMark", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sm = null;
-this.id = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "OrMark", com.stevesoft.pat.Or);
-Clazz.prepareFields (c$, function () {
-this.sm = new com.stevesoft.pat.SubMark ();
-});
-Clazz.makeConstructor (c$,
-function (i) {
-Clazz.superConstructor (this, com.stevesoft.pat.OrMark, []);
-this.sm.om = this;
-this.id = i;
-}, "~N");
-Clazz.overrideMethod (c$, "leftForm",
-function () {
-return "(";
-});
-Clazz.defineMethod (c$, "getNext",
-function () {
-return this.sm;
-});
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-this.sm.next = Clazz.superCall (this, com.stevesoft.pat.OrMark, "getNext", []);
-if (pt.marks == null) {
-var n2 = 2 * pt.nMarks + 2;
-pt.marks = Clazz.newIntArray (n2, 0);
-for (var i = 0; i < n2; i++) {
-pt.marks[i] = -1;
-}
-}pt.marks[this.id] = pos;
-var ret = Clazz.superCall (this, com.stevesoft.pat.OrMark, "matchInternal", [pos, pt]);
-if (ret < 0) {
-pt.marks[this.id] = -1;
-} else if (pt.marks[this.id] > pt.marks[this.id + pt.nMarks]) {
-var swap = pt.marks[this.id];
-pt.marks[this.id] = pt.marks[this.id + pt.nMarks] + 1;
-pt.marks[this.id + pt.nMarks] = swap + 1;
-}return ret;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-var om = new com.stevesoft.pat.OrMark (this.id);
-h.put (om, om);
-h.put (this, om);
-for (var i = 0; i < this.v.size (); i++) {
-om.v.addElement ((this.v.elementAt (i)).clone (h));
-}
-return om;
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Or", "$.SubMark"], "com.stevesoft.pat.OrMark", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sm = null;
+this.id = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "OrMark", com.stevesoft.pat.Or);
+Clazz.prepareFields (c$, function () {
+this.sm = new com.stevesoft.pat.SubMark ();
+});
+Clazz.makeConstructor (c$,
+function (i) {
+Clazz.superConstructor (this, com.stevesoft.pat.OrMark, []);
+this.sm.om = this;
+this.id = i;
+}, "~N");
+Clazz.overrideMethod (c$, "leftForm",
+function () {
+return "(";
+});
+Clazz.defineMethod (c$, "getNext",
+function () {
+return this.sm;
+});
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+this.sm.next = Clazz.superCall (this, com.stevesoft.pat.OrMark, "getNext", []);
+if (pt.marks == null) {
+var n2 = 2 * pt.nMarks + 2;
+pt.marks = Clazz.newIntArray (n2, 0);
+for (var i = 0; i < n2; i++) {
+pt.marks[i] = -1;
+}
+}pt.marks[this.id] = pos;
+var ret = Clazz.superCall (this, com.stevesoft.pat.OrMark, "matchInternal", [pos, pt]);
+if (ret < 0) {
+pt.marks[this.id] = -1;
+} else if (pt.marks[this.id] > pt.marks[this.id + pt.nMarks]) {
+var swap = pt.marks[this.id];
+pt.marks[this.id] = pt.marks[this.id + pt.nMarks] + 1;
+pt.marks[this.id + pt.nMarks] = swap + 1;
+}return ret;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+var om = new com.stevesoft.pat.OrMark (this.id);
+h.put (om, om);
+h.put (this, om);
+for (var i = 0; i < this.v.size (); i++) {
+om.v.addElement ((this.v.elementAt (i)).clone (h));
+}
+return om;
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/PartialBuffer.js b/bin/com/stevesoft/pat/PartialBuffer.js
index 8490ff2..02fc0e3 100644
--- a/bin/com/stevesoft/pat/PartialBuffer.js
+++ b/bin/com/stevesoft/pat/PartialBuffer.js
@@ -1,50 +1,50 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.StringLike"], "com.stevesoft.pat.PartialBuffer", ["java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.off = 0;
-this.allowOverRun = true;
-this.overRun = false;
-this.sb = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "PartialBuffer", null, com.stevesoft.pat.StringLike);
-Clazz.makeConstructor (c$,
-function (sb) {
-this.sb = sb;
-}, "StringBuffer");
-Clazz.overrideMethod (c$, "charAt",
-function (n) {
-n += this.off;
-if (n == this.sb.length ()) {
-this.overRun = true;
-return String.fromCharCode (0);
-}return this.sb.charAt (n);
-}, "~N");
-Clazz.overrideMethod (c$, "length",
-function () {
-return this.allowOverRun ? this.sb.length () + 1 : this.sb.length ();
-});
-Clazz.overrideMethod (c$, "indexOf",
-function (c) {
-for (var i = 0; i < this.sb.length (); i++) {
-if (this.sb.charAt (i) == c) {
-return i;
-}}
-return -1;
-}, "~S");
-Clazz.overrideMethod (c$, "unwrap",
-function () {
-return this.sb;
-});
-Clazz.overrideMethod (c$, "substring",
-function (i1, i2) {
-var sb = new StringBuffer (i2 - i1);
-for (var i = i1; i < i2; i++) {
-sb.append (this.charAt (i));
-}
-return sb.toString ();
-}, "~N,~N");
-Clazz.overrideMethod (c$, "newStringBufferLike",
-function () {
-return null;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.StringLike"], "com.stevesoft.pat.PartialBuffer", ["java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.off = 0;
+this.allowOverRun = true;
+this.overRun = false;
+this.sb = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "PartialBuffer", null, com.stevesoft.pat.StringLike);
+Clazz.makeConstructor (c$,
+function (sb) {
+this.sb = sb;
+}, "StringBuffer");
+Clazz.overrideMethod (c$, "charAt",
+function (n) {
+n += this.off;
+if (n == this.sb.length ()) {
+this.overRun = true;
+return String.fromCharCode (0);
+}return this.sb.charAt (n);
+}, "~N");
+Clazz.overrideMethod (c$, "length",
+function () {
+return this.allowOverRun ? this.sb.length () + 1 : this.sb.length ();
+});
+Clazz.overrideMethod (c$, "indexOf",
+function (c) {
+for (var i = 0; i < this.sb.length (); i++) {
+if (this.sb.charAt (i) == c) {
+return i;
+}}
+return -1;
+}, "~S");
+Clazz.overrideMethod (c$, "unwrap",
+function () {
+return this.sb;
+});
+Clazz.overrideMethod (c$, "substring",
+function (i1, i2) {
+var sb = new StringBuffer (i2 - i1);
+for (var i = i1; i < i2; i++) {
+sb.append (this.charAt (i));
+}
+return sb.toString ();
+}, "~N,~N");
+Clazz.overrideMethod (c$, "newStringBufferLike",
+function () {
+return null;
+});
+});
diff --git a/bin/com/stevesoft/pat/Pattern.js b/bin/com/stevesoft/pat/Pattern.js
index a4dc10b..a3dddd4 100644
--- a/bin/com/stevesoft/pat/Pattern.js
+++ b/bin/com/stevesoft/pat/Pattern.js
@@ -1,153 +1,153 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.Pattern", ["com.stevesoft.pat.MessageManager", "$.patInf", "$.patInt", "java.lang.Error", "$.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.next = null;
-this.parent = null;
-this.mfrom = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Pattern");
-Clazz.defineMethod (c$, "getNext",
-function () {
-return this.next != null ? this.next : (this.parent == null ? null : this.parent.getNext ());
-});
-Clazz.defineMethod (c$, "setParent",
-function (p) {
-if (this.next != null) {
-this.next.setParent (p);
-} else {
-this.parent = p;
-}}, "com.stevesoft.pat.Pattern");
-Clazz.defineMethod (c$, "nextMatch",
-function (i, pt) {
-var p = this.getNext ();
-return p == null ? i : p.matchInternal (i, pt);
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "nextString",
-function () {
-if (this.next == null) {
-return "";
-}return this.next.toString ();
-});
-c$.inString = Clazz.defineMethod (c$, "inString",
-function (c, s) {
-var i;
-for (i = 0; i < s.length; i++) {
-if (s.charAt (i) == c) {
-return true;
-}}
-return false;
-}, "~S,~S");
-c$.protect = Clazz.defineMethod (c$, "protect",
-function (s, PROTECT_THESE, esc) {
-var i;
-var sb = new StringBuffer ();
-var p = PROTECT_THESE + esc;
-for (i = 0; i < s.length; i++) {
-var c = s.charAt (i);
-if (com.stevesoft.pat.Pattern.inString (c, p)) {
-sb.append (esc);
-}sb.append (c);
-}
-return sb.toString ();
-}, "~S,~S,~S");
-Clazz.defineMethod (c$, "match",
-function (s, pt) {
-return this.matchAt (s, 0, pt);
-}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "matchAt",
-function (s, i, pt) {
-pt.src = s;
-var r = this.matchInternal (i, pt);
-if (r < 0) {
-return -1;
-}this.mfrom = r < i ? r + 1 : i;
-return r < i ? i - r - 1 : r - i;
-}, "com.stevesoft.pat.StringLike,~N,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "Masked",
-function (i, pt) {
-return pt.cbits == null ? false : pt.cbits.get (i);
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "add",
-function (p) {
-if (this.next == null) {
-if (p == null) {
-return this;
-}this.next = p;
-p.parent = this.parent;
-this.parent = null;
-} else {
-this.next.add (p);
-}return this;
-}, "com.stevesoft.pat.Pattern");
-Clazz.defineMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (0);
-});
-Clazz.defineMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInf ();
-});
-Clazz.defineMethod (c$, "countMinChars",
-function () {
-var p = this;
-var sum = new com.stevesoft.pat.patInt (0);
-while (p != null) {
-sum.pluseq (p.minChars ());
-p = p.next;
-}
-return sum;
-});
-Clazz.defineMethod (c$, "countMaxChars",
-function () {
-var p = this;
-var sum = new com.stevesoft.pat.patInt (0);
-while (p != null) {
-sum.pluseq (p.maxChars ());
-p = p.next;
-}
-return sum;
-});
-Clazz.defineMethod (c$, "testMatch",
-function (p, pos, pt) {
-var tab = null;
-if (pt.marks != null) {
-try {
-tab = Clazz.newIntArray (pt.marks.length, 0);
-for (var i = 0; i < tab.length; i++) {
-tab[i] = pt.marks[i];
-}
-} catch (t) {
-}
-}var ret = p.matchInternal (pos, pt);
-if (ret < 0) {
-pt.marks = tab;
-}return ret;
-}, "com.stevesoft.pat.Pattern,~N,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "clone1",
-function (h) {
-throw new Error (com.stevesoft.pat.MessageManager.formatMessage ("error.no_such_method_as_clone1_for", Clazz.newArray (-1, [this.getClass ().getName ()])));
-}, "java.util.Hashtable");
-Clazz.defineMethod (c$, "clone",
-function (h) {
-var p = h.get (this);
-if (p != null) {
-return p;
-}p = this.clone1 (h);
-if (p == null) {
-throw new Error (com.stevesoft.pat.MessageManager.getString ("error.null_from_clone1"));
-}h.put (this, p);
-h.put (p, p);
-if (this.next != null) {
-p.next = this.next.clone (h);
-}if (this.parent != null) {
-p.parent = this.parent.clone (h);
-}return p;
-}, "java.util.Hashtable");
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-return o === this;
-}, "~O");
-Clazz.defineStatics (c$,
-"ESC", '\\',
-"PROTECT_THESE", "[]{}(),$,-\"^.");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.Pattern", ["com.stevesoft.pat.MessageManager", "$.patInf", "$.patInt", "java.lang.Error", "$.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.next = null;
+this.parent = null;
+this.mfrom = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Pattern");
+Clazz.defineMethod (c$, "getNext",
+function () {
+return this.next != null ? this.next : (this.parent == null ? null : this.parent.getNext ());
+});
+Clazz.defineMethod (c$, "setParent",
+function (p) {
+if (this.next != null) {
+this.next.setParent (p);
+} else {
+this.parent = p;
+}}, "com.stevesoft.pat.Pattern");
+Clazz.defineMethod (c$, "nextMatch",
+function (i, pt) {
+var p = this.getNext ();
+return p == null ? i : p.matchInternal (i, pt);
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "nextString",
+function () {
+if (this.next == null) {
+return "";
+}return this.next.toString ();
+});
+c$.inString = Clazz.defineMethod (c$, "inString",
+function (c, s) {
+var i;
+for (i = 0; i < s.length; i++) {
+if (s.charAt (i) == c) {
+return true;
+}}
+return false;
+}, "~S,~S");
+c$.protect = Clazz.defineMethod (c$, "protect",
+function (s, PROTECT_THESE, esc) {
+var i;
+var sb = new StringBuffer ();
+var p = PROTECT_THESE + esc;
+for (i = 0; i < s.length; i++) {
+var c = s.charAt (i);
+if (com.stevesoft.pat.Pattern.inString (c, p)) {
+sb.append (esc);
+}sb.append (c);
+}
+return sb.toString ();
+}, "~S,~S,~S");
+Clazz.defineMethod (c$, "match",
+function (s, pt) {
+return this.matchAt (s, 0, pt);
+}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "matchAt",
+function (s, i, pt) {
+pt.src = s;
+var r = this.matchInternal (i, pt);
+if (r < 0) {
+return -1;
+}this.mfrom = r < i ? r + 1 : i;
+return r < i ? i - r - 1 : r - i;
+}, "com.stevesoft.pat.StringLike,~N,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "Masked",
+function (i, pt) {
+return pt.cbits == null ? false : pt.cbits.get (i);
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "add",
+function (p) {
+if (this.next == null) {
+if (p == null) {
+return this;
+}this.next = p;
+p.parent = this.parent;
+this.parent = null;
+} else {
+this.next.add (p);
+}return this;
+}, "com.stevesoft.pat.Pattern");
+Clazz.defineMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (0);
+});
+Clazz.defineMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInf ();
+});
+Clazz.defineMethod (c$, "countMinChars",
+function () {
+var p = this;
+var sum = new com.stevesoft.pat.patInt (0);
+while (p != null) {
+sum.pluseq (p.minChars ());
+p = p.next;
+}
+return sum;
+});
+Clazz.defineMethod (c$, "countMaxChars",
+function () {
+var p = this;
+var sum = new com.stevesoft.pat.patInt (0);
+while (p != null) {
+sum.pluseq (p.maxChars ());
+p = p.next;
+}
+return sum;
+});
+Clazz.defineMethod (c$, "testMatch",
+function (p, pos, pt) {
+var tab = null;
+if (pt.marks != null) {
+try {
+tab = Clazz.newIntArray (pt.marks.length, 0);
+for (var i = 0; i < tab.length; i++) {
+tab[i] = pt.marks[i];
+}
+} catch (t) {
+}
+}var ret = p.matchInternal (pos, pt);
+if (ret < 0) {
+pt.marks = tab;
+}return ret;
+}, "com.stevesoft.pat.Pattern,~N,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "clone1",
+function (h) {
+throw new Error (com.stevesoft.pat.MessageManager.formatMessage ("error.no_such_method_as_clone1_for", Clazz.newArray (-1, [this.getClass ().getName ()])));
+}, "java.util.Hashtable");
+Clazz.defineMethod (c$, "clone",
+function (h) {
+var p = h.get (this);
+if (p != null) {
+return p;
+}p = this.clone1 (h);
+if (p == null) {
+throw new Error (com.stevesoft.pat.MessageManager.getString ("error.null_from_clone1"));
+}h.put (this, p);
+h.put (p, p);
+if (this.next != null) {
+p.next = this.next.clone (h);
+}if (this.parent != null) {
+p.parent = this.parent.clone (h);
+}return p;
+}, "java.util.Hashtable");
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+return o === this;
+}, "~O");
+Clazz.defineStatics (c$,
+"ESC", '\\',
+"PROTECT_THESE", "[]{}(),$,-\"^.");
+});
diff --git a/bin/com/stevesoft/pat/PatternSub.js b/bin/com/stevesoft/pat/PatternSub.js
index 2199b2b..835661a 100644
--- a/bin/com/stevesoft/pat/PatternSub.js
+++ b/bin/com/stevesoft/pat/PatternSub.js
@@ -1,7 +1,7 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.PatternSub", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sub = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "PatternSub", com.stevesoft.pat.Pattern);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.PatternSub", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sub = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "PatternSub", com.stevesoft.pat.Pattern);
+});
diff --git a/bin/com/stevesoft/pat/PopRule.js b/bin/com/stevesoft/pat/PopRule.js
index d983d19..92af006 100644
--- a/bin/com/stevesoft/pat/PopRule.js
+++ b/bin/com/stevesoft/pat/PopRule.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.PopRule", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "PopRule", com.stevesoft.pat.SpecialRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.PopRule, []);
-});
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "${POP}";
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.PopRule", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "PopRule", com.stevesoft.pat.SpecialRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.PopRule, []);
+});
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "${POP}";
+});
+});
diff --git a/bin/com/stevesoft/pat/Prop.js b/bin/com/stevesoft/pat/Prop.js
index 7f99d0e..5dbb6db 100644
--- a/bin/com/stevesoft/pat/Prop.js
+++ b/bin/com/stevesoft/pat/Prop.js
@@ -1,40 +1,40 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.Prop", ["com.stevesoft.pat.Bits"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "Prop");
-c$.isDecimalDigit = Clazz.defineMethod (c$, "isDecimalDigit",
-function (c) {
-if (com.stevesoft.pat.Bits.decimal_digit == null) {
-com.stevesoft.pat.Bits.decimal_digit_f ();
-}return com.stevesoft.pat.Bits.decimal_digit.get (c.charCodeAt (0));
-}, "~S");
-c$.isAlphabetic = Clazz.defineMethod (c$, "isAlphabetic",
-function (c) {
-if (com.stevesoft.pat.Bits.letter == null) {
-com.stevesoft.pat.Bits.letter_f ();
-}return com.stevesoft.pat.Bits.letter.get (c.charCodeAt (0));
-}, "~S");
-c$.isMath = Clazz.defineMethod (c$, "isMath",
-function (c) {
-if (com.stevesoft.pat.Bits.math == null) {
-com.stevesoft.pat.Bits.math_f ();
-}return com.stevesoft.pat.Bits.math.get (c.charCodeAt (0));
-}, "~S");
-c$.isCurrency = Clazz.defineMethod (c$, "isCurrency",
-function (c) {
-if (com.stevesoft.pat.Bits.currency == null) {
-com.stevesoft.pat.Bits.currency_f ();
-}return com.stevesoft.pat.Bits.currency.get (c.charCodeAt (0));
-}, "~S");
-c$.isWhite = Clazz.defineMethod (c$, "isWhite",
-function (c) {
-if (com.stevesoft.pat.Bits.white == null) {
-com.stevesoft.pat.Bits.white_f ();
-}return com.stevesoft.pat.Bits.white.get (c.charCodeAt (0));
-}, "~S");
-c$.isPunct = Clazz.defineMethod (c$, "isPunct",
-function (c) {
-if (com.stevesoft.pat.Bits.punct == null) {
-com.stevesoft.pat.Bits.punct_f ();
-}return com.stevesoft.pat.Bits.punct.get (c.charCodeAt (0));
-}, "~S");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.Prop", ["com.stevesoft.pat.Bits"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "Prop");
+c$.isDecimalDigit = Clazz.defineMethod (c$, "isDecimalDigit",
+function (c) {
+if (com.stevesoft.pat.Bits.decimal_digit == null) {
+com.stevesoft.pat.Bits.decimal_digit_f ();
+}return com.stevesoft.pat.Bits.decimal_digit.get (c.charCodeAt (0));
+}, "~S");
+c$.isAlphabetic = Clazz.defineMethod (c$, "isAlphabetic",
+function (c) {
+if (com.stevesoft.pat.Bits.letter == null) {
+com.stevesoft.pat.Bits.letter_f ();
+}return com.stevesoft.pat.Bits.letter.get (c.charCodeAt (0));
+}, "~S");
+c$.isMath = Clazz.defineMethod (c$, "isMath",
+function (c) {
+if (com.stevesoft.pat.Bits.math == null) {
+com.stevesoft.pat.Bits.math_f ();
+}return com.stevesoft.pat.Bits.math.get (c.charCodeAt (0));
+}, "~S");
+c$.isCurrency = Clazz.defineMethod (c$, "isCurrency",
+function (c) {
+if (com.stevesoft.pat.Bits.currency == null) {
+com.stevesoft.pat.Bits.currency_f ();
+}return com.stevesoft.pat.Bits.currency.get (c.charCodeAt (0));
+}, "~S");
+c$.isWhite = Clazz.defineMethod (c$, "isWhite",
+function (c) {
+if (com.stevesoft.pat.Bits.white == null) {
+com.stevesoft.pat.Bits.white_f ();
+}return com.stevesoft.pat.Bits.white.get (c.charCodeAt (0));
+}, "~S");
+c$.isPunct = Clazz.defineMethod (c$, "isPunct",
+function (c) {
+if (com.stevesoft.pat.Bits.punct == null) {
+com.stevesoft.pat.Bits.punct_f ();
+}return com.stevesoft.pat.Bits.punct.get (c.charCodeAt (0));
+}, "~S");
+});
diff --git a/bin/com/stevesoft/pat/Pthings.js b/bin/com/stevesoft/pat/Pthings.js
index 179ec6b..8969d4f 100644
--- a/bin/com/stevesoft/pat/Pthings.js
+++ b/bin/com/stevesoft/pat/Pthings.js
@@ -1,13 +1,13 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-c$ = Clazz.decorateAsClass (function () {
-this.src = null;
-this.ignoreCase = false;
-this.mFlag = false;
-this.cbits = null;
-this.marks = null;
-this.nMarks = 0;
-this.dotDoesntMatchCR = false;
-this.no_check = false;
-this.lastPos = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Pthings");
+Clazz.declarePackage ("com.stevesoft.pat");
+c$ = Clazz.decorateAsClass (function () {
+this.src = null;
+this.ignoreCase = false;
+this.mFlag = false;
+this.cbits = null;
+this.marks = null;
+this.nMarks = 0;
+this.dotDoesntMatchCR = false;
+this.no_check = false;
+this.lastPos = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Pthings");
diff --git a/bin/com/stevesoft/pat/PushRule.js b/bin/com/stevesoft/pat/PushRule.js
index bac59ef..fd7d64e 100644
--- a/bin/com/stevesoft/pat/PushRule.js
+++ b/bin/com/stevesoft/pat/PushRule.js
@@ -1,35 +1,35 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.PushRule", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.NewRule = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "PushRule", com.stevesoft.pat.SpecialRule);
-Clazz.makeConstructor (c$,
-function (p) {
-Clazz.superConstructor (this, com.stevesoft.pat.PushRule, []);
-this.NewRule = p.NewRule;
-}, "com.stevesoft.pat.PushRule");
-Clazz.makeConstructor (c$,
-function (nm, rr) {
-Clazz.superConstructor (this, com.stevesoft.pat.PushRule, []);
-this.name = nm;
-this.NewRule = rr;
-}, "~S,com.stevesoft.pat.Regex");
-Clazz.makeConstructor (c$,
-function (nm, tr) {
-Clazz.superConstructor (this, com.stevesoft.pat.PushRule, []);
-this.name = nm;
-this.NewRule = tr.rp;
-}, "~S,com.stevesoft.pat.Transformer");
-Clazz.overrideMethod (c$, "clone1",
-function () {
-return new com.stevesoft.pat.PushRule (this);
-});
-Clazz.defineMethod (c$, "String1",
-function () {
-return "${+" + this.name + "}";
-});
-Clazz.overrideMethod (c$, "apply",
-function (sbl, rr) {
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.PushRule", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.NewRule = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "PushRule", com.stevesoft.pat.SpecialRule);
+Clazz.makeConstructor (c$,
+function (p) {
+Clazz.superConstructor (this, com.stevesoft.pat.PushRule, []);
+this.NewRule = p.NewRule;
+}, "com.stevesoft.pat.PushRule");
+Clazz.makeConstructor (c$,
+function (nm, rr) {
+Clazz.superConstructor (this, com.stevesoft.pat.PushRule, []);
+this.name = nm;
+this.NewRule = rr;
+}, "~S,com.stevesoft.pat.Regex");
+Clazz.makeConstructor (c$,
+function (nm, tr) {
+Clazz.superConstructor (this, com.stevesoft.pat.PushRule, []);
+this.name = nm;
+this.NewRule = tr.rp;
+}, "~S,com.stevesoft.pat.Transformer");
+Clazz.overrideMethod (c$, "clone1",
+function () {
+return new com.stevesoft.pat.PushRule (this);
+});
+Clazz.defineMethod (c$, "String1",
+function () {
+return "${+" + this.name + "}";
+});
+Clazz.overrideMethod (c$, "apply",
+function (sbl, rr) {
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+});
diff --git a/bin/com/stevesoft/pat/RBuffer.js b/bin/com/stevesoft/pat/RBuffer.js
index 529f8a2..27970cf 100644
--- a/bin/com/stevesoft/pat/RBuffer.js
+++ b/bin/com/stevesoft/pat/RBuffer.js
@@ -1,32 +1,32 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.RBuffer", ["java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.done = false;
-this.sb = null;
-this.pos = 0;
-this.epos = 0;
-this.next = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "RBuffer");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (sb) {
-this.sb = sb;
-}, "StringBuffer");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "sb=" + this.sb.toString ().$replace ('\n', ' ') + " pos=" + this.pos + " epos=" + this.epos + " sb.length()=" + this.sb.length () + "\n" + this.sp (this.pos + 3) + "^" + this.sp (this.epos - this.pos - 1) + "^";
-});
-Clazz.defineMethod (c$, "sp",
-function (n) {
-if (n <= 0) {
-return "";
-}var sb = new StringBuffer (n);
-for (var i = 0; i < n; i++) {
-sb.append (' ');
-}
-return sb.toString ();
-}, "~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.RBuffer", ["java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.done = false;
+this.sb = null;
+this.pos = 0;
+this.epos = 0;
+this.next = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "RBuffer");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (sb) {
+this.sb = sb;
+}, "StringBuffer");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "sb=" + this.sb.toString ().$replace ('\n', ' ') + " pos=" + this.pos + " epos=" + this.epos + " sb.length()=" + this.sb.length () + "\n" + this.sp (this.pos + 3) + "^" + this.sp (this.epos - this.pos - 1) + "^";
+});
+Clazz.defineMethod (c$, "sp",
+function (n) {
+if (n <= 0) {
+return "";
+}var sb = new StringBuffer (n);
+for (var i = 0; i < n; i++) {
+sb.append (' ');
+}
+return sb.toString ();
+}, "~N");
+});
diff --git a/bin/com/stevesoft/pat/Range.js b/bin/com/stevesoft/pat/Range.js
index cb007c4..8294a31 100644
--- a/bin/com/stevesoft/pat/Range.js
+++ b/bin/com/stevesoft/pat/Range.js
@@ -1,65 +1,65 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern", "$.RegSyntax"], ["com.stevesoft.pat.BadRangeArgs", "$.Range"], ["com.stevesoft.pat.RegSyntaxError", "$.oneChar", "$.patInt"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "BadRangeArgs", com.stevesoft.pat.RegSyntax);
-c$ = Clazz.decorateAsClass (function () {
-this.lo = '\0';
-this.hi = '\0';
-this.altlo = '\0';
-this.althi = '\0';
-this.printBrackets = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Range", com.stevesoft.pat.Pattern);
-Clazz.overrideMethod (c$, "toString",
-function () {
-var s = com.stevesoft.pat.Pattern.protect ("" + this.lo, "[]{}(),$,-\"^.", '\\') + "-" + com.stevesoft.pat.Pattern.protect ("" + this.hi, "[]{}(),$,-\"^.", '\\');
-if (!this.printBrackets) {
-return s;
-}return "[" + s + "]";
-});
-Clazz.makeConstructor (c$,
-function (loi, hii) {
-Clazz.superConstructor (this, com.stevesoft.pat.Range, []);
-this.lo = loi;
-this.hi = hii;
-var o = null;
-if (this.lo >= this.hi) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Badly formed []'s : " + this.lo + " >= " + this.hi);
-}o = new com.stevesoft.pat.oneChar (this.lo);
-this.altlo = o.altc;
-o = new com.stevesoft.pat.oneChar (this.hi);
-this.althi = o.altc;
-}, "~S,~S");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (pos >= pt.src.length ()) {
-return -1;
-}if (this.Masked (pos, pt)) {
-return -1;
-}var c = pt.src.charAt (pos);
-if (this.lo <= c && c <= this.hi || (pt.ignoreCase && (this.altlo <= c && c <= this.althi))) {
-return this.nextMatch (pos + 1, pt);
-}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-try {
-var r = new com.stevesoft.pat.Range (this.lo, this.hi);
-r.printBrackets = this.printBrackets;
-return r;
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-return null;
-} else {
-throw rs;
-}
-}
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern", "$.RegSyntax"], ["com.stevesoft.pat.BadRangeArgs", "$.Range"], ["com.stevesoft.pat.RegSyntaxError", "$.oneChar", "$.patInt"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "BadRangeArgs", com.stevesoft.pat.RegSyntax);
+c$ = Clazz.decorateAsClass (function () {
+this.lo = '\0';
+this.hi = '\0';
+this.altlo = '\0';
+this.althi = '\0';
+this.printBrackets = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Range", com.stevesoft.pat.Pattern);
+Clazz.overrideMethod (c$, "toString",
+function () {
+var s = com.stevesoft.pat.Pattern.protect ("" + this.lo, "[]{}(),$,-\"^.", '\\') + "-" + com.stevesoft.pat.Pattern.protect ("" + this.hi, "[]{}(),$,-\"^.", '\\');
+if (!this.printBrackets) {
+return s;
+}return "[" + s + "]";
+});
+Clazz.makeConstructor (c$,
+function (loi, hii) {
+Clazz.superConstructor (this, com.stevesoft.pat.Range, []);
+this.lo = loi;
+this.hi = hii;
+var o = null;
+if (this.lo >= this.hi) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Badly formed []'s : " + this.lo + " >= " + this.hi);
+}o = new com.stevesoft.pat.oneChar (this.lo);
+this.altlo = o.altc;
+o = new com.stevesoft.pat.oneChar (this.hi);
+this.althi = o.altc;
+}, "~S,~S");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (pos >= pt.src.length ()) {
+return -1;
+}if (this.Masked (pos, pt)) {
+return -1;
+}var c = pt.src.charAt (pos);
+if (this.lo <= c && c <= this.hi || (pt.ignoreCase && (this.altlo <= c && c <= this.althi))) {
+return this.nextMatch (pos + 1, pt);
+}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+try {
+var r = new com.stevesoft.pat.Range (this.lo, this.hi);
+r.printBrackets = this.printBrackets;
+return r;
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+return null;
+} else {
+throw rs;
+}
+}
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/RegOpt.class b/bin/com/stevesoft/pat/RegOpt.class
index b62aeb0..96c50d7 100644
Binary files a/bin/com/stevesoft/pat/RegOpt.class and b/bin/com/stevesoft/pat/RegOpt.class differ
diff --git a/bin/com/stevesoft/pat/RegOpt.js b/bin/com/stevesoft/pat/RegOpt.js
index ed70432..54e0ed8 100644
--- a/bin/com/stevesoft/pat/RegOpt.js
+++ b/bin/com/stevesoft/pat/RegOpt.js
@@ -1,254 +1,254 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern", "$.oneChar", "java.util.Hashtable", "$.Vector"], ["com.stevesoft.pat.Branch", "$.RegOpt", "$.FastChar"], ["com.stevesoft.pat.Any", "$.Bracket", "$.Custom", "$.FastBracket", "$.FastMulti", "$.Multi", "$.NullPattern", "$.Or", "$.Range", "$.UniValidator", "$.patInt", "java.lang.Character", "$.StringBuffer"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "FastChar", com.stevesoft.pat.oneChar);
-Clazz.overrideMethod (c$, "matchInternal",
-function (p, pt) {
-return (p < pt.src.length () && pt.src.charAt (p) == this.c) ? this.nextMatch (p + 1, pt) : -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.FastChar (this.c);
-}, "java.util.Hashtable");
-c$ = Clazz.decorateAsClass (function () {
-this.h = null;
-this.keys = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Branch", com.stevesoft.pat.Pattern);
-Clazz.prepareFields (c$, function () {
-this.h = new java.util.Hashtable ();
-this.keys = new java.util.Vector ();
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.Branch, []);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (x) {
-var b = new com.stevesoft.pat.Branch ();
-b.keys = this.keys.clone ();
-x.put (this, b);
-x.put (b, b);
-for (var i = 0; i < this.keys.size (); i++) {
-var p = this.h.get (this.keys.elementAt (i));
-b.h.put (this.keys.elementAt (i), p.clone (x));
-}
-return b;
-}, "java.util.Hashtable");
-Clazz.defineMethod (c$, "reduce",
-function (ignoreCase, dontMinQ) {
-if (this.h.size () == 1) {
-var e = this.h.keys ();
-var c = e.nextElement ();
-var oc;
-if (ignoreCase || dontMinQ) {
-oc = new com.stevesoft.pat.oneChar (c.charValue ());
-} else {
-oc = new com.stevesoft.pat.FastChar (c.charValue ());
-}oc.next = this.h.get (c);
-oc.add (this.next);
-return oc;
-} else if (this.h.size () == 0) {
-return null;
-}return this;
-}, "~B,~B");
-Clazz.defineMethod (c$, "maxChars",
-function () {
-var e = this.h.keys ();
-var count = new com.stevesoft.pat.patInt (0);
-while (e.hasMoreElements ()) {
-var key = e.nextElement ();
-var pa = this.h.get (key);
-var pi = pa.maxChars ();
-pi.inc ();
-count.maxeq (pi);
-}
-return count;
-});
-Clazz.defineMethod (c$, "minChars",
-function () {
-var e = this.h.keys ();
-var count = new com.stevesoft.pat.patInt (0);
-while (e.hasMoreElements ()) {
-var key = e.nextElement ();
-var pa = this.h.get (key);
-var pi = pa.minChars ();
-pi.inc ();
-count.mineq (pi);
-}
-return count;
-});
-Clazz.defineMethod (c$, "addc",
-function (o, ignoreCase, dontMinQ) {
-var n = o.next;
-if (n == null) {
-n = new com.stevesoft.pat.NullPattern ();
-} else {
-n = com.stevesoft.pat.RegOpt.opt (n, ignoreCase, dontMinQ);
-}n.setParent (this);
-this.set ( new Character (o.c), n, ignoreCase, dontMinQ);
-if (ignoreCase) {
-if (o.c != o.altc) {
-this.set ( new Character (o.altc), n, ignoreCase, dontMinQ);
-}if (o.c != o.altc2 && o.altc != o.altc2) {
-this.set ( new Character (o.altc2), n, ignoreCase, dontMinQ);
-}}}, "com.stevesoft.pat.oneChar,~B,~B");
-Clazz.defineMethod (c$, "set",
-function (c, n, igc, dontMinQ) {
-var p = this.h.get (c);
-this.next = null;
-if (p == null) {
-if (Clazz.instanceOf (n, com.stevesoft.pat.Or)) {
-var np = new com.stevesoft.pat.NullPattern ();
-np.add (n);
-this.h.put (c, np);
-} else {
-this.h.put (c, n);
-}this.keys.addElement (c);
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or)) {
-(p).addOr (n);
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && Clazz.instanceOf (n, com.stevesoft.pat.oneChar) && (p).c != (n).c) {
-var b = new com.stevesoft.pat.Branch ();
-b.addc (p, igc, dontMinQ);
-b.addc (n, igc, dontMinQ);
-this.h.put (c, b);
-b.setParent (this);
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.Branch) && Clazz.instanceOf (n, com.stevesoft.pat.oneChar)) {
-(p).addc (n, igc, dontMinQ);
-n.setParent (p);
-} else {
-var o = new com.stevesoft.pat.Or ();
-o.setParent (this);
-if (Clazz.instanceOf (p, com.stevesoft.pat.NullPattern) && p.parent == null && p.next != null) {
-o.addOr (p.next);
-} else {
-o.addOr (p);
-}o.addOr (n);
-var optpat = com.stevesoft.pat.RegOpt.opt (o, igc, dontMinQ);
-this.h.put (c, optpat);
-optpat.setParent (this);
-}}, "Character,com.stevesoft.pat.Pattern,~B,~B");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var sb = new StringBuffer ();
-sb.append ("(?:(?#branch)");
-for (var i = 0; i < this.keys.size (); i++) {
-var c = this.keys.elementAt (i);
-sb.append (c);
-sb.append (this.h.get (c));
-if (i + 1 < this.keys.size ()) {
-sb.append ("|");
-}}
-sb.append (")");
-sb.append (this.nextString ());
-return sb.toString ();
-});
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-if (pos >= pt.src.length ()) {
-return -1;
-}var n = this.h.get ( new Character (pt.src.charAt (pos)));
-if (n == null) {
-return -1;
-}if (pt.cbits != null && pt.cbits.get (pos)) {
-return -1;
-}return n.matchInternal (pos + 1, pt);
-}, "~N,com.stevesoft.pat.Pthings");
-c$ = Clazz.declareType (com.stevesoft.pat, "RegOpt");
-c$.opt = Clazz.defineMethod (c$, "opt",
-function (p, ignoreCase, dontMinQ) {
-if (p == null) {
-return p;
-}if (Clazz.instanceOf (p, com.stevesoft.pat.Bracket)) {
-var b = p;
-p = com.stevesoft.pat.FastBracket.process (b, ignoreCase);
-p.next = b.next;
-p.parent = b.parent;
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && !ignoreCase && !dontMinQ) {
-var o = p;
-p = new com.stevesoft.pat.FastChar (o.c);
-p.next = o.next;
-p.parent = o.parent;
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or) && (p).leftForm ().equals ("(?:") && (p).v.size () == 1) {
-var o = p;
-p = o.v.elementAt (0);
-p.setParent (null);
-p = com.stevesoft.pat.RegOpt.opt (p, ignoreCase, dontMinQ);
-p.add (o.next);
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or)) {
-var o = p;
-o.pv = null;
-var v = o.v;
-o.v = new java.util.Vector ();
-var b = new com.stevesoft.pat.Branch ();
-b.parent = o.parent;
-for (var i = 0; i < v.size (); i++) {
-var pp = v.elementAt (i);
-if (Clazz.instanceOf (pp, com.stevesoft.pat.oneChar) && (b.h.size () >= 1 || (i + 1 < v.size () && Clazz.instanceOf (v.elementAt (i + 1), com.stevesoft.pat.oneChar)))) {
-b.addc (pp, ignoreCase, dontMinQ);
-} else {
-if (b.keys.size () > 0) {
-var p2 = b.reduce (ignoreCase, dontMinQ);
-if (p2 != null) {
-o.addOr (p2);
-b = new com.stevesoft.pat.Branch ();
-b.parent = o.parent;
-}}o.addOr (com.stevesoft.pat.RegOpt.opt (pp, ignoreCase, dontMinQ));
-}}
-if (b.keys.size () > 0) {
-var p2 = b.reduce (ignoreCase, dontMinQ);
-if (p2 != null) {
-o.addOr (p2);
-}}if (o.v.size () == 1 && o.leftForm ().equals ("(?:")) {
-p = o.v.elementAt (0);
-p.setParent (null);
-p = com.stevesoft.pat.RegOpt.opt (p, ignoreCase, dontMinQ);
-p.add (o.next);
-}} else if (Clazz.instanceOf (p, com.stevesoft.pat.FastMulti)) {
-var ps = p;
-ps.sub = com.stevesoft.pat.RegOpt.opt (ps.sub, ignoreCase, dontMinQ);
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.Multi) && com.stevesoft.pat.RegOpt.safe4fm ((p).sub)) {
-var m = p;
-var fm = null;
-try {
-fm = new com.stevesoft.pat.FastMulti (m.a, m.b, com.stevesoft.pat.RegOpt.opt (m.sub, ignoreCase, dontMinQ));
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-} else {
-throw rs;
-}
-}
-fm.parent = m.parent;
-fm.matchFewest = m.matchFewest;
-fm.next = m.next;
-p = fm;
-}if (p.next != null) {
-p.next = com.stevesoft.pat.RegOpt.opt (p.next, ignoreCase, dontMinQ);
-}return p;
-}, "com.stevesoft.pat.Pattern,~B,~B");
-c$.safe4fm = Clazz.defineMethod (c$, "safe4fm",
-function (x) {
-while (x != null) {
-if (Clazz.instanceOf (x, com.stevesoft.pat.Bracket)) {
-;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Range)) {
-;} else if (Clazz.instanceOf (x, com.stevesoft.pat.oneChar)) {
-;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Any)) {
-;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Custom) && Clazz.instanceOf ((x).v, com.stevesoft.pat.UniValidator)) {
-;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Or)) {
-var o = x;
-if (!o.leftForm ().equals ("(?:")) {
-return false;
-}var lo = o.countMinChars ();
-var hi = o.countMaxChars ();
-if (!lo.equals (hi)) {
-return false;
-}for (var i = 0; i < o.v.size (); i++) {
-if (!com.stevesoft.pat.RegOpt.safe4fm (o.v.elementAt (i))) {
-return false;
-}}
-} else {
-return false;
-}x = x.next;
-}
-return true;
-}, "com.stevesoft.pat.Pattern");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern", "$.oneChar", "java.util.Hashtable", "$.Vector"], ["com.stevesoft.pat.Branch", "$.RegOpt", "$.FastChar"], ["com.stevesoft.pat.Any", "$.Bracket", "$.Custom", "$.FastBracket", "$.FastMulti", "$.Multi", "$.NullPattern", "$.Or", "$.Range", "$.UniValidator", "$.patInt", "java.lang.Character", "$.StringBuffer"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "FastChar", com.stevesoft.pat.oneChar);
+Clazz.overrideMethod (c$, "matchInternal",
+function (p, pt) {
+return (p < pt.src.length () && pt.src.charAt (p) == this.c) ? this.nextMatch (p + 1, pt) : -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.FastChar (this.c);
+}, "java.util.Hashtable");
+c$ = Clazz.decorateAsClass (function () {
+this.h = null;
+this.keys = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Branch", com.stevesoft.pat.Pattern);
+Clazz.prepareFields (c$, function () {
+this.h = new java.util.Hashtable ();
+this.keys = new java.util.Vector ();
+});
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.Branch, []);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (x) {
+var b = new com.stevesoft.pat.Branch ();
+b.keys = this.keys.clone ();
+x.put (this, b);
+x.put (b, b);
+for (var i = 0; i < this.keys.size (); i++) {
+var p = this.h.get (this.keys.elementAt (i));
+b.h.put (this.keys.elementAt (i), p.clone (x));
+}
+return b;
+}, "java.util.Hashtable");
+Clazz.defineMethod (c$, "reduce",
+function (ignoreCase, dontMinQ) {
+if (this.h.size () == 1) {
+var e = this.h.keys ();
+var c = e.nextElement ();
+var oc;
+if (ignoreCase || dontMinQ) {
+oc = new com.stevesoft.pat.oneChar (c.charValue ());
+} else {
+oc = new com.stevesoft.pat.FastChar (c.charValue ());
+}oc.next = this.h.get (c);
+oc.add (this.next);
+return oc;
+} else if (this.h.size () == 0) {
+return null;
+}return this;
+}, "~B,~B");
+Clazz.defineMethod (c$, "maxChars",
+function () {
+var e = this.h.keys ();
+var count = new com.stevesoft.pat.patInt (0);
+while (e.hasMoreElements ()) {
+var key = e.nextElement ();
+var pa = this.h.get (key);
+var pi = pa.maxChars ();
+pi.inc ();
+count.maxeq (pi);
+}
+return count;
+});
+Clazz.defineMethod (c$, "minChars",
+function () {
+var e = this.h.keys ();
+var count = new com.stevesoft.pat.patInt (0);
+while (e.hasMoreElements ()) {
+var key = e.nextElement ();
+var pa = this.h.get (key);
+var pi = pa.minChars ();
+pi.inc ();
+count.mineq (pi);
+}
+return count;
+});
+Clazz.defineMethod (c$, "addc",
+function (o, ignoreCase, dontMinQ) {
+var n = o.next;
+if (n == null) {
+n = new com.stevesoft.pat.NullPattern ();
+} else {
+n = com.stevesoft.pat.RegOpt.opt (n, ignoreCase, dontMinQ);
+}n.setParent (this);
+this.set ( new Character (o.c), n, ignoreCase, dontMinQ);
+if (ignoreCase) {
+if (o.c != o.altc) {
+this.set ( new Character (o.altc), n, ignoreCase, dontMinQ);
+}if (o.c != o.altc2 && o.altc != o.altc2) {
+this.set ( new Character (o.altc2), n, ignoreCase, dontMinQ);
+}}}, "com.stevesoft.pat.oneChar,~B,~B");
+Clazz.defineMethod (c$, "set",
+function (c, n, igc, dontMinQ) {
+var p = this.h.get (c);
+this.next = null;
+if (p == null) {
+if (Clazz.instanceOf (n, com.stevesoft.pat.Or)) {
+var np = new com.stevesoft.pat.NullPattern ();
+np.add (n);
+this.h.put (c, np);
+} else {
+this.h.put (c, n);
+}this.keys.addElement (c);
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or)) {
+(p).addOr (n);
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && Clazz.instanceOf (n, com.stevesoft.pat.oneChar) && (p).c != (n).c) {
+var b = new com.stevesoft.pat.Branch ();
+b.addc (p, igc, dontMinQ);
+b.addc (n, igc, dontMinQ);
+this.h.put (c, b);
+b.setParent (this);
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.Branch) && Clazz.instanceOf (n, com.stevesoft.pat.oneChar)) {
+(p).addc (n, igc, dontMinQ);
+n.setParent (p);
+} else {
+var o = new com.stevesoft.pat.Or ();
+o.setParent (this);
+if (Clazz.instanceOf (p, com.stevesoft.pat.NullPattern) && p.parent == null && p.next != null) {
+o.addOr (p.next);
+} else {
+o.addOr (p);
+}o.addOr (n);
+var optpat = com.stevesoft.pat.RegOpt.opt (o, igc, dontMinQ);
+this.h.put (c, optpat);
+optpat.setParent (this);
+}}, "Character,com.stevesoft.pat.Pattern,~B,~B");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var sb = new StringBuffer ();
+sb.append ("(?:(?#branch)");
+for (var i = 0; i < this.keys.size (); i++) {
+var c = this.keys.elementAt (i);
+sb.append (c);
+sb.append (this.h.get (c));
+if (i + 1 < this.keys.size ()) {
+sb.append ("|");
+}}
+sb.append (")");
+sb.append (this.nextString ());
+return sb.toString ();
+});
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+if (pos >= pt.src.length ()) {
+return -1;
+}var n = this.h.get ( new Character (pt.src.charAt (pos)));
+if (n == null) {
+return -1;
+}if (pt.cbits != null && pt.cbits.get (pos)) {
+return -1;
+}return n.matchInternal (pos + 1, pt);
+}, "~N,com.stevesoft.pat.Pthings");
+c$ = Clazz.declareType (com.stevesoft.pat, "RegOpt");
+c$.opt = Clazz.defineMethod (c$, "opt",
+function (p, ignoreCase, dontMinQ) {
+if (p == null) {
+return p;
+}if (Clazz.instanceOf (p, com.stevesoft.pat.Bracket)) {
+var b = p;
+p = com.stevesoft.pat.FastBracket.process (b, ignoreCase);
+p.next = b.next;
+p.parent = b.parent;
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && !ignoreCase && !dontMinQ) {
+var o = p;
+p = new com.stevesoft.pat.FastChar (o.c);
+p.next = o.next;
+p.parent = o.parent;
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or) && (p).leftForm ().equals ("(?:") && (p).v.size () == 1) {
+var o = p;
+p = o.v.elementAt (0);
+p.setParent (null);
+p = com.stevesoft.pat.RegOpt.opt (p, ignoreCase, dontMinQ);
+p.add (o.next);
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or)) {
+var o = p;
+o.pv = null;
+var v = o.v;
+o.v = new java.util.Vector ();
+var b = new com.stevesoft.pat.Branch ();
+b.parent = o.parent;
+for (var i = 0; i < v.size (); i++) {
+var pp = v.elementAt (i);
+if (Clazz.instanceOf (pp, com.stevesoft.pat.oneChar) && (b.h.size () >= 1 || (i + 1 < v.size () && Clazz.instanceOf (v.elementAt (i + 1), com.stevesoft.pat.oneChar)))) {
+b.addc (pp, ignoreCase, dontMinQ);
+} else {
+if (b.keys.size () > 0) {
+var p2 = b.reduce (ignoreCase, dontMinQ);
+if (p2 != null) {
+o.addOr (p2);
+b = new com.stevesoft.pat.Branch ();
+b.parent = o.parent;
+}}o.addOr (com.stevesoft.pat.RegOpt.opt (pp, ignoreCase, dontMinQ));
+}}
+if (b.keys.size () > 0) {
+var p2 = b.reduce (ignoreCase, dontMinQ);
+if (p2 != null) {
+o.addOr (p2);
+}}if (o.v.size () == 1 && o.leftForm ().equals ("(?:")) {
+p = o.v.elementAt (0);
+p.setParent (null);
+p = com.stevesoft.pat.RegOpt.opt (p, ignoreCase, dontMinQ);
+p.add (o.next);
+}} else if (Clazz.instanceOf (p, com.stevesoft.pat.FastMulti)) {
+var ps = p;
+ps.sub = com.stevesoft.pat.RegOpt.opt (ps.sub, ignoreCase, dontMinQ);
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.Multi) && com.stevesoft.pat.RegOpt.safe4fm ((p).sub)) {
+var m = p;
+var fm = null;
+try {
+fm = new com.stevesoft.pat.FastMulti (m.a, m.b, com.stevesoft.pat.RegOpt.opt (m.sub, ignoreCase, dontMinQ));
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+} else {
+throw rs;
+}
+}
+fm.parent = m.parent;
+fm.matchFewest = m.matchFewest;
+fm.next = m.next;
+p = fm;
+}if (p.next != null) {
+p.next = com.stevesoft.pat.RegOpt.opt (p.next, ignoreCase, dontMinQ);
+}return p;
+}, "com.stevesoft.pat.Pattern,~B,~B");
+c$.safe4fm = Clazz.defineMethod (c$, "safe4fm",
+function (x) {
+while (x != null) {
+if (Clazz.instanceOf (x, com.stevesoft.pat.Bracket)) {
+;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Range)) {
+;} else if (Clazz.instanceOf (x, com.stevesoft.pat.oneChar)) {
+;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Any)) {
+;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Custom) && Clazz.instanceOf ((x).v, com.stevesoft.pat.UniValidator)) {
+;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Or)) {
+var o = x;
+if (!o.leftForm ().equals ("(?:")) {
+return false;
+}var lo = o.countMinChars ();
+var hi = o.countMaxChars ();
+if (!lo.equals (hi)) {
+return false;
+}for (var i = 0; i < o.v.size (); i++) {
+if (!com.stevesoft.pat.RegOpt.safe4fm (o.v.elementAt (i))) {
+return false;
+}}
+} else {
+return false;
+}x = x.next;
+}
+return true;
+}, "com.stevesoft.pat.Pattern");
+});
diff --git a/bin/com/stevesoft/pat/RegRes.js b/bin/com/stevesoft/pat/RegRes.js
index ec4def1..9a31c29 100644
--- a/bin/com/stevesoft/pat/RegRes.js
+++ b/bin/com/stevesoft/pat/RegRes.js
@@ -1,155 +1,155 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.RegRes", ["java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.marks = null;
-this.didMatch_ = false;
-this.src = null;
-this.charsMatched_ = 0;
-this.matchFrom_ = 0;
-this.numSubs_ = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "RegRes");
-Clazz.defineMethod (c$, "getString",
-function () {
-return this.src.toString ();
-});
-Clazz.defineMethod (c$, "getStringLike",
-function () {
-return this.src;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-var sb = new StringBuffer ();
-sb.append ("match=" + this.matchedFrom () + ":" + this.charsMatched ());
-if (!this.didMatch ()) {
-return sb.toString ();
-}for (var i = 0; i < this.numSubs (); i++) {
-var n = i + 1;
-sb.append (" sub(" + n + ")=" + this.matchedFromI (n) + ":" + this.charsMatchedI (n));
-}
-return sb.toString ();
-});
-Clazz.defineMethod (c$, "copyOutOf",
-function (r) {
-if (r.marks == null) {
-this.marks = null;
-} else {
-try {
-this.marks = Clazz.newIntArray (r.marks.length, 0);
-for (var i = 0; i < this.marks.length; i++) {
-this.marks[i] = r.marks[i];
-}
-} catch (t) {
-}
-}this.didMatch_ = r.didMatch_;
-this.src = r.src;
-this.charsMatched_ = r.charsMatched_;
-this.matchFrom_ = r.matchFrom_;
-this.numSubs_ = r.numSubs_;
-}, "com.stevesoft.pat.RegRes");
-Clazz.defineMethod (c$, "equals",
-function (r) {
-if (this.charsMatched_ != r.charsMatched_ || this.matchFrom_ != r.matchFrom_ || this.didMatch_ != r.didMatch_ || this.numSubs_ != r.numSubs_ || !this.src.unwrap ().equals (r.src.unwrap ())) {
-return false;
-}if (this.marks == null && r.marks != null) {
-return false;
-}if (this.marks != null && r.marks == null) {
-return false;
-}for (var i = 1; i <= this.numSubs_; i++) {
-if (this.matchedFromI (i) != r.matchedFromI (i)) {
-return false;
-} else if (this.charsMatchedI (i) != r.charsMatchedI (i)) {
-return false;
-}}
-return true;
-}, "com.stevesoft.pat.RegRes");
-Clazz.defineMethod (c$, "stringMatched",
-function () {
-var mf = this.matchedFrom ();
-var cm = this.charsMatched ();
-return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf, mf + cm);
-});
-Clazz.defineMethod (c$, "matchedFromI",
-function (i) {
-if (this.marks == null || i > this.numSubs_) {
-return -1;
-}return this.marks[i];
-}, "~N");
-Clazz.defineMethod (c$, "charsMatchedI",
-function (i) {
-if (this.marks == null || i > this.numSubs_ || !this.didMatch_) {
-return -1;
-}var mf = this.matchedFromI (i);
-return mf < 0 ? -1 : this.marks[i + this.numSubs_] - this.matchedFromI (i);
-}, "~N");
-Clazz.defineMethod (c$, "matchedToI",
-function (i) {
-if (this.marks == null || i > this.numSubs_ || !this.didMatch_) {
-return -1;
-}return this.marks[i + this.numSubs_];
-}, "~N");
-Clazz.defineMethod (c$, "stringMatchedI",
-function (i) {
-var mf = this.matchedFromI (i);
-var cm = this.charsMatchedI (i);
-return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf, mf + cm);
-}, "~N");
-Clazz.defineMethod (c$, "left",
-function () {
-var mf = this.matchedFrom ();
-return !this.didMatch_ || (mf < 0) ? null : this.src.substring (0, mf);
-});
-Clazz.defineMethod (c$, "leftI",
-function (i) {
-var mf = this.matchedFromI (i);
-return !this.didMatch_ || (mf < 0) ? null : this.src.substring (0, mf);
-}, "~N");
-Clazz.defineMethod (c$, "right",
-function () {
-var mf = this.matchedFrom ();
-var cm = this.charsMatched ();
-return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf + cm, this.src.length ());
-});
-Clazz.defineMethod (c$, "rightI",
-function (i) {
-var mf = this.matchedFromI (i);
-var cm = this.charsMatchedI (i);
-return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf + cm, this.src.length ());
-}, "~N");
-Clazz.defineMethod (c$, "matchedFrom",
-function () {
-return !this.didMatch_ ? -1 : this.matchFrom_;
-});
-Clazz.defineMethod (c$, "charsMatched",
-function () {
-return !this.didMatch_ || this.matchFrom_ < 0 ? -1 : this.charsMatched_;
-});
-Clazz.defineMethod (c$, "matchedTo",
-function () {
-return !this.didMatch_ ? -1 : this.matchFrom_ + this.charsMatched_;
-});
-Clazz.defineMethod (c$, "numSubs",
-function () {
-return this.numSubs_;
-});
-Clazz.defineMethod (c$, "didMatch",
-function () {
-return this.didMatch_;
-});
-Clazz.defineMethod (c$, "matchFrom",
-function () {
-return this.matchedFrom ();
-});
-Clazz.defineMethod (c$, "substring",
-function () {
-return this.stringMatched ();
-});
-Clazz.defineMethod (c$, "matchFromI",
-function (i) {
-return this.matchedFromI (i);
-}, "~N");
-Clazz.defineMethod (c$, "substringI",
-function (i) {
-return this.stringMatchedI (i);
-}, "~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.RegRes", ["java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.marks = null;
+this.didMatch_ = false;
+this.src = null;
+this.charsMatched_ = 0;
+this.matchFrom_ = 0;
+this.numSubs_ = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "RegRes");
+Clazz.defineMethod (c$, "getString",
+function () {
+return this.src.toString ();
+});
+Clazz.defineMethod (c$, "getStringLike",
+function () {
+return this.src;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+var sb = new StringBuffer ();
+sb.append ("match=" + this.matchedFrom () + ":" + this.charsMatched ());
+if (!this.didMatch ()) {
+return sb.toString ();
+}for (var i = 0; i < this.numSubs (); i++) {
+var n = i + 1;
+sb.append (" sub(" + n + ")=" + this.matchedFromI (n) + ":" + this.charsMatchedI (n));
+}
+return sb.toString ();
+});
+Clazz.defineMethod (c$, "copyOutOf",
+function (r) {
+if (r.marks == null) {
+this.marks = null;
+} else {
+try {
+this.marks = Clazz.newIntArray (r.marks.length, 0);
+for (var i = 0; i < this.marks.length; i++) {
+this.marks[i] = r.marks[i];
+}
+} catch (t) {
+}
+}this.didMatch_ = r.didMatch_;
+this.src = r.src;
+this.charsMatched_ = r.charsMatched_;
+this.matchFrom_ = r.matchFrom_;
+this.numSubs_ = r.numSubs_;
+}, "com.stevesoft.pat.RegRes");
+Clazz.defineMethod (c$, "equals",
+function (r) {
+if (this.charsMatched_ != r.charsMatched_ || this.matchFrom_ != r.matchFrom_ || this.didMatch_ != r.didMatch_ || this.numSubs_ != r.numSubs_ || !this.src.unwrap ().equals (r.src.unwrap ())) {
+return false;
+}if (this.marks == null && r.marks != null) {
+return false;
+}if (this.marks != null && r.marks == null) {
+return false;
+}for (var i = 1; i <= this.numSubs_; i++) {
+if (this.matchedFromI (i) != r.matchedFromI (i)) {
+return false;
+} else if (this.charsMatchedI (i) != r.charsMatchedI (i)) {
+return false;
+}}
+return true;
+}, "com.stevesoft.pat.RegRes");
+Clazz.defineMethod (c$, "stringMatched",
+function () {
+var mf = this.matchedFrom ();
+var cm = this.charsMatched ();
+return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf, mf + cm);
+});
+Clazz.defineMethod (c$, "matchedFromI",
+function (i) {
+if (this.marks == null || i > this.numSubs_) {
+return -1;
+}return this.marks[i];
+}, "~N");
+Clazz.defineMethod (c$, "charsMatchedI",
+function (i) {
+if (this.marks == null || i > this.numSubs_ || !this.didMatch_) {
+return -1;
+}var mf = this.matchedFromI (i);
+return mf < 0 ? -1 : this.marks[i + this.numSubs_] - this.matchedFromI (i);
+}, "~N");
+Clazz.defineMethod (c$, "matchedToI",
+function (i) {
+if (this.marks == null || i > this.numSubs_ || !this.didMatch_) {
+return -1;
+}return this.marks[i + this.numSubs_];
+}, "~N");
+Clazz.defineMethod (c$, "stringMatchedI",
+function (i) {
+var mf = this.matchedFromI (i);
+var cm = this.charsMatchedI (i);
+return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf, mf + cm);
+}, "~N");
+Clazz.defineMethod (c$, "left",
+function () {
+var mf = this.matchedFrom ();
+return !this.didMatch_ || (mf < 0) ? null : this.src.substring (0, mf);
+});
+Clazz.defineMethod (c$, "leftI",
+function (i) {
+var mf = this.matchedFromI (i);
+return !this.didMatch_ || (mf < 0) ? null : this.src.substring (0, mf);
+}, "~N");
+Clazz.defineMethod (c$, "right",
+function () {
+var mf = this.matchedFrom ();
+var cm = this.charsMatched ();
+return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf + cm, this.src.length ());
+});
+Clazz.defineMethod (c$, "rightI",
+function (i) {
+var mf = this.matchedFromI (i);
+var cm = this.charsMatchedI (i);
+return !this.didMatch_ || mf < 0 || cm < 0 ? null : this.src.substring (mf + cm, this.src.length ());
+}, "~N");
+Clazz.defineMethod (c$, "matchedFrom",
+function () {
+return !this.didMatch_ ? -1 : this.matchFrom_;
+});
+Clazz.defineMethod (c$, "charsMatched",
+function () {
+return !this.didMatch_ || this.matchFrom_ < 0 ? -1 : this.charsMatched_;
+});
+Clazz.defineMethod (c$, "matchedTo",
+function () {
+return !this.didMatch_ ? -1 : this.matchFrom_ + this.charsMatched_;
+});
+Clazz.defineMethod (c$, "numSubs",
+function () {
+return this.numSubs_;
+});
+Clazz.defineMethod (c$, "didMatch",
+function () {
+return this.didMatch_;
+});
+Clazz.defineMethod (c$, "matchFrom",
+function () {
+return this.matchedFrom ();
+});
+Clazz.defineMethod (c$, "substring",
+function () {
+return this.stringMatched ();
+});
+Clazz.defineMethod (c$, "matchFromI",
+function (i) {
+return this.matchedFromI (i);
+}, "~N");
+Clazz.defineMethod (c$, "substringI",
+function (i) {
+return this.stringMatchedI (i);
+}, "~N");
+});
diff --git a/bin/com/stevesoft/pat/RegSyntax.js b/bin/com/stevesoft/pat/RegSyntax.js
index 9275c48..8a6e621 100644
--- a/bin/com/stevesoft/pat/RegSyntax.js
+++ b/bin/com/stevesoft/pat/RegSyntax.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["java.lang.Exception"], "com.stevesoft.pat.RegSyntax", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "RegSyntax", Exception);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.RegSyntax, []);
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["java.lang.Exception"], "com.stevesoft.pat.RegSyntax", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "RegSyntax", Exception);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.RegSyntax, []);
+});
+});
diff --git a/bin/com/stevesoft/pat/RegSyntaxError.js b/bin/com/stevesoft/pat/RegSyntaxError.js
index 5a81c21..3a127a5 100644
--- a/bin/com/stevesoft/pat/RegSyntaxError.js
+++ b/bin/com/stevesoft/pat/RegSyntaxError.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["java.lang.Error"], "com.stevesoft.pat.RegSyntaxError", ["com.stevesoft.pat.RegSyntax"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "RegSyntaxError", Error);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.RegSyntaxError, []);
-});
-c$.endItAll = Clazz.defineMethod (c$, "endItAll",
-function (s) {
-if (com.stevesoft.pat.RegSyntaxError.RegSyntaxErrorEnabled) {
-throw new com.stevesoft.pat.RegSyntaxError (s);
-}throw new com.stevesoft.pat.RegSyntax (s);
-}, "~S");
-Clazz.defineStatics (c$,
-"RegSyntaxErrorEnabled", false);
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["java.lang.Error"], "com.stevesoft.pat.RegSyntaxError", ["com.stevesoft.pat.RegSyntax"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "RegSyntaxError", Error);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.RegSyntaxError, []);
+});
+c$.endItAll = Clazz.defineMethod (c$, "endItAll",
+function (s) {
+if (com.stevesoft.pat.RegSyntaxError.RegSyntaxErrorEnabled) {
+throw new com.stevesoft.pat.RegSyntaxError (s);
+}throw new com.stevesoft.pat.RegSyntax (s);
+}, "~S");
+Clazz.defineStatics (c$,
+"RegSyntaxErrorEnabled", false);
+});
diff --git a/bin/com/stevesoft/pat/Regex.class b/bin/com/stevesoft/pat/Regex.class
index 89553f0..14f6f05 100644
Binary files a/bin/com/stevesoft/pat/Regex.class and b/bin/com/stevesoft/pat/Regex.class differ
diff --git a/bin/com/stevesoft/pat/Regex.js b/bin/com/stevesoft/pat/Regex.js
index d05b95e..893eaa7 100644
--- a/bin/com/stevesoft/pat/Regex.js
+++ b/bin/com/stevesoft/pat/Regex.js
@@ -1,1026 +1,1026 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.RegRes", "$.UniValidator", "jalview.jsdev.api.RegExpInterface", "com.stevesoft.pat.NoPattern", "$.Pthings", "$.patInt", "java.util.Hashtable"], ["com.stevesoft.pat.UnicodeW", "$.UnicodeCurrency", "$.UnicodeAlpha", "$.UnicodeUpper", "$.NUnicodeCurrency", "$.NUnicodeW", "$.NUnicodeAlpha", "$.UnicodeMath", "$.UnicodeWhite", "$.UnicodeDigit", "$.NUnicodeMath", "$.Regex", "$.NUnicodeDigit", "$.NUnicodeWhite", "$.NUnicodePunct", "$.UnicodePunct", "$.UnicodeLower"], ["com.stevesoft.pat.Any", "$.BackG", "$.BackMatch", "$.Backup", "$.Boundary", "$.Bracket", "$.CaseMgr", "$.Ctrl", "$.Custom", "$.CustomEndpoint", "$.DotMulti", "$.End", "$.FastMulti", "$.Group", "$.MessageManager", "$.Multi", "$.NullPattern", "$.Or", "$.OrMark", "$.Prop", "$.Range", "$.RegOpt", "$.RegSyntax", "$.RegSyntaxError", "$.ReplaceRule", "$.Replacer", "$.Rthings", "$.Skip", "$.Skipped", "$.Start", "$.StrPos", "$.lookAhead", "$.oneChar", "$.parsePerl", "$.patInf", "com.stevesoft.pat.wrap.StringWrap", "java.lang.NullPointerException", "$.StringBuffer", "java.util.BitSet"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodePunct", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && com.stevesoft.pat.Prop.isPunct (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeWhite", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && com.stevesoft.pat.Prop.isWhite (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodePunct", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && !com.stevesoft.pat.Prop.isPunct (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeWhite", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && !com.stevesoft.pat.Prop.isWhite (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeW", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-if (from >= s.length ()) {
-return -1;
-}var c = s.charAt (from);
-return (com.stevesoft.pat.Prop.isAlphabetic (c) || com.stevesoft.pat.Prop.isDecimalDigit (c) || c == '_') ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeW", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-if (from >= s.length ()) {
-return -1;
-}var c = s.charAt (from);
-return !(com.stevesoft.pat.Prop.isAlphabetic (c) || com.stevesoft.pat.Prop.isDecimalDigit (c) || c == '_') ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeDigit", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && com.stevesoft.pat.Prop.isDecimalDigit (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeDigit", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && !com.stevesoft.pat.Prop.isDecimalDigit (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeMath", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && com.stevesoft.pat.Prop.isMath (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeMath", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && !com.stevesoft.pat.Prop.isMath (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeCurrency", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && com.stevesoft.pat.Prop.isCurrency (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeCurrency", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && !com.stevesoft.pat.Prop.isCurrency (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeAlpha", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && com.stevesoft.pat.Prop.isAlphabetic (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeAlpha", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && !com.stevesoft.pat.Prop.isAlphabetic (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeUpper", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && this.isUpper (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "isUpper",
-function (c) {
-return c == com.stevesoft.pat.CaseMgr.toUpperCaseC (c) && c != com.stevesoft.pat.CaseMgr.toLowerCaseC (c);
-}, "~S");
-c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeLower", com.stevesoft.pat.UniValidator);
-Clazz.overrideMethod (c$, "validate",
-function (s, from, to) {
-return from < s.length () && this.isLower (s.charAt (from)) ? to : -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "isLower",
-function (c) {
-return c != com.stevesoft.pat.CaseMgr.toUpperCaseC (c) && c == com.stevesoft.pat.CaseMgr.toLowerCaseC (c);
-}, "~S");
-c$ = Clazz.decorateAsClass (function () {
-this.thePattern = null;
-this.minMatch = null;
-this.rep = null;
-this.dontMatchInQuotes = false;
-this.ignoreCase = false;
-this.repr = null;
-this.esc = '\\';
-this.pt = null;
-this.gFlags = null;
-this.gFlagto = 0;
-this.gFlag = false;
-this.sFlag = false;
-this.mFlag = false;
-this.p = null;
-this.or = null;
-this.skipper = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Regex", com.stevesoft.pat.RegRes, [jalview.jsdev.api.RegExpInterface, Cloneable]);
-Clazz.prepareFields (c$, function () {
-this.thePattern = com.stevesoft.pat.Regex.none;
-this.minMatch = new com.stevesoft.pat.patInt (0);
-this.pt = new com.stevesoft.pat.Pthings ();
-});
-Clazz.makeConstructor (c$,
-function (s, strRp) {
-Clazz.superConstructor (this, com.stevesoft.pat.Regex, []);
-try {
-if (s != null) this.compile (s);
-if (strRp.length > 0) this.rep = com.stevesoft.pat.ReplaceRule.perlCode (strRp);
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-} else {
-throw rs;
-}
-}
-}, "~S,~S");
-Clazz.overrideMethod (c$, "clone",
-function () {
-return new com.stevesoft.pat.Regex (null, "").cloneFrom (this);
-});
-Clazz.defineMethod (c$, "cloneFrom",
-function (r) {
-this.copyOutOf (r);
-this.dontMatchInQuotes = r.dontMatchInQuotes;
-this.esc = r.esc;
-this.ignoreCase = r.ignoreCase;
-this.gFlag = r.gFlag;
-if (r.rep == null) {
-this.rep = null;
-} else {
-this.rep = r.rep.clone ();
-}this.thePattern = r.thePattern.clone ( new java.util.Hashtable ());
-this.minMatch = r.minMatch;
-this.skipper = r.skipper;
-return this;
-}, "com.stevesoft.pat.Regex");
-Clazz.defineMethod (c$, "setDontMatchInQuotes",
-function (b) {
-this.dontMatchInQuotes = b;
-}, "~B");
-Clazz.defineMethod (c$, "getDontMatchInQuotes",
-function () {
-return this.dontMatchInQuotes;
-});
-Clazz.overrideMethod (c$, "setIgnoreCase",
-function (b) {
-this.ignoreCase = b;
-}, "~B");
-Clazz.defineMethod (c$, "getIgnoreCase",
-function () {
-return this.ignoreCase;
-});
-c$.setDefaultMFlag = Clazz.defineMethod (c$, "setDefaultMFlag",
-function (mFlag) {
-com.stevesoft.pat.Regex.defaultMFlag = mFlag;
-}, "~B");
-c$.getDefaultMFlag = Clazz.defineMethod (c$, "getDefaultMFlag",
-function () {
-return com.stevesoft.pat.Regex.defaultMFlag;
-});
-Clazz.defineMethod (c$, "setReplaceRuleStr",
-function (rp) {
-this.rep = com.stevesoft.pat.ReplaceRule.perlCode (rp);
-this.repr = null;
-}, "~S");
-Clazz.defineMethod (c$, "setReplaceRule",
-function (rp) {
-this.rep = rp;
-}, "com.stevesoft.pat.ReplaceRule");
-c$.isDefined = Clazz.defineMethod (c$, "isDefined",
-function (nm) {
-return com.stevesoft.pat.Regex.validators.get (nm) != null;
-}, "~S");
-c$.undefine = Clazz.defineMethod (c$, "undefine",
-function (nm) {
-com.stevesoft.pat.Regex.validators.remove (nm);
-}, "~S");
-c$.defineV = Clazz.defineMethod (c$, "defineV",
-function (nm, pat, v) {
-v.pattern = pat;
-com.stevesoft.pat.Regex.validators.put (nm, v);
-}, "~S,~S,com.stevesoft.pat.Validator");
-c$.define = Clazz.defineMethod (c$, "define",
-function (nm, pat) {
-com.stevesoft.pat.Regex.validators.put (nm, pat);
-}, "~S,~S");
-Clazz.defineMethod (c$, "getReplaceRule",
-function () {
-return this.rep;
-});
-Clazz.defineMethod (c$, "_getReplacer",
-function () {
-return this.repr == null ? this.repr = new com.stevesoft.pat.Replacer () : this.repr;
-});
-Clazz.defineMethod (c$, "getReplacer",
-function () {
-if (this.repr == null) {
-this.repr = new com.stevesoft.pat.Replacer ();
-}this.repr.rh.me = this;
-this.repr.rh.prev = null;
-return this.repr;
-});
-Clazz.defineMethod (c$, "replaceFirst",
-function (s) {
-return this._getReplacer ().replaceFirstRegion (s, this, 0, s.length).toString ();
-}, "~S");
-Clazz.defineMethod (c$, "replaceFirstFrom",
-function (s, pos) {
-return this._getReplacer ().replaceFirstRegion (s, this, pos, s.length).toString ();
-}, "~S,~N");
-Clazz.defineMethod (c$, "replaceFirstRegion",
-function (s, start, end) {
-return this._getReplacer ().replaceFirstRegion (s, this, start, end).toString ();
-}, "~S,~N,~N");
-Clazz.overrideMethod (c$, "replaceAll",
-function (s) {
-return this._getReplacer ().replaceAllRegion (s, this, 0, s.length).toString ();
-}, "~S");
-Clazz.defineMethod (c$, "replaceAllLike",
-function (s) {
-return this._getReplacer ().replaceAllRegion (s, this, 0, s.length ());
-}, "com.stevesoft.pat.StringLike");
-Clazz.defineMethod (c$, "replaceAllFrom",
-function (s, pos) {
-return this._getReplacer ().replaceAllRegion (s, this, pos, s.length).toString ();
-}, "~S,~N");
-Clazz.defineMethod (c$, "replaceAllRegion",
-function (s, start, end) {
-return this._getReplacer ().replaceAllRegion (s, this, start, end).toString ();
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "compile",
-function (prepat) {
-var postpat = com.stevesoft.pat.parsePerl.codify (prepat, true);
-var pat = postpat == null ? prepat : postpat;
-this.minMatch = null;
-this.ignoreCase = false;
-this.dontMatchInQuotes = false;
-var mk = new com.stevesoft.pat.Rthings (this);
-var offset = mk.val;
-var newpat = pat;
-this.thePattern = com.stevesoft.pat.Regex.none;
-this.p = null;
-this.or = null;
-this.minMatch = new com.stevesoft.pat.patInt (0);
-var sp = new com.stevesoft.pat.StrPos (pat, 0);
-if (sp.incMatch ("(?e=")) {
-var newEsc = sp.c;
-sp.inc ();
-if (sp.match (')')) {
-newpat = com.stevesoft.pat.Regex.reEscape (pat.substring (6), newEsc, '\\');
-}} else if (this.esc != '\\') {
-newpat = com.stevesoft.pat.Regex.reEscape (pat, this.esc, '\\');
-}this.thePattern = this._compile (newpat, mk);
-this.numSubs_ = mk.val - offset;
-mk.set (this);
-}, "~S");
-Clazz.defineMethod (c$, "equals",
-function (o) {
-if (Clazz.instanceOf (o, com.stevesoft.pat.Regex)) {
-if (this.toString ().equals (o.toString ())) {
-return Clazz.superCall (this, com.stevesoft.pat.Regex, "equals", [o]);
-} else {
-return false;
-}} else {
-return Clazz.superCall (this, com.stevesoft.pat.Regex, "equals", [o]);
-}}, "~O");
-Clazz.defineMethod (c$, "prep",
-function (s) {
-this.pt.lastPos = this.matchedTo ();
-if (this.pt.lastPos < 0) {
-this.pt.lastPos = 0;
-}if ((s == null ? null : s.unwrap ()) !== (this.src == null ? null : s.unwrap ())) {
-this.pt.lastPos = 0;
-}this.src = s;
-this.pt.dotDoesntMatchCR = com.stevesoft.pat.Regex.dotDoesntMatchCR && (!this.sFlag);
-this.pt.mFlag = ( new Boolean (this.mFlag | com.stevesoft.pat.Regex.defaultMFlag).valueOf ());
-this.pt.ignoreCase = this.ignoreCase;
-this.pt.no_check = false;
-if (this.pt.marks != null) {
-for (var i = 0; i < this.pt.marks.length; i++) {
-this.pt.marks[i] = -1;
-}
-}this.pt.marks = null;
-this.pt.nMarks = this.numSubs_;
-this.pt.src = s;
-if (this.dontMatchInQuotes) {
-com.stevesoft.pat.Regex.setCbits (s, this.pt);
-} else {
-this.pt.cbits = null;
-}return this.pt;
-}, "com.stevesoft.pat.StringLike");
-Clazz.defineMethod (c$, "matchAt",
-function (s, start_pos) {
-return this._search (s, start_pos, start_pos);
-}, "~S,~N");
-Clazz.defineMethod (c$, "matchAtLike",
-function (s, start_pos) {
-return this._searchLike (s, start_pos, start_pos);
-}, "com.stevesoft.pat.StringLike,~N");
-Clazz.overrideMethod (c$, "search",
-function (s) {
-if (s == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_given_to_regex_search"));
-}return this._search (s, 0, s.length);
-}, "~S");
-Clazz.defineMethod (c$, "searchLike",
-function (sl) {
-if (sl == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search"));
-}return this._searchLike (sl, 0, sl.length ());
-}, "com.stevesoft.pat.StringLike");
-Clazz.defineMethod (c$, "reverseSearch",
-function (s) {
-if (s == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_given_to_regex_reverse_search"));
-}return this._reverseSearch (s, 0, s.length);
-}, "~S");
-Clazz.defineMethod (c$, "reverseSearchLike",
-function (sl) {
-if (sl == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_reverse_search"));
-}return this._reverseSearchLike (sl, 0, sl.length ());
-}, "com.stevesoft.pat.StringLike");
-Clazz.overrideMethod (c$, "searchFrom",
-function (s, start) {
-if (s == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search_from"));
-}return this._search (s, start, s.length);
-}, "~S,~N");
-Clazz.defineMethod (c$, "searchFromLike",
-function (s, start) {
-if (s == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search_from"));
-}return this._searchLike (s, start, s.length ());
-}, "com.stevesoft.pat.StringLike,~N");
-Clazz.defineMethod (c$, "searchRegion",
-function (s, start, end) {
-if (s == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search_region"));
-}return this._search (s, start, end);
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "setGFlag",
-function (b) {
-this.gFlag = b;
-}, "~B");
-Clazz.defineMethod (c$, "getGFlag",
-function () {
-return this.gFlag;
-});
-Clazz.defineMethod (c$, "getSFlag",
-function () {
-return this.sFlag;
-});
-Clazz.defineMethod (c$, "getMFlag",
-function () {
-return this.mFlag;
-});
-Clazz.defineMethod (c$, "_search",
-function (s, start, end) {
-return this._searchLike ( new com.stevesoft.pat.wrap.StringWrap (s), start, end);
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "_searchLike",
-function (s, start, end) {
-if (this.gFlag && this.gFlagto > 0 && this.gFlags != null && s.unwrap () === this.gFlags.unwrap ()) {
-start = this.gFlagto;
-}this.gFlags = null;
-var pt = this.prep (s);
-var up = (this.minMatch == null ? end : end - this.minMatch.i);
-if (up < start && end >= start) {
-up = start;
-}if (this.skipper == null) {
-for (var i = start; i <= up; i++) {
-this.charsMatched_ = this.thePattern.matchAt (s, i, pt);
-if (this.charsMatched_ >= 0) {
-this.matchFrom_ = this.thePattern.mfrom;
-this.marks = pt.marks;
-this.gFlagto = this.matchFrom_ + this.charsMatched_;
-this.gFlags = s;
-return this.didMatch_ = true;
-}}
-} else {
-pt.no_check = true;
-for (var i = start; i <= up; i++) {
-i = this.skipper.find (this.src, i, up);
-if (i < 0) {
-this.charsMatched_ = this.matchFrom_ = -1;
-return this.didMatch_ = false;
-}this.charsMatched_ = this.thePattern.matchAt (s, i, pt);
-if (this.charsMatched_ >= 0) {
-this.matchFrom_ = this.thePattern.mfrom;
-this.marks = pt.marks;
-this.gFlagto = this.matchFrom_ + this.charsMatched_;
-this.gFlags = s;
-return this.didMatch_ = true;
-}}
-}return this.didMatch_ = false;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "_reverseSearch",
-function (s, start, end) {
-return this._reverseSearchLike ( new com.stevesoft.pat.wrap.StringWrap (s), start, end);
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "_reverseSearchLike",
-function (s, start, end) {
-if (this.gFlag && this.gFlagto > 0 && s.unwrap () === this.gFlags.unwrap ()) {
-end = this.gFlagto;
-}this.gFlags = null;
-var pt = this.prep (s);
-for (var i = end; i >= start; i--) {
-this.charsMatched_ = this.thePattern.matchAt (s, i, pt);
-if (this.charsMatched_ >= 0) {
-this.matchFrom_ = this.thePattern.mfrom;
-this.marks = pt.marks;
-this.gFlagto = this.matchFrom_ - 1;
-this.gFlags = s;
-return this.didMatch_ = true;
-}}
-return this.didMatch_ = false;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$.setCbits = Clazz.defineMethod (c$, "setCbits",
-function (s, pt) {
-if (s === com.stevesoft.pat.Regex.lasts) {
-pt.cbits = com.stevesoft.pat.Regex.lastbs;
-return;
-}var bs = new java.util.BitSet (s.length ());
-var qc = ' ';
-var setBit = false;
-for (var i = 0; i < s.length (); i++) {
-if (setBit) {
-bs.set (i);
-}var c = s.charAt (i);
-if (!setBit && c == '"') {
-qc = c;
-setBit = true;
-bs.set (i);
-} else if (!setBit && c == '\'') {
-qc = c;
-setBit = true;
-bs.set (i);
-} else if (setBit && c == qc) {
-setBit = false;
-} else if (setBit && c == '\\' && i + 1 < s.length ()) {
-i++;
-if (setBit) {
-bs.set (i);
-}}}
-pt.cbits = com.stevesoft.pat.Regex.lastbs = bs;
-com.stevesoft.pat.Regex.lasts = s;
-}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "add",
-function (p2) {
-if (this.p == null) {
-this.p = p2;
-} else {
-this.p.add (p2);
-p2 = this.p;
-}}, "com.stevesoft.pat.Pattern");
-Clazz.defineMethod (c$, "compileSP",
-function (sp, mk) {
-if (sp.match ('[')) {
-sp.inc ();
-this.add (this.matchBracket (sp));
-} else if (sp.match ('|')) {
-if (this.or == null) {
-this.or = new com.stevesoft.pat.Or ();
-}if (this.p == null) {
-this.p = new com.stevesoft.pat.NullPattern ();
-}this.or.addOr (this.p);
-this.p = null;
-} else if (sp.incMatch ("(?<")) {
-var i = sp.getPatInt ();
-if (i == null) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("No int after (?<");
-}this.add ( new com.stevesoft.pat.Backup (i.intValue ()));
-if (!sp.match (')')) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("No ) after (?<");
-}} else if (sp.incMatch ("(?>")) {
-var i = sp.getPatInt ();
-if (i == null) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("No int after (?>");
-}this.add ( new com.stevesoft.pat.Backup (-i.intValue ()));
-if (!sp.match (')')) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("No ) after (?<");
-}} else if (sp.incMatch ("(?@")) {
-var op = sp.c;
-sp.inc ();
-var cl = sp.c;
-sp.inc ();
-if (!sp.match (')')) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("(?@ does not have closing paren");
-}this.add ( new com.stevesoft.pat.Group (op, cl));
-} else if (sp.incMatch ("(?#")) {
-while (!sp.match (')')) {
-sp.inc ();
-}
-} else if (sp.dontMatch && sp.c == 'w') {
-var b = new com.stevesoft.pat.Bracket (false);
-b.addOr ( new com.stevesoft.pat.Range ('a', 'z'));
-b.addOr ( new com.stevesoft.pat.Range ('A', 'Z'));
-b.addOr ( new com.stevesoft.pat.Range ('0', '9'));
-b.addOr ( new com.stevesoft.pat.oneChar ('_'));
-this.add (b);
-} else if (sp.dontMatch && sp.c == 'G') {
-this.add ( new com.stevesoft.pat.BackG ());
-} else if (sp.dontMatch && sp.c == 's') {
-var b = new com.stevesoft.pat.Bracket (false);
-b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (32)));
-b.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (8), String.fromCharCode (10)));
-b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (13)));
-this.add (b);
-} else if (sp.dontMatch && sp.c == 'd') {
-var digit = new com.stevesoft.pat.Range ('0', '9');
-digit.printBrackets = true;
-this.add (digit);
-} else if (sp.dontMatch && sp.c == 'W') {
-var b = new com.stevesoft.pat.Bracket (true);
-b.addOr ( new com.stevesoft.pat.Range ('a', 'z'));
-b.addOr ( new com.stevesoft.pat.Range ('A', 'Z'));
-b.addOr ( new com.stevesoft.pat.Range ('0', '9'));
-b.addOr ( new com.stevesoft.pat.oneChar ('_'));
-this.add (b);
-} else if (sp.dontMatch && sp.c == 'S') {
-var b = new com.stevesoft.pat.Bracket (true);
-b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (32)));
-b.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (8), String.fromCharCode (10)));
-b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (13)));
-this.add (b);
-} else if (sp.dontMatch && sp.c == 'D') {
-var b = new com.stevesoft.pat.Bracket (true);
-b.addOr ( new com.stevesoft.pat.Range ('0', '9'));
-this.add (b);
-} else if (sp.dontMatch && sp.c == 'B') {
-var r = new com.stevesoft.pat.Regex (null, "");
-r._compile ("(?!\\b)", mk);
-this.add (r.thePattern);
-} else if (this.isOctalString (sp)) {
-var d = sp.c.charCodeAt (0) - 48;
-sp.inc ();
-d = 8 * d + sp.c.charCodeAt (0) - 48;
-var sp2 = new com.stevesoft.pat.StrPos (sp);
-sp2.inc ();
-if (this.isOctalDigit (sp2, false)) {
-sp.inc ();
-d = 8 * d + sp.c.charCodeAt (0) - 48;
-}this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
-} else if (sp.dontMatch && sp.c >= '1' && sp.c <= '9') {
-var iv = sp.c.charCodeAt (0) - 48;
-var s2 = new com.stevesoft.pat.StrPos (sp);
-s2.inc ();
-if (!s2.dontMatch && s2.c >= '0' && s2.c <= '9') {
-iv = 10 * iv + (s2.c.charCodeAt (0) - 48);
-sp.inc ();
-}this.add ( new com.stevesoft.pat.BackMatch (iv));
-} else if (sp.dontMatch && sp.c == 'b') {
-this.add ( new com.stevesoft.pat.Boundary ());
-} else if (sp.match ('\b')) {
-this.add ( new com.stevesoft.pat.Boundary ());
-} else if (sp.match ('$')) {
-this.add ( new com.stevesoft.pat.End (true));
-} else if (sp.dontMatch && sp.c == 'Z') {
-this.add ( new com.stevesoft.pat.End (false));
-} else if (sp.match ('.')) {
-this.add ( new com.stevesoft.pat.Any ());
-} else if (sp.incMatch ("(??")) {
-var sb = new StringBuffer ();
-var sb2 = new StringBuffer ();
-while (!sp.match (')') && !sp.match (':')) {
-sb.append (sp.c);
-sp.inc ();
-}
-if (sp.incMatch (":")) {
-while (!sp.match (')')) {
-sb2.append (sp.c);
-sp.inc ();
-}
-}var sbs = sb.toString ();
-if (Clazz.instanceOf (com.stevesoft.pat.Regex.validators.get (sbs), String)) {
-var pat = com.stevesoft.pat.Regex.validators.get (sbs);
-var r = new com.stevesoft.pat.Regex (null, "");
-var rth = new com.stevesoft.pat.Rthings (this);
-rth.noBackRefs = true;
-r._compile (pat, rth);
-this.add (r.thePattern);
-} else {
-var cm = new com.stevesoft.pat.Custom (sb.toString ());
-if (cm.v != null) {
-var v2 = cm.v.arg (sb2.toString ());
-if (v2 != null) {
-v2.argsave = sb2.toString ();
-var p = cm.v.pattern;
-cm.v = v2;
-v2.pattern = p;
-}var r = new com.stevesoft.pat.Regex (null, "");
-var rth = new com.stevesoft.pat.Rthings (this);
-rth.noBackRefs = true;
-r._compile (cm.v.pattern, rth);
-cm.sub = r.thePattern;
-cm.sub.add ( new com.stevesoft.pat.CustomEndpoint (cm));
-cm.sub.setParent (cm);
-this.add (cm);
-}}} else if (sp.match ('(')) {
-mk.parenLevel++;
-var r = new com.stevesoft.pat.Regex (null, "");
-sp.inc ();
-if (sp.incMatch ("?:")) {
-r.or = new com.stevesoft.pat.Or ();
-} else if (sp.incMatch ("?=")) {
-r.or = new com.stevesoft.pat.lookAhead (false);
-} else if (sp.incMatch ("?!")) {
-r.or = new com.stevesoft.pat.lookAhead (true);
-} else if (sp.match ('?')) {
-sp.inc ();
-do {
-if (sp.c == 'i') {
-mk.ignoreCase = true;
-}if (sp.c == 'Q') {
-mk.dontMatchInQuotes = true;
-}if (sp.c == 'o') {
-mk.optimizeMe = true;
-}if (sp.c == 'g') {
-mk.gFlag = true;
-}if (sp.c == 's') {
-mk.sFlag = true;
-}if (sp.c == 'm') {
-mk.mFlag = true;
-}sp.inc ();
-} while (!sp.match (')') && !sp.$eos);
-r = null;
-mk.parenLevel--;
-if (sp.$eos) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Unclosed ()");
-}} else {
-r.or = mk.noBackRefs ? new com.stevesoft.pat.Or () : new com.stevesoft.pat.OrMark (mk.val++);
-}if (r != null) {
-this.add (r._compileSP (sp, mk));
-}} else if (sp.match ('^')) {
-this.add ( new com.stevesoft.pat.Start (true));
-} else if (sp.dontMatch && sp.c == 'A') {
-this.add ( new com.stevesoft.pat.Start (false));
-} else if (sp.match ('*')) {
-this.addMulti ( new com.stevesoft.pat.patInt (0), new com.stevesoft.pat.patInf ());
-} else if (sp.match ('+')) {
-this.addMulti ( new com.stevesoft.pat.patInt (1), new com.stevesoft.pat.patInf ());
-} else if (sp.match ('?')) {
-this.addMulti ( new com.stevesoft.pat.patInt (0), new com.stevesoft.pat.patInt (1));
-} else if (sp.match ('{')) {
-var bad = false;
-var sp2 = new com.stevesoft.pat.StrPos (sp);
-sp.inc ();
-var i1 = sp.getPatInt ();
-var i2 = null;
-if (sp.match ('}')) {
-i2 = i1;
-} else {
-if (!sp.match (',')) {
-bad = true;
-}sp.inc ();
-if (sp.match ('}')) {
-i2 = new com.stevesoft.pat.patInf ();
-} else {
-i2 = sp.getPatInt ();
-}}if (i1 == null || i2 == null) {
-bad = true;
-}if (bad) {
-sp.dup (sp2);
-this.add ( new com.stevesoft.pat.oneChar (sp.c));
-} else {
-this.addMulti (i1, i2);
-}} else if (sp.escMatch ('x') && this.next2Hex (sp)) {
-sp.inc ();
-var d = this.getHexDigit (sp);
-sp.inc ();
-d = 16 * d + this.getHexDigit (sp);
-this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
-} else if (sp.escMatch ('c')) {
-sp.inc ();
-if (sp.c.charCodeAt (0) < com.stevesoft.pat.Ctrl.cmap.length) {
-this.add ( new com.stevesoft.pat.oneChar (com.stevesoft.pat.Ctrl.cmap[sp.c.charCodeAt (0)]));
-} else {
-this.add ( new com.stevesoft.pat.oneChar (sp.c));
-}} else if (sp.escMatch ('f')) {
-this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (12)));
-} else if (sp.escMatch ('a')) {
-this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (7)));
-} else if (sp.escMatch ('t')) {
-this.add ( new com.stevesoft.pat.oneChar ('\t'));
-} else if (sp.escMatch ('n')) {
-this.add ( new com.stevesoft.pat.oneChar ('\n'));
-} else if (sp.escMatch ('r')) {
-this.add ( new com.stevesoft.pat.oneChar ('\r'));
-} else if (sp.escMatch ('b')) {
-this.add ( new com.stevesoft.pat.oneChar ('\b'));
-} else if (sp.escMatch ('e')) {
-this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (27)));
-} else {
-this.add ( new com.stevesoft.pat.oneChar (sp.c));
-if (sp.match (')')) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Unmatched right paren in pattern");
-}}}, "com.stevesoft.pat.StrPos,com.stevesoft.pat.Rthings");
-Clazz.defineMethod (c$, "_compile",
-($fz = function (pat, mk) {
-this.minMatch = null;
-this.sFlag = this.mFlag = this.ignoreCase = this.gFlag = false;
-var sp = new com.stevesoft.pat.StrPos (pat, 0);
-this.thePattern = this._compileSP (sp, mk);
-this.pt.marks = null;
-return this.thePattern;
-}, $fz.isPrivate = true, $fz), "~S,com.stevesoft.pat.Rthings");
-Clazz.defineMethod (c$, "_compileSP",
-function (sp, mk) {
-while (!(sp.$eos || (this.or != null && sp.match (')')))) {
-this.compileSP (sp, mk);
-sp.inc ();
-}
-if (sp.match (')')) {
-mk.parenLevel--;
-} else if (sp.$eos && mk.parenLevel != 0) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Unclosed Parenthesis! lvl=" + mk.parenLevel);
-}if (this.or != null) {
-if (this.p == null) {
-this.p = new com.stevesoft.pat.NullPattern ();
-}this.or.addOr (this.p);
-return this.or;
-}return this.p == null ? new com.stevesoft.pat.NullPattern () : this.p;
-}, "com.stevesoft.pat.StrPos,com.stevesoft.pat.Rthings");
-Clazz.defineMethod (c$, "addMulti",
-function (i1, i2) {
-var last;
-var last2;
-for (last = this.p; last != null && last.next != null; last = last.next) {
-;}
-if (last == null || last === this.p) {
-last2 = null;
-} else {
-for (last2 = this.p; last2.next !== last; last2 = last2.next) {
-;}
-}if (Clazz.instanceOf (last, com.stevesoft.pat.Multi) && i1.intValue () == 0 && i2.intValue () == 1) {
-(last).matchFewest = true;
-} else if (Clazz.instanceOf (last, com.stevesoft.pat.FastMulti) && i1.intValue () == 0 && i2.intValue () == 1) {
-(last).matchFewest = true;
-} else if (Clazz.instanceOf (last, com.stevesoft.pat.DotMulti) && i1.intValue () == 0 && i2.intValue () == 1) {
-(last).matchFewest = true;
-} else if (Clazz.instanceOf (last, com.stevesoft.pat.Multi) || Clazz.instanceOf (last, com.stevesoft.pat.DotMulti) || Clazz.instanceOf (last, com.stevesoft.pat.FastMulti)) {
-throw new com.stevesoft.pat.RegSyntax ("Syntax error.");
-} else if (last2 == null) {
-this.p = com.stevesoft.pat.Regex.mkMulti (i1, i2, this.p);
-} else {
-last2.next = com.stevesoft.pat.Regex.mkMulti (i1, i2, last);
-}}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt");
-c$.mkMulti = Clazz.defineMethod (c$, "mkMulti",
-function (lo, hi, p) {
-if (Clazz.instanceOf (p, com.stevesoft.pat.Any) && p.next == null) {
-return new com.stevesoft.pat.DotMulti (lo, hi);
-}return com.stevesoft.pat.RegOpt.safe4fm (p) ? new com.stevesoft.pat.FastMulti (lo, hi, p) : new com.stevesoft.pat.Multi (lo, hi, p);
-}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
-Clazz.defineMethod (c$, "matchBracket",
-function (sp) {
-var ret;
-if (sp.match ('^')) {
-ret = new com.stevesoft.pat.Bracket (true);
-sp.inc ();
-} else {
-ret = new com.stevesoft.pat.Bracket (false);
-}if (sp.match (']')) {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Unmatched []");
-}while (!sp.$eos && !sp.match (']')) {
-var s1 = new com.stevesoft.pat.StrPos (sp);
-s1.inc ();
-var s1_ = new com.stevesoft.pat.StrPos (s1);
-s1_.inc ();
-if (s1.match ('-') && !s1_.match (']')) {
-var s2 = new com.stevesoft.pat.StrPos (s1);
-s2.inc ();
-if (!s2.$eos) {
-ret.addOr ( new com.stevesoft.pat.Range (sp.c, s2.c));
-}sp.inc ();
-sp.inc ();
-} else if (sp.escMatch ('Q')) {
-sp.inc ();
-while (!sp.escMatch ('E')) {
-ret.addOr ( new com.stevesoft.pat.oneChar (sp.c));
-sp.inc ();
-}
-} else if (sp.escMatch ('d')) {
-ret.addOr ( new com.stevesoft.pat.Range ('0', '9'));
-} else if (sp.escMatch ('s')) {
-ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (32)));
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (8), String.fromCharCode (10)));
-ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (13)));
-} else if (sp.escMatch ('w')) {
-ret.addOr ( new com.stevesoft.pat.Range ('a', 'z'));
-ret.addOr ( new com.stevesoft.pat.Range ('A', 'Z'));
-ret.addOr ( new com.stevesoft.pat.Range ('0', '9'));
-ret.addOr ( new com.stevesoft.pat.oneChar ('_'));
-} else if (sp.escMatch ('D')) {
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (47)));
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (58), String.fromCharCode (65535)));
-} else if (sp.escMatch ('S')) {
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (7)));
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (11), String.fromCharCode (12)));
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (14), String.fromCharCode (31)));
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (33), String.fromCharCode (65535)));
-} else if (sp.escMatch ('W')) {
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (64)));
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (91), String.fromCharCode (94)));
-ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (96)));
-ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (123), String.fromCharCode (65535)));
-} else if (sp.escMatch ('x') && this.next2Hex (sp)) {
-sp.inc ();
-var d = this.getHexDigit (sp);
-sp.inc ();
-d = 16 * d + this.getHexDigit (sp);
-ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
-} else if (sp.escMatch ('a')) {
-ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (7)));
-} else if (sp.escMatch ('f')) {
-ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (12)));
-} else if (sp.escMatch ('e')) {
-ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (27)));
-} else if (sp.escMatch ('n')) {
-ret.addOr ( new com.stevesoft.pat.oneChar ('\n'));
-} else if (sp.escMatch ('t')) {
-ret.addOr ( new com.stevesoft.pat.oneChar ('\t'));
-} else if (sp.escMatch ('r')) {
-ret.addOr ( new com.stevesoft.pat.oneChar ('\r'));
-} else if (sp.escMatch ('c')) {
-sp.inc ();
-if (sp.c.charCodeAt (0) < com.stevesoft.pat.Ctrl.cmap.length) {
-ret.addOr ( new com.stevesoft.pat.oneChar (com.stevesoft.pat.Ctrl.cmap[sp.c.charCodeAt (0)]));
-} else {
-ret.addOr ( new com.stevesoft.pat.oneChar (sp.c));
-}} else if (this.isOctalString (sp)) {
-var d = sp.c.charCodeAt (0) - 48;
-sp.inc ();
-d = 8 * d + sp.c.charCodeAt (0) - 48;
-var sp2 = new com.stevesoft.pat.StrPos (sp);
-sp2.inc ();
-if (this.isOctalDigit (sp2, false)) {
-sp.inc ();
-d = 8 * d + sp.c.charCodeAt (0) - 48;
-}ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
-} else {
-ret.addOr ( new com.stevesoft.pat.oneChar (sp.c));
-}sp.inc ();
-}
-return ret;
-}, "com.stevesoft.pat.StrPos");
-Clazz.overrideMethod (c$, "toString",
-function () {
-{
-var sb = new StringBuffer ();
-if (this.esc != '\\') {
-sb.append ("(?e=");
-sb.append (this.esc);
-sb.append (")");
-}if (this.gFlag || this.mFlag || !com.stevesoft.pat.Regex.dotDoesntMatchCR || this.sFlag || this.ignoreCase || this.dontMatchInQuotes || this.optimized ()) {
-sb.append ("(?");
-if (this.ignoreCase) {
-sb.append ("i");
-}if (this.mFlag) {
-sb.append ("m");
-}if (this.sFlag || !com.stevesoft.pat.Regex.dotDoesntMatchCR) {
-sb.append ("s");
-}if (this.dontMatchInQuotes) {
-sb.append ("Q");
-}if (this.optimized ()) {
-sb.append ("o");
-}if (this.gFlag) {
-sb.append ("g");
-}sb.append (")");
-}var patstr = this.thePattern.toString ();
-if (this.esc != '\\') {
-patstr = com.stevesoft.pat.Regex.reEscape (patstr, '\\', this.esc);
-}sb.append (patstr);
-return sb.toString ();
-}});
-c$.reEscape = Clazz.defineMethod (c$, "reEscape",
-function (s, oldEsc, newEsc) {
-if (oldEsc == newEsc) {
-return s;
-}var i;
-var sb = new StringBuffer ();
-for (i = 0; i < s.length; i++) {
-if (s.charAt (i) == oldEsc && i + 1 < s.length) {
-if (s.charAt (i + 1) == oldEsc) {
-sb.append (oldEsc);
-} else {
-sb.append (newEsc);
-sb.append (s.charAt (i + 1));
-}i++;
-} else if (s.charAt (i) == newEsc) {
-sb.append (newEsc);
-sb.append (newEsc);
-} else {
-sb.append (s.charAt (i));
-}}
-return sb.toString ();
-}, "~S,~S,~S");
-Clazz.defineMethod (c$, "accept",
-function (dir, s) {
-return this.search (s);
-}, "java.io.File,~S");
-c$.version = Clazz.defineMethod (c$, "version",
-function () {
-return "lgpl release 1.5.3";
-});
-Clazz.defineMethod (c$, "optimize",
-function () {
-if (this.optimized () || this.thePattern == null) {
-return;
-}this.minMatch = new com.stevesoft.pat.patInt (0);
-this.thePattern = com.stevesoft.pat.RegOpt.opt (this.thePattern, this.ignoreCase, this.dontMatchInQuotes);
-this.skipper = com.stevesoft.pat.Skip.findSkipRegex (this);
-return;
-});
-Clazz.defineMethod (c$, "optimized",
-function () {
-return this.minMatch != null;
-});
-c$.perlCode = Clazz.defineMethod (c$, "perlCode",
-function (s) {
-return com.stevesoft.pat.parsePerl.parse (s);
-}, "~S");
-Clazz.defineMethod (c$, "isLiteral",
-function () {
-var x = this.thePattern;
-while (x != null) {
-if (Clazz.instanceOf (x, com.stevesoft.pat.oneChar)) {
-;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Skipped)) {
-;} else {
-return false;
-}x = x.next;
-}
-return true;
-});
-Clazz.defineMethod (c$, "countMinChars",
-function () {
-return this.thePattern.countMinChars ();
-});
-Clazz.defineMethod (c$, "countMaxChars",
-function () {
-return this.thePattern.countMaxChars ();
-});
-Clazz.defineMethod (c$, "isHexDigit",
-function (sp) {
-var r = !sp.$eos && !sp.dontMatch && ((sp.c >= '0' && sp.c <= '9') || (sp.c >= 'a' && sp.c <= 'f') || (sp.c >= 'A' && sp.c <= 'F'));
-return r;
-}, "com.stevesoft.pat.StrPos");
-Clazz.defineMethod (c$, "isOctalDigit",
-function (sp, first) {
-var r = !sp.$eos && !( new Boolean (first ^ sp.dontMatch).valueOf ()) && sp.c >= '0' && sp.c <= '7';
-return r;
-}, "com.stevesoft.pat.StrPos,~B");
-Clazz.defineMethod (c$, "getHexDigit",
-function (sp) {
-if (sp.c >= '0' && sp.c <= '9') {
-return sp.c.charCodeAt (0) - 48;
-}if (sp.c >= 'a' && sp.c <= 'f') {
-return sp.c.charCodeAt (0) - 97 + 10;
-}return sp.c.charCodeAt (0) - 65 + 10;
-}, "com.stevesoft.pat.StrPos");
-Clazz.defineMethod (c$, "next2Hex",
-function (sp) {
-var sp2 = new com.stevesoft.pat.StrPos (sp);
-sp2.inc ();
-if (!this.isHexDigit (sp2)) {
-return false;
-}sp2.inc ();
-if (!this.isHexDigit (sp2)) {
-return false;
-}return true;
-}, "com.stevesoft.pat.StrPos");
-Clazz.defineMethod (c$, "isOctalString",
-function (sp) {
-if (!this.isOctalDigit (sp, true)) {
-return false;
-}var sp2 = new com.stevesoft.pat.StrPos (sp);
-sp2.inc ();
-if (!this.isOctalDigit (sp2, false)) {
-return false;
-}return true;
-}, "com.stevesoft.pat.StrPos");
-Clazz.defineStatics (c$,
-"BackRefOffset", 1);
-c$.none = c$.prototype.none = new com.stevesoft.pat.NoPattern ();
-c$.validators = c$.prototype.validators = new java.util.Hashtable ();
-{
-com.stevesoft.pat.Regex.defineV ("p", "(?>1)", new com.stevesoft.pat.UnicodePunct ());
-com.stevesoft.pat.Regex.defineV ("P", "(?>1)", new com.stevesoft.pat.NUnicodePunct ());
-com.stevesoft.pat.Regex.defineV ("s", "(?>1)", new com.stevesoft.pat.UnicodeWhite ());
-com.stevesoft.pat.Regex.defineV ("S", "(?>1)", new com.stevesoft.pat.NUnicodeWhite ());
-com.stevesoft.pat.Regex.defineV ("w", "(?>1)", new com.stevesoft.pat.UnicodeW ());
-com.stevesoft.pat.Regex.defineV ("W", "(?>1)", new com.stevesoft.pat.NUnicodeW ());
-com.stevesoft.pat.Regex.defineV ("d", "(?>1)", new com.stevesoft.pat.UnicodeDigit ());
-com.stevesoft.pat.Regex.defineV ("D", "(?>1)", new com.stevesoft.pat.NUnicodeDigit ());
-com.stevesoft.pat.Regex.defineV ("m", "(?>1)", new com.stevesoft.pat.UnicodeMath ());
-com.stevesoft.pat.Regex.defineV ("M", "(?>1)", new com.stevesoft.pat.NUnicodeMath ());
-com.stevesoft.pat.Regex.defineV ("c", "(?>1)", new com.stevesoft.pat.UnicodeCurrency ());
-com.stevesoft.pat.Regex.defineV ("C", "(?>1)", new com.stevesoft.pat.NUnicodeCurrency ());
-com.stevesoft.pat.Regex.defineV ("a", "(?>1)", new com.stevesoft.pat.UnicodeAlpha ());
-com.stevesoft.pat.Regex.defineV ("A", "(?>1)", new com.stevesoft.pat.NUnicodeAlpha ());
-com.stevesoft.pat.Regex.defineV ("uc", "(?>1)", new com.stevesoft.pat.UnicodeUpper ());
-com.stevesoft.pat.Regex.defineV ("lc", "(?>1)", new com.stevesoft.pat.UnicodeLower ());
-}Clazz.defineStatics (c$,
-"defaultMFlag", false,
-"dotDoesntMatchCR", true,
-"lasts", null,
-"lastbs", null,
-"back_slash", '\\');
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.RegRes", "$.UniValidator", "jalview.jsdev.api.RegExpInterface", "com.stevesoft.pat.NoPattern", "$.Pthings", "$.patInt", "java.util.Hashtable"], ["com.stevesoft.pat.UnicodeW", "$.UnicodeCurrency", "$.UnicodeAlpha", "$.UnicodeUpper", "$.NUnicodeCurrency", "$.NUnicodeW", "$.NUnicodeAlpha", "$.UnicodeMath", "$.UnicodeWhite", "$.UnicodeDigit", "$.NUnicodeMath", "$.Regex", "$.NUnicodeDigit", "$.NUnicodeWhite", "$.NUnicodePunct", "$.UnicodePunct", "$.UnicodeLower"], ["com.stevesoft.pat.Any", "$.BackG", "$.BackMatch", "$.Backup", "$.Boundary", "$.Bracket", "$.CaseMgr", "$.Ctrl", "$.Custom", "$.CustomEndpoint", "$.DotMulti", "$.End", "$.FastMulti", "$.Group", "$.MessageManager", "$.Multi", "$.NullPattern", "$.Or", "$.OrMark", "$.Prop", "$.Range", "$.RegOpt", "$.RegSyntax", "$.RegSyntaxError", "$.ReplaceRule", "$.Replacer", "$.Rthings", "$.Skip", "$.Skipped", "$.Start", "$.StrPos", "$.lookAhead", "$.oneChar", "$.parsePerl", "$.patInf", "com.stevesoft.pat.wrap.StringWrap", "java.lang.NullPointerException", "$.StringBuffer", "java.util.BitSet"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodePunct", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && com.stevesoft.pat.Prop.isPunct (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeWhite", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && com.stevesoft.pat.Prop.isWhite (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodePunct", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && !com.stevesoft.pat.Prop.isPunct (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeWhite", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && !com.stevesoft.pat.Prop.isWhite (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeW", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+if (from >= s.length ()) {
+return -1;
+}var c = s.charAt (from);
+return (com.stevesoft.pat.Prop.isAlphabetic (c) || com.stevesoft.pat.Prop.isDecimalDigit (c) || c == '_') ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeW", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+if (from >= s.length ()) {
+return -1;
+}var c = s.charAt (from);
+return !(com.stevesoft.pat.Prop.isAlphabetic (c) || com.stevesoft.pat.Prop.isDecimalDigit (c) || c == '_') ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeDigit", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && com.stevesoft.pat.Prop.isDecimalDigit (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeDigit", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && !com.stevesoft.pat.Prop.isDecimalDigit (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeMath", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && com.stevesoft.pat.Prop.isMath (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeMath", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && !com.stevesoft.pat.Prop.isMath (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeCurrency", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && com.stevesoft.pat.Prop.isCurrency (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeCurrency", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && !com.stevesoft.pat.Prop.isCurrency (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeAlpha", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && com.stevesoft.pat.Prop.isAlphabetic (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "NUnicodeAlpha", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && !com.stevesoft.pat.Prop.isAlphabetic (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeUpper", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && this.isUpper (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "isUpper",
+function (c) {
+return c == com.stevesoft.pat.CaseMgr.toUpperCaseC (c) && c != com.stevesoft.pat.CaseMgr.toLowerCaseC (c);
+}, "~S");
+c$ = Clazz.declareType (com.stevesoft.pat, "UnicodeLower", com.stevesoft.pat.UniValidator);
+Clazz.overrideMethod (c$, "validate",
+function (s, from, to) {
+return from < s.length () && this.isLower (s.charAt (from)) ? to : -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "isLower",
+function (c) {
+return c != com.stevesoft.pat.CaseMgr.toUpperCaseC (c) && c == com.stevesoft.pat.CaseMgr.toLowerCaseC (c);
+}, "~S");
+c$ = Clazz.decorateAsClass (function () {
+this.thePattern = null;
+this.minMatch = null;
+this.rep = null;
+this.dontMatchInQuotes = false;
+this.ignoreCase = false;
+this.repr = null;
+this.esc = '\\';
+this.pt = null;
+this.gFlags = null;
+this.gFlagto = 0;
+this.gFlag = false;
+this.sFlag = false;
+this.mFlag = false;
+this.p = null;
+this.or = null;
+this.skipper = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Regex", com.stevesoft.pat.RegRes, [jalview.jsdev.api.RegExpInterface, Cloneable]);
+Clazz.prepareFields (c$, function () {
+this.thePattern = com.stevesoft.pat.Regex.none;
+this.minMatch = new com.stevesoft.pat.patInt (0);
+this.pt = new com.stevesoft.pat.Pthings ();
+});
+Clazz.makeConstructor (c$,
+function (s, strRp) {
+Clazz.superConstructor (this, com.stevesoft.pat.Regex, []);
+try {
+if (s != null) this.compile (s);
+if (strRp.length > 0) this.rep = com.stevesoft.pat.ReplaceRule.perlCode (strRp);
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+} else {
+throw rs;
+}
+}
+}, "~S,~S");
+Clazz.overrideMethod (c$, "clone",
+function () {
+return new com.stevesoft.pat.Regex (null, "").cloneFrom (this);
+});
+Clazz.defineMethod (c$, "cloneFrom",
+function (r) {
+this.copyOutOf (r);
+this.dontMatchInQuotes = r.dontMatchInQuotes;
+this.esc = r.esc;
+this.ignoreCase = r.ignoreCase;
+this.gFlag = r.gFlag;
+if (r.rep == null) {
+this.rep = null;
+} else {
+this.rep = r.rep.clone ();
+}this.thePattern = r.thePattern.clone ( new java.util.Hashtable ());
+this.minMatch = r.minMatch;
+this.skipper = r.skipper;
+return this;
+}, "com.stevesoft.pat.Regex");
+Clazz.defineMethod (c$, "setDontMatchInQuotes",
+function (b) {
+this.dontMatchInQuotes = b;
+}, "~B");
+Clazz.defineMethod (c$, "getDontMatchInQuotes",
+function () {
+return this.dontMatchInQuotes;
+});
+Clazz.overrideMethod (c$, "setIgnoreCase",
+function (b) {
+this.ignoreCase = b;
+}, "~B");
+Clazz.defineMethod (c$, "getIgnoreCase",
+function () {
+return this.ignoreCase;
+});
+c$.setDefaultMFlag = Clazz.defineMethod (c$, "setDefaultMFlag",
+function (mFlag) {
+com.stevesoft.pat.Regex.defaultMFlag = mFlag;
+}, "~B");
+c$.getDefaultMFlag = Clazz.defineMethod (c$, "getDefaultMFlag",
+function () {
+return com.stevesoft.pat.Regex.defaultMFlag;
+});
+Clazz.defineMethod (c$, "setReplaceRuleStr",
+function (rp) {
+this.rep = com.stevesoft.pat.ReplaceRule.perlCode (rp);
+this.repr = null;
+}, "~S");
+Clazz.defineMethod (c$, "setReplaceRule",
+function (rp) {
+this.rep = rp;
+}, "com.stevesoft.pat.ReplaceRule");
+c$.isDefined = Clazz.defineMethod (c$, "isDefined",
+function (nm) {
+return com.stevesoft.pat.Regex.validators.get (nm) != null;
+}, "~S");
+c$.undefine = Clazz.defineMethod (c$, "undefine",
+function (nm) {
+com.stevesoft.pat.Regex.validators.remove (nm);
+}, "~S");
+c$.defineV = Clazz.defineMethod (c$, "defineV",
+function (nm, pat, v) {
+v.pattern = pat;
+com.stevesoft.pat.Regex.validators.put (nm, v);
+}, "~S,~S,com.stevesoft.pat.Validator");
+c$.define = Clazz.defineMethod (c$, "define",
+function (nm, pat) {
+com.stevesoft.pat.Regex.validators.put (nm, pat);
+}, "~S,~S");
+Clazz.defineMethod (c$, "getReplaceRule",
+function () {
+return this.rep;
+});
+Clazz.defineMethod (c$, "_getReplacer",
+function () {
+return this.repr == null ? this.repr = new com.stevesoft.pat.Replacer () : this.repr;
+});
+Clazz.defineMethod (c$, "getReplacer",
+function () {
+if (this.repr == null) {
+this.repr = new com.stevesoft.pat.Replacer ();
+}this.repr.rh.me = this;
+this.repr.rh.prev = null;
+return this.repr;
+});
+Clazz.defineMethod (c$, "replaceFirst",
+function (s) {
+return this._getReplacer ().replaceFirstRegion (s, this, 0, s.length).toString ();
+}, "~S");
+Clazz.defineMethod (c$, "replaceFirstFrom",
+function (s, pos) {
+return this._getReplacer ().replaceFirstRegion (s, this, pos, s.length).toString ();
+}, "~S,~N");
+Clazz.defineMethod (c$, "replaceFirstRegion",
+function (s, start, end) {
+return this._getReplacer ().replaceFirstRegion (s, this, start, end).toString ();
+}, "~S,~N,~N");
+Clazz.overrideMethod (c$, "replaceAll",
+function (s) {
+return this._getReplacer ().replaceAllRegion (s, this, 0, s.length).toString ();
+}, "~S");
+Clazz.defineMethod (c$, "replaceAllLike",
+function (s) {
+return this._getReplacer ().replaceAllRegion (s, this, 0, s.length ());
+}, "com.stevesoft.pat.StringLike");
+Clazz.defineMethod (c$, "replaceAllFrom",
+function (s, pos) {
+return this._getReplacer ().replaceAllRegion (s, this, pos, s.length).toString ();
+}, "~S,~N");
+Clazz.defineMethod (c$, "replaceAllRegion",
+function (s, start, end) {
+return this._getReplacer ().replaceAllRegion (s, this, start, end).toString ();
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "compile",
+function (prepat) {
+var postpat = com.stevesoft.pat.parsePerl.codify (prepat, true);
+var pat = postpat == null ? prepat : postpat;
+this.minMatch = null;
+this.ignoreCase = false;
+this.dontMatchInQuotes = false;
+var mk = new com.stevesoft.pat.Rthings (this);
+var offset = mk.val;
+var newpat = pat;
+this.thePattern = com.stevesoft.pat.Regex.none;
+this.p = null;
+this.or = null;
+this.minMatch = new com.stevesoft.pat.patInt (0);
+var sp = new com.stevesoft.pat.StrPos (pat, 0);
+if (sp.incMatch ("(?e=")) {
+var newEsc = sp.c;
+sp.inc ();
+if (sp.match (')')) {
+newpat = com.stevesoft.pat.Regex.reEscape (pat.substring (6), newEsc, '\\');
+}} else if (this.esc != '\\') {
+newpat = com.stevesoft.pat.Regex.reEscape (pat, this.esc, '\\');
+}this.thePattern = this._compile (newpat, mk);
+this.numSubs_ = mk.val - offset;
+mk.set (this);
+}, "~S");
+Clazz.defineMethod (c$, "equals",
+function (o) {
+if (Clazz.instanceOf (o, com.stevesoft.pat.Regex)) {
+if (this.toString ().equals (o.toString ())) {
+return Clazz.superCall (this, com.stevesoft.pat.Regex, "equals", [o]);
+} else {
+return false;
+}} else {
+return Clazz.superCall (this, com.stevesoft.pat.Regex, "equals", [o]);
+}}, "~O");
+Clazz.defineMethod (c$, "prep",
+function (s) {
+this.pt.lastPos = this.matchedTo ();
+if (this.pt.lastPos < 0) {
+this.pt.lastPos = 0;
+}if ((s == null ? null : s.unwrap ()) !== (this.src == null ? null : s.unwrap ())) {
+this.pt.lastPos = 0;
+}this.src = s;
+this.pt.dotDoesntMatchCR = com.stevesoft.pat.Regex.dotDoesntMatchCR && (!this.sFlag);
+this.pt.mFlag = ( new Boolean (this.mFlag | com.stevesoft.pat.Regex.defaultMFlag).valueOf ());
+this.pt.ignoreCase = this.ignoreCase;
+this.pt.no_check = false;
+if (this.pt.marks != null) {
+for (var i = 0; i < this.pt.marks.length; i++) {
+this.pt.marks[i] = -1;
+}
+}this.pt.marks = null;
+this.pt.nMarks = this.numSubs_;
+this.pt.src = s;
+if (this.dontMatchInQuotes) {
+com.stevesoft.pat.Regex.setCbits (s, this.pt);
+} else {
+this.pt.cbits = null;
+}return this.pt;
+}, "com.stevesoft.pat.StringLike");
+Clazz.defineMethod (c$, "matchAt",
+function (s, start_pos) {
+return this._search (s, start_pos, start_pos);
+}, "~S,~N");
+Clazz.defineMethod (c$, "matchAtLike",
+function (s, start_pos) {
+return this._searchLike (s, start_pos, start_pos);
+}, "com.stevesoft.pat.StringLike,~N");
+Clazz.overrideMethod (c$, "search",
+function (s) {
+if (s == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_given_to_regex_search"));
+}return this._search (s, 0, s.length);
+}, "~S");
+Clazz.defineMethod (c$, "searchLike",
+function (sl) {
+if (sl == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search"));
+}return this._searchLike (sl, 0, sl.length ());
+}, "com.stevesoft.pat.StringLike");
+Clazz.defineMethod (c$, "reverseSearch",
+function (s) {
+if (s == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_given_to_regex_reverse_search"));
+}return this._reverseSearch (s, 0, s.length);
+}, "~S");
+Clazz.defineMethod (c$, "reverseSearchLike",
+function (sl) {
+if (sl == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_reverse_search"));
+}return this._reverseSearchLike (sl, 0, sl.length ());
+}, "com.stevesoft.pat.StringLike");
+Clazz.overrideMethod (c$, "searchFrom",
+function (s, start) {
+if (s == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search_from"));
+}return this._search (s, start, s.length);
+}, "~S,~N");
+Clazz.defineMethod (c$, "searchFromLike",
+function (s, start) {
+if (s == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search_from"));
+}return this._searchLike (s, start, s.length ());
+}, "com.stevesoft.pat.StringLike,~N");
+Clazz.defineMethod (c$, "searchRegion",
+function (s, start, end) {
+if (s == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.null_string_like_given_to_regex_search_region"));
+}return this._search (s, start, end);
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "setGFlag",
+function (b) {
+this.gFlag = b;
+}, "~B");
+Clazz.defineMethod (c$, "getGFlag",
+function () {
+return this.gFlag;
+});
+Clazz.defineMethod (c$, "getSFlag",
+function () {
+return this.sFlag;
+});
+Clazz.defineMethod (c$, "getMFlag",
+function () {
+return this.mFlag;
+});
+Clazz.defineMethod (c$, "_search",
+function (s, start, end) {
+return this._searchLike ( new com.stevesoft.pat.wrap.StringWrap (s), start, end);
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "_searchLike",
+function (s, start, end) {
+if (this.gFlag && this.gFlagto > 0 && this.gFlags != null && s.unwrap () === this.gFlags.unwrap ()) {
+start = this.gFlagto;
+}this.gFlags = null;
+var pt = this.prep (s);
+var up = (this.minMatch == null ? end : end - this.minMatch.i);
+if (up < start && end >= start) {
+up = start;
+}if (this.skipper == null) {
+for (var i = start; i <= up; i++) {
+this.charsMatched_ = this.thePattern.matchAt (s, i, pt);
+if (this.charsMatched_ >= 0) {
+this.matchFrom_ = this.thePattern.mfrom;
+this.marks = pt.marks;
+this.gFlagto = this.matchFrom_ + this.charsMatched_;
+this.gFlags = s;
+return this.didMatch_ = true;
+}}
+} else {
+pt.no_check = true;
+for (var i = start; i <= up; i++) {
+i = this.skipper.find (this.src, i, up);
+if (i < 0) {
+this.charsMatched_ = this.matchFrom_ = -1;
+return this.didMatch_ = false;
+}this.charsMatched_ = this.thePattern.matchAt (s, i, pt);
+if (this.charsMatched_ >= 0) {
+this.matchFrom_ = this.thePattern.mfrom;
+this.marks = pt.marks;
+this.gFlagto = this.matchFrom_ + this.charsMatched_;
+this.gFlags = s;
+return this.didMatch_ = true;
+}}
+}return this.didMatch_ = false;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "_reverseSearch",
+function (s, start, end) {
+return this._reverseSearchLike ( new com.stevesoft.pat.wrap.StringWrap (s), start, end);
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "_reverseSearchLike",
+function (s, start, end) {
+if (this.gFlag && this.gFlagto > 0 && s.unwrap () === this.gFlags.unwrap ()) {
+end = this.gFlagto;
+}this.gFlags = null;
+var pt = this.prep (s);
+for (var i = end; i >= start; i--) {
+this.charsMatched_ = this.thePattern.matchAt (s, i, pt);
+if (this.charsMatched_ >= 0) {
+this.matchFrom_ = this.thePattern.mfrom;
+this.marks = pt.marks;
+this.gFlagto = this.matchFrom_ - 1;
+this.gFlags = s;
+return this.didMatch_ = true;
+}}
+return this.didMatch_ = false;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$.setCbits = Clazz.defineMethod (c$, "setCbits",
+function (s, pt) {
+if (s === com.stevesoft.pat.Regex.lasts) {
+pt.cbits = com.stevesoft.pat.Regex.lastbs;
+return;
+}var bs = new java.util.BitSet (s.length ());
+var qc = ' ';
+var setBit = false;
+for (var i = 0; i < s.length (); i++) {
+if (setBit) {
+bs.set (i);
+}var c = s.charAt (i);
+if (!setBit && c == '"') {
+qc = c;
+setBit = true;
+bs.set (i);
+} else if (!setBit && c == '\'') {
+qc = c;
+setBit = true;
+bs.set (i);
+} else if (setBit && c == qc) {
+setBit = false;
+} else if (setBit && c == '\\' && i + 1 < s.length ()) {
+i++;
+if (setBit) {
+bs.set (i);
+}}}
+pt.cbits = com.stevesoft.pat.Regex.lastbs = bs;
+com.stevesoft.pat.Regex.lasts = s;
+}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "add",
+function (p2) {
+if (this.p == null) {
+this.p = p2;
+} else {
+this.p.add (p2);
+p2 = this.p;
+}}, "com.stevesoft.pat.Pattern");
+Clazz.defineMethod (c$, "compileSP",
+function (sp, mk) {
+if (sp.match ('[')) {
+sp.inc ();
+this.add (this.matchBracket (sp));
+} else if (sp.match ('|')) {
+if (this.or == null) {
+this.or = new com.stevesoft.pat.Or ();
+}if (this.p == null) {
+this.p = new com.stevesoft.pat.NullPattern ();
+}this.or.addOr (this.p);
+this.p = null;
+} else if (sp.incMatch ("(?<")) {
+var i = sp.getPatInt ();
+if (i == null) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("No int after (?<");
+}this.add ( new com.stevesoft.pat.Backup (i.intValue ()));
+if (!sp.match (')')) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("No ) after (?<");
+}} else if (sp.incMatch ("(?>")) {
+var i = sp.getPatInt ();
+if (i == null) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("No int after (?>");
+}this.add ( new com.stevesoft.pat.Backup (-i.intValue ()));
+if (!sp.match (')')) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("No ) after (?<");
+}} else if (sp.incMatch ("(?@")) {
+var op = sp.c;
+sp.inc ();
+var cl = sp.c;
+sp.inc ();
+if (!sp.match (')')) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("(?@ does not have closing paren");
+}this.add ( new com.stevesoft.pat.Group (op, cl));
+} else if (sp.incMatch ("(?#")) {
+while (!sp.match (')')) {
+sp.inc ();
+}
+} else if (sp.dontMatch && sp.c == 'w') {
+var b = new com.stevesoft.pat.Bracket (false);
+b.addOr ( new com.stevesoft.pat.Range ('a', 'z'));
+b.addOr ( new com.stevesoft.pat.Range ('A', 'Z'));
+b.addOr ( new com.stevesoft.pat.Range ('0', '9'));
+b.addOr ( new com.stevesoft.pat.oneChar ('_'));
+this.add (b);
+} else if (sp.dontMatch && sp.c == 'G') {
+this.add ( new com.stevesoft.pat.BackG ());
+} else if (sp.dontMatch && sp.c == 's') {
+var b = new com.stevesoft.pat.Bracket (false);
+b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (32)));
+b.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (8), String.fromCharCode (10)));
+b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (13)));
+this.add (b);
+} else if (sp.dontMatch && sp.c == 'd') {
+var digit = new com.stevesoft.pat.Range ('0', '9');
+digit.printBrackets = true;
+this.add (digit);
+} else if (sp.dontMatch && sp.c == 'W') {
+var b = new com.stevesoft.pat.Bracket (true);
+b.addOr ( new com.stevesoft.pat.Range ('a', 'z'));
+b.addOr ( new com.stevesoft.pat.Range ('A', 'Z'));
+b.addOr ( new com.stevesoft.pat.Range ('0', '9'));
+b.addOr ( new com.stevesoft.pat.oneChar ('_'));
+this.add (b);
+} else if (sp.dontMatch && sp.c == 'S') {
+var b = new com.stevesoft.pat.Bracket (true);
+b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (32)));
+b.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (8), String.fromCharCode (10)));
+b.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (13)));
+this.add (b);
+} else if (sp.dontMatch && sp.c == 'D') {
+var b = new com.stevesoft.pat.Bracket (true);
+b.addOr ( new com.stevesoft.pat.Range ('0', '9'));
+this.add (b);
+} else if (sp.dontMatch && sp.c == 'B') {
+var r = new com.stevesoft.pat.Regex (null, "");
+r._compile ("(?!\\b)", mk);
+this.add (r.thePattern);
+} else if (this.isOctalString (sp)) {
+var d = sp.c.charCodeAt (0) - 48;
+sp.inc ();
+d = 8 * d + sp.c.charCodeAt (0) - 48;
+var sp2 = new com.stevesoft.pat.StrPos (sp);
+sp2.inc ();
+if (this.isOctalDigit (sp2, false)) {
+sp.inc ();
+d = 8 * d + sp.c.charCodeAt (0) - 48;
+}this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
+} else if (sp.dontMatch && sp.c >= '1' && sp.c <= '9') {
+var iv = sp.c.charCodeAt (0) - 48;
+var s2 = new com.stevesoft.pat.StrPos (sp);
+s2.inc ();
+if (!s2.dontMatch && s2.c >= '0' && s2.c <= '9') {
+iv = 10 * iv + (s2.c.charCodeAt (0) - 48);
+sp.inc ();
+}this.add ( new com.stevesoft.pat.BackMatch (iv));
+} else if (sp.dontMatch && sp.c == 'b') {
+this.add ( new com.stevesoft.pat.Boundary ());
+} else if (sp.match ('\b')) {
+this.add ( new com.stevesoft.pat.Boundary ());
+} else if (sp.match ('$')) {
+this.add ( new com.stevesoft.pat.End (true));
+} else if (sp.dontMatch && sp.c == 'Z') {
+this.add ( new com.stevesoft.pat.End (false));
+} else if (sp.match ('.')) {
+this.add ( new com.stevesoft.pat.Any ());
+} else if (sp.incMatch ("(??")) {
+var sb = new StringBuffer ();
+var sb2 = new StringBuffer ();
+while (!sp.match (')') && !sp.match (':')) {
+sb.append (sp.c);
+sp.inc ();
+}
+if (sp.incMatch (":")) {
+while (!sp.match (')')) {
+sb2.append (sp.c);
+sp.inc ();
+}
+}var sbs = sb.toString ();
+if (Clazz.instanceOf (com.stevesoft.pat.Regex.validators.get (sbs), String)) {
+var pat = com.stevesoft.pat.Regex.validators.get (sbs);
+var r = new com.stevesoft.pat.Regex (null, "");
+var rth = new com.stevesoft.pat.Rthings (this);
+rth.noBackRefs = true;
+r._compile (pat, rth);
+this.add (r.thePattern);
+} else {
+var cm = new com.stevesoft.pat.Custom (sb.toString ());
+if (cm.v != null) {
+var v2 = cm.v.arg (sb2.toString ());
+if (v2 != null) {
+v2.argsave = sb2.toString ();
+var p = cm.v.pattern;
+cm.v = v2;
+v2.pattern = p;
+}var r = new com.stevesoft.pat.Regex (null, "");
+var rth = new com.stevesoft.pat.Rthings (this);
+rth.noBackRefs = true;
+r._compile (cm.v.pattern, rth);
+cm.sub = r.thePattern;
+cm.sub.add ( new com.stevesoft.pat.CustomEndpoint (cm));
+cm.sub.setParent (cm);
+this.add (cm);
+}}} else if (sp.match ('(')) {
+mk.parenLevel++;
+var r = new com.stevesoft.pat.Regex (null, "");
+sp.inc ();
+if (sp.incMatch ("?:")) {
+r.or = new com.stevesoft.pat.Or ();
+} else if (sp.incMatch ("?=")) {
+r.or = new com.stevesoft.pat.lookAhead (false);
+} else if (sp.incMatch ("?!")) {
+r.or = new com.stevesoft.pat.lookAhead (true);
+} else if (sp.match ('?')) {
+sp.inc ();
+do {
+if (sp.c == 'i') {
+mk.ignoreCase = true;
+}if (sp.c == 'Q') {
+mk.dontMatchInQuotes = true;
+}if (sp.c == 'o') {
+mk.optimizeMe = true;
+}if (sp.c == 'g') {
+mk.gFlag = true;
+}if (sp.c == 's') {
+mk.sFlag = true;
+}if (sp.c == 'm') {
+mk.mFlag = true;
+}sp.inc ();
+} while (!sp.match (')') && !sp.$eos);
+r = null;
+mk.parenLevel--;
+if (sp.$eos) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Unclosed ()");
+}} else {
+r.or = mk.noBackRefs ? new com.stevesoft.pat.Or () : new com.stevesoft.pat.OrMark (mk.val++);
+}if (r != null) {
+this.add (r._compileSP (sp, mk));
+}} else if (sp.match ('^')) {
+this.add ( new com.stevesoft.pat.Start (true));
+} else if (sp.dontMatch && sp.c == 'A') {
+this.add ( new com.stevesoft.pat.Start (false));
+} else if (sp.match ('*')) {
+this.addMulti ( new com.stevesoft.pat.patInt (0), new com.stevesoft.pat.patInf ());
+} else if (sp.match ('+')) {
+this.addMulti ( new com.stevesoft.pat.patInt (1), new com.stevesoft.pat.patInf ());
+} else if (sp.match ('?')) {
+this.addMulti ( new com.stevesoft.pat.patInt (0), new com.stevesoft.pat.patInt (1));
+} else if (sp.match ('{')) {
+var bad = false;
+var sp2 = new com.stevesoft.pat.StrPos (sp);
+sp.inc ();
+var i1 = sp.getPatInt ();
+var i2 = null;
+if (sp.match ('}')) {
+i2 = i1;
+} else {
+if (!sp.match (',')) {
+bad = true;
+}sp.inc ();
+if (sp.match ('}')) {
+i2 = new com.stevesoft.pat.patInf ();
+} else {
+i2 = sp.getPatInt ();
+}}if (i1 == null || i2 == null) {
+bad = true;
+}if (bad) {
+sp.dup (sp2);
+this.add ( new com.stevesoft.pat.oneChar (sp.c));
+} else {
+this.addMulti (i1, i2);
+}} else if (sp.escMatch ('x') && this.next2Hex (sp)) {
+sp.inc ();
+var d = this.getHexDigit (sp);
+sp.inc ();
+d = 16 * d + this.getHexDigit (sp);
+this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
+} else if (sp.escMatch ('c')) {
+sp.inc ();
+if (sp.c.charCodeAt (0) < com.stevesoft.pat.Ctrl.cmap.length) {
+this.add ( new com.stevesoft.pat.oneChar (com.stevesoft.pat.Ctrl.cmap[sp.c.charCodeAt (0)]));
+} else {
+this.add ( new com.stevesoft.pat.oneChar (sp.c));
+}} else if (sp.escMatch ('f')) {
+this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (12)));
+} else if (sp.escMatch ('a')) {
+this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (7)));
+} else if (sp.escMatch ('t')) {
+this.add ( new com.stevesoft.pat.oneChar ('\t'));
+} else if (sp.escMatch ('n')) {
+this.add ( new com.stevesoft.pat.oneChar ('\n'));
+} else if (sp.escMatch ('r')) {
+this.add ( new com.stevesoft.pat.oneChar ('\r'));
+} else if (sp.escMatch ('b')) {
+this.add ( new com.stevesoft.pat.oneChar ('\b'));
+} else if (sp.escMatch ('e')) {
+this.add ( new com.stevesoft.pat.oneChar (String.fromCharCode (27)));
+} else {
+this.add ( new com.stevesoft.pat.oneChar (sp.c));
+if (sp.match (')')) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Unmatched right paren in pattern");
+}}}, "com.stevesoft.pat.StrPos,com.stevesoft.pat.Rthings");
+Clazz.defineMethod (c$, "_compile",
+($fz = function (pat, mk) {
+this.minMatch = null;
+this.sFlag = this.mFlag = this.ignoreCase = this.gFlag = false;
+var sp = new com.stevesoft.pat.StrPos (pat, 0);
+this.thePattern = this._compileSP (sp, mk);
+this.pt.marks = null;
+return this.thePattern;
+}, $fz.isPrivate = true, $fz), "~S,com.stevesoft.pat.Rthings");
+Clazz.defineMethod (c$, "_compileSP",
+function (sp, mk) {
+while (!(sp.$eos || (this.or != null && sp.match (')')))) {
+this.compileSP (sp, mk);
+sp.inc ();
+}
+if (sp.match (')')) {
+mk.parenLevel--;
+} else if (sp.$eos && mk.parenLevel != 0) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Unclosed Parenthesis! lvl=" + mk.parenLevel);
+}if (this.or != null) {
+if (this.p == null) {
+this.p = new com.stevesoft.pat.NullPattern ();
+}this.or.addOr (this.p);
+return this.or;
+}return this.p == null ? new com.stevesoft.pat.NullPattern () : this.p;
+}, "com.stevesoft.pat.StrPos,com.stevesoft.pat.Rthings");
+Clazz.defineMethod (c$, "addMulti",
+function (i1, i2) {
+var last;
+var last2;
+for (last = this.p; last != null && last.next != null; last = last.next) {
+;}
+if (last == null || last === this.p) {
+last2 = null;
+} else {
+for (last2 = this.p; last2.next !== last; last2 = last2.next) {
+;}
+}if (Clazz.instanceOf (last, com.stevesoft.pat.Multi) && i1.intValue () == 0 && i2.intValue () == 1) {
+(last).matchFewest = true;
+} else if (Clazz.instanceOf (last, com.stevesoft.pat.FastMulti) && i1.intValue () == 0 && i2.intValue () == 1) {
+(last).matchFewest = true;
+} else if (Clazz.instanceOf (last, com.stevesoft.pat.DotMulti) && i1.intValue () == 0 && i2.intValue () == 1) {
+(last).matchFewest = true;
+} else if (Clazz.instanceOf (last, com.stevesoft.pat.Multi) || Clazz.instanceOf (last, com.stevesoft.pat.DotMulti) || Clazz.instanceOf (last, com.stevesoft.pat.FastMulti)) {
+throw new com.stevesoft.pat.RegSyntax ("Syntax error.");
+} else if (last2 == null) {
+this.p = com.stevesoft.pat.Regex.mkMulti (i1, i2, this.p);
+} else {
+last2.next = com.stevesoft.pat.Regex.mkMulti (i1, i2, last);
+}}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt");
+c$.mkMulti = Clazz.defineMethod (c$, "mkMulti",
+function (lo, hi, p) {
+if (Clazz.instanceOf (p, com.stevesoft.pat.Any) && p.next == null) {
+return new com.stevesoft.pat.DotMulti (lo, hi);
+}return com.stevesoft.pat.RegOpt.safe4fm (p) ? new com.stevesoft.pat.FastMulti (lo, hi, p) : new com.stevesoft.pat.Multi (lo, hi, p);
+}, "com.stevesoft.pat.patInt,com.stevesoft.pat.patInt,com.stevesoft.pat.Pattern");
+Clazz.defineMethod (c$, "matchBracket",
+function (sp) {
+var ret;
+if (sp.match ('^')) {
+ret = new com.stevesoft.pat.Bracket (true);
+sp.inc ();
+} else {
+ret = new com.stevesoft.pat.Bracket (false);
+}if (sp.match (']')) {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Unmatched []");
+}while (!sp.$eos && !sp.match (']')) {
+var s1 = new com.stevesoft.pat.StrPos (sp);
+s1.inc ();
+var s1_ = new com.stevesoft.pat.StrPos (s1);
+s1_.inc ();
+if (s1.match ('-') && !s1_.match (']')) {
+var s2 = new com.stevesoft.pat.StrPos (s1);
+s2.inc ();
+if (!s2.$eos) {
+ret.addOr ( new com.stevesoft.pat.Range (sp.c, s2.c));
+}sp.inc ();
+sp.inc ();
+} else if (sp.escMatch ('Q')) {
+sp.inc ();
+while (!sp.escMatch ('E')) {
+ret.addOr ( new com.stevesoft.pat.oneChar (sp.c));
+sp.inc ();
+}
+} else if (sp.escMatch ('d')) {
+ret.addOr ( new com.stevesoft.pat.Range ('0', '9'));
+} else if (sp.escMatch ('s')) {
+ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (32)));
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (8), String.fromCharCode (10)));
+ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (13)));
+} else if (sp.escMatch ('w')) {
+ret.addOr ( new com.stevesoft.pat.Range ('a', 'z'));
+ret.addOr ( new com.stevesoft.pat.Range ('A', 'Z'));
+ret.addOr ( new com.stevesoft.pat.Range ('0', '9'));
+ret.addOr ( new com.stevesoft.pat.oneChar ('_'));
+} else if (sp.escMatch ('D')) {
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (47)));
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (58), String.fromCharCode (65535)));
+} else if (sp.escMatch ('S')) {
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (7)));
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (11), String.fromCharCode (12)));
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (14), String.fromCharCode (31)));
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (33), String.fromCharCode (65535)));
+} else if (sp.escMatch ('W')) {
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (0), String.fromCharCode (64)));
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (91), String.fromCharCode (94)));
+ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (96)));
+ret.addOr ( new com.stevesoft.pat.Range (String.fromCharCode (123), String.fromCharCode (65535)));
+} else if (sp.escMatch ('x') && this.next2Hex (sp)) {
+sp.inc ();
+var d = this.getHexDigit (sp);
+sp.inc ();
+d = 16 * d + this.getHexDigit (sp);
+ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
+} else if (sp.escMatch ('a')) {
+ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (7)));
+} else if (sp.escMatch ('f')) {
+ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (12)));
+} else if (sp.escMatch ('e')) {
+ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (27)));
+} else if (sp.escMatch ('n')) {
+ret.addOr ( new com.stevesoft.pat.oneChar ('\n'));
+} else if (sp.escMatch ('t')) {
+ret.addOr ( new com.stevesoft.pat.oneChar ('\t'));
+} else if (sp.escMatch ('r')) {
+ret.addOr ( new com.stevesoft.pat.oneChar ('\r'));
+} else if (sp.escMatch ('c')) {
+sp.inc ();
+if (sp.c.charCodeAt (0) < com.stevesoft.pat.Ctrl.cmap.length) {
+ret.addOr ( new com.stevesoft.pat.oneChar (com.stevesoft.pat.Ctrl.cmap[sp.c.charCodeAt (0)]));
+} else {
+ret.addOr ( new com.stevesoft.pat.oneChar (sp.c));
+}} else if (this.isOctalString (sp)) {
+var d = sp.c.charCodeAt (0) - 48;
+sp.inc ();
+d = 8 * d + sp.c.charCodeAt (0) - 48;
+var sp2 = new com.stevesoft.pat.StrPos (sp);
+sp2.inc ();
+if (this.isOctalDigit (sp2, false)) {
+sp.inc ();
+d = 8 * d + sp.c.charCodeAt (0) - 48;
+}ret.addOr ( new com.stevesoft.pat.oneChar (String.fromCharCode (d)));
+} else {
+ret.addOr ( new com.stevesoft.pat.oneChar (sp.c));
+}sp.inc ();
+}
+return ret;
+}, "com.stevesoft.pat.StrPos");
+Clazz.overrideMethod (c$, "toString",
+function () {
+{
+var sb = new StringBuffer ();
+if (this.esc != '\\') {
+sb.append ("(?e=");
+sb.append (this.esc);
+sb.append (")");
+}if (this.gFlag || this.mFlag || !com.stevesoft.pat.Regex.dotDoesntMatchCR || this.sFlag || this.ignoreCase || this.dontMatchInQuotes || this.optimized ()) {
+sb.append ("(?");
+if (this.ignoreCase) {
+sb.append ("i");
+}if (this.mFlag) {
+sb.append ("m");
+}if (this.sFlag || !com.stevesoft.pat.Regex.dotDoesntMatchCR) {
+sb.append ("s");
+}if (this.dontMatchInQuotes) {
+sb.append ("Q");
+}if (this.optimized ()) {
+sb.append ("o");
+}if (this.gFlag) {
+sb.append ("g");
+}sb.append (")");
+}var patstr = this.thePattern.toString ();
+if (this.esc != '\\') {
+patstr = com.stevesoft.pat.Regex.reEscape (patstr, '\\', this.esc);
+}sb.append (patstr);
+return sb.toString ();
+}});
+c$.reEscape = Clazz.defineMethod (c$, "reEscape",
+function (s, oldEsc, newEsc) {
+if (oldEsc == newEsc) {
+return s;
+}var i;
+var sb = new StringBuffer ();
+for (i = 0; i < s.length; i++) {
+if (s.charAt (i) == oldEsc && i + 1 < s.length) {
+if (s.charAt (i + 1) == oldEsc) {
+sb.append (oldEsc);
+} else {
+sb.append (newEsc);
+sb.append (s.charAt (i + 1));
+}i++;
+} else if (s.charAt (i) == newEsc) {
+sb.append (newEsc);
+sb.append (newEsc);
+} else {
+sb.append (s.charAt (i));
+}}
+return sb.toString ();
+}, "~S,~S,~S");
+Clazz.defineMethod (c$, "accept",
+function (dir, s) {
+return this.search (s);
+}, "java.io.File,~S");
+c$.version = Clazz.defineMethod (c$, "version",
+function () {
+return "lgpl release 1.5.3";
+});
+Clazz.defineMethod (c$, "optimize",
+function () {
+if (this.optimized () || this.thePattern == null) {
+return;
+}this.minMatch = new com.stevesoft.pat.patInt (0);
+this.thePattern = com.stevesoft.pat.RegOpt.opt (this.thePattern, this.ignoreCase, this.dontMatchInQuotes);
+this.skipper = com.stevesoft.pat.Skip.findSkipRegex (this);
+return;
+});
+Clazz.defineMethod (c$, "optimized",
+function () {
+return this.minMatch != null;
+});
+c$.perlCode = Clazz.defineMethod (c$, "perlCode",
+function (s) {
+return com.stevesoft.pat.parsePerl.parse (s);
+}, "~S");
+Clazz.defineMethod (c$, "isLiteral",
+function () {
+var x = this.thePattern;
+while (x != null) {
+if (Clazz.instanceOf (x, com.stevesoft.pat.oneChar)) {
+;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Skipped)) {
+;} else {
+return false;
+}x = x.next;
+}
+return true;
+});
+Clazz.defineMethod (c$, "countMinChars",
+function () {
+return this.thePattern.countMinChars ();
+});
+Clazz.defineMethod (c$, "countMaxChars",
+function () {
+return this.thePattern.countMaxChars ();
+});
+Clazz.defineMethod (c$, "isHexDigit",
+function (sp) {
+var r = !sp.$eos && !sp.dontMatch && ((sp.c >= '0' && sp.c <= '9') || (sp.c >= 'a' && sp.c <= 'f') || (sp.c >= 'A' && sp.c <= 'F'));
+return r;
+}, "com.stevesoft.pat.StrPos");
+Clazz.defineMethod (c$, "isOctalDigit",
+function (sp, first) {
+var r = !sp.$eos && !( new Boolean (first ^ sp.dontMatch).valueOf ()) && sp.c >= '0' && sp.c <= '7';
+return r;
+}, "com.stevesoft.pat.StrPos,~B");
+Clazz.defineMethod (c$, "getHexDigit",
+function (sp) {
+if (sp.c >= '0' && sp.c <= '9') {
+return sp.c.charCodeAt (0) - 48;
+}if (sp.c >= 'a' && sp.c <= 'f') {
+return sp.c.charCodeAt (0) - 97 + 10;
+}return sp.c.charCodeAt (0) - 65 + 10;
+}, "com.stevesoft.pat.StrPos");
+Clazz.defineMethod (c$, "next2Hex",
+function (sp) {
+var sp2 = new com.stevesoft.pat.StrPos (sp);
+sp2.inc ();
+if (!this.isHexDigit (sp2)) {
+return false;
+}sp2.inc ();
+if (!this.isHexDigit (sp2)) {
+return false;
+}return true;
+}, "com.stevesoft.pat.StrPos");
+Clazz.defineMethod (c$, "isOctalString",
+function (sp) {
+if (!this.isOctalDigit (sp, true)) {
+return false;
+}var sp2 = new com.stevesoft.pat.StrPos (sp);
+sp2.inc ();
+if (!this.isOctalDigit (sp2, false)) {
+return false;
+}return true;
+}, "com.stevesoft.pat.StrPos");
+Clazz.defineStatics (c$,
+"BackRefOffset", 1);
+c$.none = c$.prototype.none = new com.stevesoft.pat.NoPattern ();
+c$.validators = c$.prototype.validators = new java.util.Hashtable ();
+{
+com.stevesoft.pat.Regex.defineV ("p", "(?>1)", new com.stevesoft.pat.UnicodePunct ());
+com.stevesoft.pat.Regex.defineV ("P", "(?>1)", new com.stevesoft.pat.NUnicodePunct ());
+com.stevesoft.pat.Regex.defineV ("s", "(?>1)", new com.stevesoft.pat.UnicodeWhite ());
+com.stevesoft.pat.Regex.defineV ("S", "(?>1)", new com.stevesoft.pat.NUnicodeWhite ());
+com.stevesoft.pat.Regex.defineV ("w", "(?>1)", new com.stevesoft.pat.UnicodeW ());
+com.stevesoft.pat.Regex.defineV ("W", "(?>1)", new com.stevesoft.pat.NUnicodeW ());
+com.stevesoft.pat.Regex.defineV ("d", "(?>1)", new com.stevesoft.pat.UnicodeDigit ());
+com.stevesoft.pat.Regex.defineV ("D", "(?>1)", new com.stevesoft.pat.NUnicodeDigit ());
+com.stevesoft.pat.Regex.defineV ("m", "(?>1)", new com.stevesoft.pat.UnicodeMath ());
+com.stevesoft.pat.Regex.defineV ("M", "(?>1)", new com.stevesoft.pat.NUnicodeMath ());
+com.stevesoft.pat.Regex.defineV ("c", "(?>1)", new com.stevesoft.pat.UnicodeCurrency ());
+com.stevesoft.pat.Regex.defineV ("C", "(?>1)", new com.stevesoft.pat.NUnicodeCurrency ());
+com.stevesoft.pat.Regex.defineV ("a", "(?>1)", new com.stevesoft.pat.UnicodeAlpha ());
+com.stevesoft.pat.Regex.defineV ("A", "(?>1)", new com.stevesoft.pat.NUnicodeAlpha ());
+com.stevesoft.pat.Regex.defineV ("uc", "(?>1)", new com.stevesoft.pat.UnicodeUpper ());
+com.stevesoft.pat.Regex.defineV ("lc", "(?>1)", new com.stevesoft.pat.UnicodeLower ());
+}Clazz.defineStatics (c$,
+"defaultMFlag", false,
+"dotDoesntMatchCR", true,
+"lasts", null,
+"lastbs", null,
+"back_slash", '\\');
+});
diff --git a/bin/com/stevesoft/pat/RegexReader.class b/bin/com/stevesoft/pat/RegexReader.class
index 2639d15..613abb5 100644
Binary files a/bin/com/stevesoft/pat/RegexReader.class and b/bin/com/stevesoft/pat/RegexReader.class differ
diff --git a/bin/com/stevesoft/pat/RegexReader.js b/bin/com/stevesoft/pat/RegexReader.js
index 301d8e7..d767d80 100644
--- a/bin/com/stevesoft/pat/RegexReader.js
+++ b/bin/com/stevesoft/pat/RegexReader.js
@@ -1,164 +1,164 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["java.io.Reader", "com.stevesoft.pat.PartialBuffer", "$.RBuffer", "java.lang.StringBuffer"], "com.stevesoft.pat.RegexReader", ["com.stevesoft.pat.StringBufferLike", "com.stevesoft.pat.wrap.StringBufferWrap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.rb = null;
-this.wrap = null;
-this.moreToRead = true;
-this.r = null;
-this.rp = null;
-this.nmax = 2048;
-this.max_lines = 2;
-this.EOLchar = '\n';
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "RegexReader", java.io.Reader);
-Clazz.prepareFields (c$, function () {
-this.rb = new com.stevesoft.pat.RBuffer ( new StringBuffer ());
-this.wrap = new com.stevesoft.pat.PartialBuffer (this.rb.sb);
-});
-Clazz.makeConstructor (c$,
-function (rex, r) {
-Clazz.superConstructor (this, com.stevesoft.pat.RegexReader, []);
-this.r = r;
-this.rp = rex.getReplacer ();
-}, "com.stevesoft.pat.Regex,java.io.Reader");
-Clazz.makeConstructor (c$,
-function (tex, r) {
-Clazz.superConstructor (this, com.stevesoft.pat.RegexReader, []);
-this.r = r;
-this.rp = tex.getReplacer ();
-}, "com.stevesoft.pat.Transformer,java.io.Reader");
-Clazz.defineMethod (c$, "reset",
-function () {
-this.r.reset ();
-this.rb = new com.stevesoft.pat.RBuffer ( new StringBuffer ());
-this.wrap = new com.stevesoft.pat.PartialBuffer (this.rb.sb);
-this.moreToRead = true;
-});
-Clazz.defineMethod (c$, "readData",
-function () {
-var c;
-var n = 0;
-while ((c = this.r.read ()) != -1) {
-this.rb.sb.append (String.fromCharCode (c));
-if (n++ > this.nmax) {
-break;
-}}
-if (c == -1 && n == 0) {
-this.moreToRead = false;
-this.wrap.allowOverRun = false;
-}});
-Clazz.defineMethod (c$, "getMoreData",
-function () {
-while (this.rb.pos >= this.rb.epos) {
-this.wrap.overRun = false;
-if (this.rb.next != null) {
-this.rb = this.rb.next;
-} else if (this.rb.done) {
-break;
-} else if (this.rb.epos >= this.rb.sb.length () && this.rb.epos > this.nmax) {
-this.rb.pos = 1;
-this.rb.epos = 1;
-this.rb.sb.setLength (1);
-this.readData ();
-} else if (this.rb.epos >= this.rb.sb.length () && this.moreToRead) {
-this.readData ();
-} else if (this.rp.getRegex ().matchAtLike (this.wrap, this.rb.epos)) {
-if (this.wrap.overRun) {
-this.readData ();
-} else {
-var sbw = new com.stevesoft.pat.wrap.StringBufferWrap ();
-var sbl = new com.stevesoft.pat.StringBufferLike (sbw);
-var rex = this.rp.getRegex ();
-var npos = rex.matchedTo ();
-this.rp.setBuffer (sbl);
-this.rp.setSource (this.wrap);
-this.rp.setPos (npos);
-this.rp.apply (rex, rex.getReplaceRule ());
-var opos = this.rb.epos;
-var rb2 = new com.stevesoft.pat.RBuffer (sbw.unwrap ());
-rb2.epos = rb2.sb.length ();
-var rb3 = new com.stevesoft.pat.RBuffer (this.rb.sb);
-this.rb.next = rb2;
-rb2.next = rb3;
-if (npos == opos) {
-rb3.epos = npos + 1;
-if (rb3.epos > rb3.sb.length ()) {
-if (this.rb.pos >= this.rb.epos) {
-this.rb = this.rb.next;
-}rb3.pos = rb3.epos = 0;
-rb3.done = true;
-}rb3.pos = npos;
-} else {
-rb3.pos = rb3.epos = npos;
-}}} else {
-if (this.wrap.overRun) {
-this.readData ();
-} else if (this.rb.epos < this.rb.sb.length ()) {
-this.rb.epos++;
-} else {
-break;
-}}}
-});
-Clazz.defineMethod (c$, "read",
-function () {
-if (this.rb.pos >= this.rb.epos) {
-this.getMoreData ();
-if (this.rb.pos >= this.rb.epos) {
-return -1;
-}}return this.rb.sb.charAt (this.rb.pos++);
-});
-Clazz.defineMethod (c$, "read",
-function (buf, off, len) {
-var c = -1;
-var end = off + len;
-for (var i = off; i < end; i++) {
-c = this.read ();
-if (c < 0) {
-if (i == off) {
-return -1;
-}return i - off;
-}buf[i] = String.fromCharCode (c);
-}
-return len;
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "close",
-function () {
-this.r.close ();
-});
-Clazz.overrideMethod (c$, "markSupported",
-function () {
-return false;
-});
-Clazz.defineMethod (c$, "getBufferSize",
-function () {
-return this.nmax;
-});
-Clazz.defineMethod (c$, "setBufferSize",
-function (n) {
-this.nmax = n;
-}, "~N");
-Clazz.defineMethod (c$, "getMaxLines",
-function () {
-return this.max_lines;
-});
-Clazz.defineMethod (c$, "setMaxLines",
-function (ml) {
-this.max_lines = ml;
-}, "~N");
-Clazz.defineMethod (c$, "getEOLchar",
-function () {
-return this.EOLchar;
-});
-Clazz.defineMethod (c$, "setEOLchar",
-function (c) {
-this.EOLchar = c;
-}, "~S");
-Clazz.overrideMethod (c$, "skip",
-function (d) {
-var n = 0;
-while (n < d && this.read () != -1) {
-n++;
-}
-return n;
-}, "~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["java.io.Reader", "com.stevesoft.pat.PartialBuffer", "$.RBuffer", "java.lang.StringBuffer"], "com.stevesoft.pat.RegexReader", ["com.stevesoft.pat.StringBufferLike", "com.stevesoft.pat.wrap.StringBufferWrap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.rb = null;
+this.wrap = null;
+this.moreToRead = true;
+this.r = null;
+this.rp = null;
+this.nmax = 2048;
+this.max_lines = 2;
+this.EOLchar = '\n';
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "RegexReader", java.io.Reader);
+Clazz.prepareFields (c$, function () {
+this.rb = new com.stevesoft.pat.RBuffer ( new StringBuffer ());
+this.wrap = new com.stevesoft.pat.PartialBuffer (this.rb.sb);
+});
+Clazz.makeConstructor (c$,
+function (rex, r) {
+Clazz.superConstructor (this, com.stevesoft.pat.RegexReader, []);
+this.r = r;
+this.rp = rex.getReplacer ();
+}, "com.stevesoft.pat.Regex,java.io.Reader");
+Clazz.makeConstructor (c$,
+function (tex, r) {
+Clazz.superConstructor (this, com.stevesoft.pat.RegexReader, []);
+this.r = r;
+this.rp = tex.getReplacer ();
+}, "com.stevesoft.pat.Transformer,java.io.Reader");
+Clazz.defineMethod (c$, "reset",
+function () {
+this.r.reset ();
+this.rb = new com.stevesoft.pat.RBuffer ( new StringBuffer ());
+this.wrap = new com.stevesoft.pat.PartialBuffer (this.rb.sb);
+this.moreToRead = true;
+});
+Clazz.defineMethod (c$, "readData",
+function () {
+var c;
+var n = 0;
+while ((c = this.r.read ()) != -1) {
+this.rb.sb.append (String.fromCharCode (c));
+if (n++ > this.nmax) {
+break;
+}}
+if (c == -1 && n == 0) {
+this.moreToRead = false;
+this.wrap.allowOverRun = false;
+}});
+Clazz.defineMethod (c$, "getMoreData",
+function () {
+while (this.rb.pos >= this.rb.epos) {
+this.wrap.overRun = false;
+if (this.rb.next != null) {
+this.rb = this.rb.next;
+} else if (this.rb.done) {
+break;
+} else if (this.rb.epos >= this.rb.sb.length () && this.rb.epos > this.nmax) {
+this.rb.pos = 1;
+this.rb.epos = 1;
+this.rb.sb.setLength (1);
+this.readData ();
+} else if (this.rb.epos >= this.rb.sb.length () && this.moreToRead) {
+this.readData ();
+} else if (this.rp.getRegex ().matchAtLike (this.wrap, this.rb.epos)) {
+if (this.wrap.overRun) {
+this.readData ();
+} else {
+var sbw = new com.stevesoft.pat.wrap.StringBufferWrap ();
+var sbl = new com.stevesoft.pat.StringBufferLike (sbw);
+var rex = this.rp.getRegex ();
+var npos = rex.matchedTo ();
+this.rp.setBuffer (sbl);
+this.rp.setSource (this.wrap);
+this.rp.setPos (npos);
+this.rp.apply (rex, rex.getReplaceRule ());
+var opos = this.rb.epos;
+var rb2 = new com.stevesoft.pat.RBuffer (sbw.unwrap ());
+rb2.epos = rb2.sb.length ();
+var rb3 = new com.stevesoft.pat.RBuffer (this.rb.sb);
+this.rb.next = rb2;
+rb2.next = rb3;
+if (npos == opos) {
+rb3.epos = npos + 1;
+if (rb3.epos > rb3.sb.length ()) {
+if (this.rb.pos >= this.rb.epos) {
+this.rb = this.rb.next;
+}rb3.pos = rb3.epos = 0;
+rb3.done = true;
+}rb3.pos = npos;
+} else {
+rb3.pos = rb3.epos = npos;
+}}} else {
+if (this.wrap.overRun) {
+this.readData ();
+} else if (this.rb.epos < this.rb.sb.length ()) {
+this.rb.epos++;
+} else {
+break;
+}}}
+});
+Clazz.defineMethod (c$, "read",
+function () {
+if (this.rb.pos >= this.rb.epos) {
+this.getMoreData ();
+if (this.rb.pos >= this.rb.epos) {
+return -1;
+}}return this.rb.sb.charAt (this.rb.pos++);
+});
+Clazz.defineMethod (c$, "read",
+function (buf, off, len) {
+var c = -1;
+var end = off + len;
+for (var i = off; i < end; i++) {
+c = this.read ();
+if (c < 0) {
+if (i == off) {
+return -1;
+}return i - off;
+}buf[i] = String.fromCharCode (c);
+}
+return len;
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "close",
+function () {
+this.r.close ();
+});
+Clazz.overrideMethod (c$, "markSupported",
+function () {
+return false;
+});
+Clazz.defineMethod (c$, "getBufferSize",
+function () {
+return this.nmax;
+});
+Clazz.defineMethod (c$, "setBufferSize",
+function (n) {
+this.nmax = n;
+}, "~N");
+Clazz.defineMethod (c$, "getMaxLines",
+function () {
+return this.max_lines;
+});
+Clazz.defineMethod (c$, "setMaxLines",
+function (ml) {
+this.max_lines = ml;
+}, "~N");
+Clazz.defineMethod (c$, "getEOLchar",
+function () {
+return this.EOLchar;
+});
+Clazz.defineMethod (c$, "setEOLchar",
+function (c) {
+this.EOLchar = c;
+}, "~S");
+Clazz.overrideMethod (c$, "skip",
+function (d) {
+var n = 0;
+while (n < d && this.read () != -1) {
+n++;
+}
+return n;
+}, "~N");
+});
diff --git a/bin/com/stevesoft/pat/RegexTokenizer.js b/bin/com/stevesoft/pat/RegexTokenizer.js
index 08cc754..c5774f3 100644
--- a/bin/com/stevesoft/pat/RegexTokenizer.js
+++ b/bin/com/stevesoft/pat/RegexTokenizer.js
@@ -1,104 +1,104 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["java.util.Enumeration", "$.Vector"], "com.stevesoft.pat.RegexTokenizer", ["com.stevesoft.pat.Regex"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.toParse = null;
-this.r = null;
-this.count = 0;
-this.v = null;
-this.vi = null;
-this.pos = 0;
-this.offset = 1;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "RegexTokenizer", null, java.util.Enumeration);
-Clazz.prepareFields (c$, function () {
-this.v = new java.util.Vector ();
-this.vi = new java.util.Vector ();
-});
-Clazz.defineMethod (c$, "getMore",
-function () {
-var s = this.r.right ();
-if (this.r.searchFrom (this.toParse, this.pos)) {
-this.v.addElement (this.r.left ().substring (this.pos));
-this.vi.addElement ( new Integer (this.r.matchFrom () + this.r.charsMatched ()));
-for (var i = 0; i < this.r.numSubs (); i++) {
-if (this.r.substring () != null) {
-this.v.addElement (this.r.substringI (i + this.offset));
-this.vi.addElement ( new Integer (this.r.matchFromI (i + this.offset) + this.r.charsMatchedI (i + this.offset)));
-}}
-this.pos = this.r.matchFrom () + this.r.charsMatched ();
-} else if (s != null) {
-this.v.addElement (s);
-}});
-Clazz.makeConstructor (c$,
-function (txt, ptrn) {
-this.toParse = txt;
-this.r = new com.stevesoft.pat.Regex (ptrn, "");
-this.offset = com.stevesoft.pat.Regex.BackRefOffset;
-this.getMore ();
-}, "~S,~S");
-Clazz.makeConstructor (c$,
-function (txt, r) {
-this.toParse = txt;
-this.r = r;
-this.offset = com.stevesoft.pat.Regex.BackRefOffset;
-this.getMore ();
-}, "~S,com.stevesoft.pat.Regex");
-Clazz.overrideMethod (c$, "nextElement",
-function () {
-if (this.count >= this.v.size ()) {
-this.getMore ();
-}return this.v.elementAt (this.count++);
-});
-Clazz.defineMethod (c$, "nextToken",
-function () {
-return this.nextElement ();
-});
-Clazz.defineMethod (c$, "nextToken",
-function (newpat) {
-try {
-this.r.compile (newpat);
-} catch (r_) {
-if (Clazz.exceptionOf (r_, com.stevesoft.pat.RegSyntax)) {
-} else {
-throw r_;
-}
-}
-return this.nextToken (this.r);
-}, "~S");
-Clazz.defineMethod (c$, "nextToken",
-function (nr) {
-this.r = nr;
-if (this.vi.size () > this.count) {
-this.pos = (this.vi.elementAt (this.count)).intValue ();
-this.v.setSize (this.count);
-this.vi.setSize (this.count);
-}this.getMore ();
-return this.nextToken ();
-}, "com.stevesoft.pat.Regex");
-Clazz.overrideMethod (c$, "hasMoreElements",
-function () {
-if (this.count >= this.v.size ()) {
-this.getMore ();
-}return this.count < this.v.size ();
-});
-Clazz.defineMethod (c$, "hasMoreTokens",
-function () {
-return this.hasMoreElements ();
-});
-Clazz.defineMethod (c$, "countTokens",
-function () {
-var _count = this.count;
-while (this.hasMoreTokens ()) {
-this.nextToken ();
-}
-this.count = _count;
-return this.v.size () - this.count;
-});
-Clazz.defineMethod (c$, "allTokens",
-function () {
-this.countTokens ();
-var ret = new Array (this.v.size ());
-this.v.copyInto (ret);
-return ret;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["java.util.Enumeration", "$.Vector"], "com.stevesoft.pat.RegexTokenizer", ["com.stevesoft.pat.Regex"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.toParse = null;
+this.r = null;
+this.count = 0;
+this.v = null;
+this.vi = null;
+this.pos = 0;
+this.offset = 1;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "RegexTokenizer", null, java.util.Enumeration);
+Clazz.prepareFields (c$, function () {
+this.v = new java.util.Vector ();
+this.vi = new java.util.Vector ();
+});
+Clazz.defineMethod (c$, "getMore",
+function () {
+var s = this.r.right ();
+if (this.r.searchFrom (this.toParse, this.pos)) {
+this.v.addElement (this.r.left ().substring (this.pos));
+this.vi.addElement ( new Integer (this.r.matchFrom () + this.r.charsMatched ()));
+for (var i = 0; i < this.r.numSubs (); i++) {
+if (this.r.substring () != null) {
+this.v.addElement (this.r.substringI (i + this.offset));
+this.vi.addElement ( new Integer (this.r.matchFromI (i + this.offset) + this.r.charsMatchedI (i + this.offset)));
+}}
+this.pos = this.r.matchFrom () + this.r.charsMatched ();
+} else if (s != null) {
+this.v.addElement (s);
+}});
+Clazz.makeConstructor (c$,
+function (txt, ptrn) {
+this.toParse = txt;
+this.r = new com.stevesoft.pat.Regex (ptrn, "");
+this.offset = com.stevesoft.pat.Regex.BackRefOffset;
+this.getMore ();
+}, "~S,~S");
+Clazz.makeConstructor (c$,
+function (txt, r) {
+this.toParse = txt;
+this.r = r;
+this.offset = com.stevesoft.pat.Regex.BackRefOffset;
+this.getMore ();
+}, "~S,com.stevesoft.pat.Regex");
+Clazz.overrideMethod (c$, "nextElement",
+function () {
+if (this.count >= this.v.size ()) {
+this.getMore ();
+}return this.v.elementAt (this.count++);
+});
+Clazz.defineMethod (c$, "nextToken",
+function () {
+return this.nextElement ();
+});
+Clazz.defineMethod (c$, "nextToken",
+function (newpat) {
+try {
+this.r.compile (newpat);
+} catch (r_) {
+if (Clazz.exceptionOf (r_, com.stevesoft.pat.RegSyntax)) {
+} else {
+throw r_;
+}
+}
+return this.nextToken (this.r);
+}, "~S");
+Clazz.defineMethod (c$, "nextToken",
+function (nr) {
+this.r = nr;
+if (this.vi.size () > this.count) {
+this.pos = (this.vi.elementAt (this.count)).intValue ();
+this.v.setSize (this.count);
+this.vi.setSize (this.count);
+}this.getMore ();
+return this.nextToken ();
+}, "com.stevesoft.pat.Regex");
+Clazz.overrideMethod (c$, "hasMoreElements",
+function () {
+if (this.count >= this.v.size ()) {
+this.getMore ();
+}return this.count < this.v.size ();
+});
+Clazz.defineMethod (c$, "hasMoreTokens",
+function () {
+return this.hasMoreElements ();
+});
+Clazz.defineMethod (c$, "countTokens",
+function () {
+var _count = this.count;
+while (this.hasMoreTokens ()) {
+this.nextToken ();
+}
+this.count = _count;
+return this.v.size () - this.count;
+});
+Clazz.defineMethod (c$, "allTokens",
+function () {
+this.countTokens ();
+var ret = new Array (this.v.size ());
+this.v.copyInto (ret);
+return ret;
+});
+});
diff --git a/bin/com/stevesoft/pat/RegexWriter.class b/bin/com/stevesoft/pat/RegexWriter.class
index 36bb465..e4e7fdd 100644
Binary files a/bin/com/stevesoft/pat/RegexWriter.class and b/bin/com/stevesoft/pat/RegexWriter.class differ
diff --git a/bin/com/stevesoft/pat/RegexWriter.js b/bin/com/stevesoft/pat/RegexWriter.js
index 817515b..f1be88e 100644
--- a/bin/com/stevesoft/pat/RegexWriter.js
+++ b/bin/com/stevesoft/pat/RegexWriter.js
@@ -1,134 +1,134 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["java.io.Writer", "com.stevesoft.pat.PartialBuffer", "java.lang.StringBuffer"], "com.stevesoft.pat.RegexWriter", ["com.stevesoft.pat.StringBufferLike", "com.stevesoft.pat.wrap.WriterWrap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.repr = null;
-this.w = null;
-this.ww = null;
-this.sb = null;
-this.wrap = null;
-this.pos = 0;
-this.epos = 0;
-this.interval = 128;
-this.bufferSize = 2048;
-this.EOLchar = '\n';
-this.max_lines = 2;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "RegexWriter", java.io.Writer);
-Clazz.prepareFields (c$, function () {
-this.sb = new StringBuffer ();
-this.wrap = new com.stevesoft.pat.PartialBuffer (this.sb);
-});
-Clazz.makeConstructor (c$,
-function (t, w) {
-Clazz.superConstructor (this, com.stevesoft.pat.RegexWriter, []);
-this.w = w;
-this.ww = new com.stevesoft.pat.wrap.WriterWrap (w);
-this.repr = t.getReplacer ();
-this.repr.setBuffer ( new com.stevesoft.pat.StringBufferLike (this.ww));
-this.repr.setSource (this.wrap);
-}, "com.stevesoft.pat.Transformer,java.io.Writer");
-Clazz.makeConstructor (c$,
-function (r, w) {
-Clazz.superConstructor (this, com.stevesoft.pat.RegexWriter, []);
-this.w = w;
-this.ww = new com.stevesoft.pat.wrap.WriterWrap (w);
-this.repr = r.getReplacer ();
-this.repr.setBuffer ( new com.stevesoft.pat.StringBufferLike (this.ww));
-this.repr.setSource (this.wrap);
-}, "com.stevesoft.pat.Regex,java.io.Writer");
-Clazz.defineMethod (c$, "getEOLchar",
-function () {
-return this.EOLchar;
-});
-Clazz.defineMethod (c$, "setEOLchar",
-function (c) {
-this.EOLchar = c;
-}, "~S");
-Clazz.defineMethod (c$, "getMaxLines",
-function () {
-return this.max_lines;
-});
-Clazz.defineMethod (c$, "setMaxLines",
-function (ml) {
-this.max_lines = ml;
-}, "~N");
-Clazz.defineMethod (c$, "write",
-function () {
-var rex = this.repr.getRegex ();
-var eposOld = this.epos;
-if (rex.matchAtLike (this.wrap, this.epos) && !this.wrap.overRun) {
-while (this.pos < this.epos) {
-this.w.write (this.sb.charCodeAt (this.pos++));
-}
-var to = rex.matchedTo ();
-this.repr.setPos (to);
-this.repr.apply (rex, rex.getReplaceRule ());
-this.epos = this.pos = to;
-if (this.epos == eposOld && this.epos < this.sb.length ()) {
-this.epos++;
-}} else if (!this.wrap.overRun && this.epos < this.sb.length ()) {
-this.epos++;
-}while (this.pos < this.epos) {
-this.w.write (this.sb.charCodeAt (this.pos++));
-}
-if (this.epos == this.sb.length ()) {
-this.sb.setLength (1);
-this.pos = this.epos = 1;
-} else if (this.pos > this.bufferSize) {
-for (var i = this.bufferSize; i < this.sb.length (); i++) {
-this.sb.setCharAt (i - this.bufferSize, this.sb.charAt (i));
-}
-this.pos -= this.bufferSize;
-this.epos -= this.bufferSize;
-this.sb.setLength (this.sb.length () - this.bufferSize);
-}});
-Clazz.defineMethod (c$, "write",
-function (ca, b, n) {
-var m = b + n;
-for (var i = b; i < m; i++) {
-this.sb.append (ca[i]);
-if (this.sb.length () % this.interval == this.interval - 1) {
-this.wrap.overRun = false;
-while (this.epos + this.interval < this.sb.length () && !this.wrap.overRun) {
-this.write ();
-}
-}}
-}, "~A,~N,~N");
-Clazz.overrideMethod (c$, "flush",
-function () {
-});
-Clazz.defineMethod (c$, "close",
-function () {
-this.wrap.allowOverRun = false;
-this.wrap.overRun = false;
-while (this.epos < this.sb.length ()) {
-this.write ();
-}
-this.write ();
-this.w.close ();
-});
-Clazz.defineMethod (c$, "length",
-function () {
-return this.sb.length ();
-});
-Clazz.defineMethod (c$, "charAt",
-function (i) {
-return this.sb.charAt (i);
-}, "~N");
-Clazz.defineMethod (c$, "setInterval",
-function (i) {
-this.interval = i;
-}, "~N");
-Clazz.defineMethod (c$, "getInterval",
-function () {
-return this.interval;
-});
-Clazz.defineMethod (c$, "getBufferSize",
-function () {
-return this.bufferSize;
-});
-Clazz.defineMethod (c$, "setBufferSize",
-function (i) {
-this.bufferSize = i;
-}, "~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["java.io.Writer", "com.stevesoft.pat.PartialBuffer", "java.lang.StringBuffer"], "com.stevesoft.pat.RegexWriter", ["com.stevesoft.pat.StringBufferLike", "com.stevesoft.pat.wrap.WriterWrap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.repr = null;
+this.w = null;
+this.ww = null;
+this.sb = null;
+this.wrap = null;
+this.pos = 0;
+this.epos = 0;
+this.interval = 128;
+this.bufferSize = 2048;
+this.EOLchar = '\n';
+this.max_lines = 2;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "RegexWriter", java.io.Writer);
+Clazz.prepareFields (c$, function () {
+this.sb = new StringBuffer ();
+this.wrap = new com.stevesoft.pat.PartialBuffer (this.sb);
+});
+Clazz.makeConstructor (c$,
+function (t, w) {
+Clazz.superConstructor (this, com.stevesoft.pat.RegexWriter, []);
+this.w = w;
+this.ww = new com.stevesoft.pat.wrap.WriterWrap (w);
+this.repr = t.getReplacer ();
+this.repr.setBuffer ( new com.stevesoft.pat.StringBufferLike (this.ww));
+this.repr.setSource (this.wrap);
+}, "com.stevesoft.pat.Transformer,java.io.Writer");
+Clazz.makeConstructor (c$,
+function (r, w) {
+Clazz.superConstructor (this, com.stevesoft.pat.RegexWriter, []);
+this.w = w;
+this.ww = new com.stevesoft.pat.wrap.WriterWrap (w);
+this.repr = r.getReplacer ();
+this.repr.setBuffer ( new com.stevesoft.pat.StringBufferLike (this.ww));
+this.repr.setSource (this.wrap);
+}, "com.stevesoft.pat.Regex,java.io.Writer");
+Clazz.defineMethod (c$, "getEOLchar",
+function () {
+return this.EOLchar;
+});
+Clazz.defineMethod (c$, "setEOLchar",
+function (c) {
+this.EOLchar = c;
+}, "~S");
+Clazz.defineMethod (c$, "getMaxLines",
+function () {
+return this.max_lines;
+});
+Clazz.defineMethod (c$, "setMaxLines",
+function (ml) {
+this.max_lines = ml;
+}, "~N");
+Clazz.defineMethod (c$, "write",
+function () {
+var rex = this.repr.getRegex ();
+var eposOld = this.epos;
+if (rex.matchAtLike (this.wrap, this.epos) && !this.wrap.overRun) {
+while (this.pos < this.epos) {
+this.w.write (this.sb.charCodeAt (this.pos++));
+}
+var to = rex.matchedTo ();
+this.repr.setPos (to);
+this.repr.apply (rex, rex.getReplaceRule ());
+this.epos = this.pos = to;
+if (this.epos == eposOld && this.epos < this.sb.length ()) {
+this.epos++;
+}} else if (!this.wrap.overRun && this.epos < this.sb.length ()) {
+this.epos++;
+}while (this.pos < this.epos) {
+this.w.write (this.sb.charCodeAt (this.pos++));
+}
+if (this.epos == this.sb.length ()) {
+this.sb.setLength (1);
+this.pos = this.epos = 1;
+} else if (this.pos > this.bufferSize) {
+for (var i = this.bufferSize; i < this.sb.length (); i++) {
+this.sb.setCharAt (i - this.bufferSize, this.sb.charAt (i));
+}
+this.pos -= this.bufferSize;
+this.epos -= this.bufferSize;
+this.sb.setLength (this.sb.length () - this.bufferSize);
+}});
+Clazz.defineMethod (c$, "write",
+function (ca, b, n) {
+var m = b + n;
+for (var i = b; i < m; i++) {
+this.sb.append (ca[i]);
+if (this.sb.length () % this.interval == this.interval - 1) {
+this.wrap.overRun = false;
+while (this.epos + this.interval < this.sb.length () && !this.wrap.overRun) {
+this.write ();
+}
+}}
+}, "~A,~N,~N");
+Clazz.overrideMethod (c$, "flush",
+function () {
+});
+Clazz.defineMethod (c$, "close",
+function () {
+this.wrap.allowOverRun = false;
+this.wrap.overRun = false;
+while (this.epos < this.sb.length ()) {
+this.write ();
+}
+this.write ();
+this.w.close ();
+});
+Clazz.defineMethod (c$, "length",
+function () {
+return this.sb.length ();
+});
+Clazz.defineMethod (c$, "charAt",
+function (i) {
+return this.sb.charAt (i);
+}, "~N");
+Clazz.defineMethod (c$, "setInterval",
+function (i) {
+this.interval = i;
+}, "~N");
+Clazz.defineMethod (c$, "getInterval",
+function () {
+return this.interval;
+});
+Clazz.defineMethod (c$, "getBufferSize",
+function () {
+return this.bufferSize;
+});
+Clazz.defineMethod (c$, "setBufferSize",
+function (i) {
+this.bufferSize = i;
+}, "~N");
+});
diff --git a/bin/com/stevesoft/pat/ReplaceRule.class b/bin/com/stevesoft/pat/ReplaceRule.class
index 02e0aca..07dc4de 100644
Binary files a/bin/com/stevesoft/pat/ReplaceRule.class and b/bin/com/stevesoft/pat/ReplaceRule.class differ
diff --git a/bin/com/stevesoft/pat/ReplaceRule.js b/bin/com/stevesoft/pat/ReplaceRule.js
index 795545b..7485c5f 100644
--- a/bin/com/stevesoft/pat/ReplaceRule.js
+++ b/bin/com/stevesoft/pat/ReplaceRule.js
@@ -1,203 +1,203 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["java.util.Hashtable"], "com.stevesoft.pat.ReplaceRule", ["com.stevesoft.pat.Ctrl", "$.Regex", "$.Transformer", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.next = null;
-this.name = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "ReplaceRule");
-Clazz.prepareFields (c$, function () {
-this.name = this.getClass ().getName ();
-});
-Clazz.defineMethod (c$, "clone1",
-function () {
-return new com.stevesoft.pat.RuleHolder (this);
-});
-Clazz.overrideMethod (c$, "clone",
-function () {
-var x = this.clone1 ();
-var xsav = x;
-var y = this;
-while (y.next != null) {
-x.next = y.next.clone1 ();
-x.name = y.name;
-x = x.next;
-y = y.next;
-}
-return xsav;
-});
-c$.add = Clazz.defineMethod (c$, "add",
-function (head, adding) {
-if (head == null) {
-return head = adding;
-}head.addRule (adding);
-return head;
-}, "com.stevesoft.pat.ReplaceRule,com.stevesoft.pat.ReplaceRule");
-Clazz.defineMethod (c$, "add",
-function (adding) {
-return com.stevesoft.pat.ReplaceRule.add (this, adding);
-}, "com.stevesoft.pat.ReplaceRule");
-Clazz.defineMethod (c$, "addRule",
-function (r) {
-if (this.next == null) {
-this.next = r;
-} else {
-this.next.addRule (r);
-}}, "com.stevesoft.pat.ReplaceRule");
-c$.getv = Clazz.defineMethod (c$, "getv",
-($fz = function () {
-if (com.stevesoft.pat.ReplaceRule.getvar != null) {
-return com.stevesoft.pat.ReplaceRule.getvar.clone ();
-}com.stevesoft.pat.ReplaceRule.getvar = new com.stevesoft.pat.Regex ("(?:\\\\(\\d+)|\\$(?:(\\d+)|(\\w+)|([&\'`])|\\{(?:(\\d+)|([^\n}\\\\]+))})|\\\\([nrbtaef])|\\\\c([\u0000-\uffff])|\\\\x([A-Fa-f0-9]{2})|\\\\([\u0000-\uffff]))", "");
-com.stevesoft.pat.ReplaceRule.getvar.optimize ();
-return com.stevesoft.pat.ReplaceRule.getvar;
-}, $fz.isPrivate = true, $fz));
-c$.perlCode = Clazz.defineMethod (c$, "perlCode",
-function (s) {
-try {
-var mf = 0;
-var mt = 0;
-var gv = com.stevesoft.pat.ReplaceRule.getv ();
-var head = null;
-var tmp = null;
-while (gv.searchFrom (s, mt)) {
-var off = com.stevesoft.pat.Regex.BackRefOffset - 1;
-mf = gv.matchedFrom ();
-if (mf > mt) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule (s.substring (mt, mf)));
-}var $var = null;
-if (($var = gv.stringMatchedI (1 + off)) != null || ($var = gv.stringMatchedI (2 + off)) != null || ($var = gv.stringMatchedI (5 + off)) != null) {
-var d = 0;
-for (var i = 0; i < $var.length; i++) {
-d = 8 * d + ($var.charCodeAt (i) - 48);
-}
-if ($var.length == 1) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.BackRefRule (d));
-} else {
-head = new com.stevesoft.pat.StringRule ("" + String.fromCharCode (d));
-}} else if (($var = gv.stringMatchedI (10 + off)) != null) {
-if ("QELlUu".indexOf ($var) >= 0) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.CodeRule ($var.charAt (0)));
-} else {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ($var));
-}} else if (($var = gv.stringMatchedI (3 + off)) != null || ($var = gv.stringMatchedI (4 + off)) != null || ($var = gv.stringMatchedI (6 + off)) != null) {
-var arg = "";
-var pc;
-if ((pc = $var.indexOf (':')) > 0) {
-arg = $var.substring (pc + 1);
-$var = $var.substring (0, pc);
-}if ($var.equals ("&") || $var.equals ("MATCH")) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.AmpersandRule ());
-} else if ($var.equals ("`") || $var.equals ("PREMATCH")) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.LeftRule ());
-} else if ($var.equals ("'") || $var.equals ("POSTMATCH")) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.RightRule ());
-} else if ($var.equals ("WANT_MORE_TEXT")) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.WantMoreTextReplaceRule ());
-} else if ($var.equals ("POP")) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.PopRule ());
-} else if ($var.startsWith ("+") && (tmp = com.stevesoft.pat.ReplaceRule.defs.get ($var.substring (1))) != null) {
-if (Clazz.instanceOf (tmp, com.stevesoft.pat.Regex)) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.PushRule ($var.substring (1), tmp));
-} else if (Clazz.instanceOf (tmp, com.stevesoft.pat.Transformer)) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.PushRule ($var.substring (1), tmp));
-} else {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("${" + $var + "}"));
-}} else if ($var.startsWith ("=") && (tmp = com.stevesoft.pat.ReplaceRule.defs.get ($var.substring (1))) != null) {
-if (Clazz.instanceOf (tmp, com.stevesoft.pat.Regex)) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.ChangeRule ($var.substring (1), tmp));
-} else if (Clazz.instanceOf (tmp, com.stevesoft.pat.Transformer)) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.ChangeRule ($var.substring (1), tmp));
-} else {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("${" + $var + "}"));
-}} else if ((tmp = com.stevesoft.pat.ReplaceRule.defs.get ($var)) != null) {
-if (Clazz.instanceOf (tmp, com.stevesoft.pat.ReplaceRule)) {
-var alt = (tmp).arg (arg);
-if (alt == null) {
-alt = (tmp);
-}head = com.stevesoft.pat.ReplaceRule.add (head, (alt.clone ()));
-}} else {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("${" + $var + "}"));
-}} else if (($var = gv.stringMatchedI (7 + off)) != null) {
-var c = $var.charAt (0);
-if (c == 'n') {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\n"));
-} else if (c == 't') {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\t"));
-} else if (c == 'r') {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\r"));
-} else if (c == 'b') {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\r"));
-} else if (c == 'a') {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\u0007"));
-} else if (c == 'e') {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\u001b"));
-} else if (c == 'f') {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\f"));
-}} else if (($var = gv.stringMatchedI (8 + off)) != null) {
-var c = $var.charAt (0);
-if (c.charCodeAt (0) < com.stevesoft.pat.Ctrl.cmap.length) {
-c = com.stevesoft.pat.Ctrl.cmap[c.charCodeAt (0)];
-}head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("" + c));
-} else if (($var = gv.stringMatchedI (9 + off)) != null) {
-var d = 16 * com.stevesoft.pat.ReplaceRule.getHexDigit ($var.charAt (0)) + com.stevesoft.pat.ReplaceRule.getHexDigit ($var.charAt (1));
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("" + String.fromCharCode (d)));
-}mt = gv.matchedTo ();
-}
-if (mt <= s.length) {
-head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule (s.substring (mt)));
-}return head;
-} finally {
-}
-}, "~S");
-c$.isDefined = Clazz.defineMethod (c$, "isDefined",
-function (s) {
-return com.stevesoft.pat.ReplaceRule.defs.get (s) != null;
-}, "~S");
-c$.define = Clazz.defineMethod (c$, "define",
-function (s, r) {
-com.stevesoft.pat.ReplaceRule.defs.put (s, r);
-}, "~S,com.stevesoft.pat.Regex");
-c$.define = Clazz.defineMethod (c$, "define",
-function (s, r) {
-com.stevesoft.pat.ReplaceRule.defs.put (s, r);
-r.name = s;
-}, "~S,com.stevesoft.pat.ReplaceRule");
-c$.define = Clazz.defineMethod (c$, "define",
-function (s, t) {
-com.stevesoft.pat.ReplaceRule.defs.put (s, t);
-}, "~S,com.stevesoft.pat.Transformer");
-c$.undefine = Clazz.defineMethod (c$, "undefine",
-function (s) {
-com.stevesoft.pat.ReplaceRule.defs.remove (s);
-}, "~S");
-Clazz.defineMethod (c$, "toString1",
-function () {
-return "${" + this.name + "}";
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-var sb = new StringBuffer ();
-sb.append (this.toString1 ());
-var rr = this.next;
-while (rr != null) {
-sb.append (rr.toString1 ());
-rr = rr.next;
-}
-return sb.toString ();
-});
-Clazz.defineMethod (c$, "arg",
-function (s) {
-return null;
-}, "~S");
-c$.getHexDigit = Clazz.defineMethod (c$, "getHexDigit",
-function (c) {
-if (c >= '0' && c <= '9') {
-return c.charCodeAt (0) - 48;
-}if (c >= 'a' && c <= 'f') {
-return c.charCodeAt (0) - 97 + 10;
-}return c.charCodeAt (0) - 65 + 10;
-}, "~S");
-Clazz.defineStatics (c$,
-"getvar", null);
-c$.defs = c$.prototype.defs = new java.util.Hashtable ();
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["java.util.Hashtable"], "com.stevesoft.pat.ReplaceRule", ["com.stevesoft.pat.Ctrl", "$.Regex", "$.Transformer", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.next = null;
+this.name = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "ReplaceRule");
+Clazz.prepareFields (c$, function () {
+this.name = this.getClass ().getName ();
+});
+Clazz.defineMethod (c$, "clone1",
+function () {
+return new com.stevesoft.pat.RuleHolder (this);
+});
+Clazz.overrideMethod (c$, "clone",
+function () {
+var x = this.clone1 ();
+var xsav = x;
+var y = this;
+while (y.next != null) {
+x.next = y.next.clone1 ();
+x.name = y.name;
+x = x.next;
+y = y.next;
+}
+return xsav;
+});
+c$.add = Clazz.defineMethod (c$, "add",
+function (head, adding) {
+if (head == null) {
+return head = adding;
+}head.addRule (adding);
+return head;
+}, "com.stevesoft.pat.ReplaceRule,com.stevesoft.pat.ReplaceRule");
+Clazz.defineMethod (c$, "add",
+function (adding) {
+return com.stevesoft.pat.ReplaceRule.add (this, adding);
+}, "com.stevesoft.pat.ReplaceRule");
+Clazz.defineMethod (c$, "addRule",
+function (r) {
+if (this.next == null) {
+this.next = r;
+} else {
+this.next.addRule (r);
+}}, "com.stevesoft.pat.ReplaceRule");
+c$.getv = Clazz.defineMethod (c$, "getv",
+($fz = function () {
+if (com.stevesoft.pat.ReplaceRule.getvar != null) {
+return com.stevesoft.pat.ReplaceRule.getvar.clone ();
+}com.stevesoft.pat.ReplaceRule.getvar = new com.stevesoft.pat.Regex ("(?:\\\\(\\d+)|\\$(?:(\\d+)|(\\w+)|([&\'`])|\\{(?:(\\d+)|([^\n}\\\\]+))})|\\\\([nrbtaef])|\\\\c([\u0000-\uffff])|\\\\x([A-Fa-f0-9]{2})|\\\\([\u0000-\uffff]))", "");
+com.stevesoft.pat.ReplaceRule.getvar.optimize ();
+return com.stevesoft.pat.ReplaceRule.getvar;
+}, $fz.isPrivate = true, $fz));
+c$.perlCode = Clazz.defineMethod (c$, "perlCode",
+function (s) {
+try {
+var mf = 0;
+var mt = 0;
+var gv = com.stevesoft.pat.ReplaceRule.getv ();
+var head = null;
+var tmp = null;
+while (gv.searchFrom (s, mt)) {
+var off = com.stevesoft.pat.Regex.BackRefOffset - 1;
+mf = gv.matchedFrom ();
+if (mf > mt) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule (s.substring (mt, mf)));
+}var $var = null;
+if (($var = gv.stringMatchedI (1 + off)) != null || ($var = gv.stringMatchedI (2 + off)) != null || ($var = gv.stringMatchedI (5 + off)) != null) {
+var d = 0;
+for (var i = 0; i < $var.length; i++) {
+d = 8 * d + ($var.charCodeAt (i) - 48);
+}
+if ($var.length == 1) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.BackRefRule (d));
+} else {
+head = new com.stevesoft.pat.StringRule ("" + String.fromCharCode (d));
+}} else if (($var = gv.stringMatchedI (10 + off)) != null) {
+if ("QELlUu".indexOf ($var) >= 0) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.CodeRule ($var.charAt (0)));
+} else {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ($var));
+}} else if (($var = gv.stringMatchedI (3 + off)) != null || ($var = gv.stringMatchedI (4 + off)) != null || ($var = gv.stringMatchedI (6 + off)) != null) {
+var arg = "";
+var pc;
+if ((pc = $var.indexOf (':')) > 0) {
+arg = $var.substring (pc + 1);
+$var = $var.substring (0, pc);
+}if ($var.equals ("&") || $var.equals ("MATCH")) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.AmpersandRule ());
+} else if ($var.equals ("`") || $var.equals ("PREMATCH")) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.LeftRule ());
+} else if ($var.equals ("'") || $var.equals ("POSTMATCH")) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.RightRule ());
+} else if ($var.equals ("WANT_MORE_TEXT")) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.WantMoreTextReplaceRule ());
+} else if ($var.equals ("POP")) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.PopRule ());
+} else if ($var.startsWith ("+") && (tmp = com.stevesoft.pat.ReplaceRule.defs.get ($var.substring (1))) != null) {
+if (Clazz.instanceOf (tmp, com.stevesoft.pat.Regex)) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.PushRule ($var.substring (1), tmp));
+} else if (Clazz.instanceOf (tmp, com.stevesoft.pat.Transformer)) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.PushRule ($var.substring (1), tmp));
+} else {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("${" + $var + "}"));
+}} else if ($var.startsWith ("=") && (tmp = com.stevesoft.pat.ReplaceRule.defs.get ($var.substring (1))) != null) {
+if (Clazz.instanceOf (tmp, com.stevesoft.pat.Regex)) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.ChangeRule ($var.substring (1), tmp));
+} else if (Clazz.instanceOf (tmp, com.stevesoft.pat.Transformer)) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.ChangeRule ($var.substring (1), tmp));
+} else {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("${" + $var + "}"));
+}} else if ((tmp = com.stevesoft.pat.ReplaceRule.defs.get ($var)) != null) {
+if (Clazz.instanceOf (tmp, com.stevesoft.pat.ReplaceRule)) {
+var alt = (tmp).arg (arg);
+if (alt == null) {
+alt = (tmp);
+}head = com.stevesoft.pat.ReplaceRule.add (head, (alt.clone ()));
+}} else {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("${" + $var + "}"));
+}} else if (($var = gv.stringMatchedI (7 + off)) != null) {
+var c = $var.charAt (0);
+if (c == 'n') {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\n"));
+} else if (c == 't') {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\t"));
+} else if (c == 'r') {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\r"));
+} else if (c == 'b') {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\r"));
+} else if (c == 'a') {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\u0007"));
+} else if (c == 'e') {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\u001b"));
+} else if (c == 'f') {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("\f"));
+}} else if (($var = gv.stringMatchedI (8 + off)) != null) {
+var c = $var.charAt (0);
+if (c.charCodeAt (0) < com.stevesoft.pat.Ctrl.cmap.length) {
+c = com.stevesoft.pat.Ctrl.cmap[c.charCodeAt (0)];
+}head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("" + c));
+} else if (($var = gv.stringMatchedI (9 + off)) != null) {
+var d = 16 * com.stevesoft.pat.ReplaceRule.getHexDigit ($var.charAt (0)) + com.stevesoft.pat.ReplaceRule.getHexDigit ($var.charAt (1));
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule ("" + String.fromCharCode (d)));
+}mt = gv.matchedTo ();
+}
+if (mt <= s.length) {
+head = com.stevesoft.pat.ReplaceRule.add (head, new com.stevesoft.pat.StringRule (s.substring (mt)));
+}return head;
+} finally {
+}
+}, "~S");
+c$.isDefined = Clazz.defineMethod (c$, "isDefined",
+function (s) {
+return com.stevesoft.pat.ReplaceRule.defs.get (s) != null;
+}, "~S");
+c$.define = Clazz.defineMethod (c$, "define",
+function (s, r) {
+com.stevesoft.pat.ReplaceRule.defs.put (s, r);
+}, "~S,com.stevesoft.pat.Regex");
+c$.define = Clazz.defineMethod (c$, "define",
+function (s, r) {
+com.stevesoft.pat.ReplaceRule.defs.put (s, r);
+r.name = s;
+}, "~S,com.stevesoft.pat.ReplaceRule");
+c$.define = Clazz.defineMethod (c$, "define",
+function (s, t) {
+com.stevesoft.pat.ReplaceRule.defs.put (s, t);
+}, "~S,com.stevesoft.pat.Transformer");
+c$.undefine = Clazz.defineMethod (c$, "undefine",
+function (s) {
+com.stevesoft.pat.ReplaceRule.defs.remove (s);
+}, "~S");
+Clazz.defineMethod (c$, "toString1",
+function () {
+return "${" + this.name + "}";
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+var sb = new StringBuffer ();
+sb.append (this.toString1 ());
+var rr = this.next;
+while (rr != null) {
+sb.append (rr.toString1 ());
+rr = rr.next;
+}
+return sb.toString ();
+});
+Clazz.defineMethod (c$, "arg",
+function (s) {
+return null;
+}, "~S");
+c$.getHexDigit = Clazz.defineMethod (c$, "getHexDigit",
+function (c) {
+if (c >= '0' && c <= '9') {
+return c.charCodeAt (0) - 48;
+}if (c >= 'a' && c <= 'f') {
+return c.charCodeAt (0) - 97 + 10;
+}return c.charCodeAt (0) - 65 + 10;
+}, "~S");
+Clazz.defineStatics (c$,
+"getvar", null);
+c$.defs = c$.prototype.defs = new java.util.Hashtable ();
+});
diff --git a/bin/com/stevesoft/pat/Replacer.class b/bin/com/stevesoft/pat/Replacer.class
index 331ff3b..813f56f 100644
Binary files a/bin/com/stevesoft/pat/Replacer.class and b/bin/com/stevesoft/pat/Replacer.class differ
diff --git a/bin/com/stevesoft/pat/Replacer.js b/bin/com/stevesoft/pat/Replacer.js
index 847b11c..996de92 100644
--- a/bin/com/stevesoft/pat/Replacer.js
+++ b/bin/com/stevesoft/pat/Replacer.js
@@ -1,230 +1,230 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, ["com.stevesoft.pat.RegHolder", "$.Replacer", "$.CodeVal"], ["com.stevesoft.pat.AmpersandRule", "$.ChangeRule", "$.MessageManager", "$.PopRule", "$.PushRule", "$.RuleHolder", "$.SpecialRule", "$.StringBufferLike", "$.WantMoreTextReplaceRule", "com.stevesoft.pat.wrap.StringWrap", "java.lang.NullPointerException"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.me = null;
-this.prev = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "RegHolder");
-c$ = Clazz.decorateAsClass (function () {
-this.pos = 0;
-this.code = '\0';
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "CodeVal");
-Clazz.makeConstructor (c$,
-function (p, c) {
-this.pos = p;
-this.code = c;
-}, "~N,~S");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(" + this.pos + "," + this.code + ")";
-});
-c$ = Clazz.decorateAsClass (function () {
-this.first = false;
-this.rh = null;
-this.sb = null;
-this.src = null;
-this.pos = 0;
-this.want_more_text = false;
-this.want_more_text_enable = false;
-this.$lastMatchedTo = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Replacer");
-Clazz.prepareFields (c$, function () {
-this.rh = new com.stevesoft.pat.RegHolder ();
-});
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "replaceFirstRegion",
-function (s, r, start, end) {
-return this.replaceFirstRegion ( new com.stevesoft.pat.wrap.StringWrap (s), r, start, end);
-}, "~S,com.stevesoft.pat.Regex,~N,~N");
-Clazz.defineMethod (c$, "replaceFirstRegion",
-function (s, r, start, end) {
-this.first = true;
-this.rh.me = r;
-this.rh.prev = null;
-return this.dorep (s, start, end);
-}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Regex,~N,~N");
-Clazz.defineMethod (c$, "replaceFirst",
-function (s) {
-return this.replaceFirstRegion (s, 0, s.length ());
-}, "com.stevesoft.pat.StringLike");
-Clazz.defineMethod (c$, "replaceFirstFrom",
-function (s, start) {
-return this.replaceFirstRegion (s, start, s.length ());
-}, "com.stevesoft.pat.StringLike,~N");
-Clazz.defineMethod (c$, "replaceFirstRegion",
-function (s, start, end) {
-this.first = true;
-return this.dorep (s, start, end);
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "replaceAllRegion",
-function (s, r, start, end) {
-return this.replaceAllRegion ( new com.stevesoft.pat.wrap.StringWrap (s), r, start, end);
-}, "~S,com.stevesoft.pat.Regex,~N,~N");
-Clazz.defineMethod (c$, "replaceAllRegion",
-function (s, r, start, end) {
-this.first = false;
-this.rh.me = r;
-this.rh.prev = null;
-return this.dorep (s, start, end);
-}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Regex,~N,~N");
-Clazz.defineMethod (c$, "replaceAll",
-function (s) {
-return this.replaceAllRegion (s, 0, s.length ());
-}, "com.stevesoft.pat.StringLike");
-Clazz.defineMethod (c$, "replaceAllFrom",
-function (s, start) {
-return this.replaceAllRegion (s, start, s.length ());
-}, "com.stevesoft.pat.StringLike,~N");
-Clazz.defineMethod (c$, "replaceAllRegion",
-function (s, start, end) {
-this.first = false;
-return this.dorep (s, start, end);
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "replaceAll",
-function (s) {
-return this.replaceAllRegion ( new com.stevesoft.pat.wrap.StringWrap (s), 0, s.length).toString ();
-}, "~S");
-Clazz.defineMethod (c$, "replaceAllFrom",
-function (s, start) {
-return this.replaceAllRegion ( new com.stevesoft.pat.wrap.StringWrap (s), start, s.length).toString ();
-}, "~S,~N");
-Clazz.defineMethod (c$, "replaceAllRegion",
-function (s, start, end) {
-this.first = false;
-return this.dorep ( new com.stevesoft.pat.wrap.StringWrap (s), start, end).toString ();
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "isSpecial",
-function (x) {
-while (x != null) {
-if (Clazz.instanceOf (x, com.stevesoft.pat.SpecialRule) || (Clazz.instanceOf (x, com.stevesoft.pat.RuleHolder) && Clazz.instanceOf ((x).held, com.stevesoft.pat.SpecialRule))) {
-return true;
-}x = x.next;
-}
-return false;
-}, "com.stevesoft.pat.ReplaceRule");
-Clazz.defineMethod (c$, "apply1",
-function (rr) {
-rr.charsMatched_++;
-this.apply (rr, null);
-rr.charsMatched_--;
-}, "com.stevesoft.pat.RegRes");
-Clazz.defineMethod (c$, "dorep",
-function (s, start, end) {
-var ret = s;
-this.want_more_text = false;
-this.$lastMatchedTo = 0;
-if (this.rh.me == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.replace_null_regex_pointer"));
-}if (this.rh.me._searchLike (s, start, end)) {
-var rmn = this.rh.me.matchedTo ();
-if (this.rh.me.charsMatched () == 0 && !this.isSpecial (this.rh.me.getReplaceRule ())) {
-this.apply1 (this.rh.me);
-rmn++;
-}this.apply (this.rh.me);
-if (!this.first) {
-for (var i = rmn; !this.want_more_text && this.rh.me._searchLike (s, i, end); i = rmn) {
-rmn = this.rh.me.matchedTo ();
-if (this.rh.me.charsMatched () == 0) {
-if (!this.isSpecial (this.rh.me.getReplaceRule ())) {
-this.apply1 (this.rh.me);
-}rmn++;
-}this.apply (this.rh.me);
-}
-}ret = this.finish ();
-ret = ret == null ? s : ret;
-}return ret;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "apply",
-function (r, rp) {
-if (rp == null || (rp.next == null && Clazz.instanceOf (rp, com.stevesoft.pat.AmpersandRule))) {
-return;
-}if (r.didMatch ()) {
-if (this.src == null) {
-this.src = r.getStringLike ();
-}if (this.sb == null) {
-this.sb = new com.stevesoft.pat.StringBufferLike (this.src.newStringBufferLike ());
-}var rmf = r.matchedFrom ();
-for (var ii = this.pos; ii < rmf; ii++) {
-this.sb.appendC (this.src.charAt (ii));
-}
-for (var x = rp; x != null; x = x.next) {
-x.apply (this.sb, r);
-if (Clazz.instanceOf (x, com.stevesoft.pat.SpecialRule)) {
-if (Clazz.instanceOf (x, com.stevesoft.pat.WantMoreTextReplaceRule) && this.want_more_text_enable) {
-this.want_more_text = true;
-} else if (Clazz.instanceOf (x, com.stevesoft.pat.PushRule)) {
-var rh2 = new com.stevesoft.pat.RegHolder ();
-rh2.me = (x).NewRule;
-rh2.prev = this.rh;
-this.rh = rh2;
-} else if (Clazz.instanceOf (x, com.stevesoft.pat.PopRule)) {
-if (this.rh.prev != null) {
-this.rh = this.rh.prev;
-}} else if (Clazz.instanceOf (x, com.stevesoft.pat.ChangeRule)) {
-this.rh.me = (x).NewRule;
-}}}
-if (!this.want_more_text) {
-this.pos = r.matchedTo ();
-}}}, "com.stevesoft.pat.RegRes,com.stevesoft.pat.ReplaceRule");
-Clazz.defineMethod (c$, "WantMoreText",
-function () {
-return this.want_more_text;
-});
-Clazz.defineMethod (c$, "apply",
-function (r) {
-this.apply (r, r.getReplaceRule ());
-}, "com.stevesoft.pat.Regex");
-Clazz.defineMethod (c$, "finish",
-function () {
-if (this.src == null) {
-return null;
-}var s_end = this.src.length ();
-for (var ii = this.pos; ii < s_end; ii++) {
-this.sb.appendC (this.src.charAt (ii));
-}
-this.src = null;
-this.$lastMatchedTo = this.pos;
-this.pos = 0;
-var retstr = this.sb.toStringLike ();
-this.sb = null;
-return retstr;
-});
-Clazz.overrideMethod (c$, "clone",
-function () {
-var r = new com.stevesoft.pat.Replacer ();
-r.first = this.first;
-r.src = this.src;
-r.sb = this.sb;
-r.pos = this.pos;
-r.$lastMatchedTo = this.$lastMatchedTo;
-r.want_more_text = this.want_more_text;
-r.want_more_text_enable = this.want_more_text_enable;
-r.rh.me = this.rh.me;
-r.rh.prev = this.rh.prev;
-return r;
-});
-Clazz.defineMethod (c$, "lastMatchedTo",
-function () {
-return this.$lastMatchedTo;
-});
-Clazz.defineMethod (c$, "getRegex",
-function () {
-return this.rh.me;
-});
-Clazz.defineMethod (c$, "setSource",
-function (sl) {
-this.src = sl;
-}, "com.stevesoft.pat.StringLike");
-Clazz.defineMethod (c$, "setBuffer",
-function (sbl) {
-this.sb = sbl;
-}, "com.stevesoft.pat.StringBufferLike");
-Clazz.defineMethod (c$, "setPos",
-function (pos) {
-this.pos = pos;
-}, "~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, ["com.stevesoft.pat.RegHolder", "$.Replacer", "$.CodeVal"], ["com.stevesoft.pat.AmpersandRule", "$.ChangeRule", "$.MessageManager", "$.PopRule", "$.PushRule", "$.RuleHolder", "$.SpecialRule", "$.StringBufferLike", "$.WantMoreTextReplaceRule", "com.stevesoft.pat.wrap.StringWrap", "java.lang.NullPointerException"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.me = null;
+this.prev = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "RegHolder");
+c$ = Clazz.decorateAsClass (function () {
+this.pos = 0;
+this.code = '\0';
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "CodeVal");
+Clazz.makeConstructor (c$,
+function (p, c) {
+this.pos = p;
+this.code = c;
+}, "~N,~S");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(" + this.pos + "," + this.code + ")";
+});
+c$ = Clazz.decorateAsClass (function () {
+this.first = false;
+this.rh = null;
+this.sb = null;
+this.src = null;
+this.pos = 0;
+this.want_more_text = false;
+this.want_more_text_enable = false;
+this.$lastMatchedTo = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Replacer");
+Clazz.prepareFields (c$, function () {
+this.rh = new com.stevesoft.pat.RegHolder ();
+});
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "replaceFirstRegion",
+function (s, r, start, end) {
+return this.replaceFirstRegion ( new com.stevesoft.pat.wrap.StringWrap (s), r, start, end);
+}, "~S,com.stevesoft.pat.Regex,~N,~N");
+Clazz.defineMethod (c$, "replaceFirstRegion",
+function (s, r, start, end) {
+this.first = true;
+this.rh.me = r;
+this.rh.prev = null;
+return this.dorep (s, start, end);
+}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Regex,~N,~N");
+Clazz.defineMethod (c$, "replaceFirst",
+function (s) {
+return this.replaceFirstRegion (s, 0, s.length ());
+}, "com.stevesoft.pat.StringLike");
+Clazz.defineMethod (c$, "replaceFirstFrom",
+function (s, start) {
+return this.replaceFirstRegion (s, start, s.length ());
+}, "com.stevesoft.pat.StringLike,~N");
+Clazz.defineMethod (c$, "replaceFirstRegion",
+function (s, start, end) {
+this.first = true;
+return this.dorep (s, start, end);
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "replaceAllRegion",
+function (s, r, start, end) {
+return this.replaceAllRegion ( new com.stevesoft.pat.wrap.StringWrap (s), r, start, end);
+}, "~S,com.stevesoft.pat.Regex,~N,~N");
+Clazz.defineMethod (c$, "replaceAllRegion",
+function (s, r, start, end) {
+this.first = false;
+this.rh.me = r;
+this.rh.prev = null;
+return this.dorep (s, start, end);
+}, "com.stevesoft.pat.StringLike,com.stevesoft.pat.Regex,~N,~N");
+Clazz.defineMethod (c$, "replaceAll",
+function (s) {
+return this.replaceAllRegion (s, 0, s.length ());
+}, "com.stevesoft.pat.StringLike");
+Clazz.defineMethod (c$, "replaceAllFrom",
+function (s, start) {
+return this.replaceAllRegion (s, start, s.length ());
+}, "com.stevesoft.pat.StringLike,~N");
+Clazz.defineMethod (c$, "replaceAllRegion",
+function (s, start, end) {
+this.first = false;
+return this.dorep (s, start, end);
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "replaceAll",
+function (s) {
+return this.replaceAllRegion ( new com.stevesoft.pat.wrap.StringWrap (s), 0, s.length).toString ();
+}, "~S");
+Clazz.defineMethod (c$, "replaceAllFrom",
+function (s, start) {
+return this.replaceAllRegion ( new com.stevesoft.pat.wrap.StringWrap (s), start, s.length).toString ();
+}, "~S,~N");
+Clazz.defineMethod (c$, "replaceAllRegion",
+function (s, start, end) {
+this.first = false;
+return this.dorep ( new com.stevesoft.pat.wrap.StringWrap (s), start, end).toString ();
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "isSpecial",
+function (x) {
+while (x != null) {
+if (Clazz.instanceOf (x, com.stevesoft.pat.SpecialRule) || (Clazz.instanceOf (x, com.stevesoft.pat.RuleHolder) && Clazz.instanceOf ((x).held, com.stevesoft.pat.SpecialRule))) {
+return true;
+}x = x.next;
+}
+return false;
+}, "com.stevesoft.pat.ReplaceRule");
+Clazz.defineMethod (c$, "apply1",
+function (rr) {
+rr.charsMatched_++;
+this.apply (rr, null);
+rr.charsMatched_--;
+}, "com.stevesoft.pat.RegRes");
+Clazz.defineMethod (c$, "dorep",
+function (s, start, end) {
+var ret = s;
+this.want_more_text = false;
+this.$lastMatchedTo = 0;
+if (this.rh.me == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.getString ("exception.replace_null_regex_pointer"));
+}if (this.rh.me._searchLike (s, start, end)) {
+var rmn = this.rh.me.matchedTo ();
+if (this.rh.me.charsMatched () == 0 && !this.isSpecial (this.rh.me.getReplaceRule ())) {
+this.apply1 (this.rh.me);
+rmn++;
+}this.apply (this.rh.me);
+if (!this.first) {
+for (var i = rmn; !this.want_more_text && this.rh.me._searchLike (s, i, end); i = rmn) {
+rmn = this.rh.me.matchedTo ();
+if (this.rh.me.charsMatched () == 0) {
+if (!this.isSpecial (this.rh.me.getReplaceRule ())) {
+this.apply1 (this.rh.me);
+}rmn++;
+}this.apply (this.rh.me);
+}
+}ret = this.finish ();
+ret = ret == null ? s : ret;
+}return ret;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "apply",
+function (r, rp) {
+if (rp == null || (rp.next == null && Clazz.instanceOf (rp, com.stevesoft.pat.AmpersandRule))) {
+return;
+}if (r.didMatch ()) {
+if (this.src == null) {
+this.src = r.getStringLike ();
+}if (this.sb == null) {
+this.sb = new com.stevesoft.pat.StringBufferLike (this.src.newStringBufferLike ());
+}var rmf = r.matchedFrom ();
+for (var ii = this.pos; ii < rmf; ii++) {
+this.sb.appendC (this.src.charAt (ii));
+}
+for (var x = rp; x != null; x = x.next) {
+x.apply (this.sb, r);
+if (Clazz.instanceOf (x, com.stevesoft.pat.SpecialRule)) {
+if (Clazz.instanceOf (x, com.stevesoft.pat.WantMoreTextReplaceRule) && this.want_more_text_enable) {
+this.want_more_text = true;
+} else if (Clazz.instanceOf (x, com.stevesoft.pat.PushRule)) {
+var rh2 = new com.stevesoft.pat.RegHolder ();
+rh2.me = (x).NewRule;
+rh2.prev = this.rh;
+this.rh = rh2;
+} else if (Clazz.instanceOf (x, com.stevesoft.pat.PopRule)) {
+if (this.rh.prev != null) {
+this.rh = this.rh.prev;
+}} else if (Clazz.instanceOf (x, com.stevesoft.pat.ChangeRule)) {
+this.rh.me = (x).NewRule;
+}}}
+if (!this.want_more_text) {
+this.pos = r.matchedTo ();
+}}}, "com.stevesoft.pat.RegRes,com.stevesoft.pat.ReplaceRule");
+Clazz.defineMethod (c$, "WantMoreText",
+function () {
+return this.want_more_text;
+});
+Clazz.defineMethod (c$, "apply",
+function (r) {
+this.apply (r, r.getReplaceRule ());
+}, "com.stevesoft.pat.Regex");
+Clazz.defineMethod (c$, "finish",
+function () {
+if (this.src == null) {
+return null;
+}var s_end = this.src.length ();
+for (var ii = this.pos; ii < s_end; ii++) {
+this.sb.appendC (this.src.charAt (ii));
+}
+this.src = null;
+this.$lastMatchedTo = this.pos;
+this.pos = 0;
+var retstr = this.sb.toStringLike ();
+this.sb = null;
+return retstr;
+});
+Clazz.overrideMethod (c$, "clone",
+function () {
+var r = new com.stevesoft.pat.Replacer ();
+r.first = this.first;
+r.src = this.src;
+r.sb = this.sb;
+r.pos = this.pos;
+r.$lastMatchedTo = this.$lastMatchedTo;
+r.want_more_text = this.want_more_text;
+r.want_more_text_enable = this.want_more_text_enable;
+r.rh.me = this.rh.me;
+r.rh.prev = this.rh.prev;
+return r;
+});
+Clazz.defineMethod (c$, "lastMatchedTo",
+function () {
+return this.$lastMatchedTo;
+});
+Clazz.defineMethod (c$, "getRegex",
+function () {
+return this.rh.me;
+});
+Clazz.defineMethod (c$, "setSource",
+function (sl) {
+this.src = sl;
+}, "com.stevesoft.pat.StringLike");
+Clazz.defineMethod (c$, "setBuffer",
+function (sbl) {
+this.sb = sbl;
+}, "com.stevesoft.pat.StringBufferLike");
+Clazz.defineMethod (c$, "setPos",
+function (pos) {
+this.pos = pos;
+}, "~N");
+});
diff --git a/bin/com/stevesoft/pat/RightRule.js b/bin/com/stevesoft/pat/RightRule.js
index 60fa08d..ab453dd 100644
--- a/bin/com/stevesoft/pat/RightRule.js
+++ b/bin/com/stevesoft/pat/RightRule.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.RightRule", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "RightRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.RightRule, []);
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-sb.append (res.right ());
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "$'";
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.RightRule", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "RightRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.RightRule, []);
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+sb.append (res.right ());
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "$'";
+});
+});
diff --git a/bin/com/stevesoft/pat/Rthings.js b/bin/com/stevesoft/pat/Rthings.js
index c9c902e..66f9c83 100644
--- a/bin/com/stevesoft/pat/Rthings.js
+++ b/bin/com/stevesoft/pat/Rthings.js
@@ -1,35 +1,35 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Regex"], "com.stevesoft.pat.Rthings", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.val = 0;
-this.ignoreCase = false;
-this.dontMatchInQuotes = false;
-this.optimizeMe = false;
-this.noBackRefs = false;
-this.parenLevel = 0;
-this.gFlag = false;
-this.mFlag = false;
-this.sFlag = false;
-this.p = null;
-this.o = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Rthings");
-Clazz.prepareFields (c$, function () {
-this.val = com.stevesoft.pat.Regex.BackRefOffset;
-});
-Clazz.makeConstructor (c$,
-function (r) {
-this.ignoreCase = r.ignoreCase;
-this.dontMatchInQuotes = r.dontMatchInQuotes;
-}, "com.stevesoft.pat.Regex");
-Clazz.defineMethod (c$, "set",
-function (r) {
-r.gFlag = this.gFlag;
-r.mFlag = this.mFlag;
-r.sFlag = this.sFlag;
-r.ignoreCase = this.ignoreCase;
-r.dontMatchInQuotes = this.dontMatchInQuotes;
-if (this.optimizeMe) {
-r.optimize ();
-}}, "com.stevesoft.pat.Regex");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Regex"], "com.stevesoft.pat.Rthings", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.val = 0;
+this.ignoreCase = false;
+this.dontMatchInQuotes = false;
+this.optimizeMe = false;
+this.noBackRefs = false;
+this.parenLevel = 0;
+this.gFlag = false;
+this.mFlag = false;
+this.sFlag = false;
+this.p = null;
+this.o = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Rthings");
+Clazz.prepareFields (c$, function () {
+this.val = com.stevesoft.pat.Regex.BackRefOffset;
+});
+Clazz.makeConstructor (c$,
+function (r) {
+this.ignoreCase = r.ignoreCase;
+this.dontMatchInQuotes = r.dontMatchInQuotes;
+}, "com.stevesoft.pat.Regex");
+Clazz.defineMethod (c$, "set",
+function (r) {
+r.gFlag = this.gFlag;
+r.mFlag = this.mFlag;
+r.sFlag = this.sFlag;
+r.ignoreCase = this.ignoreCase;
+r.dontMatchInQuotes = this.dontMatchInQuotes;
+if (this.optimizeMe) {
+r.optimize ();
+}}, "com.stevesoft.pat.Regex");
+});
diff --git a/bin/com/stevesoft/pat/RuleHolder.js b/bin/com/stevesoft/pat/RuleHolder.js
index a628201..6924899 100644
--- a/bin/com/stevesoft/pat/RuleHolder.js
+++ b/bin/com/stevesoft/pat/RuleHolder.js
@@ -1,32 +1,32 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.RuleHolder", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.held = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "RuleHolder", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.RuleHolder, []);
-});
-Clazz.makeConstructor (c$,
-function (h) {
-Clazz.superConstructor (this, com.stevesoft.pat.RuleHolder, []);
-this.held = h;
-}, "com.stevesoft.pat.ReplaceRule");
-Clazz.overrideMethod (c$, "clone1",
-function () {
-return new com.stevesoft.pat.RuleHolder (this.held);
-});
-Clazz.defineMethod (c$, "toString1",
-function () {
-return this.held.toString1 ();
-});
-Clazz.defineMethod (c$, "apply",
-function (sb, rr) {
-this.held.apply (sb, rr);
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.defineMethod (c$, "arg",
-function (s) {
-return new com.stevesoft.pat.RuleHolder (this.held.arg (s));
-}, "~S");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.RuleHolder", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.held = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "RuleHolder", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.RuleHolder, []);
+});
+Clazz.makeConstructor (c$,
+function (h) {
+Clazz.superConstructor (this, com.stevesoft.pat.RuleHolder, []);
+this.held = h;
+}, "com.stevesoft.pat.ReplaceRule");
+Clazz.overrideMethod (c$, "clone1",
+function () {
+return new com.stevesoft.pat.RuleHolder (this.held);
+});
+Clazz.defineMethod (c$, "toString1",
+function () {
+return this.held.toString1 ();
+});
+Clazz.defineMethod (c$, "apply",
+function (sb, rr) {
+this.held.apply (sb, rr);
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.defineMethod (c$, "arg",
+function (s) {
+return new com.stevesoft.pat.RuleHolder (this.held.arg (s));
+}, "~S");
+});
diff --git a/bin/com/stevesoft/pat/Skip.js b/bin/com/stevesoft/pat/Skip.js
index bdf02e4..6dd2756 100644
--- a/bin/com/stevesoft/pat/Skip.js
+++ b/bin/com/stevesoft/pat/Skip.js
@@ -1,108 +1,108 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.Skip", ["com.stevesoft.pat.CaseMgr", "$.Or", "$.Skipped", "$.oneChar", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.src = null;
-this.c = 0;
-this.mask = 0;
-this.$offset = 0;
-this.ign = false;
-this.m1 = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Skip");
-c$.mkmask = Clazz.defineMethod (c$, "mkmask",
-function (c) {
-var x = String.fromCharCode (c);
-return ~((com.stevesoft.pat.CaseMgr.toUpperCaseC (x)).charCodeAt (0) | (com.stevesoft.pat.CaseMgr.toLowerCaseC (x)).charCodeAt (0) | (com.stevesoft.pat.CaseMgr.toTitleCaseC (x)).charCodeAt (0));
-}, "~N");
-c$.string = Clazz.defineMethod (c$, "string",
-function (r) {
-return r.skipper == null ? null : r.skipper.src;
-}, "com.stevesoft.pat.Regex");
-c$.offset = Clazz.defineMethod (c$, "offset",
-function (r) {
-return r.skipper == null ? -1 : r.skipper.$offset;
-}, "com.stevesoft.pat.Regex");
-Clazz.makeConstructor (c$,
-function (s, ign, o) {
-this.src = s;
-this.c = s.charCodeAt (0);
-if (ign) {
-this.mask = com.stevesoft.pat.Skip.mkmask (this.c);
-} else {
-this.mask = 0;
-}this.$offset = o;
-this.ign = ign;
-this.m1 = (s.length == 1);
-}, "~S,~B,~N");
-Clazz.defineMethod (c$, "find",
-function (s) {
-return this.find (s, 0, s.length ());
-}, "com.stevesoft.pat.StringLike");
-c$.min = Clazz.defineMethod (c$, "min",
-function (a, b) {
-return a < b ? a : b;
-}, "~N,~N");
-Clazz.defineMethod (c$, "find",
-function (s, start, end) {
-if (start > end) {
-return -1;
-}start += this.$offset;
-var vend = com.stevesoft.pat.Skip.min (s.length () - 1, end + this.$offset);
-if (this.mask != this.c) {
-for (var i = start; i <= vend; i++) {
-if (0 == (s.charCodeAt (i) & this.mask)) {
-if (this.m1 || com.stevesoft.pat.CaseMgr.regionMatchesLike2 (s, this.ign, i, this.src, 0, this.src.length)) {
-return i - this.$offset;
-}}}
-} else {
-for (var i = start; i <= vend; i++) {
-if (this.c == s.charCodeAt (i)) {
-if (this.m1 || com.stevesoft.pat.CaseMgr.regionMatchesLike2 (s, this.ign, i, this.src, 0, this.src.length)) {
-return i - this.$offset;
-}}}
-}return -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-c$.findSkipRegex = Clazz.defineMethod (c$, "findSkipRegex",
-function (r) {
-return com.stevesoft.pat.Skip.findSkip (r.thePattern, r.ignoreCase, !r.dontMatchInQuotes);
-}, "com.stevesoft.pat.Regex");
-c$.findSkip = Clazz.defineMethod (c$, "findSkip",
-function (p, ignoreCase, trnc) {
-var sb = new StringBuffer ();
-var subsk = null;
-var offset = 0;
-var skipc = -1;
-var skipoff = 0;
-for (; p != null; p = p.next) {
-if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar)) {
-skipc = ((p).c).charCodeAt (0);
-skipoff = offset;
-}if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && Clazz.instanceOf (p.next, com.stevesoft.pat.oneChar)) {
-var psav = p;
-sb.append ((p).c);
-while (Clazz.instanceOf (p.next, com.stevesoft.pat.oneChar)) {
-sb.append ((p.next).c);
-p = p.next;
-}
-var st = sb.toString ();
-var sk = null;
-if (st.length > 2) {
-sk = new com.stevesoft.pat.SkipBMH (st, ignoreCase, offset);
-} else {
-sk = new com.stevesoft.pat.Skip2 (st, ignoreCase, offset);
-}if (trnc && st.length > 2) {
-psav.next = new com.stevesoft.pat.Skipped (st.substring (1));
-psav.next.next = p.next;
-psav.next.parent = p.parent;
-}return sk;
-} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or) && (p).v.size () == 1 && !(p).leftForm ().equals ("(?!") && null != (subsk = com.stevesoft.pat.Skip.findSkip ((p).v.elementAt (0), ignoreCase, trnc))) {
-subsk.$offset += offset;
-return subsk;
-} else if (p.minChars ().equals (p.maxChars ())) {
-offset += p.minChars ().intValue ();
-} else {
-return skipc < 0 ? null : new com.stevesoft.pat.Skip ("" + String.fromCharCode (skipc), ignoreCase, skipoff);
-}}
-return null;
-}, "com.stevesoft.pat.Pattern,~B,~B");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.Skip", ["com.stevesoft.pat.CaseMgr", "$.Or", "$.Skipped", "$.oneChar", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.src = null;
+this.c = 0;
+this.mask = 0;
+this.$offset = 0;
+this.ign = false;
+this.m1 = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Skip");
+c$.mkmask = Clazz.defineMethod (c$, "mkmask",
+function (c) {
+var x = String.fromCharCode (c);
+return ~((com.stevesoft.pat.CaseMgr.toUpperCaseC (x)).charCodeAt (0) | (com.stevesoft.pat.CaseMgr.toLowerCaseC (x)).charCodeAt (0) | (com.stevesoft.pat.CaseMgr.toTitleCaseC (x)).charCodeAt (0));
+}, "~N");
+c$.string = Clazz.defineMethod (c$, "string",
+function (r) {
+return r.skipper == null ? null : r.skipper.src;
+}, "com.stevesoft.pat.Regex");
+c$.offset = Clazz.defineMethod (c$, "offset",
+function (r) {
+return r.skipper == null ? -1 : r.skipper.$offset;
+}, "com.stevesoft.pat.Regex");
+Clazz.makeConstructor (c$,
+function (s, ign, o) {
+this.src = s;
+this.c = s.charCodeAt (0);
+if (ign) {
+this.mask = com.stevesoft.pat.Skip.mkmask (this.c);
+} else {
+this.mask = 0;
+}this.$offset = o;
+this.ign = ign;
+this.m1 = (s.length == 1);
+}, "~S,~B,~N");
+Clazz.defineMethod (c$, "find",
+function (s) {
+return this.find (s, 0, s.length ());
+}, "com.stevesoft.pat.StringLike");
+c$.min = Clazz.defineMethod (c$, "min",
+function (a, b) {
+return a < b ? a : b;
+}, "~N,~N");
+Clazz.defineMethod (c$, "find",
+function (s, start, end) {
+if (start > end) {
+return -1;
+}start += this.$offset;
+var vend = com.stevesoft.pat.Skip.min (s.length () - 1, end + this.$offset);
+if (this.mask != this.c) {
+for (var i = start; i <= vend; i++) {
+if (0 == (s.charCodeAt (i) & this.mask)) {
+if (this.m1 || com.stevesoft.pat.CaseMgr.regionMatchesLike2 (s, this.ign, i, this.src, 0, this.src.length)) {
+return i - this.$offset;
+}}}
+} else {
+for (var i = start; i <= vend; i++) {
+if (this.c == s.charCodeAt (i)) {
+if (this.m1 || com.stevesoft.pat.CaseMgr.regionMatchesLike2 (s, this.ign, i, this.src, 0, this.src.length)) {
+return i - this.$offset;
+}}}
+}return -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+c$.findSkipRegex = Clazz.defineMethod (c$, "findSkipRegex",
+function (r) {
+return com.stevesoft.pat.Skip.findSkip (r.thePattern, r.ignoreCase, !r.dontMatchInQuotes);
+}, "com.stevesoft.pat.Regex");
+c$.findSkip = Clazz.defineMethod (c$, "findSkip",
+function (p, ignoreCase, trnc) {
+var sb = new StringBuffer ();
+var subsk = null;
+var offset = 0;
+var skipc = -1;
+var skipoff = 0;
+for (; p != null; p = p.next) {
+if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar)) {
+skipc = ((p).c).charCodeAt (0);
+skipoff = offset;
+}if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && Clazz.instanceOf (p.next, com.stevesoft.pat.oneChar)) {
+var psav = p;
+sb.append ((p).c);
+while (Clazz.instanceOf (p.next, com.stevesoft.pat.oneChar)) {
+sb.append ((p.next).c);
+p = p.next;
+}
+var st = sb.toString ();
+var sk = null;
+if (st.length > 2) {
+sk = new com.stevesoft.pat.SkipBMH (st, ignoreCase, offset);
+} else {
+sk = new com.stevesoft.pat.Skip2 (st, ignoreCase, offset);
+}if (trnc && st.length > 2) {
+psav.next = new com.stevesoft.pat.Skipped (st.substring (1));
+psav.next.next = p.next;
+psav.next.parent = p.parent;
+}return sk;
+} else if (Clazz.instanceOf (p, com.stevesoft.pat.Or) && (p).v.size () == 1 && !(p).leftForm ().equals ("(?!") && null != (subsk = com.stevesoft.pat.Skip.findSkip ((p).v.elementAt (0), ignoreCase, trnc))) {
+subsk.$offset += offset;
+return subsk;
+} else if (p.minChars ().equals (p.maxChars ())) {
+offset += p.minChars ().intValue ();
+} else {
+return skipc < 0 ? null : new com.stevesoft.pat.Skip ("" + String.fromCharCode (skipc), ignoreCase, skipoff);
+}}
+return null;
+}, "com.stevesoft.pat.Pattern,~B,~B");
+});
diff --git a/bin/com/stevesoft/pat/Skip2.js b/bin/com/stevesoft/pat/Skip2.js
index c06b56e..e69b45e 100644
--- a/bin/com/stevesoft/pat/Skip2.js
+++ b/bin/com/stevesoft/pat/Skip2.js
@@ -1,31 +1,31 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Skip"], "com.stevesoft.pat.Skip2", ["com.stevesoft.pat.CaseMgr"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.c1 = 0;
-this.mask1 = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Skip2", com.stevesoft.pat.Skip);
-Clazz.makeConstructor (c$,
-function (s, ign, offset) {
-Clazz.superConstructor (this, com.stevesoft.pat.Skip2, [s, ign, offset]);
-this.c1 = s.charCodeAt (1);
-this.m1 = 2 == s.length;
-if (ign) {
-this.mask1 = com.stevesoft.pat.Skip.mkmask (this.c1);
-} else {
-this.mask1 = 0;
-}}, "~S,~B,~N");
-Clazz.defineMethod (c$, "find",
-function (s, start, end) {
-if (start > end) {
-return -1;
-}start += this.$offset;
-var vend = com.stevesoft.pat.Skip.min (s.length () - 2, end + this.$offset);
-for (var i = start; i <= vend; i++) {
-if (0 == (s.charCodeAt (i) & this.mask) && 0 == (s.charCodeAt (i + 1) & this.mask1)) {
-if (this.m1 || com.stevesoft.pat.CaseMgr.regionMatchesLike2 (s, this.ign, i, this.src, 0, this.src.length)) {
-return i - this.$offset;
-}}}
-return -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Skip"], "com.stevesoft.pat.Skip2", ["com.stevesoft.pat.CaseMgr"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.c1 = 0;
+this.mask1 = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Skip2", com.stevesoft.pat.Skip);
+Clazz.makeConstructor (c$,
+function (s, ign, offset) {
+Clazz.superConstructor (this, com.stevesoft.pat.Skip2, [s, ign, offset]);
+this.c1 = s.charCodeAt (1);
+this.m1 = 2 == s.length;
+if (ign) {
+this.mask1 = com.stevesoft.pat.Skip.mkmask (this.c1);
+} else {
+this.mask1 = 0;
+}}, "~S,~B,~N");
+Clazz.defineMethod (c$, "find",
+function (s, start, end) {
+if (start > end) {
+return -1;
+}start += this.$offset;
+var vend = com.stevesoft.pat.Skip.min (s.length () - 2, end + this.$offset);
+for (var i = start; i <= vend; i++) {
+if (0 == (s.charCodeAt (i) & this.mask) && 0 == (s.charCodeAt (i + 1) & this.mask1)) {
+if (this.m1 || com.stevesoft.pat.CaseMgr.regionMatchesLike2 (s, this.ign, i, this.src, 0, this.src.length)) {
+return i - this.$offset;
+}}}
+return -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+});
diff --git a/bin/com/stevesoft/pat/SkipBMH.js b/bin/com/stevesoft/pat/SkipBMH.js
index 9ea4116..ac81e43 100644
--- a/bin/com/stevesoft/pat/SkipBMH.js
+++ b/bin/com/stevesoft/pat/SkipBMH.js
@@ -1,154 +1,154 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Skip"], "com.stevesoft.pat.SkipBMH", ["com.stevesoft.pat.CaseMgr", "com.stevesoft.pat.wrap.StringWrap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.MAX_CHAR = 64;
-this.skip = null;
-this.sm1 = 0;
-this.jump_ahead = 0;
-this.uc = '\0';
-this.lc = '\0';
-this.tc = '\0';
-this.x = '\0';
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "SkipBMH", com.stevesoft.pat.Skip);
-Clazz.prepareFields (c$, function () {
-this.skip = Clazz.newCharArray (64, '\0');
-});
-Clazz.defineMethod (c$, "exact",
-function (c) {
-return (this.ign && this.anyc (c)) || c == this.x;
-}, "~S");
-Clazz.defineMethod (c$, "anyc",
-function (c) {
-return c == this.uc || c == this.lc || c == this.tc;
-}, "~S");
-Clazz.makeConstructor (c$,
-function (pt, ign) {
-this.construct (pt, ign, 0);
-}, "~S,~B");
-Clazz.makeConstructor (c$,
-function (pt) {
-this.construct (pt, false, 0);
-}, "~S");
-Clazz.makeConstructor (c$,
-function (pt, ign, offset) {
-Clazz.superConstructor (this, com.stevesoft.pat.SkipBMH, [pt, ign, offset]);
-for (var k = 0; k < 64; k++) {
-this.skip[k] = String.fromCharCode (this.src.length);
-}
-this.sm1 = this.src.length - 1;
-this.x = this.src.charAt (this.sm1);
-this.uc = com.stevesoft.pat.CaseMgr.toUpperCaseC (this.x);
-this.lc = com.stevesoft.pat.CaseMgr.toLowerCaseC (this.x);
-this.tc = com.stevesoft.pat.CaseMgr.toTitleCaseC (this.x);
-for (var k = 0; k < this.src.length - 1; k++) {
-var x_ = this.src.charAt (k);
-if (ign) {
-var uc_ = com.stevesoft.pat.CaseMgr.toUpperCaseC (x_);
-var lc_ = com.stevesoft.pat.CaseMgr.toLowerCaseC (x_);
-var tc_ = com.stevesoft.pat.CaseMgr.toTitleCaseC (x_);
-this.skip[uc_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
-this.skip[lc_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
-this.skip[tc_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
-} else {
-this.skip[x_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
-}}
-this.jump_ahead = this.src.length - 1;
-for (var k = 0; k < this.src.length - 1; k++) {
-var y = this.src.charAt (this.sm1 - k - 1);
-if (this.exact (y)) {
-this.jump_ahead = k;
-break;
-}}
-}, "~S,~B,~N");
-Clazz.defineMethod (c$, "searchRegion",
-function (s, start, end) {
-return this.find (s, start, end);
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "searchFrom",
-function (s, start) {
-return this.find (s, start, s.length);
-}, "~S,~N");
-Clazz.defineMethod (c$, "search",
-function (s) {
-return this.find (s, 0, s.length);
-}, "~S");
-Clazz.defineMethod (c$, "find",
-function (s, start, end) {
-start += this.$offset + this.sm1;
-var vend = com.stevesoft.pat.Skip.min (s.length - 1, end + this.sm1 + this.$offset);
-var k;
-var vend1 = vend - this.jump_ahead;
-if (this.ign) {
-for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.anyc (s.charAt (k))) {
-if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-}}
-for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.anyc (s.charAt (k))) {
-if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-if (k > vend) {
-return -1;
-}}}
-} else {
-for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.x == s.charAt (k)) {
-if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, false, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-}}
-for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.x == s.charAt (k)) {
-if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, false, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-if (k > vend) {
-return -1;
-}}}
-}return -1;
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "find",
-function (s, start, end) {
-if (Clazz.instanceOf (s, com.stevesoft.pat.wrap.StringWrap)) {
-return this.find (s.toString (), start, end);
-}start += this.$offset + this.sm1;
-var vend = com.stevesoft.pat.Skip.min (s.length () - 1, end + this.sm1 + this.$offset);
-var k;
-var vend1 = vend - this.jump_ahead;
-if (this.ign) {
-for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.anyc (s.charAt (k))) {
-if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-}}
-for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.anyc (s.charAt (k))) {
-if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-if (k > vend) {
-return -1;
-}}}
-} else {
-for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.x == s.charAt (k)) {
-if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, false, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-}}
-for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
-if (this.x == s.charAt (k)) {
-if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, false, 0, s, k - this.sm1, this.sm1)) {
-return k - this.sm1 - this.$offset;
-}k += this.jump_ahead;
-if (k > vend) {
-return -1;
-}}}
-}return -1;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Skip"], "com.stevesoft.pat.SkipBMH", ["com.stevesoft.pat.CaseMgr", "com.stevesoft.pat.wrap.StringWrap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.MAX_CHAR = 64;
+this.skip = null;
+this.sm1 = 0;
+this.jump_ahead = 0;
+this.uc = '\0';
+this.lc = '\0';
+this.tc = '\0';
+this.x = '\0';
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "SkipBMH", com.stevesoft.pat.Skip);
+Clazz.prepareFields (c$, function () {
+this.skip = Clazz.newCharArray (64, '\0');
+});
+Clazz.defineMethod (c$, "exact",
+function (c) {
+return (this.ign && this.anyc (c)) || c == this.x;
+}, "~S");
+Clazz.defineMethod (c$, "anyc",
+function (c) {
+return c == this.uc || c == this.lc || c == this.tc;
+}, "~S");
+Clazz.makeConstructor (c$,
+function (pt, ign) {
+this.construct (pt, ign, 0);
+}, "~S,~B");
+Clazz.makeConstructor (c$,
+function (pt) {
+this.construct (pt, false, 0);
+}, "~S");
+Clazz.makeConstructor (c$,
+function (pt, ign, offset) {
+Clazz.superConstructor (this, com.stevesoft.pat.SkipBMH, [pt, ign, offset]);
+for (var k = 0; k < 64; k++) {
+this.skip[k] = String.fromCharCode (this.src.length);
+}
+this.sm1 = this.src.length - 1;
+this.x = this.src.charAt (this.sm1);
+this.uc = com.stevesoft.pat.CaseMgr.toUpperCaseC (this.x);
+this.lc = com.stevesoft.pat.CaseMgr.toLowerCaseC (this.x);
+this.tc = com.stevesoft.pat.CaseMgr.toTitleCaseC (this.x);
+for (var k = 0; k < this.src.length - 1; k++) {
+var x_ = this.src.charAt (k);
+if (ign) {
+var uc_ = com.stevesoft.pat.CaseMgr.toUpperCaseC (x_);
+var lc_ = com.stevesoft.pat.CaseMgr.toLowerCaseC (x_);
+var tc_ = com.stevesoft.pat.CaseMgr.toTitleCaseC (x_);
+this.skip[uc_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
+this.skip[lc_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
+this.skip[tc_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
+} else {
+this.skip[x_.charCodeAt (0) & (63)] = String.fromCharCode (this.src.length - k - 1);
+}}
+this.jump_ahead = this.src.length - 1;
+for (var k = 0; k < this.src.length - 1; k++) {
+var y = this.src.charAt (this.sm1 - k - 1);
+if (this.exact (y)) {
+this.jump_ahead = k;
+break;
+}}
+}, "~S,~B,~N");
+Clazz.defineMethod (c$, "searchRegion",
+function (s, start, end) {
+return this.find (s, start, end);
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "searchFrom",
+function (s, start) {
+return this.find (s, start, s.length);
+}, "~S,~N");
+Clazz.defineMethod (c$, "search",
+function (s) {
+return this.find (s, 0, s.length);
+}, "~S");
+Clazz.defineMethod (c$, "find",
+function (s, start, end) {
+start += this.$offset + this.sm1;
+var vend = com.stevesoft.pat.Skip.min (s.length - 1, end + this.sm1 + this.$offset);
+var k;
+var vend1 = vend - this.jump_ahead;
+if (this.ign) {
+for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.anyc (s.charAt (k))) {
+if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+}}
+for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.anyc (s.charAt (k))) {
+if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+if (k > vend) {
+return -1;
+}}}
+} else {
+for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.x == s.charAt (k)) {
+if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, false, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+}}
+for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.x == s.charAt (k)) {
+if (com.stevesoft.pat.CaseMgr.regionMatches2 (this.src, false, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+if (k > vend) {
+return -1;
+}}}
+}return -1;
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "find",
+function (s, start, end) {
+if (Clazz.instanceOf (s, com.stevesoft.pat.wrap.StringWrap)) {
+return this.find (s.toString (), start, end);
+}start += this.$offset + this.sm1;
+var vend = com.stevesoft.pat.Skip.min (s.length () - 1, end + this.sm1 + this.$offset);
+var k;
+var vend1 = vend - this.jump_ahead;
+if (this.ign) {
+for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.anyc (s.charAt (k))) {
+if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+}}
+for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.anyc (s.charAt (k))) {
+if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, this.ign, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+if (k > vend) {
+return -1;
+}}}
+} else {
+for (k = start; k <= vend1; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.x == s.charAt (k)) {
+if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, false, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+}}
+for (; k <= vend; k += (this.skip[s.charCodeAt (k) & (63)]).charCodeAt (0)) {
+if (this.x == s.charAt (k)) {
+if (com.stevesoft.pat.CaseMgr.regionMatches (this.src, false, 0, s, k - this.sm1, this.sm1)) {
+return k - this.sm1 - this.$offset;
+}k += this.jump_ahead;
+if (k > vend) {
+return -1;
+}}}
+}return -1;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+});
diff --git a/bin/com/stevesoft/pat/Skipped.js b/bin/com/stevesoft/pat/Skipped.js
index 07c5ca9..8f6f1d3 100644
--- a/bin/com/stevesoft/pat/Skipped.js
+++ b/bin/com/stevesoft/pat/Skipped.js
@@ -1,34 +1,34 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Skipped", ["com.stevesoft.pat.CaseMgr", "$.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.s = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Skipped", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (s) {
-Clazz.superConstructor (this, com.stevesoft.pat.Skipped, []);
-this.s = s;
-}, "~S");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.s + this.nextString ();
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (pt.no_check || com.stevesoft.pat.CaseMgr.regionMatches (this.s, pt.ignoreCase, 0, pt.src, pos, this.s.length)) {
-return this.nextMatch (pos + this.s.length, pt);
-}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (this.s.length);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (this.s.length);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.Skipped (this.s);
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Skipped", ["com.stevesoft.pat.CaseMgr", "$.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.s = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Skipped", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (s) {
+Clazz.superConstructor (this, com.stevesoft.pat.Skipped, []);
+this.s = s;
+}, "~S");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.s + this.nextString ();
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (pt.no_check || com.stevesoft.pat.CaseMgr.regionMatches (this.s, pt.ignoreCase, 0, pt.src, pos, this.s.length)) {
+return this.nextMatch (pos + this.s.length, pt);
+}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (this.s.length);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (this.s.length);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.Skipped (this.s);
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/SpecialRule.js b/bin/com/stevesoft/pat/SpecialRule.js
index 13dfbe5..aed49a6 100644
--- a/bin/com/stevesoft/pat/SpecialRule.js
+++ b/bin/com/stevesoft/pat/SpecialRule.js
@@ -1,11 +1,11 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.SpecialRule", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "SpecialRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.SpecialRule, []);
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, rr) {
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.SpecialRule", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "SpecialRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.SpecialRule, []);
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, rr) {
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+});
diff --git a/bin/com/stevesoft/pat/Start.js b/bin/com/stevesoft/pat/Start.js
index 56168b1..1ef02d7 100644
--- a/bin/com/stevesoft/pat/Start.js
+++ b/bin/com/stevesoft/pat/Start.js
@@ -1,35 +1,35 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Start", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.retIsStart = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Start", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (b) {
-Clazz.superConstructor (this, com.stevesoft.pat.Start, []);
-this.retIsStart = b;
-}, "~B");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-if (this.retIsStart && pt.mFlag && pos > 0 && pt.src.charAt (pos - 1) == '\n') {
-return this.nextMatch (pos, pt);
-}if (pos == 0) {
-return this.nextMatch (pos, pt);
-}return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-if (this.retIsStart) {
-return "^" + this.nextString ();
-} else {
-return "\\A" + this.nextString ();
-}});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (0);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.Start (this.retIsStart);
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.Start", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.retIsStart = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Start", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (b) {
+Clazz.superConstructor (this, com.stevesoft.pat.Start, []);
+this.retIsStart = b;
+}, "~B");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+if (this.retIsStart && pt.mFlag && pos > 0 && pt.src.charAt (pos - 1) == '\n') {
+return this.nextMatch (pos, pt);
+}if (pos == 0) {
+return this.nextMatch (pos, pt);
+}return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+if (this.retIsStart) {
+return "^" + this.nextString ();
+} else {
+return "\\A" + this.nextString ();
+}});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (0);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.Start (this.retIsStart);
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/StrPos.class b/bin/com/stevesoft/pat/StrPos.class
index 249075c..cc761f6 100644
Binary files a/bin/com/stevesoft/pat/StrPos.class and b/bin/com/stevesoft/pat/StrPos.class differ
diff --git a/bin/com/stevesoft/pat/StrPos.js b/bin/com/stevesoft/pat/StrPos.js
index fb1baf4..366f46b 100644
--- a/bin/com/stevesoft/pat/StrPos.js
+++ b/bin/com/stevesoft/pat/StrPos.js
@@ -1,109 +1,109 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.StrPos", ["com.stevesoft.pat.patInf", "$.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.s = null;
-this.$pos = 0;
-this.esc = '\\';
-this.c = '\0';
-this.dontMatch = false;
-this.$eos = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "StrPos");
-Clazz.defineMethod (c$, "pos",
-function () {
-return this.$pos;
-});
-Clazz.defineMethod (c$, "thisChar",
-function () {
-return this.c;
-});
-Clazz.defineMethod (c$, "eos",
-function () {
-return this.$eos;
-});
-Clazz.makeConstructor (c$,
-function (sp) {
-this.dup (sp);
-}, "com.stevesoft.pat.StrPos");
-Clazz.defineMethod (c$, "dup",
-function (sp) {
-this.s = sp.s;
-this.$pos = sp.$pos;
-this.c = sp.c;
-this.dontMatch = sp.dontMatch;
-this.$eos = sp.$eos;
-}, "com.stevesoft.pat.StrPos");
-Clazz.makeConstructor (c$,
-function (s, pos) {
-this.s = s;
-this.$pos = pos - 1;
-this.inc ();
-}, "~S,~N");
-Clazz.defineMethod (c$, "inc",
-function () {
-this.$pos++;
-if (this.$pos >= this.s.length) {
-this.$eos = true;
-return this;
-}this.$eos = false;
-this.c = this.s.charAt (this.$pos);
-if (this.c == this.esc && this.$pos + 1 < this.s.length) {
-this.$pos++;
-this.c = this.s.charAt (this.$pos);
-if (this.c != this.esc) {
-this.dontMatch = true;
-} else {
-this.dontMatch = false;
-}} else {
-this.dontMatch = false;
-}return this;
-});
-Clazz.defineMethod (c$, "match",
-function (ch) {
-if (this.dontMatch || this.$eos) {
-return false;
-}return this.c == ch;
-}, "~S");
-Clazz.defineMethod (c$, "escMatch",
-function (ch) {
-if (!this.dontMatch || this.$eos) {
-return false;
-}return this.c == ch;
-}, "~S");
-Clazz.defineMethod (c$, "escaped",
-function () {
-return this.dontMatch;
-});
-Clazz.defineMethod (c$, "incMatch",
-function (st) {
-var sp = new com.stevesoft.pat.StrPos (this);
-var i;
-for (i = 0; i < st.length; i++) {
-if (!sp.match (st.charAt (i))) {
-return false;
-}sp.inc ();
-}
-this.dup (sp);
-return true;
-}, "~S");
-Clazz.defineMethod (c$, "getPatInt",
-function () {
-if (this.incMatch ("inf")) {
-return new com.stevesoft.pat.patInf ();
-}var i;
-var cnt = 0;
-var sp = new com.stevesoft.pat.StrPos (this);
-for (i = 0; !sp.$eos && sp.c >= '0' && sp.c <= '9'; i++) {
-cnt = 10 * cnt + sp.c.charCodeAt (0) - 48;
-sp.inc ();
-}
-if (i == 0) {
-return null;
-}this.dup (sp);
-return new com.stevesoft.pat.patInt (cnt);
-});
-Clazz.defineMethod (c$, "getString",
-function () {
-return this.s;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.StrPos", ["com.stevesoft.pat.patInf", "$.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.s = null;
+this.$pos = 0;
+this.esc = '\\';
+this.c = '\0';
+this.dontMatch = false;
+this.$eos = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "StrPos");
+Clazz.defineMethod (c$, "pos",
+function () {
+return this.$pos;
+});
+Clazz.defineMethod (c$, "thisChar",
+function () {
+return this.c;
+});
+Clazz.defineMethod (c$, "eos",
+function () {
+return this.$eos;
+});
+Clazz.makeConstructor (c$,
+function (sp) {
+this.dup (sp);
+}, "com.stevesoft.pat.StrPos");
+Clazz.defineMethod (c$, "dup",
+function (sp) {
+this.s = sp.s;
+this.$pos = sp.$pos;
+this.c = sp.c;
+this.dontMatch = sp.dontMatch;
+this.$eos = sp.$eos;
+}, "com.stevesoft.pat.StrPos");
+Clazz.makeConstructor (c$,
+function (s, pos) {
+this.s = s;
+this.$pos = pos - 1;
+this.inc ();
+}, "~S,~N");
+Clazz.defineMethod (c$, "inc",
+function () {
+this.$pos++;
+if (this.$pos >= this.s.length) {
+this.$eos = true;
+return this;
+}this.$eos = false;
+this.c = this.s.charAt (this.$pos);
+if (this.c == this.esc && this.$pos + 1 < this.s.length) {
+this.$pos++;
+this.c = this.s.charAt (this.$pos);
+if (this.c != this.esc) {
+this.dontMatch = true;
+} else {
+this.dontMatch = false;
+}} else {
+this.dontMatch = false;
+}return this;
+});
+Clazz.defineMethod (c$, "match",
+function (ch) {
+if (this.dontMatch || this.$eos) {
+return false;
+}return this.c == ch;
+}, "~S");
+Clazz.defineMethod (c$, "escMatch",
+function (ch) {
+if (!this.dontMatch || this.$eos) {
+return false;
+}return this.c == ch;
+}, "~S");
+Clazz.defineMethod (c$, "escaped",
+function () {
+return this.dontMatch;
+});
+Clazz.defineMethod (c$, "incMatch",
+function (st) {
+var sp = new com.stevesoft.pat.StrPos (this);
+var i;
+for (i = 0; i < st.length; i++) {
+if (!sp.match (st.charAt (i))) {
+return false;
+}sp.inc ();
+}
+this.dup (sp);
+return true;
+}, "~S");
+Clazz.defineMethod (c$, "getPatInt",
+function () {
+if (this.incMatch ("inf")) {
+return new com.stevesoft.pat.patInf ();
+}var i;
+var cnt = 0;
+var sp = new com.stevesoft.pat.StrPos (this);
+for (i = 0; !sp.$eos && sp.c >= '0' && sp.c <= '9'; i++) {
+cnt = 10 * cnt + sp.c.charCodeAt (0) - 48;
+sp.inc ();
+}
+if (i == 0) {
+return null;
+}this.dup (sp);
+return new com.stevesoft.pat.patInt (cnt);
+});
+Clazz.defineMethod (c$, "getString",
+function () {
+return this.s;
+});
+});
diff --git a/bin/com/stevesoft/pat/StringBufferLike.class b/bin/com/stevesoft/pat/StringBufferLike.class
index 6426a06..0bfeef2 100644
Binary files a/bin/com/stevesoft/pat/StringBufferLike.class and b/bin/com/stevesoft/pat/StringBufferLike.class differ
diff --git a/bin/com/stevesoft/pat/StringBufferLike.js b/bin/com/stevesoft/pat/StringBufferLike.js
index 2455329..fd5b6c3 100644
--- a/bin/com/stevesoft/pat/StringBufferLike.js
+++ b/bin/com/stevesoft/pat/StringBufferLike.js
@@ -1,62 +1,62 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.BasicStringBufferLike"], "com.stevesoft.pat.StringBufferLike", ["com.stevesoft.pat.CaseMgr"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sbl = null;
-this.mode = 'E';
-this.altMode = ' ';
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "StringBufferLike", null, com.stevesoft.pat.BasicStringBufferLike);
-Clazz.makeConstructor (c$,
-function (sbl) {
-this.sbl = sbl;
-}, "com.stevesoft.pat.BasicStringBufferLike");
-Clazz.defineMethod (c$, "toStringLike",
-function () {
-return this.sbl.toStringLike ();
-});
-Clazz.defineMethod (c$, "toString",
-function () {
-return this.sbl.toString ();
-});
-Clazz.defineMethod (c$, "appendC",
-function (c) {
-switch (this.mode) {
-case 'u':
-this.mode = this.altMode;
-this.altMode = ' ';
-case 'U':
-this.sbl.appendC (com.stevesoft.pat.CaseMgr.toUpperCaseC (c));
-break;
-case 'l':
-this.mode = this.altMode;
-this.altMode = ' ';
-case 'L':
-this.sbl.appendC (com.stevesoft.pat.CaseMgr.toLowerCaseC (c));
-break;
-case 'Q':
-if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
-;} else {
-this.sbl.appendC ('\\');
-}default:
-this.sbl.appendC (c);
-break;
-}
-}, "~S");
-Clazz.overrideMethod (c$, "append",
-function (s) {
-for (var i = 0; i < s.length; i++) {
-this.appendC (s.charAt (i));
-}
-}, "~S");
-Clazz.defineMethod (c$, "setMode",
-function (c) {
-if (c == 'u' || c == 'l') {
-if (this.altMode == ' ') {
-this.altMode = this.mode;
-}}this.mode = c;
-}, "~S");
-Clazz.defineMethod (c$, "unwrap",
-function () {
-return this.sbl.unwrap ();
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.BasicStringBufferLike"], "com.stevesoft.pat.StringBufferLike", ["com.stevesoft.pat.CaseMgr"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sbl = null;
+this.mode = 'E';
+this.altMode = ' ';
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "StringBufferLike", null, com.stevesoft.pat.BasicStringBufferLike);
+Clazz.makeConstructor (c$,
+function (sbl) {
+this.sbl = sbl;
+}, "com.stevesoft.pat.BasicStringBufferLike");
+Clazz.defineMethod (c$, "toStringLike",
+function () {
+return this.sbl.toStringLike ();
+});
+Clazz.defineMethod (c$, "toString",
+function () {
+return this.sbl.toString ();
+});
+Clazz.defineMethod (c$, "appendC",
+function (c) {
+switch (this.mode) {
+case 'u':
+this.mode = this.altMode;
+this.altMode = ' ';
+case 'U':
+this.sbl.appendC (com.stevesoft.pat.CaseMgr.toUpperCaseC (c));
+break;
+case 'l':
+this.mode = this.altMode;
+this.altMode = ' ';
+case 'L':
+this.sbl.appendC (com.stevesoft.pat.CaseMgr.toLowerCaseC (c));
+break;
+case 'Q':
+if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
+;} else {
+this.sbl.appendC ('\\');
+}default:
+this.sbl.appendC (c);
+break;
+}
+}, "~S");
+Clazz.overrideMethod (c$, "append",
+function (s) {
+for (var i = 0; i < s.length; i++) {
+this.appendC (s.charAt (i));
+}
+}, "~S");
+Clazz.defineMethod (c$, "setMode",
+function (c) {
+if (c == 'u' || c == 'l') {
+if (this.altMode == ' ') {
+this.altMode = this.mode;
+}}this.mode = c;
+}, "~S");
+Clazz.defineMethod (c$, "unwrap",
+function () {
+return this.sbl.unwrap ();
+});
+});
diff --git a/bin/com/stevesoft/pat/StringLike.js b/bin/com/stevesoft/pat/StringLike.js
index c677532..12b2dc9 100644
--- a/bin/com/stevesoft/pat/StringLike.js
+++ b/bin/com/stevesoft/pat/StringLike.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.declareInterface (com.stevesoft.pat, "StringLike");
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.declareInterface (com.stevesoft.pat, "StringLike");
diff --git a/bin/com/stevesoft/pat/StringRule.js b/bin/com/stevesoft/pat/StringRule.js
index aea8a98..1c04a68 100644
--- a/bin/com/stevesoft/pat/StringRule.js
+++ b/bin/com/stevesoft/pat/StringRule.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.StringRule", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.s = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "StringRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function (s) {
-Clazz.superConstructor (this, com.stevesoft.pat.StringRule, []);
-this.s = s;
-}, "~S");
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-sb.append (this.s);
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return this.s;
-});
-Clazz.overrideMethod (c$, "clone1",
-function () {
-return new com.stevesoft.pat.StringRule (this.s);
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule"], "com.stevesoft.pat.StringRule", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.s = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "StringRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function (s) {
+Clazz.superConstructor (this, com.stevesoft.pat.StringRule, []);
+this.s = s;
+}, "~S");
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+sb.append (this.s);
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return this.s;
+});
+Clazz.overrideMethod (c$, "clone1",
+function () {
+return new com.stevesoft.pat.StringRule (this.s);
+});
+});
diff --git a/bin/com/stevesoft/pat/SubMark.js b/bin/com/stevesoft/pat/SubMark.js
index 0ea6b3a..9e1b5b8 100644
--- a/bin/com/stevesoft/pat/SubMark.js
+++ b/bin/com/stevesoft/pat/SubMark.js
@@ -1,21 +1,21 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.SubMark", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.end_pos = 0;
-this.start_pos = 0;
-this.om = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "SubMark", com.stevesoft.pat.Pattern);
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "";
-});
-Clazz.overrideMethod (c$, "matchInternal",
-function (i, pt) {
-pt.marks[this.om.id + pt.nMarks] = i;
-var ret = this.nextMatch (i, pt);
-if (ret < 0) {
-pt.marks[this.om.id + pt.nMarks] = -1;
-}return ret;
-}, "~N,com.stevesoft.pat.Pthings");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.SubMark", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.end_pos = 0;
+this.start_pos = 0;
+this.om = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "SubMark", com.stevesoft.pat.Pattern);
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "";
+});
+Clazz.overrideMethod (c$, "matchInternal",
+function (i, pt) {
+pt.marks[this.om.id + pt.nMarks] = i;
+var ret = this.nextMatch (i, pt);
+if (ret < 0) {
+pt.marks[this.om.id + pt.nMarks] = -1;
+}return ret;
+}, "~N,com.stevesoft.pat.Pthings");
+});
diff --git a/bin/com/stevesoft/pat/TransPat.js b/bin/com/stevesoft/pat/TransPat.js
index ec296f1..65f32a1 100644
--- a/bin/com/stevesoft/pat/TransPat.js
+++ b/bin/com/stevesoft/pat/TransPat.js
@@ -1,35 +1,35 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.TransPat", ["com.stevesoft.pat.Regex"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ra = null;
-this.ra_len = 0;
-this.pn = -1;
-this.lastMatchedTo = -1;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "TransPat", com.stevesoft.pat.Pattern);
-Clazz.prepareFields (c$, function () {
-this.ra = new Array (10);
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(?#TransPat)";
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.TransPat, []);
-});
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-for (var i = 0; i < this.ra_len; i++) {
-pt.ignoreCase = this.ra[i].ignoreCase;
-pt.mFlag = this.ra[i].mFlag;
-pt.dotDoesntMatchCR = com.stevesoft.pat.Regex.dotDoesntMatchCR;
-var r = this.ra[i].thePattern.matchInternal (pos, pt);
-if (r >= 0) {
-this.pn = i;
-return r;
-}}
-this.pn = -1;
-return -1;
-}, "~N,com.stevesoft.pat.Pthings");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.TransPat", ["com.stevesoft.pat.Regex"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ra = null;
+this.ra_len = 0;
+this.pn = -1;
+this.lastMatchedTo = -1;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "TransPat", com.stevesoft.pat.Pattern);
+Clazz.prepareFields (c$, function () {
+this.ra = new Array (10);
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(?#TransPat)";
+});
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.TransPat, []);
+});
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+for (var i = 0; i < this.ra_len; i++) {
+pt.ignoreCase = this.ra[i].ignoreCase;
+pt.mFlag = this.ra[i].mFlag;
+pt.dotDoesntMatchCR = com.stevesoft.pat.Regex.dotDoesntMatchCR;
+var r = this.ra[i].thePattern.matchInternal (pos, pt);
+if (r >= 0) {
+this.pn = i;
+return r;
+}}
+this.pn = -1;
+return -1;
+}, "~N,com.stevesoft.pat.Pthings");
+});
diff --git a/bin/com/stevesoft/pat/Transformer.js b/bin/com/stevesoft/pat/Transformer.js
index 3d169f9..25ef39f 100644
--- a/bin/com/stevesoft/pat/Transformer.js
+++ b/bin/com/stevesoft/pat/Transformer.js
@@ -1,130 +1,130 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.ReplaceRule", "$.Replacer"], ["com.stevesoft.pat.Transformer", "$.TransRepRule"], ["com.stevesoft.pat.MessageManager", "$.Regex", "$.TransPat", "com.stevesoft.pat.wrap.StringWrap", "java.lang.ArrayIndexOutOfBoundsException", "$.NullPointerException"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.t = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "TransRepRule", com.stevesoft.pat.ReplaceRule);
-Clazz.makeConstructor (c$,
-function (t) {
-Clazz.superConstructor (this, com.stevesoft.pat.TransRepRule, []);
-this.t = t;
-}, "com.stevesoft.pat.Transformer");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "";
-});
-Clazz.overrideMethod (c$, "clone1",
-function () {
-return new com.stevesoft.pat.TransRepRule (this.t);
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, rr) {
-this.next = this.t.tp.ra[this.t.tp.pn].getReplaceRule ();
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-c$ = Clazz.decorateAsClass (function () {
-this.tp = null;
-this.rp = null;
-this.auto_optimize = false;
-this.repr = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Transformer");
-Clazz.prepareFields (c$, function () {
-this.repr = new com.stevesoft.pat.Replacer ();
-});
-Clazz.defineMethod (c$, "getReplacer",
-function () {
-return this.rp.getReplacer ();
-});
-Clazz.makeConstructor (c$,
-function (auto) {
-this.rp = new com.stevesoft.pat.Regex (null, "");
-this.auto_optimize = auto;
-this.tp = new com.stevesoft.pat.TransPat ();
-this.rp.setReplaceRule ( new com.stevesoft.pat.TransRepRule (this));
-this.rp.thePattern = this.tp;
-}, "~B");
-Clazz.defineMethod (c$, "add",
-function (r) {
-if (this.auto_optimize) {
-r.optimize ();
-}this.tp.ra[this.tp.ra_len++] = r;
-if (this.tp.ra.length == this.tp.ra_len) {
-var ra2 = new Array (this.tp.ra_len + 10);
-for (var i = 0; i < this.tp.ra_len; i++) {
-ra2[i] = this.tp.ra[i];
-}
-this.tp.ra = ra2;
-}this.rp.numSubs_ = r.numSubs_ > this.rp.numSubs_ ? r.numSubs_ : this.rp.numSubs_;
-}, "com.stevesoft.pat.Regex");
-Clazz.defineMethod (c$, "patterns",
-function () {
-return this.tp.ra_len;
-});
-Clazz.defineMethod (c$, "getRegexAt",
-function (i) {
-if (i >= this.tp.ra_len) {
-throw new ArrayIndexOutOfBoundsException ("i=" + i + ">=" + this.patterns ());
-}if (i < 0) {
-throw new ArrayIndexOutOfBoundsException ("i=" + i + "< 0");
-}return this.tp.ra[i];
-}, "~N");
-Clazz.defineMethod (c$, "setRegexAt",
-function (rx, i) {
-if (i >= this.tp.ra_len) {
-throw new ArrayIndexOutOfBoundsException ("i=" + i + ">=" + this.patterns ());
-}if (i < 0) {
-throw new ArrayIndexOutOfBoundsException ("i=" + i + "< 0");
-}this.tp.ra[i] = rx;
-}, "com.stevesoft.pat.Regex,~N");
-Clazz.defineMethod (c$, "add",
-function (rs) {
-var r = com.stevesoft.pat.Regex.perlCode (rs);
-if (r == null) {
-throw new NullPointerException (com.stevesoft.pat.MessageManager.formatMessage ("exception.bad_pattern_to_regex_perl_code", Clazz.newArray (-1, [rs])));
-}this.add (r);
-}, "~S");
-Clazz.defineMethod (c$, "add",
-function (array) {
-for (var i = 0; i < array.length; i++) {
-this.add (array[i]);
-}
-}, "~A");
-Clazz.defineMethod (c$, "replaceAll",
-function (s) {
-return this.dorep (s, 0, s.length);
-}, "~S");
-Clazz.defineMethod (c$, "replaceAll",
-function (s) {
-return this.dorep (s, 0, s.length ());
-}, "com.stevesoft.pat.StringLike");
-Clazz.defineMethod (c$, "replaceAllFrom",
-function (s, start) {
-return this.dorep (s, start, s.length);
-}, "~S,~N");
-Clazz.defineMethod (c$, "replaceAllRegion",
-function (s, start, end) {
-return this.dorep (s, start, end);
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "dorep",
-function (s, start, end) {
-var tfmd = this.repr.replaceAllRegion (s, this.rp, start, end);
-this.tp.lastMatchedTo = this.repr.$lastMatchedTo;
-return tfmd;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "dorep",
-function (s, start, end) {
-return this.dorep ( new com.stevesoft.pat.wrap.StringWrap (s), start, end).toString ();
-}, "~S,~N,~N");
-Clazz.defineMethod (c$, "replaceFirst",
-function (s) {
-return this.dorep (s, 0, s.length);
-}, "~S");
-Clazz.defineMethod (c$, "replaceFirstFrom",
-function (s, start) {
-return this.dorep (s, start, s.length);
-}, "~S,~N");
-Clazz.defineMethod (c$, "replaceFirstRegion",
-function (s, start, end) {
-return this.dorep (s, start, end);
-}, "~S,~N,~N");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.ReplaceRule", "$.Replacer"], ["com.stevesoft.pat.Transformer", "$.TransRepRule"], ["com.stevesoft.pat.MessageManager", "$.Regex", "$.TransPat", "com.stevesoft.pat.wrap.StringWrap", "java.lang.ArrayIndexOutOfBoundsException", "$.NullPointerException"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.t = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "TransRepRule", com.stevesoft.pat.ReplaceRule);
+Clazz.makeConstructor (c$,
+function (t) {
+Clazz.superConstructor (this, com.stevesoft.pat.TransRepRule, []);
+this.t = t;
+}, "com.stevesoft.pat.Transformer");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "";
+});
+Clazz.overrideMethod (c$, "clone1",
+function () {
+return new com.stevesoft.pat.TransRepRule (this.t);
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, rr) {
+this.next = this.t.tp.ra[this.t.tp.pn].getReplaceRule ();
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+c$ = Clazz.decorateAsClass (function () {
+this.tp = null;
+this.rp = null;
+this.auto_optimize = false;
+this.repr = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Transformer");
+Clazz.prepareFields (c$, function () {
+this.repr = new com.stevesoft.pat.Replacer ();
+});
+Clazz.defineMethod (c$, "getReplacer",
+function () {
+return this.rp.getReplacer ();
+});
+Clazz.makeConstructor (c$,
+function (auto) {
+this.rp = new com.stevesoft.pat.Regex (null, "");
+this.auto_optimize = auto;
+this.tp = new com.stevesoft.pat.TransPat ();
+this.rp.setReplaceRule ( new com.stevesoft.pat.TransRepRule (this));
+this.rp.thePattern = this.tp;
+}, "~B");
+Clazz.defineMethod (c$, "add",
+function (r) {
+if (this.auto_optimize) {
+r.optimize ();
+}this.tp.ra[this.tp.ra_len++] = r;
+if (this.tp.ra.length == this.tp.ra_len) {
+var ra2 = new Array (this.tp.ra_len + 10);
+for (var i = 0; i < this.tp.ra_len; i++) {
+ra2[i] = this.tp.ra[i];
+}
+this.tp.ra = ra2;
+}this.rp.numSubs_ = r.numSubs_ > this.rp.numSubs_ ? r.numSubs_ : this.rp.numSubs_;
+}, "com.stevesoft.pat.Regex");
+Clazz.defineMethod (c$, "patterns",
+function () {
+return this.tp.ra_len;
+});
+Clazz.defineMethod (c$, "getRegexAt",
+function (i) {
+if (i >= this.tp.ra_len) {
+throw new ArrayIndexOutOfBoundsException ("i=" + i + ">=" + this.patterns ());
+}if (i < 0) {
+throw new ArrayIndexOutOfBoundsException ("i=" + i + "< 0");
+}return this.tp.ra[i];
+}, "~N");
+Clazz.defineMethod (c$, "setRegexAt",
+function (rx, i) {
+if (i >= this.tp.ra_len) {
+throw new ArrayIndexOutOfBoundsException ("i=" + i + ">=" + this.patterns ());
+}if (i < 0) {
+throw new ArrayIndexOutOfBoundsException ("i=" + i + "< 0");
+}this.tp.ra[i] = rx;
+}, "com.stevesoft.pat.Regex,~N");
+Clazz.defineMethod (c$, "add",
+function (rs) {
+var r = com.stevesoft.pat.Regex.perlCode (rs);
+if (r == null) {
+throw new NullPointerException (com.stevesoft.pat.MessageManager.formatMessage ("exception.bad_pattern_to_regex_perl_code", Clazz.newArray (-1, [rs])));
+}this.add (r);
+}, "~S");
+Clazz.defineMethod (c$, "add",
+function (array) {
+for (var i = 0; i < array.length; i++) {
+this.add (array[i]);
+}
+}, "~A");
+Clazz.defineMethod (c$, "replaceAll",
+function (s) {
+return this.dorep (s, 0, s.length);
+}, "~S");
+Clazz.defineMethod (c$, "replaceAll",
+function (s) {
+return this.dorep (s, 0, s.length ());
+}, "com.stevesoft.pat.StringLike");
+Clazz.defineMethod (c$, "replaceAllFrom",
+function (s, start) {
+return this.dorep (s, start, s.length);
+}, "~S,~N");
+Clazz.defineMethod (c$, "replaceAllRegion",
+function (s, start, end) {
+return this.dorep (s, start, end);
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "dorep",
+function (s, start, end) {
+var tfmd = this.repr.replaceAllRegion (s, this.rp, start, end);
+this.tp.lastMatchedTo = this.repr.$lastMatchedTo;
+return tfmd;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "dorep",
+function (s, start, end) {
+return this.dorep ( new com.stevesoft.pat.wrap.StringWrap (s), start, end).toString ();
+}, "~S,~N,~N");
+Clazz.defineMethod (c$, "replaceFirst",
+function (s) {
+return this.dorep (s, 0, s.length);
+}, "~S");
+Clazz.defineMethod (c$, "replaceFirstFrom",
+function (s, start) {
+return this.dorep (s, start, s.length);
+}, "~S,~N");
+Clazz.defineMethod (c$, "replaceFirstRegion",
+function (s, start, end) {
+return this.dorep (s, start, end);
+}, "~S,~N,~N");
+});
diff --git a/bin/com/stevesoft/pat/UniValidator.js b/bin/com/stevesoft/pat/UniValidator.js
index e1731a4..18aa516 100644
--- a/bin/com/stevesoft/pat/UniValidator.js
+++ b/bin/com/stevesoft/pat/UniValidator.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Validator"], "com.stevesoft.pat.UniValidator", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "UniValidator", com.stevesoft.pat.Validator);
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Validator"], "com.stevesoft.pat.UniValidator", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "UniValidator", com.stevesoft.pat.Validator);
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+});
diff --git a/bin/com/stevesoft/pat/Util.js b/bin/com/stevesoft/pat/Util.js
index 6573d7b..3058320 100644
--- a/bin/com/stevesoft/pat/Util.js
+++ b/bin/com/stevesoft/pat/Util.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-c$ = Clazz.declareType (com.stevesoft.pat, "Util");
+Clazz.declarePackage ("com.stevesoft.pat");
+c$ = Clazz.declareType (com.stevesoft.pat, "Util");
diff --git a/bin/com/stevesoft/pat/Validator.js b/bin/com/stevesoft/pat/Validator.js
index c929431..e364969 100644
--- a/bin/com/stevesoft/pat/Validator.js
+++ b/bin/com/stevesoft/pat/Validator.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.Validator", ["com.stevesoft.pat.patInf", "$.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.argsave = null;
-this.pattern = ".";
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "Validator");
-Clazz.defineMethod (c$, "validate",
-function (src, start, end) {
-return end;
-}, "com.stevesoft.pat.StringLike,~N,~N");
-Clazz.defineMethod (c$, "arg",
-function (s) {
-return null;
-}, "~S");
-Clazz.defineMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (0);
-});
-Clazz.defineMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInf ();
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.Validator", ["com.stevesoft.pat.patInf", "$.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.argsave = null;
+this.pattern = ".";
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "Validator");
+Clazz.defineMethod (c$, "validate",
+function (src, start, end) {
+return end;
+}, "com.stevesoft.pat.StringLike,~N,~N");
+Clazz.defineMethod (c$, "arg",
+function (s) {
+return null;
+}, "~S");
+Clazz.defineMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (0);
+});
+Clazz.defineMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInf ();
+});
+});
diff --git a/bin/com/stevesoft/pat/WantMoreTextReplaceRule.js b/bin/com/stevesoft/pat/WantMoreTextReplaceRule.js
index e305e86..b572563 100644
--- a/bin/com/stevesoft/pat/WantMoreTextReplaceRule.js
+++ b/bin/com/stevesoft/pat/WantMoreTextReplaceRule.js
@@ -1,15 +1,15 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.WantMoreTextReplaceRule", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "WantMoreTextReplaceRule", com.stevesoft.pat.SpecialRule);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.WantMoreTextReplaceRule, []);
-});
-Clazz.overrideMethod (c$, "apply",
-function (sb, res) {
-}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
-Clazz.overrideMethod (c$, "toString1",
-function () {
-return "${WANT_MORE_TEXT}";
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.SpecialRule"], "com.stevesoft.pat.WantMoreTextReplaceRule", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "WantMoreTextReplaceRule", com.stevesoft.pat.SpecialRule);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.WantMoreTextReplaceRule, []);
+});
+Clazz.overrideMethod (c$, "apply",
+function (sb, res) {
+}, "com.stevesoft.pat.StringBufferLike,com.stevesoft.pat.RegRes");
+Clazz.overrideMethod (c$, "toString1",
+function () {
+return "${WANT_MORE_TEXT}";
+});
+});
diff --git a/bin/com/stevesoft/pat/lookAhead.js b/bin/com/stevesoft/pat/lookAhead.js
index 05e888d..6b9fe88 100644
--- a/bin/com/stevesoft/pat/lookAhead.js
+++ b/bin/com/stevesoft/pat/lookAhead.js
@@ -1,62 +1,62 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Or"], "com.stevesoft.pat.lookAhead", ["com.stevesoft.pat.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.reverse = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "lookAhead", com.stevesoft.pat.Or);
-Clazz.makeConstructor (c$,
-function (b) {
-Clazz.superConstructor (this, com.stevesoft.pat.lookAhead, []);
-this.reverse = b;
-}, "~B");
-Clazz.defineMethod (c$, "getNext",
-function () {
-return null;
-});
-Clazz.overrideMethod (c$, "nextMatch",
-function (pos, pt) {
-var p = Clazz.superCall (this, com.stevesoft.pat.lookAhead, "getNext", []);
-if (p != null) {
-return p.matchInternal (pos, pt);
-} else {
-return pos;
-}}, "~N,com.stevesoft.pat.Pthings");
-Clazz.defineMethod (c$, "matchInternal",
-function (pos, pt) {
-if (Clazz.superCall (this, com.stevesoft.pat.lookAhead, "matchInternal", [pos, pt]) >= 0) {
-if (this.reverse) {
-return -1;
-} else {
-return this.nextMatch (pos, pt);
-}} else {
-if (this.reverse) {
-return this.nextMatch (pos, pt);
-} else {
-return -1;
-}}}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "leftForm",
-function () {
-if (this.reverse) {
-return "(?!";
-} else {
-return "(?=";
-}});
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (0);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (0);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-var la = new com.stevesoft.pat.lookAhead (this.reverse);
-h.put (this, la);
-h.put (la, la);
-for (var i = 0; i < this.v.size (); i++) {
-la.v.addElement ((this.v.elementAt (i)).clone (h));
-}
-return la;
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Or"], "com.stevesoft.pat.lookAhead", ["com.stevesoft.pat.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.reverse = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "lookAhead", com.stevesoft.pat.Or);
+Clazz.makeConstructor (c$,
+function (b) {
+Clazz.superConstructor (this, com.stevesoft.pat.lookAhead, []);
+this.reverse = b;
+}, "~B");
+Clazz.defineMethod (c$, "getNext",
+function () {
+return null;
+});
+Clazz.overrideMethod (c$, "nextMatch",
+function (pos, pt) {
+var p = Clazz.superCall (this, com.stevesoft.pat.lookAhead, "getNext", []);
+if (p != null) {
+return p.matchInternal (pos, pt);
+} else {
+return pos;
+}}, "~N,com.stevesoft.pat.Pthings");
+Clazz.defineMethod (c$, "matchInternal",
+function (pos, pt) {
+if (Clazz.superCall (this, com.stevesoft.pat.lookAhead, "matchInternal", [pos, pt]) >= 0) {
+if (this.reverse) {
+return -1;
+} else {
+return this.nextMatch (pos, pt);
+}} else {
+if (this.reverse) {
+return this.nextMatch (pos, pt);
+} else {
+return -1;
+}}}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "leftForm",
+function () {
+if (this.reverse) {
+return "(?!";
+} else {
+return "(?=";
+}});
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (0);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (0);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+var la = new com.stevesoft.pat.lookAhead (this.reverse);
+h.put (this, la);
+h.put (la, la);
+for (var i = 0; i < this.v.size (); i++) {
+la.v.addElement ((this.v.elementAt (i)).clone (h));
+}
+return la;
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/oneChar.js b/bin/com/stevesoft/pat/oneChar.js
index 3dac704..1fbc400 100644
--- a/bin/com/stevesoft/pat/oneChar.js
+++ b/bin/com/stevesoft/pat/oneChar.js
@@ -1,55 +1,55 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.oneChar", ["com.stevesoft.pat.CaseMgr", "$.patInt"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.c = '\0';
-this.altc = '\0';
-this.altc2 = '\0';
-this.mask = 0;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "oneChar", com.stevesoft.pat.Pattern);
-Clazz.makeConstructor (c$,
-function (ci) {
-Clazz.superConstructor (this, com.stevesoft.pat.oneChar, []);
-this.c = ci;
-var cu;
-var cl;
-var ct;
-cu = com.stevesoft.pat.CaseMgr.toUpperCaseC (this.c);
-cl = com.stevesoft.pat.CaseMgr.toLowerCaseC (this.c);
-ct = com.stevesoft.pat.CaseMgr.toTitleCaseC (this.c);
-if (this.c == cu) {
-this.altc = cl;
-this.altc2 = ct;
-} else if (this.c == cl) {
-this.altc = cu;
-this.altc2 = ct;
-} else {
-this.altc = cl;
-this.altc2 = cu;
-}this.mask = this.c.charCodeAt (0) & this.altc.charCodeAt (0) & this.altc2.charCodeAt (0);
-}, "~S");
-Clazz.overrideMethod (c$, "matchInternal",
-function (pos, pt) {
-var p;
-var ret = -1;
-if (pos < pt.src.length () && !this.Masked (pos, pt) && ((p = pt.src.charAt (pos)) == this.c || (pt.ignoreCase && (p == this.altc || p == this.altc2)))) {
-ret = this.nextMatch (pos + 1, pt);
-}return ret;
-}, "~N,com.stevesoft.pat.Pthings");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return com.stevesoft.pat.Pattern.protect ("" + this.c, "[]{}(),$,-\"^.", '\\') + this.nextString ();
-});
-Clazz.overrideMethod (c$, "minChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "maxChars",
-function () {
-return new com.stevesoft.pat.patInt (1);
-});
-Clazz.overrideMethod (c$, "clone1",
-function (h) {
-return new com.stevesoft.pat.oneChar (this.c);
-}, "java.util.Hashtable");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.Pattern"], "com.stevesoft.pat.oneChar", ["com.stevesoft.pat.CaseMgr", "$.patInt"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.c = '\0';
+this.altc = '\0';
+this.altc2 = '\0';
+this.mask = 0;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "oneChar", com.stevesoft.pat.Pattern);
+Clazz.makeConstructor (c$,
+function (ci) {
+Clazz.superConstructor (this, com.stevesoft.pat.oneChar, []);
+this.c = ci;
+var cu;
+var cl;
+var ct;
+cu = com.stevesoft.pat.CaseMgr.toUpperCaseC (this.c);
+cl = com.stevesoft.pat.CaseMgr.toLowerCaseC (this.c);
+ct = com.stevesoft.pat.CaseMgr.toTitleCaseC (this.c);
+if (this.c == cu) {
+this.altc = cl;
+this.altc2 = ct;
+} else if (this.c == cl) {
+this.altc = cu;
+this.altc2 = ct;
+} else {
+this.altc = cl;
+this.altc2 = cu;
+}this.mask = this.c.charCodeAt (0) & this.altc.charCodeAt (0) & this.altc2.charCodeAt (0);
+}, "~S");
+Clazz.overrideMethod (c$, "matchInternal",
+function (pos, pt) {
+var p;
+var ret = -1;
+if (pos < pt.src.length () && !this.Masked (pos, pt) && ((p = pt.src.charAt (pos)) == this.c || (pt.ignoreCase && (p == this.altc || p == this.altc2)))) {
+ret = this.nextMatch (pos + 1, pt);
+}return ret;
+}, "~N,com.stevesoft.pat.Pthings");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return com.stevesoft.pat.Pattern.protect ("" + this.c, "[]{}(),$,-\"^.", '\\') + this.nextString ();
+});
+Clazz.overrideMethod (c$, "minChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "maxChars",
+function () {
+return new com.stevesoft.pat.patInt (1);
+});
+Clazz.overrideMethod (c$, "clone1",
+function (h) {
+return new com.stevesoft.pat.oneChar (this.c);
+}, "java.util.Hashtable");
+});
diff --git a/bin/com/stevesoft/pat/package.js b/bin/com/stevesoft/pat/package.js
index c28d225..1c96a94 100644
--- a/bin/com/stevesoft/pat/package.js
+++ b/bin/com/stevesoft/pat/package.js
@@ -1,34 +1,34 @@
-var path = ClazzLoader.getClasspathFor ("com.stevesoft.pat.package");
-path = path.substring (0, path.lastIndexOf ("package.js"));
-ClazzLoader.jarClasspath (path + "Transformer.js", [
-"com.stevesoft.pat.Transformer",
-"$.TransRepRule"]);
-ClazzLoader.jarClasspath (path + "Replacer.js", [
-"com.stevesoft.pat.RegHolder",
-"$.Replacer",
-"$.CodeVal"]);
-ClazzLoader.jarClasspath (path + "Regex.js", [
-"com.stevesoft.pat.UnicodeW",
-"$.UnicodeCurrency",
-"$.UnicodeAlpha",
-"$.UnicodeUpper",
-"$.NUnicodeCurrency",
-"$.NUnicodeW",
-"$.NUnicodeAlpha",
-"$.UnicodeMath",
-"$.UnicodeWhite",
-"$.UnicodeDigit",
-"$.NUnicodeMath",
-"$.Regex",
-"$.NUnicodeDigit",
-"$.NUnicodeWhite",
-"$.NUnicodePunct",
-"$.UnicodePunct",
-"$.UnicodeLower"]);
-ClazzLoader.jarClasspath (path + "RegOpt.js", [
-"com.stevesoft.pat.Branch",
-"$.RegOpt",
-"$.FastChar"]);
-ClazzLoader.jarClasspath (path + "Range.js", [
-"com.stevesoft.pat.BadRangeArgs",
-"$.Range"]);
+var path = ClazzLoader.getClasspathFor ("com.stevesoft.pat.package");
+path = path.substring (0, path.lastIndexOf ("package.js"));
+ClazzLoader.jarClasspath (path + "Range.js", [
+"com.stevesoft.pat.BadRangeArgs",
+"$.Range"]);
+ClazzLoader.jarClasspath (path + "RegOpt.js", [
+"com.stevesoft.pat.Branch",
+"$.RegOpt",
+"$.FastChar"]);
+ClazzLoader.jarClasspath (path + "Regex.js", [
+"com.stevesoft.pat.UnicodeW",
+"$.UnicodeCurrency",
+"$.UnicodeAlpha",
+"$.UnicodeUpper",
+"$.NUnicodeCurrency",
+"$.NUnicodeW",
+"$.NUnicodeAlpha",
+"$.UnicodeMath",
+"$.UnicodeWhite",
+"$.UnicodeDigit",
+"$.NUnicodeMath",
+"$.Regex",
+"$.NUnicodeDigit",
+"$.NUnicodeWhite",
+"$.NUnicodePunct",
+"$.UnicodePunct",
+"$.UnicodeLower"]);
+ClazzLoader.jarClasspath (path + "Replacer.js", [
+"com.stevesoft.pat.RegHolder",
+"$.Replacer",
+"$.CodeVal"]);
+ClazzLoader.jarClasspath (path + "Transformer.js", [
+"com.stevesoft.pat.Transformer",
+"$.TransRepRule"]);
diff --git a/bin/com/stevesoft/pat/parsePerl.class b/bin/com/stevesoft/pat/parsePerl.class
index 09045a1..6c525dc 100644
Binary files a/bin/com/stevesoft/pat/parsePerl.class and b/bin/com/stevesoft/pat/parsePerl.class differ
diff --git a/bin/com/stevesoft/pat/parsePerl.js b/bin/com/stevesoft/pat/parsePerl.js
index 005236e..d34fbd4 100644
--- a/bin/com/stevesoft/pat/parsePerl.js
+++ b/bin/com/stevesoft/pat/parsePerl.js
@@ -1,267 +1,267 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (null, "com.stevesoft.pat.parsePerl", ["com.stevesoft.pat.CaseMgr", "$.Prop", "$.RegSyntaxError", "$.Regex", "$.ReplaceRule", "$.StringRule", "java.lang.StringBuffer"], function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "parsePerl");
-c$.close = Clazz.defineMethod (c$, "close",
-function (c) {
-if (c == '<') {
-return '>';
-}if (c == '[') {
-return ']';
-}if (c == '(') {
-return ')';
-}if (c == '{') {
-return '}';
-}return c;
-}, "~S");
-c$.codify = Clazz.defineMethod (c$, "codify",
-function (s, keepbs) {
-return com.stevesoft.pat.parsePerl.codifyRange (s, 0, s.length, keepbs);
-}, "~S,~B");
-c$.codifyRange = Clazz.defineMethod (c$, "codifyRange",
-function (s, i0, iN, keepbs) {
-var sb = new StringBuffer ();
-var ucmode = false;
-var lcmode = false;
-var litmode = false;
-var uc1 = false;
-var lc1 = false;
-var modified = false;
-for (var i = i0; i < iN; i++) {
-var c = s.charAt (i);
-var mf = true;
-var app = true;
-if (c == '\\') {
-app = false;
-i++;
-if (i < s.length) {
-var c2 = s.charAt (i);
-switch (c2) {
-case 'Q':
-litmode = true;
-break;
-case 'U':
-ucmode = true;
-break;
-case 'L':
-lcmode = true;
-break;
-case 'u':
-uc1 = true;
-break;
-case 'l':
-lc1 = true;
-break;
-case 'E':
-uc1 = lc1 = ucmode = lcmode = litmode = false;
-break;
-default:
-if (keepbs) {
-sb.append ('\\');
-}c = c2;
-if (keepbs) {
-mf = false;
-}app = true;
-break;
-}
-modified = new Boolean (modified | mf).valueOf ();
-}}if (app) {
-if (lc1) {
-c = com.stevesoft.pat.parsePerl.lc (c);
-lc1 = false;
-} else if (uc1) {
-c = com.stevesoft.pat.parsePerl.uc (c);
-uc1 = false;
-} else if (ucmode) {
-c = com.stevesoft.pat.parsePerl.uc (c);
-} else if (lcmode) {
-c = com.stevesoft.pat.parsePerl.lc (c);
-}if (litmode && com.stevesoft.pat.parsePerl.needbs (c)) {
-sb.append ('\\');
-}sb.append (c);
-}}
-return modified ? sb.toString () : s;
-}, "~S,~N,~N,~B");
-c$.uc = Clazz.defineMethod (c$, "uc",
-function (c) {
-return com.stevesoft.pat.CaseMgr.toUpperCaseC (c);
-}, "~S");
-c$.lc = Clazz.defineMethod (c$, "lc",
-function (c) {
-return com.stevesoft.pat.CaseMgr.toLowerCaseC (c);
-}, "~S");
-c$.needbs = Clazz.defineMethod (c$, "needbs",
-function (c) {
-if (c >= 'a' && c <= 'z') {
-return false;
-}if (c >= 'A' && c <= 'Z') {
-return false;
-}if (c >= '0' && c <= '9') {
-return false;
-}if (c == '_') {
-return false;
-}return true;
-}, "~S");
-c$.parse = Clazz.defineMethod (c$, "parse",
-function (s) {
-var igncase = false;
-var optim = false;
-var gFlag = false;
-var sFlag = false;
-var mFlag = false;
-var xFlag = false;
-var s1 = new StringBuffer ();
-var s2 = new StringBuffer ();
-var i = 0;
-var count = 0;
-var mode;
-var delim = '/';
-var cdelim = '/';
-if (s.length >= 3 && s.charAt (0) == 's') {
-mode = 's';
-delim = s.charAt (1);
-cdelim = com.stevesoft.pat.parsePerl.close (delim);
-i = 2;
-} else if (s.length >= 2 && s.charAt (0) == 'm') {
-mode = 'm';
-delim = s.charAt (1);
-cdelim = com.stevesoft.pat.parsePerl.close (delim);
-i = 2;
-} else if (s.length >= 1 && s.charAt (0) == '/') {
-mode = 'm';
-i = 1;
-} else {
-try {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Regex.perlCode should be of the form s/// or m// or //");
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-} else {
-throw rs;
-}
-}
-return null;
-}for (; i < s.length; i++) {
-if (s.charAt (i) == '\\') {
-s1.append ('\\');
-i++;
-} else if (s.charAt (i) == cdelim && count == 0) {
-i++;
-break;
-} else if (s.charAt (i) == delim && cdelim != delim) {
-count++;
-} else if (s.charAt (i) == cdelim && cdelim != delim) {
-count--;
-}s1.append (s.charAt (i));
-}
-if (mode == 's' && cdelim != delim) {
-while (i < s.length && com.stevesoft.pat.Prop.isWhite (s.charAt (i))) {
-i++;
-}
-if (i >= s.length) {
-try {
-com.stevesoft.pat.RegSyntaxError.endItAll ("" + mode + delim + " needs " + cdelim);
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-} else {
-throw rs;
-}
-}
-return null;
-}cdelim = com.stevesoft.pat.parsePerl.close (delim = s.charAt (i));
-i++;
-}count = 0;
-if (mode == 's') {
-for (; i < s.length; i++) {
-if (s.charAt (i) == '\\') {
-s2.append ('\\');
-i++;
-} else if (s.charAt (i) == cdelim && count == 0) {
-i++;
-break;
-} else if (s.charAt (i) == delim && cdelim != delim) {
-count++;
-} else if (s.charAt (i) == cdelim && cdelim != delim) {
-count--;
-}s2.append (s.charAt (i));
-}
-}for (; i < s.length; i++) {
-var c = s.charAt (i);
-switch (c) {
-case 'x':
-xFlag = true;
-break;
-case 'i':
-igncase = true;
-break;
-case 'o':
-optim = true;
-break;
-case 's':
-sFlag = true;
-break;
-case 'm':
-mFlag = true;
-break;
-case 'g':
-gFlag = true;
-break;
-default:
-try {
-com.stevesoft.pat.RegSyntaxError.endItAll ("Illegal flag to pattern: " + c);
-} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-} else {
-throw rs;
-}
-}
-return null;
-}
-}
-var r = new com.stevesoft.pat.Regex (null, "");
-try {
-var pat = s1.toString ();
-var reprul = s2.toString ();
-if (xFlag) {
-pat = com.stevesoft.pat.parsePerl.strip (pat);
-reprul = com.stevesoft.pat.parsePerl.strip (reprul);
-}r.compile (pat);
-r.ignoreCase = new Boolean (r.ignoreCase | igncase).valueOf ();
-r.gFlag = new Boolean (r.gFlag | gFlag).valueOf ();
-r.sFlag = new Boolean (r.sFlag | sFlag).valueOf ();
-r.mFlag = new Boolean (r.mFlag | mFlag).valueOf ();
-if (optim) {
-r.optimize ();
-}if (delim == '\'') {
-r.setReplaceRule ( new com.stevesoft.pat.StringRule (reprul));
-} else {
-r.setReplaceRule (com.stevesoft.pat.ReplaceRule.perlCode (reprul));
-}} catch (rs) {
-if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
-r = null;
-} else {
-throw rs;
-}
-}
-return r;
-}, "~S");
-c$.strip = Clazz.defineMethod (c$, "strip",
-function (s) {
-var sb = new StringBuffer ();
-for (var i = 0; i < s.length; i++) {
-var c = s.charAt (i);
-if (com.stevesoft.pat.Prop.isWhite (c)) {
-;} else if (c == '#') {
-i++;
-while (i < s.length) {
-if (s.charAt (i) == '\n') {
-break;
-}i++;
-}
-} else if (c == '\\') {
-sb.append (c);
-sb.append (s.charAt (++i));
-} else {
-sb.append (c);
-}}
-return sb.toString ();
-}, "~S");
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (null, "com.stevesoft.pat.parsePerl", ["com.stevesoft.pat.CaseMgr", "$.Prop", "$.RegSyntaxError", "$.Regex", "$.ReplaceRule", "$.StringRule", "java.lang.StringBuffer"], function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "parsePerl");
+c$.close = Clazz.defineMethod (c$, "close",
+function (c) {
+if (c == '<') {
+return '>';
+}if (c == '[') {
+return ']';
+}if (c == '(') {
+return ')';
+}if (c == '{') {
+return '}';
+}return c;
+}, "~S");
+c$.codify = Clazz.defineMethod (c$, "codify",
+function (s, keepbs) {
+return com.stevesoft.pat.parsePerl.codifyRange (s, 0, s.length, keepbs);
+}, "~S,~B");
+c$.codifyRange = Clazz.defineMethod (c$, "codifyRange",
+function (s, i0, iN, keepbs) {
+var sb = new StringBuffer ();
+var ucmode = false;
+var lcmode = false;
+var litmode = false;
+var uc1 = false;
+var lc1 = false;
+var modified = false;
+for (var i = i0; i < iN; i++) {
+var c = s.charAt (i);
+var mf = true;
+var app = true;
+if (c == '\\') {
+app = false;
+i++;
+if (i < s.length) {
+var c2 = s.charAt (i);
+switch (c2) {
+case 'Q':
+litmode = true;
+break;
+case 'U':
+ucmode = true;
+break;
+case 'L':
+lcmode = true;
+break;
+case 'u':
+uc1 = true;
+break;
+case 'l':
+lc1 = true;
+break;
+case 'E':
+uc1 = lc1 = ucmode = lcmode = litmode = false;
+break;
+default:
+if (keepbs) {
+sb.append ('\\');
+}c = c2;
+if (keepbs) {
+mf = false;
+}app = true;
+break;
+}
+modified = new Boolean (modified | mf).valueOf ();
+}}if (app) {
+if (lc1) {
+c = com.stevesoft.pat.parsePerl.lc (c);
+lc1 = false;
+} else if (uc1) {
+c = com.stevesoft.pat.parsePerl.uc (c);
+uc1 = false;
+} else if (ucmode) {
+c = com.stevesoft.pat.parsePerl.uc (c);
+} else if (lcmode) {
+c = com.stevesoft.pat.parsePerl.lc (c);
+}if (litmode && com.stevesoft.pat.parsePerl.needbs (c)) {
+sb.append ('\\');
+}sb.append (c);
+}}
+return modified ? sb.toString () : s;
+}, "~S,~N,~N,~B");
+c$.uc = Clazz.defineMethod (c$, "uc",
+function (c) {
+return com.stevesoft.pat.CaseMgr.toUpperCaseC (c);
+}, "~S");
+c$.lc = Clazz.defineMethod (c$, "lc",
+function (c) {
+return com.stevesoft.pat.CaseMgr.toLowerCaseC (c);
+}, "~S");
+c$.needbs = Clazz.defineMethod (c$, "needbs",
+function (c) {
+if (c >= 'a' && c <= 'z') {
+return false;
+}if (c >= 'A' && c <= 'Z') {
+return false;
+}if (c >= '0' && c <= '9') {
+return false;
+}if (c == '_') {
+return false;
+}return true;
+}, "~S");
+c$.parse = Clazz.defineMethod (c$, "parse",
+function (s) {
+var igncase = false;
+var optim = false;
+var gFlag = false;
+var sFlag = false;
+var mFlag = false;
+var xFlag = false;
+var s1 = new StringBuffer ();
+var s2 = new StringBuffer ();
+var i = 0;
+var count = 0;
+var mode;
+var delim = '/';
+var cdelim = '/';
+if (s.length >= 3 && s.charAt (0) == 's') {
+mode = 's';
+delim = s.charAt (1);
+cdelim = com.stevesoft.pat.parsePerl.close (delim);
+i = 2;
+} else if (s.length >= 2 && s.charAt (0) == 'm') {
+mode = 'm';
+delim = s.charAt (1);
+cdelim = com.stevesoft.pat.parsePerl.close (delim);
+i = 2;
+} else if (s.length >= 1 && s.charAt (0) == '/') {
+mode = 'm';
+i = 1;
+} else {
+try {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Regex.perlCode should be of the form s/// or m// or //");
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+} else {
+throw rs;
+}
+}
+return null;
+}for (; i < s.length; i++) {
+if (s.charAt (i) == '\\') {
+s1.append ('\\');
+i++;
+} else if (s.charAt (i) == cdelim && count == 0) {
+i++;
+break;
+} else if (s.charAt (i) == delim && cdelim != delim) {
+count++;
+} else if (s.charAt (i) == cdelim && cdelim != delim) {
+count--;
+}s1.append (s.charAt (i));
+}
+if (mode == 's' && cdelim != delim) {
+while (i < s.length && com.stevesoft.pat.Prop.isWhite (s.charAt (i))) {
+i++;
+}
+if (i >= s.length) {
+try {
+com.stevesoft.pat.RegSyntaxError.endItAll ("" + mode + delim + " needs " + cdelim);
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+} else {
+throw rs;
+}
+}
+return null;
+}cdelim = com.stevesoft.pat.parsePerl.close (delim = s.charAt (i));
+i++;
+}count = 0;
+if (mode == 's') {
+for (; i < s.length; i++) {
+if (s.charAt (i) == '\\') {
+s2.append ('\\');
+i++;
+} else if (s.charAt (i) == cdelim && count == 0) {
+i++;
+break;
+} else if (s.charAt (i) == delim && cdelim != delim) {
+count++;
+} else if (s.charAt (i) == cdelim && cdelim != delim) {
+count--;
+}s2.append (s.charAt (i));
+}
+}for (; i < s.length; i++) {
+var c = s.charAt (i);
+switch (c) {
+case 'x':
+xFlag = true;
+break;
+case 'i':
+igncase = true;
+break;
+case 'o':
+optim = true;
+break;
+case 's':
+sFlag = true;
+break;
+case 'm':
+mFlag = true;
+break;
+case 'g':
+gFlag = true;
+break;
+default:
+try {
+com.stevesoft.pat.RegSyntaxError.endItAll ("Illegal flag to pattern: " + c);
+} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+} else {
+throw rs;
+}
+}
+return null;
+}
+}
+var r = new com.stevesoft.pat.Regex (null, "");
+try {
+var pat = s1.toString ();
+var reprul = s2.toString ();
+if (xFlag) {
+pat = com.stevesoft.pat.parsePerl.strip (pat);
+reprul = com.stevesoft.pat.parsePerl.strip (reprul);
+}r.compile (pat);
+r.ignoreCase = new Boolean (r.ignoreCase | igncase).valueOf ();
+r.gFlag = new Boolean (r.gFlag | gFlag).valueOf ();
+r.sFlag = new Boolean (r.sFlag | sFlag).valueOf ();
+r.mFlag = new Boolean (r.mFlag | mFlag).valueOf ();
+if (optim) {
+r.optimize ();
+}if (delim == '\'') {
+r.setReplaceRule ( new com.stevesoft.pat.StringRule (reprul));
+} else {
+r.setReplaceRule (com.stevesoft.pat.ReplaceRule.perlCode (reprul));
+}} catch (rs) {
+if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
+r = null;
+} else {
+throw rs;
+}
+}
+return r;
+}, "~S");
+c$.strip = Clazz.defineMethod (c$, "strip",
+function (s) {
+var sb = new StringBuffer ();
+for (var i = 0; i < s.length; i++) {
+var c = s.charAt (i);
+if (com.stevesoft.pat.Prop.isWhite (c)) {
+;} else if (c == '#') {
+i++;
+while (i < s.length) {
+if (s.charAt (i) == '\n') {
+break;
+}i++;
+}
+} else if (c == '\\') {
+sb.append (c);
+sb.append (s.charAt (++i));
+} else {
+sb.append (c);
+}}
+return sb.toString ();
+}, "~S");
+});
diff --git a/bin/com/stevesoft/pat/patInf.js b/bin/com/stevesoft/pat/patInf.js
index daf7087..1e11499 100644
--- a/bin/com/stevesoft/pat/patInf.js
+++ b/bin/com/stevesoft/pat/patInf.js
@@ -1,9 +1,9 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-Clazz.load (["com.stevesoft.pat.patInt"], "com.stevesoft.pat.patInf", null, function () {
-c$ = Clazz.declareType (com.stevesoft.pat, "patInf", com.stevesoft.pat.patInt);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, com.stevesoft.pat.patInf, []);
-this.inf = true;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+Clazz.load (["com.stevesoft.pat.patInt"], "com.stevesoft.pat.patInf", null, function () {
+c$ = Clazz.declareType (com.stevesoft.pat, "patInf", com.stevesoft.pat.patInt);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, com.stevesoft.pat.patInf, []);
+this.inf = true;
+});
+});
diff --git a/bin/com/stevesoft/pat/patInt.js b/bin/com/stevesoft/pat/patInt.js
index 2d65e56..b7226f7 100644
--- a/bin/com/stevesoft/pat/patInt.js
+++ b/bin/com/stevesoft/pat/patInt.js
@@ -1,94 +1,94 @@
-Clazz.declarePackage ("com.stevesoft.pat");
-c$ = Clazz.decorateAsClass (function () {
-this.i = 0;
-this.inf = false;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat, "patInt");
-Clazz.makeConstructor (c$,
-function () {
-this.i = 0;
-this.inf = false;
-});
-Clazz.makeConstructor (c$,
-function (init) {
-this.i = init;
-this.inf = false;
-}, "~N");
-Clazz.makeConstructor (c$,
-function (p) {
-this.i = p.i;
-this.inf = p.inf;
-}, "com.stevesoft.pat.patInt");
-Clazz.defineMethod (c$, "setInf",
-function (b) {
-this.inf = b;
-if (b) {
-this.i = 2147483647;
-}}, "~B");
-Clazz.defineMethod (c$, "inc",
-function () {
-if (!this.inf) {
-this.i++;
-}});
-Clazz.defineMethod (c$, "dec",
-function () {
-if (!this.inf) {
-this.i--;
-}});
-Clazz.defineMethod (c$, "lessEq",
-function (j) {
-return !this.inf && (j.inf || this.i <= j.i);
-}, "com.stevesoft.pat.patInt");
-Clazz.defineMethod (c$, "equals",
-function (j) {
-return !j.inf && !this.inf && this.i == j.i;
-}, "com.stevesoft.pat.patInt");
-Clazz.overrideMethod (c$, "toString",
-function () {
-if (this.inf) {
-return "";
-} else {
-return "" + this.i;
-}});
-Clazz.defineMethod (c$, "pluseq",
-function (p) {
-if (this.inf || p.inf) {
-this.setInf (true);
-} else {
-this.i += p.i;
-}return this;
-}, "com.stevesoft.pat.patInt");
-Clazz.defineMethod (c$, "mul",
-function (p) {
-if (this.inf || p.inf) {
-return new com.stevesoft.pat.patInf ();
-}return new com.stevesoft.pat.patInt (this.i * p.i);
-}, "com.stevesoft.pat.patInt");
-Clazz.defineMethod (c$, "mineq",
-function (p) {
-if (p.inf) {
-return this;
-}if (this.inf) {
-this.i = p.i;
-} else if (p.i < this.i) {
-this.i = p.i;
-}this.setInf (false);
-return this;
-}, "com.stevesoft.pat.patInt");
-Clazz.defineMethod (c$, "maxeq",
-function (p) {
-if (this.inf || p.inf) {
-this.setInf (true);
-return this;
-}if (p.i > this.i) {
-this.i = p.i;
-}return this;
-}, "com.stevesoft.pat.patInt");
-Clazz.defineMethod (c$, "finite",
-function () {
-return !this.inf;
-});
-Clazz.defineMethod (c$, "intValue",
-function () {
-return this.inf ? 2147483647 : this.i;
-});
+Clazz.declarePackage ("com.stevesoft.pat");
+c$ = Clazz.decorateAsClass (function () {
+this.i = 0;
+this.inf = false;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat, "patInt");
+Clazz.makeConstructor (c$,
+function () {
+this.i = 0;
+this.inf = false;
+});
+Clazz.makeConstructor (c$,
+function (init) {
+this.i = init;
+this.inf = false;
+}, "~N");
+Clazz.makeConstructor (c$,
+function (p) {
+this.i = p.i;
+this.inf = p.inf;
+}, "com.stevesoft.pat.patInt");
+Clazz.defineMethod (c$, "setInf",
+function (b) {
+this.inf = b;
+if (b) {
+this.i = 2147483647;
+}}, "~B");
+Clazz.defineMethod (c$, "inc",
+function () {
+if (!this.inf) {
+this.i++;
+}});
+Clazz.defineMethod (c$, "dec",
+function () {
+if (!this.inf) {
+this.i--;
+}});
+Clazz.defineMethod (c$, "lessEq",
+function (j) {
+return !this.inf && (j.inf || this.i <= j.i);
+}, "com.stevesoft.pat.patInt");
+Clazz.defineMethod (c$, "equals",
+function (j) {
+return !j.inf && !this.inf && this.i == j.i;
+}, "com.stevesoft.pat.patInt");
+Clazz.overrideMethod (c$, "toString",
+function () {
+if (this.inf) {
+return "";
+} else {
+return "" + this.i;
+}});
+Clazz.defineMethod (c$, "pluseq",
+function (p) {
+if (this.inf || p.inf) {
+this.setInf (true);
+} else {
+this.i += p.i;
+}return this;
+}, "com.stevesoft.pat.patInt");
+Clazz.defineMethod (c$, "mul",
+function (p) {
+if (this.inf || p.inf) {
+return new com.stevesoft.pat.patInf ();
+}return new com.stevesoft.pat.patInt (this.i * p.i);
+}, "com.stevesoft.pat.patInt");
+Clazz.defineMethod (c$, "mineq",
+function (p) {
+if (p.inf) {
+return this;
+}if (this.inf) {
+this.i = p.i;
+} else if (p.i < this.i) {
+this.i = p.i;
+}this.setInf (false);
+return this;
+}, "com.stevesoft.pat.patInt");
+Clazz.defineMethod (c$, "maxeq",
+function (p) {
+if (this.inf || p.inf) {
+this.setInf (true);
+return this;
+}if (p.i > this.i) {
+this.i = p.i;
+}return this;
+}, "com.stevesoft.pat.patInt");
+Clazz.defineMethod (c$, "finite",
+function () {
+return !this.inf;
+});
+Clazz.defineMethod (c$, "intValue",
+function () {
+return this.inf ? 2147483647 : this.i;
+});
diff --git a/bin/com/stevesoft/pat/wrap/CharArrayBufferWrap.js b/bin/com/stevesoft/pat/wrap/CharArrayBufferWrap.js
index cfade25..ce61261 100644
--- a/bin/com/stevesoft/pat/wrap/CharArrayBufferWrap.js
+++ b/bin/com/stevesoft/pat/wrap/CharArrayBufferWrap.js
@@ -1,38 +1,38 @@
-Clazz.declarePackage ("com.stevesoft.pat.wrap");
-Clazz.load (["com.stevesoft.pat.BasicStringBufferLike", "java.lang.StringBuffer"], "com.stevesoft.pat.wrap.CharArrayBufferWrap", ["com.stevesoft.pat.wrap.CharArrayWrap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sb = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat.wrap, "CharArrayBufferWrap", null, com.stevesoft.pat.BasicStringBufferLike);
-Clazz.prepareFields (c$, function () {
-this.sb = new StringBuffer ();
-});
-Clazz.overrideMethod (c$, "appendC",
-function (c) {
-this.sb.append (c);
-}, "~S");
-Clazz.overrideMethod (c$, "append",
-function (s) {
-this.sb.append (s);
-}, "~S");
-Clazz.overrideMethod (c$, "toStringLike",
-function () {
-var ca = Clazz.newCharArray (this.sb.length (), '\0');
-for (var i = 0; i < ca.length; i++) {
-ca[i] = this.sb.charAt (i);
-}
-return new com.stevesoft.pat.wrap.CharArrayWrap (ca);
-});
-Clazz.defineMethod (c$, "length",
-function () {
-return this.sb.length ();
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.sb.toString ();
-});
-Clazz.overrideMethod (c$, "unwrap",
-function () {
-return this.sb;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat.wrap");
+Clazz.load (["com.stevesoft.pat.BasicStringBufferLike", "java.lang.StringBuffer"], "com.stevesoft.pat.wrap.CharArrayBufferWrap", ["com.stevesoft.pat.wrap.CharArrayWrap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sb = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat.wrap, "CharArrayBufferWrap", null, com.stevesoft.pat.BasicStringBufferLike);
+Clazz.prepareFields (c$, function () {
+this.sb = new StringBuffer ();
+});
+Clazz.overrideMethod (c$, "appendC",
+function (c) {
+this.sb.append (c);
+}, "~S");
+Clazz.overrideMethod (c$, "append",
+function (s) {
+this.sb.append (s);
+}, "~S");
+Clazz.overrideMethod (c$, "toStringLike",
+function () {
+var ca = Clazz.newCharArray (this.sb.length (), '\0');
+for (var i = 0; i < ca.length; i++) {
+ca[i] = this.sb.charAt (i);
+}
+return new com.stevesoft.pat.wrap.CharArrayWrap (ca);
+});
+Clazz.defineMethod (c$, "length",
+function () {
+return this.sb.length ();
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.sb.toString ();
+});
+Clazz.overrideMethod (c$, "unwrap",
+function () {
+return this.sb;
+});
+});
diff --git a/bin/com/stevesoft/pat/wrap/CharArrayWrap.js b/bin/com/stevesoft/pat/wrap/CharArrayWrap.js
index 374d1dd..679bede 100644
--- a/bin/com/stevesoft/pat/wrap/CharArrayWrap.js
+++ b/bin/com/stevesoft/pat/wrap/CharArrayWrap.js
@@ -1,51 +1,51 @@
-Clazz.declarePackage ("com.stevesoft.pat.wrap");
-Clazz.load (["com.stevesoft.pat.StringLike"], "com.stevesoft.pat.wrap.CharArrayWrap", ["com.stevesoft.pat.wrap.CharArrayBufferWrap", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ca = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat.wrap, "CharArrayWrap", null, com.stevesoft.pat.StringLike);
-Clazz.defineMethod (c$, "getCharArray",
-function () {
-return this.ca;
-});
-Clazz.makeConstructor (c$,
-function (ca) {
-this.ca = ca;
-}, "~A");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return String.instantialize (this.ca);
-});
-Clazz.overrideMethod (c$, "charAt",
-function (i) {
-return this.ca[i];
-}, "~N");
-Clazz.overrideMethod (c$, "length",
-function () {
-return this.ca.length;
-});
-Clazz.overrideMethod (c$, "substring",
-function (i1, i2) {
-var sb = new StringBuffer ();
-for (var i = i1; i < i2; i++) {
-sb.append (this.ca[i]);
-}
-return sb.toString ();
-}, "~N,~N");
-Clazz.overrideMethod (c$, "unwrap",
-function () {
-return this.ca;
-});
-Clazz.overrideMethod (c$, "newStringBufferLike",
-function () {
-return new com.stevesoft.pat.wrap.CharArrayBufferWrap ();
-});
-Clazz.overrideMethod (c$, "indexOf",
-function (c) {
-for (var i = 0; i < this.ca.length; i++) {
-if (this.ca[i] == c) {
-return i;
-}}
-return -1;
-}, "~S");
-});
+Clazz.declarePackage ("com.stevesoft.pat.wrap");
+Clazz.load (["com.stevesoft.pat.StringLike"], "com.stevesoft.pat.wrap.CharArrayWrap", ["com.stevesoft.pat.wrap.CharArrayBufferWrap", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ca = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat.wrap, "CharArrayWrap", null, com.stevesoft.pat.StringLike);
+Clazz.defineMethod (c$, "getCharArray",
+function () {
+return this.ca;
+});
+Clazz.makeConstructor (c$,
+function (ca) {
+this.ca = ca;
+}, "~A");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return String.instantialize (this.ca);
+});
+Clazz.overrideMethod (c$, "charAt",
+function (i) {
+return this.ca[i];
+}, "~N");
+Clazz.overrideMethod (c$, "length",
+function () {
+return this.ca.length;
+});
+Clazz.overrideMethod (c$, "substring",
+function (i1, i2) {
+var sb = new StringBuffer ();
+for (var i = i1; i < i2; i++) {
+sb.append (this.ca[i]);
+}
+return sb.toString ();
+}, "~N,~N");
+Clazz.overrideMethod (c$, "unwrap",
+function () {
+return this.ca;
+});
+Clazz.overrideMethod (c$, "newStringBufferLike",
+function () {
+return new com.stevesoft.pat.wrap.CharArrayBufferWrap ();
+});
+Clazz.overrideMethod (c$, "indexOf",
+function (c) {
+for (var i = 0; i < this.ca.length; i++) {
+if (this.ca[i] == c) {
+return i;
+}}
+return -1;
+}, "~S");
+});
diff --git a/bin/com/stevesoft/pat/wrap/RandomAccessFileWrap.js b/bin/com/stevesoft/pat/wrap/RandomAccessFileWrap.js
index a2b42c5..3b115fe 100644
--- a/bin/com/stevesoft/pat/wrap/RandomAccessFileWrap.js
+++ b/bin/com/stevesoft/pat/wrap/RandomAccessFileWrap.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("com.stevesoft.pat.wrap");
-c$ = Clazz.declareType (com.stevesoft.pat.wrap, "RandomAccessFileWrap");
+Clazz.declarePackage ("com.stevesoft.pat.wrap");
+c$ = Clazz.declareType (com.stevesoft.pat.wrap, "RandomAccessFileWrap");
diff --git a/bin/com/stevesoft/pat/wrap/StringBufferWrap.js b/bin/com/stevesoft/pat/wrap/StringBufferWrap.js
index 811c548..ea57230 100644
--- a/bin/com/stevesoft/pat/wrap/StringBufferWrap.js
+++ b/bin/com/stevesoft/pat/wrap/StringBufferWrap.js
@@ -1,34 +1,34 @@
-Clazz.declarePackage ("com.stevesoft.pat.wrap");
-Clazz.load (["com.stevesoft.pat.BasicStringBufferLike", "java.lang.StringBuffer"], "com.stevesoft.pat.wrap.StringBufferWrap", ["com.stevesoft.pat.wrap.StringWrap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sb = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat.wrap, "StringBufferWrap", null, com.stevesoft.pat.BasicStringBufferLike);
-Clazz.prepareFields (c$, function () {
-this.sb = new StringBuffer ();
-});
-Clazz.overrideMethod (c$, "appendC",
-function (c) {
-this.sb.append (c);
-}, "~S");
-Clazz.overrideMethod (c$, "append",
-function (s) {
-this.sb.append (s);
-}, "~S");
-Clazz.defineMethod (c$, "length",
-function () {
-return this.sb.length ();
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.sb.toString ();
-});
-Clazz.overrideMethod (c$, "toStringLike",
-function () {
-return new com.stevesoft.pat.wrap.StringWrap (this.sb.toString ());
-});
-Clazz.overrideMethod (c$, "unwrap",
-function () {
-return this.sb;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat.wrap");
+Clazz.load (["com.stevesoft.pat.BasicStringBufferLike", "java.lang.StringBuffer"], "com.stevesoft.pat.wrap.StringBufferWrap", ["com.stevesoft.pat.wrap.StringWrap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sb = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat.wrap, "StringBufferWrap", null, com.stevesoft.pat.BasicStringBufferLike);
+Clazz.prepareFields (c$, function () {
+this.sb = new StringBuffer ();
+});
+Clazz.overrideMethod (c$, "appendC",
+function (c) {
+this.sb.append (c);
+}, "~S");
+Clazz.overrideMethod (c$, "append",
+function (s) {
+this.sb.append (s);
+}, "~S");
+Clazz.defineMethod (c$, "length",
+function () {
+return this.sb.length ();
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.sb.toString ();
+});
+Clazz.overrideMethod (c$, "toStringLike",
+function () {
+return new com.stevesoft.pat.wrap.StringWrap (this.sb.toString ());
+});
+Clazz.overrideMethod (c$, "unwrap",
+function () {
+return this.sb;
+});
+});
diff --git a/bin/com/stevesoft/pat/wrap/StringWrap.js b/bin/com/stevesoft/pat/wrap/StringWrap.js
index d8e9dfe..a468b0d 100644
--- a/bin/com/stevesoft/pat/wrap/StringWrap.js
+++ b/bin/com/stevesoft/pat/wrap/StringWrap.js
@@ -1,39 +1,39 @@
-Clazz.declarePackage ("com.stevesoft.pat.wrap");
-Clazz.load (["com.stevesoft.pat.StringLike"], "com.stevesoft.pat.wrap.StringWrap", ["com.stevesoft.pat.wrap.StringBufferWrap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.s = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat.wrap, "StringWrap", null, com.stevesoft.pat.StringLike);
-Clazz.makeConstructor (c$,
-function (s) {
-this.s = s;
-}, "~S");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.s;
-});
-Clazz.overrideMethod (c$, "charAt",
-function (i) {
-return this.s.charAt (i);
-}, "~N");
-Clazz.overrideMethod (c$, "length",
-function () {
-return this.s.length;
-});
-Clazz.overrideMethod (c$, "substring",
-function (i1, i2) {
-return this.s.substring (i1, i2);
-}, "~N,~N");
-Clazz.overrideMethod (c$, "unwrap",
-function () {
-return this.s;
-});
-Clazz.overrideMethod (c$, "newStringBufferLike",
-function () {
-return new com.stevesoft.pat.wrap.StringBufferWrap ();
-});
-Clazz.overrideMethod (c$, "indexOf",
-function (c) {
-return this.s.indexOf (c);
-}, "~S");
-});
+Clazz.declarePackage ("com.stevesoft.pat.wrap");
+Clazz.load (["com.stevesoft.pat.StringLike"], "com.stevesoft.pat.wrap.StringWrap", ["com.stevesoft.pat.wrap.StringBufferWrap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.s = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat.wrap, "StringWrap", null, com.stevesoft.pat.StringLike);
+Clazz.makeConstructor (c$,
+function (s) {
+this.s = s;
+}, "~S");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.s;
+});
+Clazz.overrideMethod (c$, "charAt",
+function (i) {
+return this.s.charAt (i);
+}, "~N");
+Clazz.overrideMethod (c$, "length",
+function () {
+return this.s.length;
+});
+Clazz.overrideMethod (c$, "substring",
+function (i1, i2) {
+return this.s.substring (i1, i2);
+}, "~N,~N");
+Clazz.overrideMethod (c$, "unwrap",
+function () {
+return this.s;
+});
+Clazz.overrideMethod (c$, "newStringBufferLike",
+function () {
+return new com.stevesoft.pat.wrap.StringBufferWrap ();
+});
+Clazz.overrideMethod (c$, "indexOf",
+function (c) {
+return this.s.indexOf (c);
+}, "~S");
+});
diff --git a/bin/com/stevesoft/pat/wrap/WriterWrap.js b/bin/com/stevesoft/pat/wrap/WriterWrap.js
index 4c80649..9eff73c 100644
--- a/bin/com/stevesoft/pat/wrap/WriterWrap.js
+++ b/bin/com/stevesoft/pat/wrap/WriterWrap.js
@@ -1,41 +1,41 @@
-Clazz.declarePackage ("com.stevesoft.pat.wrap");
-Clazz.load (["com.stevesoft.pat.BasicStringBufferLike"], "com.stevesoft.pat.wrap.WriterWrap", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.w = null;
-Clazz.instantialize (this, arguments);
-}, com.stevesoft.pat.wrap, "WriterWrap", null, com.stevesoft.pat.BasicStringBufferLike);
-Clazz.makeConstructor (c$,
-function (w) {
-this.w = w;
-}, "java.io.Writer");
-Clazz.overrideMethod (c$, "appendC",
-function (c) {
-try {
-this.w.write ((c).charCodeAt (0));
-} catch (ioe) {
-if (Clazz.exceptionOf (ioe, java.io.IOException)) {
-} else {
-throw ioe;
-}
-}
-}, "~S");
-Clazz.overrideMethod (c$, "append",
-function (s) {
-try {
-this.w.write (s);
-} catch (ioe) {
-if (Clazz.exceptionOf (ioe, java.io.IOException)) {
-} else {
-throw ioe;
-}
-}
-}, "~S");
-Clazz.overrideMethod (c$, "toStringLike",
-function () {
-return null;
-});
-Clazz.overrideMethod (c$, "unwrap",
-function () {
-return this.w;
-});
-});
+Clazz.declarePackage ("com.stevesoft.pat.wrap");
+Clazz.load (["com.stevesoft.pat.BasicStringBufferLike"], "com.stevesoft.pat.wrap.WriterWrap", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.w = null;
+Clazz.instantialize (this, arguments);
+}, com.stevesoft.pat.wrap, "WriterWrap", null, com.stevesoft.pat.BasicStringBufferLike);
+Clazz.makeConstructor (c$,
+function (w) {
+this.w = w;
+}, "java.io.Writer");
+Clazz.overrideMethod (c$, "appendC",
+function (c) {
+try {
+this.w.write ((c).charCodeAt (0));
+} catch (ioe) {
+if (Clazz.exceptionOf (ioe, java.io.IOException)) {
+} else {
+throw ioe;
+}
+}
+}, "~S");
+Clazz.overrideMethod (c$, "append",
+function (s) {
+try {
+this.w.write (s);
+} catch (ioe) {
+if (Clazz.exceptionOf (ioe, java.io.IOException)) {
+} else {
+throw ioe;
+}
+}
+}, "~S");
+Clazz.overrideMethod (c$, "toStringLike",
+function () {
+return null;
+});
+Clazz.overrideMethod (c$, "unwrap",
+function () {
+return this.w;
+});
+});
diff --git a/bin/fr/orsay/lri/varna/models/rna/RNA.js b/bin/fr/orsay/lri/varna/models/rna/RNA.js
index 18df75b..c762cf3 100644
--- a/bin/fr/orsay/lri/varna/models/rna/RNA.js
+++ b/bin/fr/orsay/lri/varna/models/rna/RNA.js
@@ -1,10 +1,10 @@
-Clazz.declarePackage ("fr.orsay.lri.varna.models.rna");
-c$ = Clazz.declareType (fr.orsay.lri.varna.models.rna, "RNA");
-Clazz.defineMethod (c$, "getSize",
-function () {
-return 0;
-});
-Clazz.defineMethod (c$, "getStructDBN",
-function (b) {
-return null;
-}, "~B");
+Clazz.declarePackage ("fr.orsay.lri.varna.models.rna");
+c$ = Clazz.declareType (fr.orsay.lri.varna.models.rna, "RNA");
+Clazz.defineMethod (c$, "getSize",
+function () {
+return 0;
+});
+Clazz.defineMethod (c$, "getStructDBN",
+function (b) {
+return null;
+}, "~B");
diff --git a/bin/jalview/analysis/AAFrequency.class b/bin/jalview/analysis/AAFrequency.class
index 4b1e306..89830d7 100644
Binary files a/bin/jalview/analysis/AAFrequency.class and b/bin/jalview/analysis/AAFrequency.class differ
diff --git a/bin/jalview/analysis/AAFrequency.js b/bin/jalview/analysis/AAFrequency.js
index 8e3d4c5..a7a69d1 100644
--- a/bin/jalview/analysis/AAFrequency.js
+++ b/bin/jalview/analysis/AAFrequency.js
@@ -1,308 +1,308 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.AAFrequency", ["jalview.analysis.CodingUtils", "jalview.datamodel.Annotation", "jalview.util.Format", "$.MappingUtils", "$.QuickSort", "java.lang.Float", "$.StringBuilder", "java.util.Arrays", "$.Hashtable"], function () {
-c$ = Clazz.declareType (jalview.analysis, "AAFrequency");
-c$.calculate = Clazz.defineMethod (c$, "calculate",
-function (list, start, end) {
-return jalview.analysis.AAFrequency.calculate (list, start, end, false);
-}, "java.util.List,~N,~N");
-c$.calculate = Clazz.defineMethod (c$, "calculate",
-function (sequences, start, end, profile) {
-var seqs = new Array (sequences.size ());
-var width = 0;
-{
-for (var i = 0; i < sequences.size (); i++) {
-seqs[i] = sequences.get (i);
-if (seqs[i].getLength () > width) {
-width = seqs[i].getLength ();
-}}
-var reply = new Array (width);
-if (end >= width) {
-end = width;
-}jalview.analysis.AAFrequency.calculate (seqs, start, end, reply, profile);
-return reply;
-}}, "java.util.List,~N,~N,~B");
-c$.calculate = Clazz.defineMethod (c$, "calculate",
-function (sequences, start, end, result, profile) {
-var residueHash;
-var maxCount;
-var nongap;
-var i;
-var j;
-var v;
-var jSize = sequences.length;
-var maxResidue;
-var c = '-';
-var percentage;
-var values = Clazz.newIntArray (255, 0);
-var seq;
-for (i = start; i < end; i++) {
-residueHash = new java.util.Hashtable ();
-maxCount = 0;
-maxResidue = "";
-nongap = 0;
-values = Clazz.newIntArray (255, 0);
-for (j = 0; j < jSize; j++) {
-if (sequences[j] == null) {
-System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");
-continue;
-}seq = sequences[j].getSequence ();
-if (seq.length > i) {
-c = seq[i];
-if (c == '.' || c == ' ') {
-c = '-';
-}if (c == '-') {
-values['-'.charCodeAt (0)]++;
-continue;
-} else if ('a' <= c && c <= 'z') {
-c = String.fromCharCode (c.charCodeAt (0) + -32);
-}nongap++;
-values[c.charCodeAt (0)]++;
-} else {
-values['-'.charCodeAt (0)]++;
-}}
-if (jSize == 1) {
-maxResidue = String.valueOf (c);
-maxCount = 1;
-} else {
-for (v = 65; v <= 90; v++) {
-if (values[v] < 1 || values[v] < maxCount) {
-continue;
-}if (values[v] > maxCount) {
-maxResidue = jalview.analysis.AAFrequency.CHARS[v - 65];
-} else if (values[v] == maxCount) {
-maxResidue += jalview.analysis.AAFrequency.CHARS[v - 65];
-}maxCount = values[v];
-}
-}if (maxResidue.length == 0) {
-maxResidue = "-";
-}if (profile) {
-residueHash.put ("P", Clazz.newArray (-1, [values, Clazz.newIntArray (-1, [jSize, nongap])]));
-}residueHash.put ("C", new Integer (maxCount));
-residueHash.put ("R", maxResidue);
-percentage = (maxCount * 100) / jSize;
-residueHash.put ("G", new Float (percentage));
-if (nongap > 0) {
-percentage = (maxCount * 100) / nongap;
-}residueHash.put ("N", new Float (percentage));
-result[i] = residueHash;
-}
-}, "~A,~N,~N,~A,~B");
-c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
-function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {
-jalview.analysis.AAFrequency.completeConsensus (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, null, nseq);
-}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");
-c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
-function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, alphabet, nseq) {
-if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {
-return;
-}var fmt = jalview.analysis.AAFrequency.getPercentageFormat (nseq);
-for (var i = iStart; i < width; i++) {
-var hci;
-if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {
-consensus.annotations[i] = null;
-continue;
-}var fv = hci.get (ignoreGapsInConsensusCalculation ? "N" : "G");
-if (fv == null) {
-consensus.annotations[i] = null;
-continue;
-}var value = fv.floatValue ();
-var maxRes = hci.get ("R").toString ();
-var mouseOver = new StringBuilder (64);
-if (maxRes.length > 1) {
-mouseOver.append ("[").append (maxRes).append ("] ");
-maxRes = "+";
-} else {
-mouseOver.append (hci.get ("R") + " ");
-}var profile = hci.get ("P");
-if (profile != null && includeAllConsSymbols) {
-var sequenceCount = profile[1][0];
-var nonGappedCount = profile[1][1];
-var normalisedBy = ignoreGapsInConsensusCalculation ? nonGappedCount : sequenceCount;
-mouseOver.setLength (0);
-if (alphabet != null) {
-for (var c = 0; c < alphabet.length; c++) {
-var tval = profile[0][alphabet[c].charCodeAt (0)] * 100 / normalisedBy;
-mouseOver.append (((c == 0) ? "" : "; ")).append (alphabet[c]).append (" ").append (((fmt != null) ? fmt.formDouble (tval) : (Clazz.floatToInt (tval)))).append ("%");
-}
-} else {
-var ca = Clazz.newCharArray (profile[0].length, '\0');
-var vl = Clazz.newFloatArray (profile[0].length, 0);
-for (var c = 0; c < ca.length; c++) {
-ca[c] = String.fromCharCode (c);
-vl[c] = profile[0][c];
-}
-jalview.util.QuickSort.sortFloatChar (vl, ca);
-for (var p = 0, c = ca.length - 1; profile[0][ca[c].charCodeAt (0)] > 0; c--) {
-var residue = ca[c];
-if (residue != '-') {
-var tval = profile[0][residue.charCodeAt (0)] * 100 / normalisedBy;
-mouseOver.append ((((p == 0) ? "" : "; "))).append (residue).append (" ").append (((fmt != null) ? fmt.formDouble (tval) : (Clazz.floatToInt (tval)))).append ("%");
-p++;
-}}
-}} else {
-mouseOver.append ((((fmt != null) ? fmt.formDouble (value) : (Clazz.floatToInt (value))))).append ("%");
-}consensus.annotations[i] = new jalview.datamodel.Annotation (maxRes, mouseOver.toString (), ' ', value);
-}
-}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~A,~N");
-c$.getPercentageFormat = Clazz.defineMethod (c$, "getPercentageFormat",
-function (nseq) {
-var scale = 0;
-while (nseq >= 10) {
-scale++;
-nseq /= 10;
-}
-return scale <= 1 ? null : new jalview.util.Format ("%3." + (scale - 1) + "f");
-}, "~N");
-c$.extractProfile = Clazz.defineMethod (c$, "extractProfile",
-function (hconsensus, ignoreGaps) {
-var rtnval = Clazz.newIntArray (64, 0);
-var profile = hconsensus.get ("P");
-if (profile == null) {
-return null;
-}var ca = Clazz.newCharArray (profile[0].length, '\0');
-var vl = Clazz.newFloatArray (profile[0].length, 0);
-for (var c = 0; c < ca.length; c++) {
-ca[c] = String.fromCharCode (c);
-vl[c] = profile[0][c];
-}
-jalview.util.QuickSort.sortFloatChar (vl, ca);
-var nextArrayPos = 2;
-var totalPercentage = 0;
-var distinctValuesCount = 0;
-var divisor = profile[1][ignoreGaps ? 1 : 0];
-for (var c = ca.length - 1; profile[0][ca[c].charCodeAt (0)] > 0; c--) {
-if (ca[c] != '-') {
-rtnval[nextArrayPos++] = (ca[c]).charCodeAt (0);
-var percentage = Clazz.floatToInt (profile[0][ca[c].charCodeAt (0)] * 100 / divisor);
-rtnval[nextArrayPos++] = percentage;
-totalPercentage += percentage;
-distinctValuesCount++;
-}}
-rtnval[0] = distinctValuesCount;
-rtnval[1] = totalPercentage;
-var result = Clazz.newIntArray (rtnval.length + 1, 0);
-result[0] = 0;
-System.arraycopy (rtnval, 0, result, 1, rtnval.length);
-return result;
-}, "java.util.Hashtable,~B");
-c$.extractCdnaProfile = Clazz.defineMethod (c$, "extractCdnaProfile",
-function (hashtable, ignoreGaps) {
-var codonCounts = hashtable.get ("P");
-var sortedCounts = Clazz.newIntArray (codonCounts.length - 2, 0);
-System.arraycopy (codonCounts, 2, sortedCounts, 0, codonCounts.length - 2);
-var result = Clazz.newIntArray (3 + 2 * sortedCounts.length, 0);
-result[0] = 2;
-var codons = Clazz.newCharArray (sortedCounts.length, '\0');
-for (var i = 0; i < codons.length; i++) {
-codons[i] = String.fromCharCode (i);
-}
-jalview.util.QuickSort.sortIntChar (sortedCounts, codons);
-var totalPercentage = 0;
-var distinctValuesCount = 0;
-var j = 3;
-var divisor = ignoreGaps ? codonCounts[1] : codonCounts[0];
-for (var i = codons.length - 1; i >= 0; i--) {
-var codonCount = sortedCounts[i];
-if (codonCount == 0) {
-break;
-}distinctValuesCount++;
-result[j++] = (codons[i]).charCodeAt (0);
-var percentage = Clazz.doubleToInt (codonCount * 100 / divisor);
-result[j++] = percentage;
-totalPercentage += percentage;
-}
-result[2] = totalPercentage;
-result[1] = distinctValuesCount;
-return java.util.Arrays.copyOfRange (result, 0, j);
-}, "java.util.Hashtable,~B");
-c$.calculateCdna = Clazz.defineMethod (c$, "calculateCdna",
-function (alignment, mappings, hconsensus, col0, col1) {
-var gapCharacter = alignment.getGapCharacter ();
-for (var col = col0; col < col1; col++) {
-var columnHash = new java.util.Hashtable ();
-var codonCounts = Clazz.newIntArray (66, 0);
-codonCounts[0] = alignment.getSequences ().size ();
-var ungappedCount = 0;
-for (var seq, $seq = alignment.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-if (seq.getCharAt (col) == gapCharacter) {
-continue;
-}var codon = jalview.util.MappingUtils.findCodonFor (seq, col, mappings);
-var codonEncoded = jalview.analysis.CodingUtils.encodeCodon (codon);
-if (codonEncoded >= 0) {
-codonCounts[codonEncoded + 2]++;
-ungappedCount++;
-}}
-codonCounts[1] = ungappedCount;
-columnHash.put ("P", codonCounts);
-hconsensus[col] = columnHash;
-}
-}, "jalview.datamodel.AlignmentI,java.util.Set,~A,~N,~N");
-c$.completeCdnaConsensus = Clazz.defineMethod (c$, "completeCdnaConsensus",
-function (consensusAnnotation, consensusData, showProfileLogo, nseqs) {
-if (consensusAnnotation == null || consensusAnnotation.annotations == null || consensusAnnotation.annotations.length < consensusData.length) {
-return;
-}consensusAnnotation.scaleColLabel = true;
-for (var col = 0; col < consensusData.length; col++) {
-var hci = consensusData[col];
-if (hci == null) {
-continue;
-}var codonCounts = hci.get ("P");
-var totalCount = 0;
-var codons = Clazz.newCharArray (codonCounts.length - 2, '\0');
-for (var j = 2; j < codonCounts.length; j++) {
-var codonCount = codonCounts[j];
-codons[j - 2] = String.fromCharCode (j - 2);
-totalCount += codonCount;
-}
-var sortedCodonCounts = Clazz.newIntArray (codonCounts.length - 2, 0);
-System.arraycopy (codonCounts, 2, sortedCodonCounts, 0, codonCounts.length - 2);
-jalview.util.QuickSort.sortIntChar (sortedCodonCounts, codons);
-var modalCodonEncoded = (codons[codons.length - 1]).charCodeAt (0);
-var modalCodonCount = sortedCodonCounts[codons.length - 1];
-var modalCodon = String.valueOf (jalview.analysis.CodingUtils.decodeCodon (modalCodonEncoded));
-if (sortedCodonCounts.length > 1 && sortedCodonCounts[codons.length - 2] == modalCodonEncoded) {
-modalCodon = "+";
-}var pid = sortedCodonCounts[sortedCodonCounts.length - 1] * 100 / totalCount;
-var mouseOver = new StringBuilder (32);
-var samePercent = new StringBuilder ();
-var percent = null;
-var lastPercent = null;
-var fmt = jalview.analysis.AAFrequency.getPercentageFormat (nseqs);
-for (var j = codons.length - 1; j >= 0; j--) {
-var codonCount = sortedCodonCounts[j];
-if (codonCount == 0) {
-if (samePercent.length () > 0) {
-mouseOver.append (samePercent).append (": ").append (percent).append ("% ");
-}break;
-}var codonEncoded = (codons[j]).charCodeAt (0);
-var pct = Clazz.doubleToInt (codonCount * 100 / totalCount);
-var codon = String.valueOf (jalview.analysis.CodingUtils.decodeCodon (codonEncoded));
-percent = fmt == null ? Integer.toString (pct) : fmt.formLong (pct);
-if (showProfileLogo || codonCount == modalCodonCount) {
-if (percent.equals (lastPercent) && j > 0) {
-samePercent.append (samePercent.length () == 0 ? "" : ", ");
-samePercent.append (codon);
-} else {
-if (samePercent.length () > 0) {
-mouseOver.append (samePercent).append (": ").append (lastPercent).append ("% ");
-}samePercent.setLength (0);
-samePercent.append (codon);
-}lastPercent = percent;
-}}
-consensusAnnotation.annotations[col] = new jalview.datamodel.Annotation (modalCodon, mouseOver.toString (), ' ', pid);
-}
-}, "jalview.datamodel.AlignmentAnnotation,~A,~B,~N");
-Clazz.defineStatics (c$,
-"TO_UPPER_CASE", -32,
-"MAXCOUNT", "C",
-"MAXRESIDUE", "R",
-"PID_GAPS", "G",
-"PID_NOGAPS", "N",
-"PROFILE", "P",
-"ENCODED_CHARS", "E");
-c$.CHARS = c$.prototype.CHARS = new Array (26);
-{
-for (var c = 'A'; c <= 'Z'; c = String.fromCharCode (c.charCodeAt (0) + 1)) {
-jalview.analysis.AAFrequency.CHARS[c.charCodeAt (0) - 65] = String.valueOf (c);
-}
-}});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.AAFrequency", ["jalview.analysis.CodingUtils", "jalview.datamodel.Annotation", "jalview.util.Format", "$.MappingUtils", "$.QuickSort", "java.lang.Float", "$.StringBuilder", "java.util.Arrays", "$.Hashtable"], function () {
+c$ = Clazz.declareType (jalview.analysis, "AAFrequency");
+c$.calculate = Clazz.defineMethod (c$, "calculate",
+function (list, start, end) {
+return jalview.analysis.AAFrequency.calculate (list, start, end, false);
+}, "java.util.List,~N,~N");
+c$.calculate = Clazz.defineMethod (c$, "calculate",
+function (sequences, start, end, profile) {
+var seqs = new Array (sequences.size ());
+var width = 0;
+{
+for (var i = 0; i < sequences.size (); i++) {
+seqs[i] = sequences.get (i);
+if (seqs[i].getLength () > width) {
+width = seqs[i].getLength ();
+}}
+var reply = new Array (width);
+if (end >= width) {
+end = width;
+}jalview.analysis.AAFrequency.calculate (seqs, start, end, reply, profile);
+return reply;
+}}, "java.util.List,~N,~N,~B");
+c$.calculate = Clazz.defineMethod (c$, "calculate",
+function (sequences, start, end, result, profile) {
+var residueHash;
+var maxCount;
+var nongap;
+var i;
+var j;
+var v;
+var jSize = sequences.length;
+var maxResidue;
+var c = '-';
+var percentage;
+var values = Clazz.newIntArray (255, 0);
+var seq;
+for (i = start; i < end; i++) {
+residueHash = new java.util.Hashtable ();
+maxCount = 0;
+maxResidue = "";
+nongap = 0;
+values = Clazz.newIntArray (255, 0);
+for (j = 0; j < jSize; j++) {
+if (sequences[j] == null) {
+System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");
+continue;
+}seq = sequences[j].getSequence ();
+if (seq.length > i) {
+c = seq[i];
+if (c == '.' || c == ' ') {
+c = '-';
+}if (c == '-') {
+values['-'.charCodeAt (0)]++;
+continue;
+} else if ('a' <= c && c <= 'z') {
+c = String.fromCharCode (c.charCodeAt (0) + -32);
+}nongap++;
+values[c.charCodeAt (0)]++;
+} else {
+values['-'.charCodeAt (0)]++;
+}}
+if (jSize == 1) {
+maxResidue = String.valueOf (c);
+maxCount = 1;
+} else {
+for (v = 65; v <= 90; v++) {
+if (values[v] < 1 || values[v] < maxCount) {
+continue;
+}if (values[v] > maxCount) {
+maxResidue = jalview.analysis.AAFrequency.CHARS[v - 65];
+} else if (values[v] == maxCount) {
+maxResidue += jalview.analysis.AAFrequency.CHARS[v - 65];
+}maxCount = values[v];
+}
+}if (maxResidue.length == 0) {
+maxResidue = "-";
+}if (profile) {
+residueHash.put ("P", Clazz.newArray (-1, [values, Clazz.newIntArray (-1, [jSize, nongap])]));
+}residueHash.put ("C", new Integer (maxCount));
+residueHash.put ("R", maxResidue);
+percentage = (maxCount * 100) / jSize;
+residueHash.put ("G", new Float (percentage));
+if (nongap > 0) {
+percentage = (maxCount * 100) / nongap;
+}residueHash.put ("N", new Float (percentage));
+result[i] = residueHash;
+}
+}, "~A,~N,~N,~A,~B");
+c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
+function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {
+jalview.analysis.AAFrequency.completeConsensus (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, null, nseq);
+}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");
+c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
+function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, alphabet, nseq) {
+if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {
+return;
+}var fmt = jalview.analysis.AAFrequency.getPercentageFormat (nseq);
+for (var i = iStart; i < width; i++) {
+var hci;
+if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {
+consensus.annotations[i] = null;
+continue;
+}var fv = hci.get (ignoreGapsInConsensusCalculation ? "N" : "G");
+if (fv == null) {
+consensus.annotations[i] = null;
+continue;
+}var value = fv.floatValue ();
+var maxRes = hci.get ("R").toString ();
+var mouseOver = new StringBuilder (64);
+if (maxRes.length > 1) {
+mouseOver.append ("[").append (maxRes).append ("] ");
+maxRes = "+";
+} else {
+mouseOver.append (hci.get ("R") + " ");
+}var profile = hci.get ("P");
+if (profile != null && includeAllConsSymbols) {
+var sequenceCount = profile[1][0];
+var nonGappedCount = profile[1][1];
+var normalisedBy = ignoreGapsInConsensusCalculation ? nonGappedCount : sequenceCount;
+mouseOver.setLength (0);
+if (alphabet != null) {
+for (var c = 0; c < alphabet.length; c++) {
+var tval = profile[0][alphabet[c].charCodeAt (0)] * 100 / normalisedBy;
+mouseOver.append (((c == 0) ? "" : "; ")).append (alphabet[c]).append (" ").append (((fmt != null) ? fmt.formDouble (tval) : (Clazz.floatToInt (tval)))).append ("%");
+}
+} else {
+var ca = Clazz.newCharArray (profile[0].length, '\0');
+var vl = Clazz.newFloatArray (profile[0].length, 0);
+for (var c = 0; c < ca.length; c++) {
+ca[c] = String.fromCharCode (c);
+vl[c] = profile[0][c];
+}
+jalview.util.QuickSort.sortFloatChar (vl, ca);
+for (var p = 0, c = ca.length - 1; profile[0][ca[c].charCodeAt (0)] > 0; c--) {
+var residue = ca[c];
+if (residue != '-') {
+var tval = profile[0][residue.charCodeAt (0)] * 100 / normalisedBy;
+mouseOver.append ((((p == 0) ? "" : "; "))).append (residue).append (" ").append (((fmt != null) ? fmt.formDouble (tval) : (Clazz.floatToInt (tval)))).append ("%");
+p++;
+}}
+}} else {
+mouseOver.append ((((fmt != null) ? fmt.formDouble (value) : (Clazz.floatToInt (value))))).append ("%");
+}consensus.annotations[i] = new jalview.datamodel.Annotation (maxRes, mouseOver.toString (), ' ', value);
+}
+}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~A,~N");
+c$.getPercentageFormat = Clazz.defineMethod (c$, "getPercentageFormat",
+function (nseq) {
+var scale = 0;
+while (nseq >= 10) {
+scale++;
+nseq /= 10;
+}
+return scale <= 1 ? null : new jalview.util.Format ("%3." + (scale - 1) + "f");
+}, "~N");
+c$.extractProfile = Clazz.defineMethod (c$, "extractProfile",
+function (hconsensus, ignoreGaps) {
+var rtnval = Clazz.newIntArray (64, 0);
+var profile = hconsensus.get ("P");
+if (profile == null) {
+return null;
+}var ca = Clazz.newCharArray (profile[0].length, '\0');
+var vl = Clazz.newFloatArray (profile[0].length, 0);
+for (var c = 0; c < ca.length; c++) {
+ca[c] = String.fromCharCode (c);
+vl[c] = profile[0][c];
+}
+jalview.util.QuickSort.sortFloatChar (vl, ca);
+var nextArrayPos = 2;
+var totalPercentage = 0;
+var distinctValuesCount = 0;
+var divisor = profile[1][ignoreGaps ? 1 : 0];
+for (var c = ca.length - 1; profile[0][ca[c].charCodeAt (0)] > 0; c--) {
+if (ca[c] != '-') {
+rtnval[nextArrayPos++] = (ca[c]).charCodeAt (0);
+var percentage = Clazz.floatToInt (profile[0][ca[c].charCodeAt (0)] * 100 / divisor);
+rtnval[nextArrayPos++] = percentage;
+totalPercentage += percentage;
+distinctValuesCount++;
+}}
+rtnval[0] = distinctValuesCount;
+rtnval[1] = totalPercentage;
+var result = Clazz.newIntArray (rtnval.length + 1, 0);
+result[0] = 0;
+System.arraycopy (rtnval, 0, result, 1, rtnval.length);
+return result;
+}, "java.util.Hashtable,~B");
+c$.extractCdnaProfile = Clazz.defineMethod (c$, "extractCdnaProfile",
+function (hashtable, ignoreGaps) {
+var codonCounts = hashtable.get ("P");
+var sortedCounts = Clazz.newIntArray (codonCounts.length - 2, 0);
+System.arraycopy (codonCounts, 2, sortedCounts, 0, codonCounts.length - 2);
+var result = Clazz.newIntArray (3 + 2 * sortedCounts.length, 0);
+result[0] = 2;
+var codons = Clazz.newCharArray (sortedCounts.length, '\0');
+for (var i = 0; i < codons.length; i++) {
+codons[i] = String.fromCharCode (i);
+}
+jalview.util.QuickSort.sortIntChar (sortedCounts, codons);
+var totalPercentage = 0;
+var distinctValuesCount = 0;
+var j = 3;
+var divisor = ignoreGaps ? codonCounts[1] : codonCounts[0];
+for (var i = codons.length - 1; i >= 0; i--) {
+var codonCount = sortedCounts[i];
+if (codonCount == 0) {
+break;
+}distinctValuesCount++;
+result[j++] = (codons[i]).charCodeAt (0);
+var percentage = Clazz.doubleToInt (codonCount * 100 / divisor);
+result[j++] = percentage;
+totalPercentage += percentage;
+}
+result[2] = totalPercentage;
+result[1] = distinctValuesCount;
+return java.util.Arrays.copyOfRange (result, 0, j);
+}, "java.util.Hashtable,~B");
+c$.calculateCdna = Clazz.defineMethod (c$, "calculateCdna",
+function (alignment, mappings, hconsensus, col0, col1) {
+var gapCharacter = alignment.getGapCharacter ();
+for (var col = col0; col < col1; col++) {
+var columnHash = new java.util.Hashtable ();
+var codonCounts = Clazz.newIntArray (66, 0);
+codonCounts[0] = alignment.getSequences ().size ();
+var ungappedCount = 0;
+for (var seq, $seq = alignment.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+if (seq.getCharAt (col) == gapCharacter) {
+continue;
+}var codon = jalview.util.MappingUtils.findCodonFor (seq, col, mappings);
+var codonEncoded = jalview.analysis.CodingUtils.encodeCodon (codon);
+if (codonEncoded >= 0) {
+codonCounts[codonEncoded + 2]++;
+ungappedCount++;
+}}
+codonCounts[1] = ungappedCount;
+columnHash.put ("P", codonCounts);
+hconsensus[col] = columnHash;
+}
+}, "jalview.datamodel.AlignmentI,java.util.Set,~A,~N,~N");
+c$.completeCdnaConsensus = Clazz.defineMethod (c$, "completeCdnaConsensus",
+function (consensusAnnotation, consensusData, showProfileLogo, nseqs) {
+if (consensusAnnotation == null || consensusAnnotation.annotations == null || consensusAnnotation.annotations.length < consensusData.length) {
+return;
+}consensusAnnotation.scaleColLabel = true;
+for (var col = 0; col < consensusData.length; col++) {
+var hci = consensusData[col];
+if (hci == null) {
+continue;
+}var codonCounts = hci.get ("P");
+var totalCount = 0;
+var codons = Clazz.newCharArray (codonCounts.length - 2, '\0');
+for (var j = 2; j < codonCounts.length; j++) {
+var codonCount = codonCounts[j];
+codons[j - 2] = String.fromCharCode (j - 2);
+totalCount += codonCount;
+}
+var sortedCodonCounts = Clazz.newIntArray (codonCounts.length - 2, 0);
+System.arraycopy (codonCounts, 2, sortedCodonCounts, 0, codonCounts.length - 2);
+jalview.util.QuickSort.sortIntChar (sortedCodonCounts, codons);
+var modalCodonEncoded = (codons[codons.length - 1]).charCodeAt (0);
+var modalCodonCount = sortedCodonCounts[codons.length - 1];
+var modalCodon = String.valueOf (jalview.analysis.CodingUtils.decodeCodon (modalCodonEncoded));
+if (sortedCodonCounts.length > 1 && sortedCodonCounts[codons.length - 2] == modalCodonEncoded) {
+modalCodon = "+";
+}var pid = sortedCodonCounts[sortedCodonCounts.length - 1] * 100 / totalCount;
+var mouseOver = new StringBuilder (32);
+var samePercent = new StringBuilder ();
+var percent = null;
+var lastPercent = null;
+var fmt = jalview.analysis.AAFrequency.getPercentageFormat (nseqs);
+for (var j = codons.length - 1; j >= 0; j--) {
+var codonCount = sortedCodonCounts[j];
+if (codonCount == 0) {
+if (samePercent.length () > 0) {
+mouseOver.append (samePercent).append (": ").append (percent).append ("% ");
+}break;
+}var codonEncoded = (codons[j]).charCodeAt (0);
+var pct = Clazz.doubleToInt (codonCount * 100 / totalCount);
+var codon = String.valueOf (jalview.analysis.CodingUtils.decodeCodon (codonEncoded));
+percent = fmt == null ? Integer.toString (pct) : fmt.formLong (pct);
+if (showProfileLogo || codonCount == modalCodonCount) {
+if (percent.equals (lastPercent) && j > 0) {
+samePercent.append (samePercent.length () == 0 ? "" : ", ");
+samePercent.append (codon);
+} else {
+if (samePercent.length () > 0) {
+mouseOver.append (samePercent).append (": ").append (lastPercent).append ("% ");
+}samePercent.setLength (0);
+samePercent.append (codon);
+}lastPercent = percent;
+}}
+consensusAnnotation.annotations[col] = new jalview.datamodel.Annotation (modalCodon, mouseOver.toString (), ' ', pid);
+}
+}, "jalview.datamodel.AlignmentAnnotation,~A,~B,~N");
+Clazz.defineStatics (c$,
+"TO_UPPER_CASE", -32,
+"MAXCOUNT", "C",
+"MAXRESIDUE", "R",
+"PID_GAPS", "G",
+"PID_NOGAPS", "N",
+"PROFILE", "P",
+"ENCODED_CHARS", "E");
+c$.CHARS = c$.prototype.CHARS = new Array (26);
+{
+for (var c = 'A'; c <= 'Z'; c = String.fromCharCode (c.charCodeAt (0) + 1)) {
+jalview.analysis.AAFrequency.CHARS[c.charCodeAt (0) - 65] = String.valueOf (c);
+}
+}});
diff --git a/bin/jalview/analysis/AlignSeq.class b/bin/jalview/analysis/AlignSeq.class
index 7d2744f..b5cdebf 100644
Binary files a/bin/jalview/analysis/AlignSeq.class and b/bin/jalview/analysis/AlignSeq.class differ
diff --git a/bin/jalview/analysis/AlignSeq.js b/bin/jalview/analysis/AlignSeq.js
index 38f84c2..31dcb24 100644
--- a/bin/jalview/analysis/AlignSeq.js
+++ b/bin/jalview/analysis/AlignSeq.js
@@ -1,586 +1,586 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (["jalview.schemes.ResidueProperties", "java.lang.StringBuffer"], "jalview.analysis.AlignSeq", ["jalview.datamodel.Mapping", "$.Sequence", "jalview.util.Comparison", "$.Format", "$.MapList", "$.MessageManager", "java.awt.Color", "java.lang.Error", "$.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.StringTokenizer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.score = null;
-this.E = null;
-this.F = null;
-this.traceback = null;
-this.seq1 = null;
-this.seq2 = null;
-this.s1 = null;
-this.s2 = null;
-this.s1str = null;
-this.s2str = null;
-this.maxi = 0;
-this.maxj = 0;
-this.aseq1 = null;
-this.aseq2 = null;
-this.astr1 = "";
-this.astr2 = "";
-this.seq1start = 0;
-this.seq1end = 0;
-this.seq2start = 0;
-this.seq2end = 0;
-this.count = 0;
-this.maxscore = 0;
-this.pid = 0;
-this.prev = 0;
-this.gapOpen = 120;
-this.gapExtend = 20;
-this.lookup = null;
-this.intToStr = null;
-this.defInt = 23;
-this.output = null;
-this.type = null;
-this.charToInt = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "AlignSeq");
-Clazz.prepareFields (c$, function () {
-this.lookup = jalview.schemes.ResidueProperties.getBLOSUM62 ();
-this.intToStr = jalview.analysis.AlignSeq.pep;
-this.output = new StringBuffer ();
-});
-Clazz.makeConstructor (c$,
-function (s1, s2, type) {
-this.SeqInit (s1, s1.getSequenceAsString (), s2, s2.getSequenceAsString (), type);
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S");
-Clazz.makeConstructor (c$,
-function (s1, string1, s2, string2, type) {
-this.SeqInit (s1, string1.toUpperCase (), s2, string2.toUpperCase (), type);
-}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S");
-Clazz.defineMethod (c$, "getMaxScore",
-function () {
-return this.maxscore;
-});
-Clazz.defineMethod (c$, "getSeq2Start",
-function () {
-return this.seq2start;
-});
-Clazz.defineMethod (c$, "getSeq2End",
-function () {
-return this.seq2end;
-});
-Clazz.defineMethod (c$, "getSeq1Start",
-function () {
-return this.seq1start;
-});
-Clazz.defineMethod (c$, "getSeq1End",
-function () {
-return this.seq1end;
-});
-Clazz.defineMethod (c$, "getOutput",
-function () {
-return this.output.toString ();
-});
-Clazz.defineMethod (c$, "getAStr1",
-function () {
-return this.astr1;
-});
-Clazz.defineMethod (c$, "getAStr2",
-function () {
-return this.astr2;
-});
-Clazz.defineMethod (c$, "getASeq1",
-function () {
-return this.aseq1;
-});
-Clazz.defineMethod (c$, "getASeq2",
-function () {
-return this.aseq2;
-});
-Clazz.defineMethod (c$, "getS1",
-function () {
-return this.s1;
-});
-Clazz.defineMethod (c$, "getS2",
-function () {
-return this.s2;
-});
-Clazz.defineMethod (c$, "getAlignedSeq1",
-function () {
-var alSeq1 = new jalview.datamodel.Sequence (this.s1.getName (), this.getAStr1 ());
-alSeq1.setStart (this.s1.getStart () + this.getSeq1Start () - 1);
-alSeq1.setEnd (this.s1.getStart () + this.getSeq1End () - 1);
-alSeq1.setDatasetSequence (this.s1.getDatasetSequence () == null ? this.s1 : this.s1.getDatasetSequence ());
-return alSeq1;
-});
-Clazz.defineMethod (c$, "getAlignedSeq2",
-function () {
-var alSeq2 = new jalview.datamodel.Sequence (this.s2.getName (), this.getAStr2 ());
-alSeq2.setStart (this.s2.getStart () + this.getSeq2Start () - 1);
-alSeq2.setEnd (this.s2.getStart () + this.getSeq2End () - 1);
-alSeq2.setDatasetSequence (this.s2.getDatasetSequence () == null ? this.s2 : this.s2.getDatasetSequence ());
-return alSeq2;
-});
-Clazz.defineMethod (c$, "SeqInit",
-function (s1, string1, s2, string2, type) {
-this.s1 = s1;
-this.s2 = s2;
-this.setDefaultParams (type);
-this.SeqInit (string1, string2);
-}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S");
-Clazz.defineMethod (c$, "SeqInit",
-function (s1, string1, s2, string2, scoreMatrix) {
-this.s1 = s1;
-this.s2 = s2;
-this.setType (scoreMatrix.isDNA () ? "dna" : "pep");
-this.lookup = scoreMatrix.getMatrix ();
-}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,jalview.schemes.ScoreMatrix");
-Clazz.defineMethod (c$, "SeqInit",
-($fz = function (string1, string2) {
-this.s1str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string1);
-this.s2str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string2);
-if (this.s1str.length == 0 || this.s2str.length == 0) {
-this.output.append ("ALL GAPS: " + (this.s1str.length == 0 ? this.s1.getName () : " ") + (this.s2str.length == 0 ? this.s2.getName () : ""));
-return;
-}this.seq1 = Clazz.newIntArray (this.s1str.length, 0);
-this.seq2 = Clazz.newIntArray (this.s2str.length, 0);
-this.score = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
-this.E = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
-this.F = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
-this.traceback = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
-this.seq1 = this.stringToInt (this.s1str, this.type);
-this.seq2 = this.stringToInt (this.s2str, this.type);
-}, $fz.isPrivate = true, $fz), "~S,~S");
-Clazz.defineMethod (c$, "setDefaultParams",
-($fz = function (type) {
-this.setType (type);
-if (type.equals ("pep")) {
-this.lookup = jalview.schemes.ResidueProperties.getDefaultPeptideMatrix ();
-} else if (type.equals ("dna")) {
-this.lookup = jalview.schemes.ResidueProperties.getDefaultDnaMatrix ();
-}}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "setType",
-($fz = function (type2) {
-this.type = type2;
-if (this.type.equals ("pep")) {
-this.intToStr = jalview.analysis.AlignSeq.pep;
-this.charToInt = jalview.schemes.ResidueProperties.aaIndex;
-this.defInt = 23;
-} else if (this.type.equals ("dna")) {
-this.intToStr = jalview.analysis.AlignSeq.dna;
-this.charToInt = jalview.schemes.ResidueProperties.nucleotideIndex;
-this.defInt = 10;
-} else {
-this.output.append ("Wrong type = dna or pep only");
-throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_type_dna_or_pep", Clazz.newArray (-1, [type2])));
-}}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "traceAlignment",
-function () {
-var max = -9999;
-for (var i = 0; i < this.seq1.length; i++) {
-if (this.score[i][this.seq2.length - 1] > max) {
-max = this.score[i][this.seq2.length - 1];
-this.maxi = i;
-this.maxj = this.seq2.length - 1;
-}}
-for (var j = 0; j < this.seq2.length; j++) {
-if (this.score[this.seq1.length - 1][j] > max) {
-max = this.score[this.seq1.length - 1][j];
-this.maxi = this.seq1.length - 1;
-this.maxj = j;
-}}
-var i = this.maxi;
-var j = this.maxj;
-var trace;
-this.maxscore = Clazz.doubleToInt (this.score[i][j] / 10);
-this.seq1end = this.maxi + 1;
-this.seq2end = this.maxj + 1;
-this.aseq1 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0);
-this.aseq2 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0);
-this.count = (this.seq1.length + this.seq2.length) - 1;
-while ((i > 0) && (j > 0)) {
-if ((this.aseq1[this.count] != this.defInt) && (i >= 0)) {
-this.aseq1[this.count] = this.seq1[i];
-this.astr1 = this.s1str.charAt (i) + this.astr1;
-}if ((this.aseq2[this.count] != this.defInt) && (j > 0)) {
-this.aseq2[this.count] = this.seq2[j];
-this.astr2 = this.s2str.charAt (j) + this.astr2;
-}trace = this.findTrace (i, j);
-if (trace == 0) {
-i--;
-j--;
-} else if (trace == 1) {
-j--;
-this.aseq1[this.count] = this.defInt;
-this.astr1 = "-" + this.astr1.substring (1);
-} else if (trace == -1) {
-i--;
-this.aseq2[this.count] = this.defInt;
-this.astr2 = "-" + this.astr2.substring (1);
-}this.count--;
-}
-this.seq1start = i + 1;
-this.seq2start = j + 1;
-if (this.aseq1[this.count] != this.defInt) {
-this.aseq1[this.count] = this.seq1[i];
-this.astr1 = this.s1str.charAt (i) + this.astr1;
-}if (this.aseq2[this.count] != this.defInt) {
-this.aseq2[this.count] = this.seq2[j];
-this.astr2 = this.s2str.charAt (j) + this.astr2;
-}});
-Clazz.defineMethod (c$, "printAlignment",
-function (os) {
-var s1id = this.s1.getName ();
-var s2id = this.s2.getName ();
-var maxid = this.s1.getName ().length;
-if (this.s2.getName ().length > maxid) {
-maxid = this.s2.getName ().length;
-}if (maxid > 30) {
-maxid = 30;
-if (this.s1.getName ().length > maxid) {
-s1id = this.s1.getName ().substring (0, 30);
-}if (this.s2.getName ().length > maxid) {
-s2id = this.s2.getName ().substring (0, 30);
-}}var len = 72 - maxid - 1;
-var nochunks = (Clazz.doubleToInt ((this.aseq1.length - this.count) / len)) + 1;
-this.pid = 0;
-this.output.append ("Score = ").append (this.score[this.maxi][this.maxj]).append (jalview.analysis.AlignSeq.NEWLINE);
-this.output.append ("Length of alignment = ").append (String.valueOf (this.aseq1.length - this.count)).append (jalview.analysis.AlignSeq.NEWLINE);
-this.output.append ("Sequence ");
-this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s1.getName ()));
-this.output.append (" : ").append (String.valueOf (this.s1.getStart ())).append (" - ").append (String.valueOf (this.s1.getEnd ()));
-this.output.append (" (Sequence length = ").append (String.valueOf (this.s1str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE);
-this.output.append ("Sequence ");
-this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s2.getName ()));
-this.output.append (" : ").append (String.valueOf (this.s2.getStart ())).append (" - ").append (String.valueOf (this.s2.getEnd ()));
-this.output.append (" (Sequence length = ").append (String.valueOf (this.s2str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE);
-for (var j = 0; j < nochunks; j++) {
-this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s1id)).append (" ");
-for (var i = 0; i < len; i++) {
-if ((i + (j * len)) < this.astr1.length) {
-this.output.append (this.astr1.charAt (i + (j * len)));
-}}
-this.output.append (jalview.analysis.AlignSeq.NEWLINE);
-this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (" ")).append (" ");
-for (var i = 0; i < len; i++) {
-if ((i + (j * len)) < this.astr1.length) {
-if (this.astr1.charAt (i + (j * len)) == this.astr2.charAt (i + (j * len)) && !jalview.util.Comparison.isGap (this.astr1.charAt (i + (j * len)))) {
-this.pid++;
-this.output.append ("|");
-} else if (this.type.equals ("pep")) {
-if (jalview.schemes.ResidueProperties.getPAM250 (this.astr1.charAt (i + (j * len)), this.astr2.charAt (i + (j * len))) > 0) {
-this.output.append (".");
-} else {
-this.output.append (" ");
-}} else {
-this.output.append (" ");
-}}}
-this.output = this.output.append (jalview.analysis.AlignSeq.NEWLINE);
-this.output = this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s2id)).append (" ");
-for (var i = 0; i < len; i++) {
-if ((i + (j * len)) < this.astr2.length) {
-this.output.append (this.astr2.charAt (i + (j * len)));
-}}
-this.output.append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE);
-}
-this.pid = this.pid / (this.aseq1.length - this.count) * 100;
-this.output = this.output.append ( new jalview.util.Format ("Percentage ID = %2.2f\n\n").formDouble (this.pid));
-try {
-os.print (this.output.toString ());
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-}, "java.io.PrintStream");
-Clazz.defineMethod (c$, "printScoreMatrix",
-function (mat) {
-var n = this.seq1.length;
-var m = this.seq2.length;
-for (var i = 0; i < n; i++) {
-if (i == 0) {
-jalview.util.Format.print (System.out, "%8s", this.s2str.substring (0, 1));
-for (var jj = 1; jj < m; jj++) {
-jalview.util.Format.print (System.out, "%5s", this.s2str.substring (jj, jj + 1));
-}
-System.out.println ();
-}for (var j = 0; j < m; j++) {
-if (j == 0) {
-jalview.util.Format.print (System.out, "%3s", this.s1str.substring (i, i + 1));
-}jalview.util.Format.printLong (System.out, "%3d ", Clazz.doubleToInt (mat[i][j] / 10));
-}
-System.out.println ();
-}
-}, "~A");
-Clazz.defineMethod (c$, "findTrace",
-function (i, j) {
-var t = 0;
-var max = this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10);
-if (this.F[i][j] > max) {
-max = this.F[i][j];
-t = -1;
-} else if (this.F[i][j] == max) {
-if (this.prev == -1) {
-max = this.F[i][j];
-t = -1;
-}}if (this.E[i][j] >= max) {
-max = this.E[i][j];
-t = 1;
-} else if (this.E[i][j] == max) {
-if (this.prev == 1) {
-max = this.E[i][j];
-t = 1;
-}}this.prev = t;
-return t;
-}, "~N,~N");
-Clazz.defineMethod (c$, "calcScoreMatrix",
-function () {
-var n = this.seq1.length;
-var m = this.seq2.length;
-this.score[0][0] = this.lookup[this.seq1[0]][this.seq2[0]] * 10;
-this.E[0][0] = -this.gapExtend;
-this.F[0][0] = 0;
-for (var j = 1; j < m; j++) {
-this.E[0][j] = this.max (this.score[0][j - 1] - this.gapOpen, this.E[0][j - 1] - this.gapExtend);
-this.F[0][j] = -this.gapExtend;
-this.score[0][j] = this.max (this.lookup[this.seq1[0]][this.seq2[j]] * 10, -this.gapOpen, -this.gapExtend);
-this.traceback[0][j] = 1;
-}
-for (var i = 1; i < n; i++) {
-this.E[i][0] = -this.gapOpen;
-this.F[i][0] = this.max (this.score[i - 1][0] - this.gapOpen, this.F[i - 1][0] - this.gapExtend);
-this.score[i][0] = this.max (this.lookup[this.seq1[i]][this.seq2[0]] * 10, this.E[i][0], this.F[i][0]);
-this.traceback[i][0] = -1;
-}
-for (var i = 1; i < n; i++) {
-for (var j = 1; j < m; j++) {
-this.E[i][j] = this.max (this.score[i][j - 1] - this.gapOpen, this.E[i][j - 1] - this.gapExtend);
-this.F[i][j] = this.max (this.score[i - 1][j] - this.gapOpen, this.F[i - 1][j] - this.gapExtend);
-this.score[i][j] = this.max (this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10), this.E[i][j], this.F[i][j]);
-this.traceback[i][j] = this.findTrace (i, j);
-}
-}
-});
-c$.extractGaps = Clazz.defineMethod (c$, "extractGaps",
-function (gapChars, seq) {
-if (gapChars == null || seq == null) {
-return null;
-}var str = new java.util.StringTokenizer (seq, gapChars);
-var newString = new StringBuilder (seq.length);
-while (str.hasMoreTokens ()) {
-newString.append (str.nextToken ());
-}
-return newString.toString ();
-}, "~S,~S");
-Clazz.defineMethod (c$, "max",
-function (i1, i2, i3) {
-var max = i1;
-if (i2 > i1) {
-max = i2;
-}if (i3 > max) {
-max = i3;
-}return max;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "max",
-function (i1, i2) {
-var max = i1;
-if (i2 > i1) {
-max = i2;
-}return max;
-}, "~N,~N");
-Clazz.defineMethod (c$, "stringToInt",
-function (s, type) {
-var seq1 = Clazz.newIntArray (s.length, 0);
-for (var i = 0; i < s.length; i++) {
-var c = s.charAt (i);
-if ('a' <= c && c <= 'z') {
-c = String.fromCharCode (c.charCodeAt (0) - (32));
-}try {
-seq1[i] = this.charToInt[c.charCodeAt (0)];
-if (seq1[i] < 0 || seq1[i] > this.defInt) {
-seq1[i] = this.defInt;
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-seq1[i] = this.defInt;
-} else {
-throw e;
-}
-}
-}
-return seq1;
-}, "~S,~S");
-c$.displayMatrix = Clazz.defineMethod (c$, "displayMatrix",
-function (g, mat, n, m, psize) {
-var max = -1000;
-var min = 1000;
-for (var i = 0; i < n; i++) {
-for (var j = 0; j < m; j++) {
-if (mat[i][j] >= max) {
-max = mat[i][j];
-}if (mat[i][j] <= min) {
-min = mat[i][j];
-}}
-}
-System.out.println (max + " " + min);
-for (var i = 0; i < n; i++) {
-for (var j = 0; j < m; j++) {
-var x = psize * i;
-var y = psize * j;
-var score = (mat[i][j] - min) / (max - min);
-g.setColor ( new java.awt.Color (score, 0, 0));
-g.fillRect (x, y, psize, psize);
-}
-}
-}, "java.awt.Graphics,~A,~N,~N,~N");
-c$.doGlobalNWAlignment = Clazz.defineMethod (c$, "doGlobalNWAlignment",
-function (s1, s2, type) {
-var as = new jalview.analysis.AlignSeq (s1, s2, type);
-as.calcScoreMatrix ();
-as.traceAlignment ();
-return as;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S");
-Clazz.defineMethod (c$, "getMappingFromS1",
-function (allowmismatch) {
-var as1 = new java.util.ArrayList ();
-var as2 = new java.util.ArrayList ();
-var pdbpos = this.s2.getStart () + this.getSeq2Start () - 2;
-var alignpos = this.s1.getStart () + this.getSeq1Start () - 2;
-var lp2 = pdbpos - 3;
-var lp1 = alignpos - 3;
-var lastmatch = false;
-for (var i = 0; i < this.astr1.length; i++) {
-var c1 = this.astr1.charAt (i);
-var c2 = this.astr2.charAt (i);
-if (c1 != '-') {
-alignpos++;
-}if (c2 != '-') {
-pdbpos++;
-}if (allowmismatch || c1 == c2) {
-if (lp1 + 1 != alignpos || lp2 + 1 != pdbpos) {
-as1.add (Integer.$valueOf (alignpos));
-as2.add (Integer.$valueOf (pdbpos));
-}lastmatch = true;
-lp1 = alignpos;
-lp2 = pdbpos;
-} else {
-if (lastmatch) {
-as1.add (Integer.$valueOf (lp1));
-as2.add (Integer.$valueOf (lp2));
-}lastmatch = false;
-}}
-var mapseq1 = Clazz.newIntArray (as1.size () + (lastmatch ? 1 : 0), 0);
-var mapseq2 = Clazz.newIntArray (as2.size () + (lastmatch ? 1 : 0), 0);
-var i = 0;
-for (var ip, $ip = as1.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
-mapseq1[i++] = (ip).intValue ();
-}
-;i = 0;
-for (var ip, $ip = as2.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
-mapseq2[i++] = (ip).intValue ();
-}
-;if (lastmatch) {
-mapseq1[mapseq1.length - 1] = alignpos;
-mapseq2[mapseq2.length - 1] = pdbpos;
-}var map = new jalview.util.MapList (mapseq1, mapseq2, 1, 1);
-var mapping = new jalview.datamodel.Mapping (map);
-mapping.setTo (this.s2);
-return mapping;
-}, "~B");
-c$.replaceMatchingSeqsWith = Clazz.defineMethod (c$, "replaceMatchingSeqsWith",
-function (seqs, annotations, ochains, al, dnaOrProtein, removeOldAnnots) {
-var orig = new java.util.ArrayList ();
-var repl = new java.util.ArrayList ();
-var aligs = new java.util.ArrayList ();
-if (al != null && al.getHeight () > 0) {
-var matches = new java.util.ArrayList ();
-var aligns = new java.util.ArrayList ();
-for (var sq, $sq = ochains.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-var bestm = null;
-var bestaseq = null;
-var bestscore = 0;
-for (var msq, $msq = al.getSequences ().iterator (); $msq.hasNext () && ((msq = $msq.next ()) || true);) {
-var aseq = jalview.analysis.AlignSeq.doGlobalNWAlignment (msq, sq, dnaOrProtein);
-if (bestm == null || aseq.getMaxScore () > bestscore) {
-bestscore = aseq.getMaxScore ();
-bestaseq = aseq;
-bestm = msq;
-}}
-System.out.println ("Best Score for " + (matches.size () + 1) + " :" + bestscore);
-matches.add (bestm);
-aligns.add (bestaseq);
-al.deleteSequence (bestm);
-}
-for (var p = 0, pSize = seqs.size (); p < pSize; p++) {
-var sq;
-var sp = seqs.get (p);
-var q;
-if ((q = ochains.indexOf (sp)) > -1) {
-seqs.set (p, sq = matches.get (q));
-orig.add (sp);
-repl.add (sq);
-sq.setName (sp.getName ());
-sq.setDescription (sp.getDescription ());
-var sp2sq;
-sq.transferAnnotation (sp, sp2sq = aligns.get (q).getMappingFromS1 (false));
-aligs.add (aligns.get (q));
-var inspos = -1;
-for (var ap = 0; ap < annotations.size (); ) {
-if (annotations.get (ap).sequenceRef === sp) {
-if (inspos == -1) {
-inspos = ap;
-}if (removeOldAnnots) {
-annotations.remove (ap);
-} else {
-var alan = annotations.remove (ap);
-alan.liftOver (sq, sp2sq);
-alan.setSequenceRef (sq);
-sq.addAlignmentAnnotation (alan);
-}} else {
-ap++;
-}}
-if (sq.getAnnotation () != null && sq.getAnnotation ().length > 0) {
-annotations.addAll (inspos == -1 ? annotations.size () : inspos, java.util.Arrays.asList (sq.getAnnotation ()));
-}}}
-}return java.util.Arrays.asList ([orig, repl, aligs]);
-}, "java.util.List,java.util.List,java.util.List,jalview.datamodel.AlignmentI,~S,~B");
-c$.computeRedundancyMatrix = Clazz.defineMethod (c$, "computeRedundancyMatrix",
-function (originalSequences, omitHidden, start, end, ungapped) {
-var height = originalSequences.length;
-var redundancy = Clazz.newFloatArray (height, 0);
-var lngth = Clazz.newIntArray (height, 0);
-for (var i = 0; i < height; i++) {
-redundancy[i] = 0;
-lngth[i] = -1;
-}
-var pid;
-var seqi;
-var seqj;
-for (var i = 0; i < height; i++) {
-for (var j = 0; j < i; j++) {
-if (i == j) {
-continue;
-}if (omitHidden == null) {
-seqi = originalSequences[i].getSequenceAsString (start, end);
-seqj = originalSequences[j].getSequenceAsString (start, end);
-} else {
-seqi = omitHidden[i];
-seqj = omitHidden[j];
-}if (lngth[i] == -1) {
-var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqi);
-lngth[i] = ug.length;
-if (ungapped) {
-seqi = ug;
-}}if (lngth[j] == -1) {
-var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqj);
-lngth[j] = ug.length;
-if (ungapped) {
-seqj = ug;
-}}pid = jalview.util.Comparison.PID (seqi, seqj);
-if (lngth[j] < lngth[i]) {
-redundancy[j] = Math.max (pid, redundancy[j]);
-} else {
-redundancy[i] = Math.max (pid, redundancy[i]);
-}}
-}
-return redundancy;
-}, "~A,~A,~N,~N,~B");
-Clazz.defineStatics (c$,
-"PEP", "pep",
-"DNA", "dna");
-c$.NEWLINE = c$.prototype.NEWLINE = System.lineSeparator ();
-Clazz.defineStatics (c$,
-"dna", Clazz.newArray (-1, ["A", "C", "G", "T", "-"]),
-"pep", Clazz.newArray (-1, ["A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-"]));
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (["jalview.schemes.ResidueProperties", "java.lang.StringBuffer"], "jalview.analysis.AlignSeq", ["jalview.datamodel.Mapping", "$.Sequence", "jalview.util.Comparison", "$.Format", "$.MapList", "$.MessageManager", "java.awt.Color", "java.lang.Error", "$.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.StringTokenizer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.score = null;
+this.E = null;
+this.F = null;
+this.traceback = null;
+this.seq1 = null;
+this.seq2 = null;
+this.s1 = null;
+this.s2 = null;
+this.s1str = null;
+this.s2str = null;
+this.maxi = 0;
+this.maxj = 0;
+this.aseq1 = null;
+this.aseq2 = null;
+this.astr1 = "";
+this.astr2 = "";
+this.seq1start = 0;
+this.seq1end = 0;
+this.seq2start = 0;
+this.seq2end = 0;
+this.count = 0;
+this.maxscore = 0;
+this.pid = 0;
+this.prev = 0;
+this.gapOpen = 120;
+this.gapExtend = 20;
+this.lookup = null;
+this.intToStr = null;
+this.defInt = 23;
+this.output = null;
+this.type = null;
+this.charToInt = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "AlignSeq");
+Clazz.prepareFields (c$, function () {
+this.lookup = jalview.schemes.ResidueProperties.getBLOSUM62 ();
+this.intToStr = jalview.analysis.AlignSeq.pep;
+this.output = new StringBuffer ();
+});
+Clazz.makeConstructor (c$,
+function (s1, s2, type) {
+this.SeqInit (s1, s1.getSequenceAsString (), s2, s2.getSequenceAsString (), type);
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S");
+Clazz.makeConstructor (c$,
+function (s1, string1, s2, string2, type) {
+this.SeqInit (s1, string1.toUpperCase (), s2, string2.toUpperCase (), type);
+}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S");
+Clazz.defineMethod (c$, "getMaxScore",
+function () {
+return this.maxscore;
+});
+Clazz.defineMethod (c$, "getSeq2Start",
+function () {
+return this.seq2start;
+});
+Clazz.defineMethod (c$, "getSeq2End",
+function () {
+return this.seq2end;
+});
+Clazz.defineMethod (c$, "getSeq1Start",
+function () {
+return this.seq1start;
+});
+Clazz.defineMethod (c$, "getSeq1End",
+function () {
+return this.seq1end;
+});
+Clazz.defineMethod (c$, "getOutput",
+function () {
+return this.output.toString ();
+});
+Clazz.defineMethod (c$, "getAStr1",
+function () {
+return this.astr1;
+});
+Clazz.defineMethod (c$, "getAStr2",
+function () {
+return this.astr2;
+});
+Clazz.defineMethod (c$, "getASeq1",
+function () {
+return this.aseq1;
+});
+Clazz.defineMethod (c$, "getASeq2",
+function () {
+return this.aseq2;
+});
+Clazz.defineMethod (c$, "getS1",
+function () {
+return this.s1;
+});
+Clazz.defineMethod (c$, "getS2",
+function () {
+return this.s2;
+});
+Clazz.defineMethod (c$, "getAlignedSeq1",
+function () {
+var alSeq1 = new jalview.datamodel.Sequence (this.s1.getName (), this.getAStr1 ());
+alSeq1.setStart (this.s1.getStart () + this.getSeq1Start () - 1);
+alSeq1.setEnd (this.s1.getStart () + this.getSeq1End () - 1);
+alSeq1.setDatasetSequence (this.s1.getDatasetSequence () == null ? this.s1 : this.s1.getDatasetSequence ());
+return alSeq1;
+});
+Clazz.defineMethod (c$, "getAlignedSeq2",
+function () {
+var alSeq2 = new jalview.datamodel.Sequence (this.s2.getName (), this.getAStr2 ());
+alSeq2.setStart (this.s2.getStart () + this.getSeq2Start () - 1);
+alSeq2.setEnd (this.s2.getStart () + this.getSeq2End () - 1);
+alSeq2.setDatasetSequence (this.s2.getDatasetSequence () == null ? this.s2 : this.s2.getDatasetSequence ());
+return alSeq2;
+});
+Clazz.defineMethod (c$, "SeqInit",
+function (s1, string1, s2, string2, type) {
+this.s1 = s1;
+this.s2 = s2;
+this.setDefaultParams (type);
+this.SeqInit (string1, string2);
+}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,~S");
+Clazz.defineMethod (c$, "SeqInit",
+function (s1, string1, s2, string2, scoreMatrix) {
+this.s1 = s1;
+this.s2 = s2;
+this.setType (scoreMatrix.isDNA () ? "dna" : "pep");
+this.lookup = scoreMatrix.getMatrix ();
+}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.SequenceI,~S,jalview.schemes.ScoreMatrix");
+Clazz.defineMethod (c$, "SeqInit",
+($fz = function (string1, string2) {
+this.s1str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string1);
+this.s2str = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, string2);
+if (this.s1str.length == 0 || this.s2str.length == 0) {
+this.output.append ("ALL GAPS: " + (this.s1str.length == 0 ? this.s1.getName () : " ") + (this.s2str.length == 0 ? this.s2.getName () : ""));
+return;
+}this.seq1 = Clazz.newIntArray (this.s1str.length, 0);
+this.seq2 = Clazz.newIntArray (this.s2str.length, 0);
+this.score = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
+this.E = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
+this.F = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
+this.traceback = Clazz.newIntArray (this.s1str.length, this.s2str.length, 0);
+this.seq1 = this.stringToInt (this.s1str, this.type);
+this.seq2 = this.stringToInt (this.s2str, this.type);
+}, $fz.isPrivate = true, $fz), "~S,~S");
+Clazz.defineMethod (c$, "setDefaultParams",
+($fz = function (type) {
+this.setType (type);
+if (type.equals ("pep")) {
+this.lookup = jalview.schemes.ResidueProperties.getDefaultPeptideMatrix ();
+} else if (type.equals ("dna")) {
+this.lookup = jalview.schemes.ResidueProperties.getDefaultDnaMatrix ();
+}}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "setType",
+($fz = function (type2) {
+this.type = type2;
+if (this.type.equals ("pep")) {
+this.intToStr = jalview.analysis.AlignSeq.pep;
+this.charToInt = jalview.schemes.ResidueProperties.aaIndex;
+this.defInt = 23;
+} else if (this.type.equals ("dna")) {
+this.intToStr = jalview.analysis.AlignSeq.dna;
+this.charToInt = jalview.schemes.ResidueProperties.nucleotideIndex;
+this.defInt = 10;
+} else {
+this.output.append ("Wrong type = dna or pep only");
+throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_type_dna_or_pep", Clazz.newArray (-1, [type2])));
+}}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "traceAlignment",
+function () {
+var max = -9999;
+for (var i = 0; i < this.seq1.length; i++) {
+if (this.score[i][this.seq2.length - 1] > max) {
+max = this.score[i][this.seq2.length - 1];
+this.maxi = i;
+this.maxj = this.seq2.length - 1;
+}}
+for (var j = 0; j < this.seq2.length; j++) {
+if (this.score[this.seq1.length - 1][j] > max) {
+max = this.score[this.seq1.length - 1][j];
+this.maxi = this.seq1.length - 1;
+this.maxj = j;
+}}
+var i = this.maxi;
+var j = this.maxj;
+var trace;
+this.maxscore = Clazz.doubleToInt (this.score[i][j] / 10);
+this.seq1end = this.maxi + 1;
+this.seq2end = this.maxj + 1;
+this.aseq1 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0);
+this.aseq2 = Clazz.newIntArray (this.seq1.length + this.seq2.length, 0);
+this.count = (this.seq1.length + this.seq2.length) - 1;
+while ((i > 0) && (j > 0)) {
+if ((this.aseq1[this.count] != this.defInt) && (i >= 0)) {
+this.aseq1[this.count] = this.seq1[i];
+this.astr1 = this.s1str.charAt (i) + this.astr1;
+}if ((this.aseq2[this.count] != this.defInt) && (j > 0)) {
+this.aseq2[this.count] = this.seq2[j];
+this.astr2 = this.s2str.charAt (j) + this.astr2;
+}trace = this.findTrace (i, j);
+if (trace == 0) {
+i--;
+j--;
+} else if (trace == 1) {
+j--;
+this.aseq1[this.count] = this.defInt;
+this.astr1 = "-" + this.astr1.substring (1);
+} else if (trace == -1) {
+i--;
+this.aseq2[this.count] = this.defInt;
+this.astr2 = "-" + this.astr2.substring (1);
+}this.count--;
+}
+this.seq1start = i + 1;
+this.seq2start = j + 1;
+if (this.aseq1[this.count] != this.defInt) {
+this.aseq1[this.count] = this.seq1[i];
+this.astr1 = this.s1str.charAt (i) + this.astr1;
+}if (this.aseq2[this.count] != this.defInt) {
+this.aseq2[this.count] = this.seq2[j];
+this.astr2 = this.s2str.charAt (j) + this.astr2;
+}});
+Clazz.defineMethod (c$, "printAlignment",
+function (os) {
+var s1id = this.s1.getName ();
+var s2id = this.s2.getName ();
+var maxid = this.s1.getName ().length;
+if (this.s2.getName ().length > maxid) {
+maxid = this.s2.getName ().length;
+}if (maxid > 30) {
+maxid = 30;
+if (this.s1.getName ().length > maxid) {
+s1id = this.s1.getName ().substring (0, 30);
+}if (this.s2.getName ().length > maxid) {
+s2id = this.s2.getName ().substring (0, 30);
+}}var len = 72 - maxid - 1;
+var nochunks = (Clazz.doubleToInt ((this.aseq1.length - this.count) / len)) + 1;
+this.pid = 0;
+this.output.append ("Score = ").append ("" + this.score[this.maxi][this.maxj]).append (jalview.analysis.AlignSeq.NEWLINE);
+this.output.append ("Length of alignment = ").append (String.valueOf (this.aseq1.length - this.count)).append (jalview.analysis.AlignSeq.NEWLINE);
+this.output.append ("Sequence ");
+this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s1.getName ()));
+this.output.append (" : ").append (String.valueOf (this.s1.getStart ())).append (" - ").append (String.valueOf (this.s1.getEnd ()));
+this.output.append (" (Sequence length = ").append (String.valueOf (this.s1str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE);
+this.output.append ("Sequence ");
+this.output.append ( new jalview.util.Format ("%" + maxid + "s").form (this.s2.getName ()));
+this.output.append (" : ").append (String.valueOf (this.s2.getStart ())).append (" - ").append (String.valueOf (this.s2.getEnd ()));
+this.output.append (" (Sequence length = ").append (String.valueOf (this.s2str.length)).append (")").append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE);
+for (var j = 0; j < nochunks; j++) {
+this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s1id)).append (" ");
+for (var i = 0; i < len; i++) {
+if ((i + (j * len)) < this.astr1.length) {
+this.output.append (this.astr1.charAt (i + (j * len)));
+}}
+this.output.append (jalview.analysis.AlignSeq.NEWLINE);
+this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (" ")).append (" ");
+for (var i = 0; i < len; i++) {
+if ((i + (j * len)) < this.astr1.length) {
+if (this.astr1.charAt (i + (j * len)) == this.astr2.charAt (i + (j * len)) && !jalview.util.Comparison.isGap (this.astr1.charAt (i + (j * len)))) {
+this.pid++;
+this.output.append ("|");
+} else if (this.type.equals ("pep")) {
+if (jalview.schemes.ResidueProperties.getPAM250 (this.astr1.charAt (i + (j * len)), this.astr2.charAt (i + (j * len))) > 0) {
+this.output.append (".");
+} else {
+this.output.append (" ");
+}} else {
+this.output.append (" ");
+}}}
+this.output = this.output.append (jalview.analysis.AlignSeq.NEWLINE);
+this.output = this.output.append ( new jalview.util.Format ("%" + (maxid) + "s").form (s2id)).append (" ");
+for (var i = 0; i < len; i++) {
+if ((i + (j * len)) < this.astr2.length) {
+this.output.append (this.astr2.charAt (i + (j * len)));
+}}
+this.output.append (jalview.analysis.AlignSeq.NEWLINE).append (jalview.analysis.AlignSeq.NEWLINE);
+}
+this.pid = this.pid / (this.aseq1.length - this.count) * 100;
+this.output = this.output.append ( new jalview.util.Format ("Percentage ID = %2.2f\n\n").formDouble (this.pid));
+try {
+os.print (this.output.toString ());
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}, "java.io.PrintStream");
+Clazz.defineMethod (c$, "printScoreMatrix",
+function (mat) {
+var n = this.seq1.length;
+var m = this.seq2.length;
+for (var i = 0; i < n; i++) {
+if (i == 0) {
+jalview.util.Format.print (System.out, "%8s", this.s2str.substring (0, 1));
+for (var jj = 1; jj < m; jj++) {
+jalview.util.Format.print (System.out, "%5s", this.s2str.substring (jj, jj + 1));
+}
+System.out.println ();
+}for (var j = 0; j < m; j++) {
+if (j == 0) {
+jalview.util.Format.print (System.out, "%3s", this.s1str.substring (i, i + 1));
+}jalview.util.Format.printLong (System.out, "%3d ", Clazz.doubleToInt (mat[i][j] / 10));
+}
+System.out.println ();
+}
+}, "~A");
+Clazz.defineMethod (c$, "findTrace",
+function (i, j) {
+var t = 0;
+var max = this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10);
+if (this.F[i][j] > max) {
+max = this.F[i][j];
+t = -1;
+} else if (this.F[i][j] == max) {
+if (this.prev == -1) {
+max = this.F[i][j];
+t = -1;
+}}if (this.E[i][j] >= max) {
+max = this.E[i][j];
+t = 1;
+} else if (this.E[i][j] == max) {
+if (this.prev == 1) {
+max = this.E[i][j];
+t = 1;
+}}this.prev = t;
+return t;
+}, "~N,~N");
+Clazz.defineMethod (c$, "calcScoreMatrix",
+function () {
+var n = this.seq1.length;
+var m = this.seq2.length;
+this.score[0][0] = this.lookup[this.seq1[0]][this.seq2[0]] * 10;
+this.E[0][0] = -this.gapExtend;
+this.F[0][0] = 0;
+for (var j = 1; j < m; j++) {
+this.E[0][j] = this.max (this.score[0][j - 1] - this.gapOpen, this.E[0][j - 1] - this.gapExtend);
+this.F[0][j] = -this.gapExtend;
+this.score[0][j] = this.max (this.lookup[this.seq1[0]][this.seq2[j]] * 10, -this.gapOpen, -this.gapExtend);
+this.traceback[0][j] = 1;
+}
+for (var i = 1; i < n; i++) {
+this.E[i][0] = -this.gapOpen;
+this.F[i][0] = this.max (this.score[i - 1][0] - this.gapOpen, this.F[i - 1][0] - this.gapExtend);
+this.score[i][0] = this.max (this.lookup[this.seq1[i]][this.seq2[0]] * 10, this.E[i][0], this.F[i][0]);
+this.traceback[i][0] = -1;
+}
+for (var i = 1; i < n; i++) {
+for (var j = 1; j < m; j++) {
+this.E[i][j] = this.max (this.score[i][j - 1] - this.gapOpen, this.E[i][j - 1] - this.gapExtend);
+this.F[i][j] = this.max (this.score[i - 1][j] - this.gapOpen, this.F[i - 1][j] - this.gapExtend);
+this.score[i][j] = this.max (this.score[i - 1][j - 1] + (this.lookup[this.seq1[i]][this.seq2[j]] * 10), this.E[i][j], this.F[i][j]);
+this.traceback[i][j] = this.findTrace (i, j);
+}
+}
+});
+c$.extractGaps = Clazz.defineMethod (c$, "extractGaps",
+function (gapChars, seq) {
+if (gapChars == null || seq == null) {
+return null;
+}var str = new java.util.StringTokenizer (seq, gapChars);
+var newString = new StringBuilder (seq.length);
+while (str.hasMoreTokens ()) {
+newString.append (str.nextToken ());
+}
+return newString.toString ();
+}, "~S,~S");
+Clazz.defineMethod (c$, "max",
+function (i1, i2, i3) {
+var max = i1;
+if (i2 > i1) {
+max = i2;
+}if (i3 > max) {
+max = i3;
+}return max;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "max",
+function (i1, i2) {
+var max = i1;
+if (i2 > i1) {
+max = i2;
+}return max;
+}, "~N,~N");
+Clazz.defineMethod (c$, "stringToInt",
+function (s, type) {
+var seq1 = Clazz.newIntArray (s.length, 0);
+for (var i = 0; i < s.length; i++) {
+var c = s.charAt (i);
+if ('a' <= c && c <= 'z') {
+c = String.fromCharCode (c.charCodeAt (0) - (32));
+}try {
+seq1[i] = this.charToInt[c.charCodeAt (0)];
+if (seq1[i] < 0 || seq1[i] > this.defInt) {
+seq1[i] = this.defInt;
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+seq1[i] = this.defInt;
+} else {
+throw e;
+}
+}
+}
+return seq1;
+}, "~S,~S");
+c$.displayMatrix = Clazz.defineMethod (c$, "displayMatrix",
+function (g, mat, n, m, psize) {
+var max = -1000;
+var min = 1000;
+for (var i = 0; i < n; i++) {
+for (var j = 0; j < m; j++) {
+if (mat[i][j] >= max) {
+max = mat[i][j];
+}if (mat[i][j] <= min) {
+min = mat[i][j];
+}}
+}
+System.out.println (max + " " + min);
+for (var i = 0; i < n; i++) {
+for (var j = 0; j < m; j++) {
+var x = psize * i;
+var y = psize * j;
+var score = (mat[i][j] - min) / (max - min);
+g.setColor ( new java.awt.Color (score, 0, 0));
+g.fillRect (x, y, psize, psize);
+}
+}
+}, "java.awt.Graphics,~A,~N,~N,~N");
+c$.doGlobalNWAlignment = Clazz.defineMethod (c$, "doGlobalNWAlignment",
+function (s1, s2, type) {
+var as = new jalview.analysis.AlignSeq (s1, s2, type);
+as.calcScoreMatrix ();
+as.traceAlignment ();
+return as;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S");
+Clazz.defineMethod (c$, "getMappingFromS1",
+function (allowmismatch) {
+var as1 = new java.util.ArrayList ();
+var as2 = new java.util.ArrayList ();
+var pdbpos = this.s2.getStart () + this.getSeq2Start () - 2;
+var alignpos = this.s1.getStart () + this.getSeq1Start () - 2;
+var lp2 = pdbpos - 3;
+var lp1 = alignpos - 3;
+var lastmatch = false;
+for (var i = 0; i < this.astr1.length; i++) {
+var c1 = this.astr1.charAt (i);
+var c2 = this.astr2.charAt (i);
+if (c1 != '-') {
+alignpos++;
+}if (c2 != '-') {
+pdbpos++;
+}if (allowmismatch || c1 == c2) {
+if (lp1 + 1 != alignpos || lp2 + 1 != pdbpos) {
+as1.add (Integer.$valueOf (alignpos));
+as2.add (Integer.$valueOf (pdbpos));
+}lastmatch = true;
+lp1 = alignpos;
+lp2 = pdbpos;
+} else {
+if (lastmatch) {
+as1.add (Integer.$valueOf (lp1));
+as2.add (Integer.$valueOf (lp2));
+}lastmatch = false;
+}}
+var mapseq1 = Clazz.newIntArray (as1.size () + (lastmatch ? 1 : 0), 0);
+var mapseq2 = Clazz.newIntArray (as2.size () + (lastmatch ? 1 : 0), 0);
+var i = 0;
+for (var ip, $ip = as1.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
+mapseq1[i++] = (ip).intValue ();
+}
+;i = 0;
+for (var ip, $ip = as2.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
+mapseq2[i++] = (ip).intValue ();
+}
+;if (lastmatch) {
+mapseq1[mapseq1.length - 1] = alignpos;
+mapseq2[mapseq2.length - 1] = pdbpos;
+}var map = new jalview.util.MapList (mapseq1, mapseq2, 1, 1);
+var mapping = new jalview.datamodel.Mapping (map);
+mapping.setTo (this.s2);
+return mapping;
+}, "~B");
+c$.replaceMatchingSeqsWith = Clazz.defineMethod (c$, "replaceMatchingSeqsWith",
+function (seqs, annotations, ochains, al, dnaOrProtein, removeOldAnnots) {
+var orig = new java.util.ArrayList ();
+var repl = new java.util.ArrayList ();
+var aligs = new java.util.ArrayList ();
+if (al != null && al.getHeight () > 0) {
+var matches = new java.util.ArrayList ();
+var aligns = new java.util.ArrayList ();
+for (var sq, $sq = ochains.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+var bestm = null;
+var bestaseq = null;
+var bestscore = 0;
+for (var msq, $msq = al.getSequences ().iterator (); $msq.hasNext () && ((msq = $msq.next ()) || true);) {
+var aseq = jalview.analysis.AlignSeq.doGlobalNWAlignment (msq, sq, dnaOrProtein);
+if (bestm == null || aseq.getMaxScore () > bestscore) {
+bestscore = aseq.getMaxScore ();
+bestaseq = aseq;
+bestm = msq;
+}}
+System.out.println ("Best Score for " + (matches.size () + 1) + " :" + bestscore);
+matches.add (bestm);
+aligns.add (bestaseq);
+al.deleteSequence (bestm);
+}
+for (var p = 0, pSize = seqs.size (); p < pSize; p++) {
+var sq;
+var sp = seqs.get (p);
+var q;
+if ((q = ochains.indexOf (sp)) > -1) {
+seqs.set (p, sq = matches.get (q));
+orig.add (sp);
+repl.add (sq);
+sq.setName (sp.getName ());
+sq.setDescription (sp.getDescription ());
+var sp2sq;
+sq.transferAnnotation (sp, sp2sq = aligns.get (q).getMappingFromS1 (false));
+aligs.add (aligns.get (q));
+var inspos = -1;
+for (var ap = 0; ap < annotations.size (); ) {
+if (annotations.get (ap).sequenceRef === sp) {
+if (inspos == -1) {
+inspos = ap;
+}if (removeOldAnnots) {
+annotations.remove (ap);
+} else {
+var alan = annotations.remove (ap);
+alan.liftOver (sq, sp2sq);
+alan.setSequenceRef (sq);
+sq.addAlignmentAnnotation (alan);
+}} else {
+ap++;
+}}
+if (sq.getAnnotation () != null && sq.getAnnotation ().length > 0) {
+annotations.addAll (inspos == -1 ? annotations.size () : inspos, java.util.Arrays.asList (sq.getAnnotation ()));
+}}}
+}return java.util.Arrays.asList ([orig, repl, aligs]);
+}, "java.util.List,java.util.List,java.util.List,jalview.datamodel.AlignmentI,~S,~B");
+c$.computeRedundancyMatrix = Clazz.defineMethod (c$, "computeRedundancyMatrix",
+function (originalSequences, omitHidden, start, end, ungapped) {
+var height = originalSequences.length;
+var redundancy = Clazz.newFloatArray (height, 0);
+var lngth = Clazz.newIntArray (height, 0);
+for (var i = 0; i < height; i++) {
+redundancy[i] = 0;
+lngth[i] = -1;
+}
+var pid;
+var seqi;
+var seqj;
+for (var i = 0; i < height; i++) {
+for (var j = 0; j < i; j++) {
+if (i == j) {
+continue;
+}if (omitHidden == null) {
+seqi = originalSequences[i].getSequenceAsString (start, end);
+seqj = originalSequences[j].getSequenceAsString (start, end);
+} else {
+seqi = omitHidden[i];
+seqj = omitHidden[j];
+}if (lngth[i] == -1) {
+var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqi);
+lngth[i] = ug.length;
+if (ungapped) {
+seqi = ug;
+}}if (lngth[j] == -1) {
+var ug = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, seqj);
+lngth[j] = ug.length;
+if (ungapped) {
+seqj = ug;
+}}pid = jalview.util.Comparison.PID (seqi, seqj);
+if (lngth[j] < lngth[i]) {
+redundancy[j] = Math.max (pid, redundancy[j]);
+} else {
+redundancy[i] = Math.max (pid, redundancy[i]);
+}}
+}
+return redundancy;
+}, "~A,~A,~N,~N,~B");
+Clazz.defineStatics (c$,
+"PEP", "pep",
+"DNA", "dna");
+c$.NEWLINE = c$.prototype.NEWLINE = System.lineSeparator ();
+Clazz.defineStatics (c$,
+"dna", Clazz.newArray (-1, ["A", "C", "G", "T", "-"]),
+"pep", Clazz.newArray (-1, ["A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-"]));
+});
diff --git a/bin/jalview/analysis/AlignmentAnnotationUtils.class b/bin/jalview/analysis/AlignmentAnnotationUtils.class
index 4d24030..a01673f 100644
Binary files a/bin/jalview/analysis/AlignmentAnnotationUtils.class and b/bin/jalview/analysis/AlignmentAnnotationUtils.class differ
diff --git a/bin/jalview/analysis/AlignmentAnnotationUtils.js b/bin/jalview/analysis/AlignmentAnnotationUtils.js
index f742aa9..9522f6e 100644
--- a/bin/jalview/analysis/AlignmentAnnotationUtils.js
+++ b/bin/jalview/analysis/AlignmentAnnotationUtils.js
@@ -1,73 +1,73 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.AlignmentAnnotationUtils", ["java.util.ArrayList", "$.Arrays", "$.BitSet", "$.Collections", "$.HashMap"], function () {
-c$ = Clazz.declareType (jalview.analysis, "AlignmentAnnotationUtils");
-c$.getShownHiddenTypes = Clazz.defineMethod (c$, "getShownHiddenTypes",
-function (shownTypes, hiddenTypes, annotations, forSequences) {
-var visibleGraphGroups = jalview.analysis.AlignmentAnnotationUtils.getVisibleLineGraphGroups (annotations);
-var groupLabels = new java.util.HashMap ();
-var addedToShown = new java.util.ArrayList ();
-var addedToHidden = new java.util.ArrayList ();
-for (var aa, $aa = annotations.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
-if (aa.annotations == null) {
-continue;
-}if (forSequences != null && (aa.sequenceRef != null && forSequences.contains (aa.sequenceRef))) {
-var calcId = aa.getCalcId ();
-var labelAsList = new java.util.ArrayList ();
-var displayLabel = aa.label;
-labelAsList.add (displayLabel);
-if (aa.graph == 2 && aa.graphGroup > -1) {
-if (!groupLabels.containsKey (calcId)) {
-groupLabels.put (calcId, new java.util.HashMap ());
-}var groupLabelsForCalcId = groupLabels.get (calcId);
-if (groupLabelsForCalcId.containsKey (new Integer (aa.graphGroup))) {
-if (!groupLabelsForCalcId.get (new Integer (aa.graphGroup)).contains (displayLabel)) {
-groupLabelsForCalcId.get (new Integer (aa.graphGroup)).add (displayLabel);
-}} else {
-groupLabelsForCalcId.put (new Integer (aa.graphGroup), labelAsList);
-}} else {
-var rememberAs = calcId + "!" + displayLabel;
-if (aa.visible && !addedToShown.contains (rememberAs)) {
-if (!shownTypes.containsKey (calcId)) {
-shownTypes.put (calcId, new java.util.ArrayList ());
-}shownTypes.get (calcId).add (labelAsList);
-addedToShown.add (rememberAs);
-} else {
-if (!aa.visible && !addedToHidden.contains (rememberAs)) {
-if (!hiddenTypes.containsKey (calcId)) {
-hiddenTypes.put (calcId, new java.util.ArrayList ());
-}hiddenTypes.get (calcId).add (labelAsList);
-addedToHidden.add (rememberAs);
-}}}}}
-for (var calcId, $calcId = groupLabels.keySet ().iterator (); $calcId.hasNext () && ((calcId = $calcId.next ()) || true);) {
-for (var group, $group = groupLabels.get (calcId).keySet ().iterator (); $group.hasNext () && ((group = $group.next ()) || true);) {
-var groupLabel = groupLabels.get (calcId).get (new Integer (group));
-java.util.Collections.sort (groupLabel);
-if (visibleGraphGroups.get (group)) {
-if (!shownTypes.containsKey (calcId)) {
-shownTypes.put (calcId, new java.util.ArrayList ());
-}if (!shownTypes.get (calcId).contains (groupLabel)) {
-shownTypes.get (calcId).add (groupLabel);
-}} else {
-if (!hiddenTypes.containsKey (calcId)) {
-hiddenTypes.put (calcId, new java.util.ArrayList ());
-}if (!hiddenTypes.get (calcId).contains (groupLabel)) {
-hiddenTypes.get (calcId).add (groupLabel);
-}}}
-}
-}, "java.util.Map,java.util.Map,java.util.List,java.util.List");
-c$.getVisibleLineGraphGroups = Clazz.defineMethod (c$, "getVisibleLineGraphGroups",
-function (annotations) {
-var result = new java.util.BitSet ();
-for (var ann, $ann = annotations.iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {
-if (ann.graph == 2 && ann.visible) {
-var gg = ann.graphGroup;
-if (gg > -1) {
-result.set (gg);
-}}}
-return result;
-}, "java.util.List");
-c$.asList = Clazz.defineMethod (c$, "asList",
-function (anns) {
-return (anns == null ? java.util.Collections.emptyList () : java.util.Arrays.asList (anns));
-}, "~A");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.AlignmentAnnotationUtils", ["java.util.ArrayList", "$.Arrays", "$.BitSet", "$.Collections", "$.HashMap"], function () {
+c$ = Clazz.declareType (jalview.analysis, "AlignmentAnnotationUtils");
+c$.getShownHiddenTypes = Clazz.defineMethod (c$, "getShownHiddenTypes",
+function (shownTypes, hiddenTypes, annotations, forSequences) {
+var visibleGraphGroups = jalview.analysis.AlignmentAnnotationUtils.getVisibleLineGraphGroups (annotations);
+var groupLabels = new java.util.HashMap ();
+var addedToShown = new java.util.ArrayList ();
+var addedToHidden = new java.util.ArrayList ();
+for (var aa, $aa = annotations.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
+if (aa.annotations == null) {
+continue;
+}if (forSequences != null && (aa.sequenceRef != null && forSequences.contains (aa.sequenceRef))) {
+var calcId = aa.getCalcId ();
+var labelAsList = new java.util.ArrayList ();
+var displayLabel = aa.label;
+labelAsList.add (displayLabel);
+if (aa.graph == 2 && aa.graphGroup > -1) {
+if (!groupLabels.containsKey (calcId)) {
+groupLabels.put (calcId, new java.util.HashMap ());
+}var groupLabelsForCalcId = groupLabels.get (calcId);
+if (groupLabelsForCalcId.containsKey (new Integer (aa.graphGroup))) {
+if (!groupLabelsForCalcId.get (new Integer (aa.graphGroup)).contains (displayLabel)) {
+groupLabelsForCalcId.get (new Integer (aa.graphGroup)).add (displayLabel);
+}} else {
+groupLabelsForCalcId.put (new Integer (aa.graphGroup), labelAsList);
+}} else {
+var rememberAs = calcId + "!" + displayLabel;
+if (aa.visible && !addedToShown.contains (rememberAs)) {
+if (!shownTypes.containsKey (calcId)) {
+shownTypes.put (calcId, new java.util.ArrayList ());
+}shownTypes.get (calcId).add (labelAsList);
+addedToShown.add (rememberAs);
+} else {
+if (!aa.visible && !addedToHidden.contains (rememberAs)) {
+if (!hiddenTypes.containsKey (calcId)) {
+hiddenTypes.put (calcId, new java.util.ArrayList ());
+}hiddenTypes.get (calcId).add (labelAsList);
+addedToHidden.add (rememberAs);
+}}}}}
+for (var calcId, $calcId = groupLabels.keySet ().iterator (); $calcId.hasNext () && ((calcId = $calcId.next ()) || true);) {
+for (var group, $group = groupLabels.get (calcId).keySet ().iterator (); $group.hasNext () && ((group = $group.next ()) || true);) {
+var groupLabel = groupLabels.get (calcId).get (new Integer (group));
+java.util.Collections.sort (groupLabel);
+if (visibleGraphGroups.get (group)) {
+if (!shownTypes.containsKey (calcId)) {
+shownTypes.put (calcId, new java.util.ArrayList ());
+}if (!shownTypes.get (calcId).contains (groupLabel)) {
+shownTypes.get (calcId).add (groupLabel);
+}} else {
+if (!hiddenTypes.containsKey (calcId)) {
+hiddenTypes.put (calcId, new java.util.ArrayList ());
+}if (!hiddenTypes.get (calcId).contains (groupLabel)) {
+hiddenTypes.get (calcId).add (groupLabel);
+}}}
+}
+}, "java.util.Map,java.util.Map,java.util.List,java.util.List");
+c$.getVisibleLineGraphGroups = Clazz.defineMethod (c$, "getVisibleLineGraphGroups",
+function (annotations) {
+var result = new java.util.BitSet ();
+for (var ann, $ann = annotations.iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {
+if (ann.graph == 2 && ann.visible) {
+var gg = ann.graphGroup;
+if (gg > -1) {
+result.set (gg);
+}}}
+return result;
+}, "java.util.List");
+c$.asList = Clazz.defineMethod (c$, "asList",
+function (anns) {
+return (anns == null ? java.util.Collections.emptyList () : java.util.Arrays.asList (anns));
+}, "~A");
+});
diff --git a/bin/jalview/analysis/AlignmentSorter.class b/bin/jalview/analysis/AlignmentSorter.class
index ef50ded..012f2ee 100644
Binary files a/bin/jalview/analysis/AlignmentSorter.class and b/bin/jalview/analysis/AlignmentSorter.class differ
diff --git a/bin/jalview/analysis/AlignmentSorter.js b/bin/jalview/analysis/AlignmentSorter.js
index 4c0604a..bcf66d4 100644
--- a/bin/jalview/analysis/AlignmentSorter.js
+++ b/bin/jalview/analysis/AlignmentSorter.js
@@ -1,383 +1,383 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.AlignmentSorter", ["jalview.datamodel.SequenceI", "jalview.util.Comparison", "$.MessageManager", "$.QuickSort", "java.lang.Error", "$.Float", "$.StringBuffer", "java.util.ArrayList"], function () {
-c$ = Clazz.declareType (jalview.analysis, "AlignmentSorter");
-c$.sortByPID = Clazz.defineMethod (c$, "sortByPID",
-function (align, s, tosort) {
-jalview.analysis.AlignmentSorter.sortByPID (align, s, tosort, 0, -1);
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A");
-c$.sortByPID = Clazz.defineMethod (c$, "sortByPID",
-function (align, s, tosort, start, end) {
-var nSeq = align.getHeight ();
-var scores = Clazz.newFloatArray (nSeq, 0);
-var seqs = new Array (nSeq);
-for (var i = 0; i < nSeq; i++) {
-scores[i] = jalview.util.Comparison.PID (align.getSequenceAt (i).getSequenceAsString (), s.getSequenceAsString ());
-seqs[i] = align.getSequenceAt (i);
-}
-jalview.util.QuickSort.sortFloatObject (scores, seqs);
-jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A,~N,~N");
-c$.setReverseOrder = Clazz.defineMethod (c$, "setReverseOrder",
-($fz = function (align, seqs) {
-var nSeq = seqs.length;
-var len = 0;
-if ((nSeq % 2) == 0) {
-len = Clazz.doubleToInt (nSeq / 2);
-} else {
-len = Clazz.doubleToInt ((nSeq + 1) / 2);
-}var asq;
-{
-for (var i = 0; i < len; i++) {
-asq.set (i, seqs[nSeq - i - 1]);
-asq.set (nSeq - i - 1, seqs[i]);
-}
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~A");
-c$.setOrder = Clazz.defineMethod (c$, "setOrder",
-($fz = function (align, tmp) {
-jalview.analysis.AlignmentSorter.setOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");
-c$.setOrder = Clazz.defineMethod (c$, "setOrder",
-function (align, seqs) {
-var algn;
-{
-var tmp = new java.util.ArrayList ();
-for (var i = 0; i < seqs.length; i++) {
-if (algn.contains (seqs[i])) {
-tmp.add (seqs[i]);
-}}
-algn.clear ();
-for (var i = 0; i < tmp.size (); i++) {
-algn.add (tmp.get (i));
-}
-}}, "jalview.datamodel.AlignmentI,~A");
-c$.sortByID = Clazz.defineMethod (c$, "sortByID",
-function (align) {
-var nSeq = align.getHeight ();
-var ids = new Array (nSeq);
-var seqs = new Array (nSeq);
-for (var i = 0; i < nSeq; i++) {
-ids[i] = align.getSequenceAt (i).getName ();
-seqs[i] = align.getSequenceAt (i);
-}
-jalview.util.QuickSort.sort (ids, seqs);
-if (jalview.analysis.AlignmentSorter.sortIdAscending) {
-jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
-} else {
-jalview.analysis.AlignmentSorter.setOrder (align, seqs);
-}jalview.analysis.AlignmentSorter.sortIdAscending = !jalview.analysis.AlignmentSorter.sortIdAscending;
-}, "jalview.datamodel.AlignmentI");
-c$.sortByLength = Clazz.defineMethod (c$, "sortByLength",
-function (align) {
-var nSeq = align.getHeight ();
-var length = Clazz.newFloatArray (nSeq, 0);
-var seqs = new Array (nSeq);
-for (var i = 0; i < nSeq; i++) {
-seqs[i] = align.getSequenceAt (i);
-length[i] = (seqs[i].getEnd () - seqs[i].getStart ());
-}
-jalview.util.QuickSort.sortFloatObject (length, seqs);
-if (jalview.analysis.AlignmentSorter.sortLengthAscending) {
-jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
-} else {
-jalview.analysis.AlignmentSorter.setOrder (align, seqs);
-}jalview.analysis.AlignmentSorter.sortLengthAscending = !jalview.analysis.AlignmentSorter.sortLengthAscending;
-}, "jalview.datamodel.AlignmentI");
-c$.sortByGroup = Clazz.defineMethod (c$, "sortByGroup",
-function (align) {
-var groups = new java.util.ArrayList ();
-if (groups.hashCode () != jalview.analysis.AlignmentSorter.lastGroupHash) {
-jalview.analysis.AlignmentSorter.sortGroupAscending = true;
-jalview.analysis.AlignmentSorter.lastGroupHash = groups.hashCode ();
-} else {
-jalview.analysis.AlignmentSorter.sortGroupAscending = !jalview.analysis.AlignmentSorter.sortGroupAscending;
-}for (var sg, $sg = align.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-for (var j = 0; j < groups.size (); j++) {
-var sg2 = groups.get (j);
-if (sg.getSize () > sg2.getSize ()) {
-groups.add (j, sg);
-break;
-}}
-if (!groups.contains (sg)) {
-groups.add (sg);
-}}
-var seqs = new java.util.ArrayList ();
-for (var i = 0; i < groups.size (); i++) {
-var sg = groups.get (i);
-var orderedseqs = sg.getSequencesInOrder (align);
-for (var j = 0; j < orderedseqs.length; j++) {
-seqs.add (orderedseqs[j]);
-}
-}
-if (jalview.analysis.AlignmentSorter.sortGroupAscending) {
-jalview.analysis.AlignmentSorter.setOrder (align, seqs);
-} else {
-jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (seqs, align.getSequences ()));
-}}, "jalview.datamodel.AlignmentI");
-c$.vectorSubsetToArray = Clazz.defineMethod (c$, "vectorSubsetToArray",
-($fz = function (tmp, mask) {
-var seqs = new java.util.ArrayList ();
-var i;
-var idx;
-var tmask = Clazz.newBooleanArray (mask.size (), false);
-for (i = 0; i < mask.size (); i++) {
-tmask[i] = true;
-}
-for (i = 0; i < tmp.size (); i++) {
-var sq = tmp.get (i);
-idx = mask.indexOf (sq);
-if (idx > -1 && tmask[idx]) {
-tmask[idx] = false;
-seqs.add (sq);
-}}
-for (i = 0; i < tmask.length; i++) {
-if (tmask[i]) {
-seqs.add (mask.get (i));
-}}
-return seqs.toArray ( new Array (seqs.size ()));
-}, $fz.isPrivate = true, $fz), "java.util.List,java.util.List");
-c$.sortBy = Clazz.defineMethod (c$, "sortBy",
-function (align, order) {
-var tmp = order.getOrder ();
-if (jalview.analysis.AlignmentSorter.lastOrder === order) {
-jalview.analysis.AlignmentSorter.sortOrderAscending = !jalview.analysis.AlignmentSorter.sortOrderAscending;
-} else {
-jalview.analysis.AlignmentSorter.sortOrderAscending = true;
-}if (jalview.analysis.AlignmentSorter.sortOrderAscending) {
-jalview.analysis.AlignmentSorter.setOrder (align, tmp);
-} else {
-jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
-}}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentOrder");
-c$.getOrderByTree = Clazz.defineMethod (c$, "getOrderByTree",
-($fz = function (align, tree) {
-var nSeq = align.getHeight ();
-var tmp = new java.util.ArrayList ();
-tmp = jalview.analysis.AlignmentSorter._sortByTree (tree.getTopNode (), tmp, align.getSequences ());
-if (tmp.size () != nSeq) {
-if (tmp.size () != nSeq) {
-jalview.analysis.AlignmentSorter.addStrays (align, tmp);
-}if (tmp.size () != nSeq) {
-System.err.println ("WARNING: tmp.size()=" + tmp.size () + " != nseq=" + nSeq + " in getOrderByTree - tree contains sequences not in alignment");
-}}return tmp;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");
-c$.sortByTree = Clazz.defineMethod (c$, "sortByTree",
-function (align, tree) {
-var tmp = jalview.analysis.AlignmentSorter.getOrderByTree (align, tree);
-if (jalview.analysis.AlignmentSorter.lastTree !== tree) {
-jalview.analysis.AlignmentSorter.sortTreeAscending = true;
-jalview.analysis.AlignmentSorter.lastTree = tree;
-} else {
-jalview.analysis.AlignmentSorter.sortTreeAscending = !jalview.analysis.AlignmentSorter.sortTreeAscending;
-}if (jalview.analysis.AlignmentSorter.sortTreeAscending) {
-jalview.analysis.AlignmentSorter.setOrder (align, tmp);
-} else {
-jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
-}}, "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");
-c$.addStrays = Clazz.defineMethod (c$, "addStrays",
-($fz = function (align, tmp) {
-var nSeq = align.getHeight ();
-for (var i = 0; i < nSeq; i++) {
-if (!tmp.contains (align.getSequenceAt (i))) {
-tmp.add (align.getSequenceAt (i));
-}}
-if (nSeq != tmp.size ()) {
-System.err.println ("ERROR: Size still not right even after addStrays");
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");
-c$._sortByTree = Clazz.defineMethod (c$, "_sortByTree",
-($fz = function (node, tmp, seqset) {
-if (node == null) {
-return tmp;
-}var left = node.left ();
-var right = node.right ();
-if ((left == null) && (right == null)) {
-if (!node.isPlaceholder () && (node.element () != null)) {
-if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
-if (!tmp.contains (node.element ())) {
-tmp.add (node.element ());
-}}}return tmp;
-} else {
-jalview.analysis.AlignmentSorter._sortByTree (left, tmp, seqset);
-jalview.analysis.AlignmentSorter._sortByTree (right, tmp, seqset);
-}return tmp;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode,java.util.List,java.util.List");
-c$.recoverOrder = Clazz.defineMethod (c$, "recoverOrder",
-function (alignment) {
-var ids = Clazz.newFloatArray (alignment.length, 0);
-for (var i = 0; i < alignment.length; i++) {
-ids[i] = ( new Float (alignment[i].getName ().substring (8))).floatValue ();
-}
-jalview.util.QuickSort.sortFloatObject (ids, alignment);
-}, "~A");
-c$.sortByAnnotationScore = Clazz.defineMethod (c$, "sortByAnnotationScore",
-function (scoreLabel, alignment) {
-var seqs = alignment.getSequencesArray ();
-var hasScore = Clazz.newBooleanArray (seqs.length, false);
-var hasScores = 0;
-var scores = Clazz.newDoubleArray (seqs.length, 0);
-var min = 0;
-var max = 0;
-for (var i = 0; i < seqs.length; i++) {
-var scoreAnn = seqs[i].getAnnotation (scoreLabel);
-if (scoreAnn != null) {
-hasScores++;
-hasScore[i] = true;
-scores[i] = scoreAnn[0].getScore ();
-if (hasScores == 1) {
-max = min = scores[i];
-} else {
-if (max < scores[i]) {
-max = scores[i];
-}if (min > scores[i]) {
-min = scores[i];
-}}} else {
-hasScore[i] = false;
-}}
-if (hasScores == 0) {
-return;
-}if (hasScores < seqs.length) {
-for (var i = 0; i < seqs.length; i++) {
-if (!hasScore[i]) {
-scores[i] = (max + i + 1.0);
-}}
-}jalview.util.QuickSort.sortDouble (scores, seqs);
-if (jalview.analysis.AlignmentSorter.lastSortByScore !== scoreLabel) {
-jalview.analysis.AlignmentSorter.lastSortByScore = scoreLabel;
-jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);
-} else {
-jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);
-}}, "~S,jalview.datamodel.AlignmentI");
-c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature",
-function (featureLabel, groupLabel, start, stop, alignment, method) {
-jalview.analysis.AlignmentSorter.sortByFeature (featureLabel == null ? null : Clazz.newArray (-1, [featureLabel]), groupLabel == null ? null : Clazz.newArray (-1, [groupLabel]), start, stop, alignment, method);
-}, "~S,~S,~N,~N,jalview.datamodel.AlignmentI,~S");
-c$.containsIgnoreCase = Clazz.defineMethod (c$, "containsIgnoreCase",
-($fz = function (lab, labs) {
-if (labs == null) {
-return true;
-}if (lab == null) {
-return false;
-}for (var q = 0; q < labs.length; q++) {
-if (labs[q] != null && lab.equalsIgnoreCase (labs[q])) {
-return true;
-}}
-return false;
-}, $fz.isPrivate = true, $fz), "~S,~A");
-c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature",
-function (featureLabels, groupLabels, start, stop, alignment, method) {
-if (method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE && method !== jalview.analysis.AlignmentSorter.FEATURE_LABEL && method !== jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_sortbyfeature"));
-}var ignoreScore = method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE;
-var scoreLabel = new StringBuffer ();
-scoreLabel.append (start + stop + method);
-for (var i = 0; featureLabels != null && i < featureLabels.length; i++) {
-scoreLabel.append (featureLabels[i] == null ? "null" : featureLabels[i]);
-}
-for (var i = 0; groupLabels != null && i < groupLabels.length; i++) {
-scoreLabel.append (groupLabels[i] == null ? "null" : groupLabels[i]);
-}
-var seqs = alignment.getSequencesArray ();
-var hasScore = Clazz.newBooleanArray (seqs.length, false);
-var hasScores = 0;
-var scores = Clazz.newDoubleArray (seqs.length, 0);
-var seqScores = Clazz.newIntArray (seqs.length, 0);
-var feats = new Array (seqs.length);
-var min = 0;
-var max = 0;
-for (var i = 0; i < seqs.length; i++) {
-var sf = seqs[i].getSequenceFeatures ();
-if (sf == null) {
-sf = new Array (0);
-} else {
-var tmp = new Array (sf.length);
-for (var s = 0; s < tmp.length; s++) {
-tmp[s] = sf[s];
-}
-sf = tmp;
-}var sstart = (start == -1) ? start : seqs[i].findPosition (start);
-var sstop = (stop == -1) ? stop : seqs[i].findPosition (stop);
-seqScores[i] = 0;
-scores[i] = 0.0;
-var n = sf.length;
-for (var f = 0; f < sf.length; f++) {
-if ((sf[f].end < sstart || sf[f].begin > sstop) || (featureLabels != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].type, featureLabels)) || (groupLabels != null && (sf[f].getFeatureGroup () != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].getFeatureGroup (), groupLabels)))) {
-sf[f] = null;
-n--;
-} else {
-if (!ignoreScore && !Float.isNaN (sf[f].getScore ())) {
-if (seqScores[i] == 0) {
-hasScores++;
-}seqScores[i]++;
-hasScore[i] = true;
-scores[i] += sf[f].getScore ();
-}}}
-var fs;
-feats[i] = fs = new Array (n);
-if (n > 0) {
-n = 0;
-for (var f = 0; f < sf.length; f++) {
-if (sf[f] != null) {
-(feats[i])[n++] = sf[f];
-}}
-if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {
-var labs = new Array (fs.length);
-for (var l = 0; l < labs.length; l++) {
-labs[l] = (fs[l].getDescription () != null ? fs[l].getDescription () : fs[l].getType ());
-}
-jalview.util.QuickSort.sort (labs, (feats[i]));
-}}if (hasScore[i]) {
-scores[i] /= seqScores[i];
-if (hasScores == 1) {
-max = min = scores[i];
-} else {
-if (max < scores[i]) {
-max = scores[i];
-}if (min > scores[i]) {
-min = scores[i];
-}}}}
-if (method === jalview.analysis.AlignmentSorter.FEATURE_SCORE) {
-if (hasScores == 0) {
-return;
-}if (hasScores < seqs.length) {
-for (var i = 0; i < seqs.length; i++) {
-if (!hasScore[i]) {
-scores[i] = (max + 1 + i);
-} else {
-var nf = (feats[i] == null) ? 0 : (feats[i]).length;
-}}
-}jalview.util.QuickSort.sortDouble (scores, seqs);
-} else if (method === jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {
-var fr = 0.9 / (1.0 * seqs.length);
-for (var i = 0; i < seqs.length; i++) {
-var nf;
-scores[i] = (0.05 + fr * i) + (nf = ((feats[i] == null) ? 0.0 : 1.0 * (feats[i]).length));
-}
-jalview.util.QuickSort.sortDouble (scores, seqs);
-} else {
-if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {
-throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented"));
-}}if (jalview.analysis.AlignmentSorter.lastSortByFeatureScore == null || !scoreLabel.toString ().equals (jalview.analysis.AlignmentSorter.lastSortByFeatureScore)) {
-jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = true;
-} else {
-jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = !jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending;
-}if (jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending) {
-jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);
-} else {
-jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);
-}jalview.analysis.AlignmentSorter.lastSortByFeatureScore = scoreLabel.toString ();
-}, "~A,~A,~N,~N,jalview.datamodel.AlignmentI,~S");
-Clazz.defineStatics (c$,
-"sortIdAscending", true,
-"lastGroupHash", 0,
-"sortGroupAscending", true,
-"lastOrder", null,
-"sortOrderAscending", true,
-"lastTree", null,
-"sortTreeAscending", true,
-"lastSortByScore", null,
-"sortByScoreAscending", true,
-"lastSortByFeatureScore", null,
-"sortByFeatureScoreAscending", true,
-"sortLengthAscending", false,
-"FEATURE_SCORE", "average_score",
-"FEATURE_LABEL", "text",
-"FEATURE_DENSITY", "density");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.AlignmentSorter", ["jalview.datamodel.SequenceI", "jalview.util.Comparison", "$.MessageManager", "$.QuickSort", "java.lang.Error", "$.Float", "$.StringBuffer", "java.util.ArrayList"], function () {
+c$ = Clazz.declareType (jalview.analysis, "AlignmentSorter");
+c$.sortByPID = Clazz.defineMethod (c$, "sortByPID",
+function (align, s, tosort) {
+jalview.analysis.AlignmentSorter.sortByPID (align, s, tosort, 0, -1);
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A");
+c$.sortByPID = Clazz.defineMethod (c$, "sortByPID",
+function (align, s, tosort, start, end) {
+var nSeq = align.getHeight ();
+var scores = Clazz.newFloatArray (nSeq, 0);
+var seqs = new Array (nSeq);
+for (var i = 0; i < nSeq; i++) {
+scores[i] = jalview.util.Comparison.PID (align.getSequenceAt (i).getSequenceAsString (), s.getSequenceAsString ());
+seqs[i] = align.getSequenceAt (i);
+}
+jalview.util.QuickSort.sortFloatObject (scores, seqs);
+jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI,~A,~N,~N");
+c$.setReverseOrder = Clazz.defineMethod (c$, "setReverseOrder",
+($fz = function (align, seqs) {
+var nSeq = seqs.length;
+var len = 0;
+if ((nSeq % 2) == 0) {
+len = Clazz.doubleToInt (nSeq / 2);
+} else {
+len = Clazz.doubleToInt ((nSeq + 1) / 2);
+}var asq;
+{
+for (var i = 0; i < len; i++) {
+asq.set (i, seqs[nSeq - i - 1]);
+asq.set (nSeq - i - 1, seqs[i]);
+}
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~A");
+c$.setOrder = Clazz.defineMethod (c$, "setOrder",
+($fz = function (align, tmp) {
+jalview.analysis.AlignmentSorter.setOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");
+c$.setOrder = Clazz.defineMethod (c$, "setOrder",
+function (align, seqs) {
+var algn;
+{
+var tmp = new java.util.ArrayList ();
+for (var i = 0; i < seqs.length; i++) {
+if (algn.contains (seqs[i])) {
+tmp.add (seqs[i]);
+}}
+algn.clear ();
+for (var i = 0; i < tmp.size (); i++) {
+algn.add (tmp.get (i));
+}
+}}, "jalview.datamodel.AlignmentI,~A");
+c$.sortByID = Clazz.defineMethod (c$, "sortByID",
+function (align) {
+var nSeq = align.getHeight ();
+var ids = new Array (nSeq);
+var seqs = new Array (nSeq);
+for (var i = 0; i < nSeq; i++) {
+ids[i] = align.getSequenceAt (i).getName ();
+seqs[i] = align.getSequenceAt (i);
+}
+jalview.util.QuickSort.sort (ids, seqs);
+if (jalview.analysis.AlignmentSorter.sortIdAscending) {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setOrder (align, seqs);
+}jalview.analysis.AlignmentSorter.sortIdAscending = !jalview.analysis.AlignmentSorter.sortIdAscending;
+}, "jalview.datamodel.AlignmentI");
+c$.sortByLength = Clazz.defineMethod (c$, "sortByLength",
+function (align) {
+var nSeq = align.getHeight ();
+var length = Clazz.newFloatArray (nSeq, 0);
+var seqs = new Array (nSeq);
+for (var i = 0; i < nSeq; i++) {
+seqs[i] = align.getSequenceAt (i);
+length[i] = (seqs[i].getEnd () - seqs[i].getStart ());
+}
+jalview.util.QuickSort.sortFloatObject (length, seqs);
+if (jalview.analysis.AlignmentSorter.sortLengthAscending) {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setOrder (align, seqs);
+}jalview.analysis.AlignmentSorter.sortLengthAscending = !jalview.analysis.AlignmentSorter.sortLengthAscending;
+}, "jalview.datamodel.AlignmentI");
+c$.sortByGroup = Clazz.defineMethod (c$, "sortByGroup",
+function (align) {
+var groups = new java.util.ArrayList ();
+if (groups.hashCode () != jalview.analysis.AlignmentSorter.lastGroupHash) {
+jalview.analysis.AlignmentSorter.sortGroupAscending = true;
+jalview.analysis.AlignmentSorter.lastGroupHash = groups.hashCode ();
+} else {
+jalview.analysis.AlignmentSorter.sortGroupAscending = !jalview.analysis.AlignmentSorter.sortGroupAscending;
+}for (var sg, $sg = align.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+for (var j = 0; j < groups.size (); j++) {
+var sg2 = groups.get (j);
+if (sg.getSize () > sg2.getSize ()) {
+groups.add (j, sg);
+break;
+}}
+if (!groups.contains (sg)) {
+groups.add (sg);
+}}
+var seqs = new java.util.ArrayList ();
+for (var i = 0; i < groups.size (); i++) {
+var sg = groups.get (i);
+var orderedseqs = sg.getSequencesInOrder (align);
+for (var j = 0; j < orderedseqs.length; j++) {
+seqs.add (orderedseqs[j]);
+}
+}
+if (jalview.analysis.AlignmentSorter.sortGroupAscending) {
+jalview.analysis.AlignmentSorter.setOrder (align, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (seqs, align.getSequences ()));
+}}, "jalview.datamodel.AlignmentI");
+c$.vectorSubsetToArray = Clazz.defineMethod (c$, "vectorSubsetToArray",
+($fz = function (tmp, mask) {
+var seqs = new java.util.ArrayList ();
+var i;
+var idx;
+var tmask = Clazz.newBooleanArray (mask.size (), false);
+for (i = 0; i < mask.size (); i++) {
+tmask[i] = true;
+}
+for (i = 0; i < tmp.size (); i++) {
+var sq = tmp.get (i);
+idx = mask.indexOf (sq);
+if (idx > -1 && tmask[idx]) {
+tmask[idx] = false;
+seqs.add (sq);
+}}
+for (i = 0; i < tmask.length; i++) {
+if (tmask[i]) {
+seqs.add (mask.get (i));
+}}
+return seqs.toArray ( new Array (seqs.size ()));
+}, $fz.isPrivate = true, $fz), "java.util.List,java.util.List");
+c$.sortBy = Clazz.defineMethod (c$, "sortBy",
+function (align, order) {
+var tmp = order.getOrder ();
+if (jalview.analysis.AlignmentSorter.lastOrder === order) {
+jalview.analysis.AlignmentSorter.sortOrderAscending = !jalview.analysis.AlignmentSorter.sortOrderAscending;
+} else {
+jalview.analysis.AlignmentSorter.sortOrderAscending = true;
+}if (jalview.analysis.AlignmentSorter.sortOrderAscending) {
+jalview.analysis.AlignmentSorter.setOrder (align, tmp);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
+}}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentOrder");
+c$.getOrderByTree = Clazz.defineMethod (c$, "getOrderByTree",
+($fz = function (align, tree) {
+var nSeq = align.getHeight ();
+var tmp = new java.util.ArrayList ();
+tmp = jalview.analysis.AlignmentSorter._sortByTree (tree.getTopNode (), tmp, align.getSequences ());
+if (tmp.size () != nSeq) {
+if (tmp.size () != nSeq) {
+jalview.analysis.AlignmentSorter.addStrays (align, tmp);
+}if (tmp.size () != nSeq) {
+System.err.println ("WARNING: tmp.size()=" + tmp.size () + " != nseq=" + nSeq + " in getOrderByTree - tree contains sequences not in alignment");
+}}return tmp;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");
+c$.sortByTree = Clazz.defineMethod (c$, "sortByTree",
+function (align, tree) {
+var tmp = jalview.analysis.AlignmentSorter.getOrderByTree (align, tree);
+if (jalview.analysis.AlignmentSorter.lastTree !== tree) {
+jalview.analysis.AlignmentSorter.sortTreeAscending = true;
+jalview.analysis.AlignmentSorter.lastTree = tree;
+} else {
+jalview.analysis.AlignmentSorter.sortTreeAscending = !jalview.analysis.AlignmentSorter.sortTreeAscending;
+}if (jalview.analysis.AlignmentSorter.sortTreeAscending) {
+jalview.analysis.AlignmentSorter.setOrder (align, tmp);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (align, jalview.analysis.AlignmentSorter.vectorSubsetToArray (tmp, align.getSequences ()));
+}}, "jalview.datamodel.AlignmentI,jalview.analysis.NJTree");
+c$.addStrays = Clazz.defineMethod (c$, "addStrays",
+($fz = function (align, tmp) {
+var nSeq = align.getHeight ();
+for (var i = 0; i < nSeq; i++) {
+if (!tmp.contains (align.getSequenceAt (i))) {
+tmp.add (align.getSequenceAt (i));
+}}
+if (nSeq != tmp.size ()) {
+System.err.println ("ERROR: Size still not right even after addStrays");
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");
+c$._sortByTree = Clazz.defineMethod (c$, "_sortByTree",
+($fz = function (node, tmp, seqset) {
+if (node == null) {
+return tmp;
+}var left = node.left ();
+var right = node.right ();
+if ((left == null) && (right == null)) {
+if (!node.isPlaceholder () && (node.element () != null)) {
+if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
+if (!tmp.contains (node.element ())) {
+tmp.add (node.element ());
+}}}return tmp;
+} else {
+jalview.analysis.AlignmentSorter._sortByTree (left, tmp, seqset);
+jalview.analysis.AlignmentSorter._sortByTree (right, tmp, seqset);
+}return tmp;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode,java.util.List,java.util.List");
+c$.recoverOrder = Clazz.defineMethod (c$, "recoverOrder",
+function (alignment) {
+var ids = Clazz.newFloatArray (alignment.length, 0);
+for (var i = 0; i < alignment.length; i++) {
+ids[i] = ( new Float (alignment[i].getName ().substring (8))).floatValue ();
+}
+jalview.util.QuickSort.sortFloatObject (ids, alignment);
+}, "~A");
+c$.sortByAnnotationScore = Clazz.defineMethod (c$, "sortByAnnotationScore",
+function (scoreLabel, alignment) {
+var seqs = alignment.getSequencesArray ();
+var hasScore = Clazz.newBooleanArray (seqs.length, false);
+var hasScores = 0;
+var scores = Clazz.newDoubleArray (seqs.length, 0);
+var min = 0;
+var max = 0;
+for (var i = 0; i < seqs.length; i++) {
+var scoreAnn = seqs[i].getAnnotation (scoreLabel);
+if (scoreAnn != null) {
+hasScores++;
+hasScore[i] = true;
+scores[i] = scoreAnn[0].getScore ();
+if (hasScores == 1) {
+max = min = scores[i];
+} else {
+if (max < scores[i]) {
+max = scores[i];
+}if (min > scores[i]) {
+min = scores[i];
+}}} else {
+hasScore[i] = false;
+}}
+if (hasScores == 0) {
+return;
+}if (hasScores < seqs.length) {
+for (var i = 0; i < seqs.length; i++) {
+if (!hasScore[i]) {
+scores[i] = (max + i + 1.0);
+}}
+}jalview.util.QuickSort.sortDouble (scores, seqs);
+if (jalview.analysis.AlignmentSorter.lastSortByScore !== scoreLabel) {
+jalview.analysis.AlignmentSorter.lastSortByScore = scoreLabel;
+jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);
+}}, "~S,jalview.datamodel.AlignmentI");
+c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature",
+function (featureLabel, groupLabel, start, stop, alignment, method) {
+jalview.analysis.AlignmentSorter.sortByFeature (featureLabel == null ? null : Clazz.newArray (-1, [featureLabel]), groupLabel == null ? null : Clazz.newArray (-1, [groupLabel]), start, stop, alignment, method);
+}, "~S,~S,~N,~N,jalview.datamodel.AlignmentI,~S");
+c$.containsIgnoreCase = Clazz.defineMethod (c$, "containsIgnoreCase",
+($fz = function (lab, labs) {
+if (labs == null) {
+return true;
+}if (lab == null) {
+return false;
+}for (var q = 0; q < labs.length; q++) {
+if (labs[q] != null && lab.equalsIgnoreCase (labs[q])) {
+return true;
+}}
+return false;
+}, $fz.isPrivate = true, $fz), "~S,~A");
+c$.sortByFeature = Clazz.defineMethod (c$, "sortByFeature",
+function (featureLabels, groupLabels, start, stop, alignment, method) {
+if (method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE && method !== jalview.analysis.AlignmentSorter.FEATURE_LABEL && method !== jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_sortbyfeature"));
+}var ignoreScore = method !== jalview.analysis.AlignmentSorter.FEATURE_SCORE;
+var scoreLabel = new StringBuffer ();
+scoreLabel.append (start + stop + method);
+for (var i = 0; featureLabels != null && i < featureLabels.length; i++) {
+scoreLabel.append (featureLabels[i] == null ? "null" : featureLabels[i]);
+}
+for (var i = 0; groupLabels != null && i < groupLabels.length; i++) {
+scoreLabel.append (groupLabels[i] == null ? "null" : groupLabels[i]);
+}
+var seqs = alignment.getSequencesArray ();
+var hasScore = Clazz.newBooleanArray (seqs.length, false);
+var hasScores = 0;
+var scores = Clazz.newDoubleArray (seqs.length, 0);
+var seqScores = Clazz.newIntArray (seqs.length, 0);
+var feats = new Array (seqs.length);
+var min = 0;
+var max = 0;
+for (var i = 0; i < seqs.length; i++) {
+var sf = seqs[i].getSequenceFeatures ();
+if (sf == null) {
+sf = new Array (0);
+} else {
+var tmp = new Array (sf.length);
+for (var s = 0; s < tmp.length; s++) {
+tmp[s] = sf[s];
+}
+sf = tmp;
+}var sstart = (start == -1) ? start : seqs[i].findPosition (start);
+var sstop = (stop == -1) ? stop : seqs[i].findPosition (stop);
+seqScores[i] = 0;
+scores[i] = 0.0;
+var n = sf.length;
+for (var f = 0; f < sf.length; f++) {
+if ((sf[f].end < sstart || sf[f].begin > sstop) || (featureLabels != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].type, featureLabels)) || (groupLabels != null && (sf[f].getFeatureGroup () != null && !jalview.analysis.AlignmentSorter.containsIgnoreCase (sf[f].getFeatureGroup (), groupLabels)))) {
+sf[f] = null;
+n--;
+} else {
+if (!ignoreScore && !Float.isNaN (sf[f].getScore ())) {
+if (seqScores[i] == 0) {
+hasScores++;
+}seqScores[i]++;
+hasScore[i] = true;
+scores[i] += sf[f].getScore ();
+}}}
+var fs;
+feats[i] = fs = new Array (n);
+if (n > 0) {
+n = 0;
+for (var f = 0; f < sf.length; f++) {
+if (sf[f] != null) {
+(feats[i])[n++] = sf[f];
+}}
+if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {
+var labs = new Array (fs.length);
+for (var l = 0; l < labs.length; l++) {
+labs[l] = (fs[l].getDescription () != null ? fs[l].getDescription () : fs[l].getType ());
+}
+jalview.util.QuickSort.sort (labs, (feats[i]));
+}}if (hasScore[i]) {
+scores[i] /= seqScores[i];
+if (hasScores == 1) {
+max = min = scores[i];
+} else {
+if (max < scores[i]) {
+max = scores[i];
+}if (min > scores[i]) {
+min = scores[i];
+}}}}
+if (method === jalview.analysis.AlignmentSorter.FEATURE_SCORE) {
+if (hasScores == 0) {
+return;
+}if (hasScores < seqs.length) {
+for (var i = 0; i < seqs.length; i++) {
+if (!hasScore[i]) {
+scores[i] = (max + 1 + i);
+} else {
+var nf = (feats[i] == null) ? 0 : (feats[i]).length;
+}}
+}jalview.util.QuickSort.sortDouble (scores, seqs);
+} else if (method === jalview.analysis.AlignmentSorter.FEATURE_DENSITY) {
+var fr = 0.9 / (1.0 * seqs.length);
+for (var i = 0; i < seqs.length; i++) {
+var nf;
+scores[i] = (0.05 + fr * i) + (nf = ((feats[i] == null) ? 0.0 : 1.0 * (feats[i]).length));
+}
+jalview.util.QuickSort.sortDouble (scores, seqs);
+} else {
+if (method === jalview.analysis.AlignmentSorter.FEATURE_LABEL) {
+throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented"));
+}}if (jalview.analysis.AlignmentSorter.lastSortByFeatureScore == null || !scoreLabel.toString ().equals (jalview.analysis.AlignmentSorter.lastSortByFeatureScore)) {
+jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = true;
+} else {
+jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending = !jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending;
+}if (jalview.analysis.AlignmentSorter.sortByFeatureScoreAscending) {
+jalview.analysis.AlignmentSorter.setOrder (alignment, seqs);
+} else {
+jalview.analysis.AlignmentSorter.setReverseOrder (alignment, seqs);
+}jalview.analysis.AlignmentSorter.lastSortByFeatureScore = scoreLabel.toString ();
+}, "~A,~A,~N,~N,jalview.datamodel.AlignmentI,~S");
+Clazz.defineStatics (c$,
+"sortIdAscending", true,
+"lastGroupHash", 0,
+"sortGroupAscending", true,
+"lastOrder", null,
+"sortOrderAscending", true,
+"lastTree", null,
+"sortTreeAscending", true,
+"lastSortByScore", null,
+"sortByScoreAscending", true,
+"lastSortByFeatureScore", null,
+"sortByFeatureScoreAscending", true,
+"sortLengthAscending", false,
+"FEATURE_SCORE", "average_score",
+"FEATURE_LABEL", "text",
+"FEATURE_DENSITY", "density");
+});
diff --git a/bin/jalview/analysis/AlignmentUtils.class b/bin/jalview/analysis/AlignmentUtils.class
index c52a1d7..85e58d3 100644
Binary files a/bin/jalview/analysis/AlignmentUtils.class and b/bin/jalview/analysis/AlignmentUtils.class differ
diff --git a/bin/jalview/analysis/AlignmentUtils.js b/bin/jalview/analysis/AlignmentUtils.js
index 6af5e7a..2990b03 100644
--- a/bin/jalview/analysis/AlignmentUtils.js
+++ b/bin/jalview/analysis/AlignmentUtils.js
@@ -1,532 +1,532 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.AlignmentUtils", ["jalview.analysis.CodonComparator", "jalview.datamodel.AlignedCodonFrame", "$.Alignment", "$.AlignmentAnnotation", "$.DBRefEntry", "$.DBRefSource", "$.FeatureProperties", "$.SearchResults", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.DBRefUtils", "$.MapList", "$.MappingUtils", "java.lang.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.HashMap", "$.HashSet", "$.LinkedHashMap", "$.LinkedHashSet", "$.TreeMap"], function () {
-c$ = Clazz.declareType (jalview.analysis, "AlignmentUtils");
-c$.expandContext = Clazz.defineMethod (c$, "expandContext",
-function (core, flankSize) {
-var sq = new java.util.ArrayList ();
-var maxoffset = 0;
-for (var s, $s = core.getSequences ().iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
-var newSeq = s.deriveSequence ();
-var newSeqStart = newSeq.getStart () - 1;
-if (newSeqStart > maxoffset && newSeq.getDatasetSequence ().getStart () < s.getStart ()) {
-maxoffset = newSeqStart;
-}sq.add (newSeq);
-}
-if (flankSize > -1) {
-maxoffset = Math.min (maxoffset, flankSize);
-}for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
-var ds = s;
-while (ds.getDatasetSequence () != null) {
-ds = ds.getDatasetSequence ();
-}
-var s_end = s.findPosition (s.getStart () + s.getLength ());
-var ustream_ds = s.getStart () - ds.getStart ();
-var dstream_ds = ds.getEnd () - s_end;
-var offset = maxoffset - ustream_ds;
-if (flankSize >= 0) {
-if (flankSize < ustream_ds) {
-offset = maxoffset - flankSize;
-ustream_ds = flankSize;
-}if (flankSize <= dstream_ds) {
-dstream_ds = flankSize - 1;
-}}var upstream = String.instantialize (ds.getSequence (s.getStart () - 1 - ustream_ds, s.getStart () - 1)).toLowerCase ().toCharArray ();
-var downstream = String.instantialize (ds.getSequence (s_end - 1, s_end + dstream_ds)).toLowerCase ().toCharArray ();
-var coreseq = s.getSequence ();
-var nseq = Clazz.newCharArray (offset + upstream.length + downstream.length + coreseq.length, '\0');
-var c = core.getGapCharacter ();
-var p = 0;
-for (; p < offset; p++) {
-nseq[p] = c;
-}
-System.arraycopy (upstream, 0, nseq, p, upstream.length);
-System.arraycopy (coreseq, 0, nseq, p + upstream.length, coreseq.length);
-System.arraycopy (downstream, 0, nseq, p + coreseq.length + upstream.length, downstream.length);
-s.setSequence ( String.instantialize (nseq));
-s.setStart (s.getStart () - ustream_ds);
-s.setEnd (s_end + downstream.length);
-}
-var newAl = new jalview.datamodel.Alignment (sq.toArray ( new Array (0)));
-for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
-if (s.getAnnotation () != null) {
-for (var aa, $aa = 0, $$aa = s.getAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
-aa.adjustForAlignment ();
-newAl.addAnnotation (aa);
-}
-}}
-newAl.setDataset (core.getDataset ());
-return newAl;
-}, "jalview.datamodel.AlignmentI,~N");
-c$.getSequenceIndex = Clazz.defineMethod (c$, "getSequenceIndex",
-function (al, seq) {
-var result = -1;
-var pos = 0;
-for (var alSeq, $alSeq = al.getSequences ().iterator (); $alSeq.hasNext () && ((alSeq = $alSeq.next ()) || true);) {
-if (alSeq === seq) {
-result = pos;
-break;
-}pos++;
-}
-return result;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");
-c$.getSequencesByName = Clazz.defineMethod (c$, "getSequencesByName",
-function (al) {
-var theMap = new java.util.LinkedHashMap ();
-for (var seq, $seq = al.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-var name = seq.getName ();
-if (name != null) {
-var seqs = theMap.get (name);
-if (seqs == null) {
-seqs = new java.util.ArrayList ();
-theMap.put (name, seqs);
-}seqs.add (seq);
-}}
-return theMap;
-}, "jalview.datamodel.AlignmentI");
-c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna",
-function (proteinAlignment, cdnaAlignment) {
-if (proteinAlignment == null || cdnaAlignment == null) {
-return false;
-}var mappedDna = new java.util.HashSet ();
-var mappedProtein = new java.util.HashSet ();
-var mappingPerformed = jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, true);
-mappingPerformed = new Boolean (mappingPerformed | jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, false)).valueOf ();
-return mappingPerformed;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
-c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna",
-function (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, xrefsOnly) {
-var mappingPerformed = false;
-var thisSeqs = proteinAlignment.getSequences ();
-for (var aaSeq, $aaSeq = thisSeqs.iterator (); $aaSeq.hasNext () && ((aaSeq = $aaSeq.next ()) || true);) {
-var proteinMapped = false;
-var acf = new jalview.datamodel.AlignedCodonFrame ();
-for (var cdnaSeq, $cdnaSeq = cdnaAlignment.getSequences ().iterator (); $cdnaSeq.hasNext () && ((cdnaSeq = $cdnaSeq.next ()) || true);) {
-if (xrefsOnly && !jalview.analysis.AlignmentUtils.haveCrossRef (aaSeq, cdnaSeq)) {
-continue;
-}if (!xrefsOnly && (mappedProtein.contains (aaSeq) || mappedDna.contains (cdnaSeq))) {
-continue;
-}if (!jalview.analysis.AlignmentUtils.mappingExists (proteinAlignment.getCodonFrames (), aaSeq.getDatasetSequence (), cdnaSeq.getDatasetSequence ())) {
-var map = jalview.analysis.AlignmentUtils.mapProteinToCdna (aaSeq, cdnaSeq);
-if (map != null) {
-acf.addMap (cdnaSeq, aaSeq, map);
-mappingPerformed = true;
-proteinMapped = true;
-mappedDna.add (cdnaSeq);
-mappedProtein.add (aaSeq);
-}}}
-if (proteinMapped) {
-proteinAlignment.addCodonFrame (acf);
-}}
-return mappingPerformed;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI,java.util.Set,java.util.Set,~B");
-c$.mappingExists = Clazz.defineMethod (c$, "mappingExists",
-function (set, aaSeq, cdnaSeq) {
-if (set != null) {
-for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-if (cdnaSeq === acf.getDnaForAaSeq (aaSeq)) {
-return true;
-}}
-}return false;
-}, "java.util.Set,jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
-c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna",
-function (proteinSeq, cdnaSeq) {
-var proteinDataset = proteinSeq.getDatasetSequence ();
-var aaSeqChars = proteinDataset != null ? proteinDataset.getSequence () : proteinSeq.getSequence ();
-var cdnaDataset = cdnaSeq.getDatasetSequence ();
-var cdnaSeqChars = cdnaDataset != null ? cdnaDataset.getSequence () : cdnaSeq.getSequence ();
-if (aaSeqChars == null || cdnaSeqChars == null) {
-return null;
-}var mappedLength = 3 * aaSeqChars.length;
-var cdnaLength = cdnaSeqChars.length;
-var cdnaStart = 1;
-var cdnaEnd = cdnaLength;
-var proteinStart = 1;
-var proteinEnd = aaSeqChars.length;
-if (cdnaLength != mappedLength && cdnaLength > 2) {
-var lastCodon = String.valueOf (cdnaSeqChars, cdnaLength - 3, 3).toUpperCase ();
-for (var stop, $stop = jalview.schemes.ResidueProperties.STOP.iterator (); $stop.hasNext () && ((stop = $stop.next ()) || true);) {
-if (lastCodon.equals (stop)) {
-cdnaEnd -= 3;
-cdnaLength -= 3;
-break;
-}}
-}if (cdnaLength != mappedLength && cdnaLength > 2 && String.valueOf (cdnaSeqChars, 0, 3).toUpperCase ().equals (jalview.schemes.ResidueProperties.START)) {
-cdnaStart += 3;
-cdnaLength -= 3;
-}if (cdnaLength != mappedLength) {
-return null;
-}if (!jalview.analysis.AlignmentUtils.translatesAs (cdnaSeqChars, cdnaStart - 1, aaSeqChars)) {
-return null;
-}var map = new jalview.util.MapList ( Clazz.newIntArray (-1, [cdnaStart, cdnaEnd]), Clazz.newIntArray (-1, [1, proteinEnd]), 3, 1);
-return map;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
-c$.translatesAs = Clazz.defineMethod (c$, "translatesAs",
-function (cdnaSeqChars, cdnaStart, aaSeqChars) {
-var aaResidue = 0;
-for (var i = cdnaStart; i < cdnaSeqChars.length - 2 && aaResidue < aaSeqChars.length; i += 3, aaResidue++) {
-var codon = String.valueOf (cdnaSeqChars, i, 3);
-var translated = jalview.schemes.ResidueProperties.codonTranslate (codon);
-var aaRes = aaSeqChars[aaResidue];
-if ((translated == null || "STOP".equals (translated)) && aaRes == 'X') {
-continue;
-}if (translated == null || !(aaRes == translated.charAt (0))) {
-return false;
-}}
-return (aaResidue == aaSeqChars.length);
-}, "~A,~N,~A");
-c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs",
-function (seq, al, gap, preserveMappedGaps, preserveUnmappedGaps) {
-var mappings = al.getCodonFrame (seq);
-if (mappings == null || mappings.isEmpty ()) {
-return false;
-}var alignFrom = null;
-var mapping = null;
-for (var mp, $mp = mappings.iterator (); $mp.hasNext () && ((mp = $mp.next ()) || true);) {
-alignFrom = mp.findAlignedSequence (seq.getDatasetSequence (), al);
-if (alignFrom != null) {
-mapping = mp;
-break;
-}}
-if (alignFrom == null) {
-return false;
-}jalview.analysis.AlignmentUtils.alignSequenceAs (seq, alignFrom, mapping, gap, al.getGapCharacter (), preserveMappedGaps, preserveUnmappedGaps);
-return true;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,~S,~B,~B");
-c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs",
-function (alignTo, alignFrom, mapping, myGap, sourceGap, preserveMappedGaps, preserveUnmappedGaps) {
-var thisSeq = alignTo.getSequence ();
-var thatAligned = alignFrom.getSequence ();
-var thisAligned = new StringBuilder (2 * thisSeq.length);
-var thisSeqPos = 0;
-var sourceDsPos = 0;
-var basesWritten = 0;
-var myGapChar = myGap.charAt (0);
-var ratio = myGap.length;
-var sourceGapMappedLength = 0;
-var inExon = false;
-for (var sourceChar, $sourceChar = 0, $$sourceChar = thatAligned; $sourceChar < $$sourceChar.length && ((sourceChar = $$sourceChar[$sourceChar]) || true); $sourceChar++) {
-if (sourceChar == sourceGap) {
-sourceGapMappedLength += ratio;
-continue;
-}sourceDsPos++;
-var mappedPos = mapping.getMappedRegion (alignTo, alignFrom, sourceDsPos);
-if (mappedPos == null) {
-System.err.println ("Can't align: no codon mapping to residue " + sourceDsPos + "(" + sourceChar + ")");
-return;
-}var mappedCodonStart = mappedPos[0];
-var mappedCodonEnd = mappedPos[mappedPos.length - 1];
-var trailingCopiedGap = new StringBuilder ();
-var intronLength = 0;
-while (basesWritten < mappedCodonEnd && thisSeqPos < thisSeq.length) {
-var c = thisSeq[thisSeqPos++];
-if (c != myGapChar) {
-basesWritten++;
-if (basesWritten < mappedCodonStart) {
-if (preserveUnmappedGaps && trailingCopiedGap.length () > 0) {
-thisAligned.append (trailingCopiedGap.toString ());
-intronLength += trailingCopiedGap.length ();
-trailingCopiedGap = new StringBuilder ();
-}intronLength++;
-inExon = false;
-} else {
-var startOfCodon = basesWritten == mappedCodonStart;
-var gapsToAdd = jalview.analysis.AlignmentUtils.calculateGapsToInsert (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingCopiedGap.length (), intronLength, startOfCodon);
-for (var i = 0; i < gapsToAdd; i++) {
-thisAligned.append (myGapChar);
-}
-sourceGapMappedLength = 0;
-inExon = true;
-}thisAligned.append (c);
-trailingCopiedGap = new StringBuilder ();
-} else {
-if (inExon && preserveMappedGaps) {
-trailingCopiedGap.append (myGapChar);
-} else if (!inExon && preserveUnmappedGaps) {
-trailingCopiedGap.append (myGapChar);
-}}}
-}
-while (thisSeqPos < thisSeq.length) {
-var c = thisSeq[thisSeqPos++];
-if (c != myGapChar || preserveUnmappedGaps) {
-thisAligned.append (c);
-}}
-alignTo.setSequence ( String.instantialize (thisAligned));
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,~S,~S,~B,~B");
-c$.calculateGapsToInsert = Clazz.defineMethod (c$, "calculateGapsToInsert",
-function (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingGapLength, intronLength, startOfCodon) {
-var gapsToAdd = 0;
-if (startOfCodon) {
-if (inExon && !preserveMappedGaps) {
-trailingGapLength = 0;
-}if (!inExon && !(preserveMappedGaps && preserveUnmappedGaps)) {
-trailingGapLength = 0;
-}if (inExon) {
-gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);
-} else {
-if (intronLength + trailingGapLength <= sourceGapMappedLength) {
-gapsToAdd = sourceGapMappedLength - intronLength;
-} else {
-gapsToAdd = Math.min (intronLength + trailingGapLength - sourceGapMappedLength, trailingGapLength);
-}}} else {
-if (!preserveMappedGaps) {
-trailingGapLength = 0;
-}gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);
-}return gapsToAdd;
-}, "~B,~B,~N,~B,~N,~N,~B");
-c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation",
-function (sequences, gapCharacter, mappings) {
-var alignedSeqs = new java.util.ArrayList ();
-for (var seq, $seq = sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mappings);
-alignedSeqs.addAll (mapped);
-}
-return alignedSeqs;
-}, "java.util.List,~S,java.util.Set");
-c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation",
-function (seq, gapCharacter, mappings) {
-var result = new java.util.ArrayList ();
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
-if (mapping.involvesSequence (seq)) {
-var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mapping);
-if (mapped != null) {
-result.add (mapped);
-}}}
-return result;
-}, "jalview.datamodel.SequenceI,~S,java.util.Set");
-c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation",
-function (seq, gapCharacter, mapping) {
-var gap = String.valueOf (gapCharacter);
-var toDna = false;
-var fromRatio = 1;
-var mapTo = mapping.getDnaForAaSeq (seq);
-if (mapTo != null) {
-toDna = true;
-gap = String.valueOf ( Clazz.newCharArray (-1, [gapCharacter, gapCharacter, gapCharacter]));
-} else {
-mapTo = mapping.getAaForDnaSeq (seq);
-fromRatio = 3;
-}var newseq = new StringBuilder (seq.getLength () * (toDna ? 3 : 1));
-var residueNo = 0;
-var phrase = Clazz.newIntArray (fromRatio, 0);
-var phraseOffset = 0;
-var gapWidth = 0;
-var first = true;
-var alignedSeq = new jalview.datamodel.Sequence ("", "");
-for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
-if (c == gapCharacter) {
-gapWidth++;
-if (gapWidth >= fromRatio) {
-newseq.append (gap);
-gapWidth = 0;
-}} else {
-phrase[phraseOffset++] = residueNo + 1;
-if (phraseOffset == fromRatio) {
-var sr = new jalview.datamodel.SearchResults ();
-for (var pos, $pos = 0, $$pos = phrase; $pos < $$pos.length && ((pos = $$pos[$pos]) || true); $pos++) {
-mapping.markMappedRegion (seq, pos, sr);
-}
-newseq.append (sr.toString ());
-if (first) {
-first = false;
-var mappedTo = sr.getResultSequence (0);
-alignedSeq.setName (mappedTo.getName ());
-alignedSeq.setDescription (mappedTo.getDescription ());
-alignedSeq.setDatasetSequence (mappedTo);
-}phraseOffset = 0;
-}residueNo++;
-}}
-alignedSeq.setSequence (newseq.toString ());
-return alignedSeq;
-}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.AlignedCodonFrame");
-c$.alignProteinAsDna = Clazz.defineMethod (c$, "alignProteinAsDna",
-function (protein, dna) {
-var mappings = protein.getCodonFrames ();
-var alignedCodons = new java.util.TreeMap ( new jalview.analysis.CodonComparator ());
-for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
-var seqMap = mapping.getMappingForSequence (dnaSeq);
-var prot = mapping.findAlignedSequence (dnaSeq.getDatasetSequence (), protein);
-if (prot != null) {
-jalview.analysis.AlignmentUtils.addCodonPositions (dnaSeq, prot, protein.getGapCharacter (), seqMap, alignedCodons);
-}}
-}
-return jalview.analysis.AlignmentUtils.alignProteinAs (protein, alignedCodons);
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
-c$.alignProteinAs = Clazz.defineMethod (c$, "alignProteinAs",
-function (protein, alignedCodons) {
-var alignedWidth = alignedCodons.size ();
-var gaps = Clazz.newCharArray (alignedWidth, '\0');
-java.util.Arrays.fill (gaps, protein.getGapCharacter ());
-var allGaps = String.valueOf (gaps);
-for (var seq, $seq = protein.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-seq.setSequence (allGaps);
-}
-var column = 0;
-for (var codon, $codon = alignedCodons.keySet ().iterator (); $codon.hasNext () && ((codon = $codon.next ()) || true);) {
-var columnResidues = alignedCodons.get (codon);
-for (var entry, $entry = columnResidues.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
-entry.getKey ().getSequence ()[column] = entry.getValue ().charAt (0);
-}
-column++;
-}
-return 0;
-}, "jalview.datamodel.AlignmentI,java.util.Map");
-c$.addCodonPositions = Clazz.defineMethod (c$, "addCodonPositions",
-function (dna, protein, gapChar, seqMap, alignedCodons) {
-var codons = seqMap.getCodonIterator (dna, gapChar);
-while (codons.hasNext ()) {
-var codon = codons.next ();
-var seqProduct = alignedCodons.get (codon);
-if (seqProduct == null) {
-seqProduct = new java.util.HashMap ();
-alignedCodons.put (codon, seqProduct);
-}seqProduct.put (protein, codon.product);
-}
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S,jalview.datamodel.Mapping,java.util.Map");
-c$.isMappable = Clazz.defineMethod (c$, "isMappable",
-function (al1, al2) {
-if (al1.isNucleotide () == al2.isNucleotide ()) {
-return false;
-}var dna = al1.isNucleotide () ? al1 : al2;
-var protein = dna === al1 ? al2 : al1;
-var mappings = protein.getCodonFrames ();
-for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {
-for (var proteinSeq, $proteinSeq = protein.getSequences ().iterator (); $proteinSeq.hasNext () && ((proteinSeq = $proteinSeq.next ()) || true);) {
-if (jalview.analysis.AlignmentUtils.isMappable (dnaSeq, proteinSeq, mappings)) {
-return true;
-}}
-}
-return false;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
-c$.isMappable = Clazz.defineMethod (c$, "isMappable",
-function (dnaSeq, proteinSeq, mappings) {
-var dnaDs = dnaSeq.getDatasetSequence () == null ? dnaSeq : dnaSeq.getDatasetSequence ();
-var proteinDs = proteinSeq.getDatasetSequence () == null ? proteinSeq : proteinSeq.getDatasetSequence ();
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
-if (proteinDs === mapping.getAaForDnaSeq (dnaDs)) {
-return true;
-}}
-return jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinDs, dnaDs) != null;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,java.util.Set");
-c$.findAddableReferenceAnnotations = Clazz.defineMethod (c$, "findAddableReferenceAnnotations",
-function (sequenceScope, labelForCalcId, candidates, al) {
-if (sequenceScope == null) {
-return;
-}for (var seq, $seq = sequenceScope.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-var dataset = seq.getDatasetSequence ();
-if (dataset == null) {
-continue;
-}var datasetAnnotations = dataset.getAnnotation ();
-if (datasetAnnotations == null) {
-continue;
-}var result = new java.util.ArrayList ();
-for (var dsann, $dsann = 0, $$dsann = datasetAnnotations; $dsann < $$dsann.length && ((dsann = $$dsann[$dsann]) || true); $dsann++) {
-var matchedAlignmentAnnotations = al.findAnnotations (seq, dsann.getCalcId (), dsann.label);
-if (!matchedAlignmentAnnotations.iterator ().hasNext ()) {
-result.add (dsann);
-if (labelForCalcId != null) {
-labelForCalcId.put (dsann.getCalcId (), dsann.label);
-}}}
-if (!result.isEmpty ()) {
-candidates.put (seq, result);
-}}
-}, "java.util.List,java.util.Map,java.util.Map,jalview.datamodel.AlignmentI");
-c$.addReferenceAnnotations = Clazz.defineMethod (c$, "addReferenceAnnotations",
-function (annotations, alignment, selectionGroup) {
-for (var seq, $seq = annotations.keySet ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-for (var ann, $ann = annotations.get (seq).iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {
-var copyAnn = new jalview.datamodel.AlignmentAnnotation (ann);
-var startRes = 0;
-var endRes = ann.annotations.length;
-if (selectionGroup != null) {
-startRes = selectionGroup.getStartRes ();
-endRes = selectionGroup.getEndRes ();
-}copyAnn.restrict (startRes, endRes);
-if (!seq.hasAnnotation (ann)) {
-seq.addAlignmentAnnotation (copyAnn);
-}copyAnn.adjustForAlignment ();
-alignment.addAnnotation (copyAnn);
-copyAnn.visible = true;
-}
-}
-}, "java.util.Map,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
-c$.showOrHideSequenceAnnotations = Clazz.defineMethod (c$, "showOrHideSequenceAnnotations",
-function (al, types, forSequences, anyType, doShow) {
-for (var aa, $aa = 0, $$aa = al.getAlignmentAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
-if (anyType || types.contains (aa.label)) {
-if ((aa.sequenceRef != null) && (forSequences == null || forSequences.contains (aa.sequenceRef))) {
-aa.visible = doShow;
-}}}
-}, "jalview.datamodel.AlignmentI,java.util.Collection,java.util.List,~B,~B");
-c$.haveCrossRef = Clazz.defineMethod (c$, "haveCrossRef",
-function (seq1, seq2) {
-return jalview.analysis.AlignmentUtils.hasCrossRef (seq1, seq2) || jalview.analysis.AlignmentUtils.hasCrossRef (seq2, seq1);
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
-c$.hasCrossRef = Clazz.defineMethod (c$, "hasCrossRef",
-function (seq1, seq2) {
-if (seq1 == null || seq2 == null) {
-return false;
-}var name = seq2.getName ();
-var xrefs = seq1.getDBRef ();
-if (xrefs != null) {
-for (var xref, $xref = 0, $$xref = xrefs; $xref < $$xref.length && ((xref = $$xref[$xref]) || true); $xref++) {
-var xrefName = xref.getSource () + "|" + xref.getAccessionId ();
-if (xrefName.equalsIgnoreCase (name)) {
-return true;
-}}
-}return false;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
-c$.makeExonAlignment = Clazz.defineMethod (c$, "makeExonAlignment",
-function (dna, mappings) {
-var newMappings = new java.util.LinkedHashSet ();
-var exonSequences = new java.util.ArrayList ();
-for (var dnaSeq, $dnaSeq = 0, $$dnaSeq = dna; $dnaSeq < $$dnaSeq.length && ((dnaSeq = $$dnaSeq[$dnaSeq]) || true); $dnaSeq++) {
-var ds = dnaSeq.getDatasetSequence ();
-var seqMappings = jalview.util.MappingUtils.findMappingsForSequence (ds, mappings);
-for (var acf, $acf = seqMappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-var newMapping = new jalview.datamodel.AlignedCodonFrame ();
-var mappedExons = jalview.analysis.AlignmentUtils.makeExonSequences (ds, acf, newMapping);
-if (!mappedExons.isEmpty ()) {
-exonSequences.addAll (mappedExons);
-newMappings.add (newMapping);
-}}
-}
-var al = new jalview.datamodel.Alignment (exonSequences.toArray ( new Array (exonSequences.size ())));
-al.setDataset (null);
-mappings.clear ();
-mappings.addAll (newMappings);
-return al;
-}, "~A,java.util.Set");
-c$.makeExonSequences = Clazz.defineMethod (c$, "makeExonSequences",
-function (dnaSeq, mapping, newMapping) {
-var exonSequences = new java.util.ArrayList ();
-var seqMappings = mapping.getMappingsForSequence (dnaSeq);
-var dna = dnaSeq.getSequence ();
-for (var seqMapping, $seqMapping = seqMappings.iterator (); $seqMapping.hasNext () && ((seqMapping = $seqMapping.next ()) || true);) {
-var newSequence = new StringBuilder (dnaSeq.getLength ());
-var dnaExonRanges = seqMapping.getMap ().getFromRanges ();
-for (var range, $range = dnaExonRanges.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
-for (var pos = range[0]; pos <= range[1]; pos++) {
-newSequence.append (dna[pos - 1]);
-}
-}
-var exon = new jalview.datamodel.Sequence (dnaSeq.getName (), newSequence.toString ());
-var cdsAccId = jalview.datamodel.FeatureProperties.getCodingFeature (jalview.datamodel.DBRefSource.EMBL);
-var cdsRefs = jalview.util.DBRefUtils.selectRefs (seqMapping.getTo ().getDBRef (), jalview.datamodel.DBRefSource.CODINGDBS);
-if (cdsRefs != null) {
-for (var cdsRef, $cdsRef = 0, $$cdsRef = cdsRefs; $cdsRef < $$cdsRef.length && ((cdsRef = $$cdsRef[$cdsRef]) || true); $cdsRef++) {
-exon.addDBRef ( new jalview.datamodel.DBRefEntry (cdsRef));
-cdsAccId = cdsRef.getAccessionId ();
-}
-}exon.setName (exon.getName () + "|" + cdsAccId);
-exon.createDatasetSequence ();
-var exonRange = new java.util.ArrayList ();
-exonRange.add ( Clazz.newIntArray (-1, [1, newSequence.length ()]));
-var map = new jalview.util.MapList (exonRange, seqMapping.getMap ().getToRanges (), 3, 1);
-newMapping.addMap (exon.getDatasetSequence (), seqMapping.getTo (), map);
-var cdsToDnaMap = new jalview.util.MapList (dnaExonRanges, exonRange, 1, 1);
-newMapping.addMap (dnaSeq, exon.getDatasetSequence (), cdsToDnaMap);
-exonSequences.add (exon);
-}
-return exonSequences;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,jalview.datamodel.AlignedCodonFrame");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.AlignmentUtils", ["jalview.analysis.CodonComparator", "jalview.datamodel.AlignedCodonFrame", "$.Alignment", "$.AlignmentAnnotation", "$.DBRefEntry", "$.DBRefSource", "$.FeatureProperties", "$.SearchResults", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.DBRefUtils", "$.MapList", "$.MappingUtils", "java.lang.StringBuilder", "java.util.ArrayList", "$.Arrays", "$.HashMap", "$.HashSet", "$.LinkedHashMap", "$.LinkedHashSet", "$.TreeMap"], function () {
+c$ = Clazz.declareType (jalview.analysis, "AlignmentUtils");
+c$.expandContext = Clazz.defineMethod (c$, "expandContext",
+function (core, flankSize) {
+var sq = new java.util.ArrayList ();
+var maxoffset = 0;
+for (var s, $s = core.getSequences ().iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+var newSeq = s.deriveSequence ();
+var newSeqStart = newSeq.getStart () - 1;
+if (newSeqStart > maxoffset && newSeq.getDatasetSequence ().getStart () < s.getStart ()) {
+maxoffset = newSeqStart;
+}sq.add (newSeq);
+}
+if (flankSize > -1) {
+maxoffset = Math.min (maxoffset, flankSize);
+}for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+var ds = s;
+while (ds.getDatasetSequence () != null) {
+ds = ds.getDatasetSequence ();
+}
+var s_end = s.findPosition (s.getStart () + s.getLength ());
+var ustream_ds = s.getStart () - ds.getStart ();
+var dstream_ds = ds.getEnd () - s_end;
+var offset = maxoffset - ustream_ds;
+if (flankSize >= 0) {
+if (flankSize < ustream_ds) {
+offset = maxoffset - flankSize;
+ustream_ds = flankSize;
+}if (flankSize <= dstream_ds) {
+dstream_ds = flankSize - 1;
+}}var upstream = String.instantialize (ds.getSequence (s.getStart () - 1 - ustream_ds, s.getStart () - 1)).toLowerCase ().toCharArray ();
+var downstream = String.instantialize (ds.getSequence (s_end - 1, s_end + dstream_ds)).toLowerCase ().toCharArray ();
+var coreseq = s.getSequence ();
+var nseq = Clazz.newCharArray (offset + upstream.length + downstream.length + coreseq.length, '\0');
+var c = core.getGapCharacter ();
+var p = 0;
+for (; p < offset; p++) {
+nseq[p] = c;
+}
+System.arraycopy (upstream, 0, nseq, p, upstream.length);
+System.arraycopy (coreseq, 0, nseq, p + upstream.length, coreseq.length);
+System.arraycopy (downstream, 0, nseq, p + coreseq.length + upstream.length, downstream.length);
+s.setSequence ( String.instantialize (nseq));
+s.setStart (s.getStart () - ustream_ds);
+s.setEnd (s_end + downstream.length);
+}
+var newAl = new jalview.datamodel.Alignment (sq.toArray ( new Array (0)));
+for (var s, $s = sq.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+if (s.getAnnotation () != null) {
+for (var aa, $aa = 0, $$aa = s.getAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
+aa.adjustForAlignment ();
+newAl.addAnnotation (aa);
+}
+}}
+newAl.setDataset (core.getDataset ());
+return newAl;
+}, "jalview.datamodel.AlignmentI,~N");
+c$.getSequenceIndex = Clazz.defineMethod (c$, "getSequenceIndex",
+function (al, seq) {
+var result = -1;
+var pos = 0;
+for (var alSeq, $alSeq = al.getSequences ().iterator (); $alSeq.hasNext () && ((alSeq = $alSeq.next ()) || true);) {
+if (alSeq === seq) {
+result = pos;
+break;
+}pos++;
+}
+return result;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");
+c$.getSequencesByName = Clazz.defineMethod (c$, "getSequencesByName",
+function (al) {
+var theMap = new java.util.LinkedHashMap ();
+for (var seq, $seq = al.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var name = seq.getName ();
+if (name != null) {
+var seqs = theMap.get (name);
+if (seqs == null) {
+seqs = new java.util.ArrayList ();
+theMap.put (name, seqs);
+}seqs.add (seq);
+}}
+return theMap;
+}, "jalview.datamodel.AlignmentI");
+c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna",
+function (proteinAlignment, cdnaAlignment) {
+if (proteinAlignment == null || cdnaAlignment == null) {
+return false;
+}var mappedDna = new java.util.HashSet ();
+var mappedProtein = new java.util.HashSet ();
+var mappingPerformed = jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, true);
+mappingPerformed = new Boolean (mappingPerformed | jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, false)).valueOf ();
+return mappingPerformed;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
+c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna",
+function (proteinAlignment, cdnaAlignment, mappedDna, mappedProtein, xrefsOnly) {
+var mappingPerformed = false;
+var thisSeqs = proteinAlignment.getSequences ();
+for (var aaSeq, $aaSeq = thisSeqs.iterator (); $aaSeq.hasNext () && ((aaSeq = $aaSeq.next ()) || true);) {
+var proteinMapped = false;
+var acf = new jalview.datamodel.AlignedCodonFrame ();
+for (var cdnaSeq, $cdnaSeq = cdnaAlignment.getSequences ().iterator (); $cdnaSeq.hasNext () && ((cdnaSeq = $cdnaSeq.next ()) || true);) {
+if (xrefsOnly && !jalview.analysis.AlignmentUtils.haveCrossRef (aaSeq, cdnaSeq)) {
+continue;
+}if (!xrefsOnly && (mappedProtein.contains (aaSeq) || mappedDna.contains (cdnaSeq))) {
+continue;
+}if (!jalview.analysis.AlignmentUtils.mappingExists (proteinAlignment.getCodonFrames (), aaSeq.getDatasetSequence (), cdnaSeq.getDatasetSequence ())) {
+var map = jalview.analysis.AlignmentUtils.mapProteinToCdna (aaSeq, cdnaSeq);
+if (map != null) {
+acf.addMap (cdnaSeq, aaSeq, map);
+mappingPerformed = true;
+proteinMapped = true;
+mappedDna.add (cdnaSeq);
+mappedProtein.add (aaSeq);
+}}}
+if (proteinMapped) {
+proteinAlignment.addCodonFrame (acf);
+}}
+return mappingPerformed;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI,java.util.Set,java.util.Set,~B");
+c$.mappingExists = Clazz.defineMethod (c$, "mappingExists",
+function (set, aaSeq, cdnaSeq) {
+if (set != null) {
+for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+if (cdnaSeq === acf.getDnaForAaSeq (aaSeq)) {
+return true;
+}}
+}return false;
+}, "java.util.Set,jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.mapProteinToCdna = Clazz.defineMethod (c$, "mapProteinToCdna",
+function (proteinSeq, cdnaSeq) {
+var proteinDataset = proteinSeq.getDatasetSequence ();
+var aaSeqChars = proteinDataset != null ? proteinDataset.getSequence () : proteinSeq.getSequence ();
+var cdnaDataset = cdnaSeq.getDatasetSequence ();
+var cdnaSeqChars = cdnaDataset != null ? cdnaDataset.getSequence () : cdnaSeq.getSequence ();
+if (aaSeqChars == null || cdnaSeqChars == null) {
+return null;
+}var mappedLength = 3 * aaSeqChars.length;
+var cdnaLength = cdnaSeqChars.length;
+var cdnaStart = 1;
+var cdnaEnd = cdnaLength;
+var proteinStart = 1;
+var proteinEnd = aaSeqChars.length;
+if (cdnaLength != mappedLength && cdnaLength > 2) {
+var lastCodon = String.valueOf (cdnaSeqChars, cdnaLength - 3, 3).toUpperCase ();
+for (var stop, $stop = jalview.schemes.ResidueProperties.STOP.iterator (); $stop.hasNext () && ((stop = $stop.next ()) || true);) {
+if (lastCodon.equals (stop)) {
+cdnaEnd -= 3;
+cdnaLength -= 3;
+break;
+}}
+}if (cdnaLength != mappedLength && cdnaLength > 2 && String.valueOf (cdnaSeqChars, 0, 3).toUpperCase ().equals (jalview.schemes.ResidueProperties.START)) {
+cdnaStart += 3;
+cdnaLength -= 3;
+}if (cdnaLength != mappedLength) {
+return null;
+}if (!jalview.analysis.AlignmentUtils.translatesAs (cdnaSeqChars, cdnaStart - 1, aaSeqChars)) {
+return null;
+}var map = new jalview.util.MapList ( Clazz.newIntArray (-1, [cdnaStart, cdnaEnd]), Clazz.newIntArray (-1, [1, proteinEnd]), 3, 1);
+return map;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.translatesAs = Clazz.defineMethod (c$, "translatesAs",
+function (cdnaSeqChars, cdnaStart, aaSeqChars) {
+var aaResidue = 0;
+for (var i = cdnaStart; i < cdnaSeqChars.length - 2 && aaResidue < aaSeqChars.length; i += 3, aaResidue++) {
+var codon = String.valueOf (cdnaSeqChars, i, 3);
+var translated = jalview.schemes.ResidueProperties.codonTranslate (codon);
+var aaRes = aaSeqChars[aaResidue];
+if ((translated == null || "STOP".equals (translated)) && aaRes == 'X') {
+continue;
+}if (translated == null || !(aaRes == translated.charAt (0))) {
+return false;
+}}
+return (aaResidue == aaSeqChars.length);
+}, "~A,~N,~A");
+c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs",
+function (seq, al, gap, preserveMappedGaps, preserveUnmappedGaps) {
+var mappings = al.getCodonFrame (seq);
+if (mappings == null || mappings.isEmpty ()) {
+return false;
+}var alignFrom = null;
+var mapping = null;
+for (var mp, $mp = mappings.iterator (); $mp.hasNext () && ((mp = $mp.next ()) || true);) {
+alignFrom = mp.findAlignedSequence (seq.getDatasetSequence (), al);
+if (alignFrom != null) {
+mapping = mp;
+break;
+}}
+if (alignFrom == null) {
+return false;
+}jalview.analysis.AlignmentUtils.alignSequenceAs (seq, alignFrom, mapping, gap, al.getGapCharacter (), preserveMappedGaps, preserveUnmappedGaps);
+return true;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,~S,~B,~B");
+c$.alignSequenceAs = Clazz.defineMethod (c$, "alignSequenceAs",
+function (alignTo, alignFrom, mapping, myGap, sourceGap, preserveMappedGaps, preserveUnmappedGaps) {
+var thisSeq = alignTo.getSequence ();
+var thatAligned = alignFrom.getSequence ();
+var thisAligned = new StringBuilder (2 * thisSeq.length);
+var thisSeqPos = 0;
+var sourceDsPos = 0;
+var basesWritten = 0;
+var myGapChar = myGap.charAt (0);
+var ratio = myGap.length;
+var sourceGapMappedLength = 0;
+var inExon = false;
+for (var sourceChar, $sourceChar = 0, $$sourceChar = thatAligned; $sourceChar < $$sourceChar.length && ((sourceChar = $$sourceChar[$sourceChar]) || true); $sourceChar++) {
+if (sourceChar == sourceGap) {
+sourceGapMappedLength += ratio;
+continue;
+}sourceDsPos++;
+var mappedPos = mapping.getMappedRegion (alignTo, alignFrom, sourceDsPos);
+if (mappedPos == null) {
+System.err.println ("Can't align: no codon mapping to residue " + sourceDsPos + "(" + sourceChar + ")");
+return;
+}var mappedCodonStart = mappedPos[0];
+var mappedCodonEnd = mappedPos[mappedPos.length - 1];
+var trailingCopiedGap = new StringBuilder ();
+var intronLength = 0;
+while (basesWritten < mappedCodonEnd && thisSeqPos < thisSeq.length) {
+var c = thisSeq[thisSeqPos++];
+if (c != myGapChar) {
+basesWritten++;
+if (basesWritten < mappedCodonStart) {
+if (preserveUnmappedGaps && trailingCopiedGap.length () > 0) {
+thisAligned.append (trailingCopiedGap.toString ());
+intronLength += trailingCopiedGap.length ();
+trailingCopiedGap = new StringBuilder ();
+}intronLength++;
+inExon = false;
+} else {
+var startOfCodon = basesWritten == mappedCodonStart;
+var gapsToAdd = jalview.analysis.AlignmentUtils.calculateGapsToInsert (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingCopiedGap.length (), intronLength, startOfCodon);
+for (var i = 0; i < gapsToAdd; i++) {
+thisAligned.append (myGapChar);
+}
+sourceGapMappedLength = 0;
+inExon = true;
+}thisAligned.append (c);
+trailingCopiedGap = new StringBuilder ();
+} else {
+if (inExon && preserveMappedGaps) {
+trailingCopiedGap.append (myGapChar);
+} else if (!inExon && preserveUnmappedGaps) {
+trailingCopiedGap.append (myGapChar);
+}}}
+}
+while (thisSeqPos < thisSeq.length) {
+var c = thisSeq[thisSeqPos++];
+if (c != myGapChar || preserveUnmappedGaps) {
+thisAligned.append (c);
+}}
+alignTo.setSequence ( String.instantialize (thisAligned));
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,~S,~S,~B,~B");
+c$.calculateGapsToInsert = Clazz.defineMethod (c$, "calculateGapsToInsert",
+function (preserveMappedGaps, preserveUnmappedGaps, sourceGapMappedLength, inExon, trailingGapLength, intronLength, startOfCodon) {
+var gapsToAdd = 0;
+if (startOfCodon) {
+if (inExon && !preserveMappedGaps) {
+trailingGapLength = 0;
+}if (!inExon && !(preserveMappedGaps && preserveUnmappedGaps)) {
+trailingGapLength = 0;
+}if (inExon) {
+gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);
+} else {
+if (intronLength + trailingGapLength <= sourceGapMappedLength) {
+gapsToAdd = sourceGapMappedLength - intronLength;
+} else {
+gapsToAdd = Math.min (intronLength + trailingGapLength - sourceGapMappedLength, trailingGapLength);
+}}} else {
+if (!preserveMappedGaps) {
+trailingGapLength = 0;
+}gapsToAdd = Math.max (sourceGapMappedLength, trailingGapLength);
+}return gapsToAdd;
+}, "~B,~B,~N,~B,~N,~N,~B");
+c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation",
+function (sequences, gapCharacter, mappings) {
+var alignedSeqs = new java.util.ArrayList ();
+for (var seq, $seq = sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mappings);
+alignedSeqs.addAll (mapped);
+}
+return alignedSeqs;
+}, "java.util.List,~S,java.util.Set");
+c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation",
+function (seq, gapCharacter, mappings) {
+var result = new java.util.ArrayList ();
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (mapping.involvesSequence (seq)) {
+var mapped = jalview.analysis.AlignmentUtils.getAlignedTranslation (seq, gapCharacter, mapping);
+if (mapped != null) {
+result.add (mapped);
+}}}
+return result;
+}, "jalview.datamodel.SequenceI,~S,java.util.Set");
+c$.getAlignedTranslation = Clazz.defineMethod (c$, "getAlignedTranslation",
+function (seq, gapCharacter, mapping) {
+var gap = String.valueOf (gapCharacter);
+var toDna = false;
+var fromRatio = 1;
+var mapTo = mapping.getDnaForAaSeq (seq);
+if (mapTo != null) {
+toDna = true;
+gap = String.valueOf ( Clazz.newCharArray (-1, [gapCharacter, gapCharacter, gapCharacter]));
+} else {
+mapTo = mapping.getAaForDnaSeq (seq);
+fromRatio = 3;
+}var newseq = new StringBuilder (seq.getLength () * (toDna ? 3 : 1));
+var residueNo = 0;
+var phrase = Clazz.newIntArray (fromRatio, 0);
+var phraseOffset = 0;
+var gapWidth = 0;
+var first = true;
+var alignedSeq = new jalview.datamodel.Sequence ("", "");
+for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
+if (c == gapCharacter) {
+gapWidth++;
+if (gapWidth >= fromRatio) {
+newseq.append (gap);
+gapWidth = 0;
+}} else {
+phrase[phraseOffset++] = residueNo + 1;
+if (phraseOffset == fromRatio) {
+var sr = new jalview.datamodel.SearchResults ();
+for (var pos, $pos = 0, $$pos = phrase; $pos < $$pos.length && ((pos = $$pos[$pos]) || true); $pos++) {
+mapping.markMappedRegion (seq, pos, sr);
+}
+newseq.append (sr.toString ());
+if (first) {
+first = false;
+var mappedTo = sr.getResultSequence (0);
+alignedSeq.setName (mappedTo.getName ());
+alignedSeq.setDescription (mappedTo.getDescription ());
+alignedSeq.setDatasetSequence (mappedTo);
+}phraseOffset = 0;
+}residueNo++;
+}}
+alignedSeq.setSequence (newseq.toString ());
+return alignedSeq;
+}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.AlignedCodonFrame");
+c$.alignProteinAsDna = Clazz.defineMethod (c$, "alignProteinAsDna",
+function (protein, dna) {
+var mappings = protein.getCodonFrames ();
+var alignedCodons = new java.util.TreeMap ( new jalview.analysis.CodonComparator ());
+for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+var seqMap = mapping.getMappingForSequence (dnaSeq);
+var prot = mapping.findAlignedSequence (dnaSeq.getDatasetSequence (), protein);
+if (prot != null) {
+jalview.analysis.AlignmentUtils.addCodonPositions (dnaSeq, prot, protein.getGapCharacter (), seqMap, alignedCodons);
+}}
+}
+return jalview.analysis.AlignmentUtils.alignProteinAs (protein, alignedCodons);
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
+c$.alignProteinAs = Clazz.defineMethod (c$, "alignProteinAs",
+function (protein, alignedCodons) {
+var alignedWidth = alignedCodons.size ();
+var gaps = Clazz.newCharArray (alignedWidth, '\0');
+java.util.Arrays.fill (gaps, protein.getGapCharacter ());
+var allGaps = String.valueOf (gaps);
+for (var seq, $seq = protein.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+seq.setSequence (allGaps);
+}
+var column = 0;
+for (var codon, $codon = alignedCodons.keySet ().iterator (); $codon.hasNext () && ((codon = $codon.next ()) || true);) {
+var columnResidues = alignedCodons.get (codon);
+for (var entry, $entry = columnResidues.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
+entry.getKey ().getSequence ()[column] = entry.getValue ().charAt (0);
+}
+column++;
+}
+return 0;
+}, "jalview.datamodel.AlignmentI,java.util.Map");
+c$.addCodonPositions = Clazz.defineMethod (c$, "addCodonPositions",
+function (dna, protein, gapChar, seqMap, alignedCodons) {
+var codons = seqMap.getCodonIterator (dna, gapChar);
+while (codons.hasNext ()) {
+var codon = codons.next ();
+var seqProduct = alignedCodons.get (codon);
+if (seqProduct == null) {
+seqProduct = new java.util.HashMap ();
+alignedCodons.put (codon, seqProduct);
+}seqProduct.put (protein, codon.product);
+}
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~S,jalview.datamodel.Mapping,java.util.Map");
+c$.isMappable = Clazz.defineMethod (c$, "isMappable",
+function (al1, al2) {
+if (al1.isNucleotide () == al2.isNucleotide ()) {
+return false;
+}var dna = al1.isNucleotide () ? al1 : al2;
+var protein = dna === al1 ? al2 : al1;
+var mappings = protein.getCodonFrames ();
+for (var dnaSeq, $dnaSeq = dna.getSequences ().iterator (); $dnaSeq.hasNext () && ((dnaSeq = $dnaSeq.next ()) || true);) {
+for (var proteinSeq, $proteinSeq = protein.getSequences ().iterator (); $proteinSeq.hasNext () && ((proteinSeq = $proteinSeq.next ()) || true);) {
+if (jalview.analysis.AlignmentUtils.isMappable (dnaSeq, proteinSeq, mappings)) {
+return true;
+}}
+}
+return false;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
+c$.isMappable = Clazz.defineMethod (c$, "isMappable",
+function (dnaSeq, proteinSeq, mappings) {
+var dnaDs = dnaSeq.getDatasetSequence () == null ? dnaSeq : dnaSeq.getDatasetSequence ();
+var proteinDs = proteinSeq.getDatasetSequence () == null ? proteinSeq : proteinSeq.getDatasetSequence ();
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (proteinDs === mapping.getAaForDnaSeq (dnaDs)) {
+return true;
+}}
+return jalview.analysis.AlignmentUtils.mapProteinToCdna (proteinDs, dnaDs) != null;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,java.util.Set");
+c$.findAddableReferenceAnnotations = Clazz.defineMethod (c$, "findAddableReferenceAnnotations",
+function (sequenceScope, labelForCalcId, candidates, al) {
+if (sequenceScope == null) {
+return;
+}for (var seq, $seq = sequenceScope.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var dataset = seq.getDatasetSequence ();
+if (dataset == null) {
+continue;
+}var datasetAnnotations = dataset.getAnnotation ();
+if (datasetAnnotations == null) {
+continue;
+}var result = new java.util.ArrayList ();
+for (var dsann, $dsann = 0, $$dsann = datasetAnnotations; $dsann < $$dsann.length && ((dsann = $$dsann[$dsann]) || true); $dsann++) {
+var matchedAlignmentAnnotations = al.findAnnotations (seq, dsann.getCalcId (), dsann.label);
+if (!matchedAlignmentAnnotations.iterator ().hasNext ()) {
+result.add (dsann);
+if (labelForCalcId != null) {
+labelForCalcId.put (dsann.getCalcId (), dsann.label);
+}}}
+if (!result.isEmpty ()) {
+candidates.put (seq, result);
+}}
+}, "java.util.List,java.util.Map,java.util.Map,jalview.datamodel.AlignmentI");
+c$.addReferenceAnnotations = Clazz.defineMethod (c$, "addReferenceAnnotations",
+function (annotations, alignment, selectionGroup) {
+for (var seq, $seq = annotations.keySet ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+for (var ann, $ann = annotations.get (seq).iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {
+var copyAnn = new jalview.datamodel.AlignmentAnnotation (ann);
+var startRes = 0;
+var endRes = ann.annotations.length;
+if (selectionGroup != null) {
+startRes = selectionGroup.getStartRes ();
+endRes = selectionGroup.getEndRes ();
+}copyAnn.restrict (startRes, endRes);
+if (!seq.hasAnnotation (ann)) {
+seq.addAlignmentAnnotation (copyAnn);
+}copyAnn.adjustForAlignment ();
+alignment.addAnnotation (copyAnn);
+copyAnn.visible = true;
+}
+}
+}, "java.util.Map,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
+c$.showOrHideSequenceAnnotations = Clazz.defineMethod (c$, "showOrHideSequenceAnnotations",
+function (al, types, forSequences, anyType, doShow) {
+for (var aa, $aa = 0, $$aa = al.getAlignmentAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
+if (anyType || types.contains (aa.label)) {
+if ((aa.sequenceRef != null) && (forSequences == null || forSequences.contains (aa.sequenceRef))) {
+aa.visible = doShow;
+}}}
+}, "jalview.datamodel.AlignmentI,java.util.Collection,java.util.List,~B,~B");
+c$.haveCrossRef = Clazz.defineMethod (c$, "haveCrossRef",
+function (seq1, seq2) {
+return jalview.analysis.AlignmentUtils.hasCrossRef (seq1, seq2) || jalview.analysis.AlignmentUtils.hasCrossRef (seq2, seq1);
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.hasCrossRef = Clazz.defineMethod (c$, "hasCrossRef",
+function (seq1, seq2) {
+if (seq1 == null || seq2 == null) {
+return false;
+}var name = seq2.getName ();
+var xrefs = seq1.getDBRef ();
+if (xrefs != null) {
+for (var xref, $xref = 0, $$xref = xrefs; $xref < $$xref.length && ((xref = $$xref[$xref]) || true); $xref++) {
+var xrefName = xref.getSource () + "|" + xref.getAccessionId ();
+if (xrefName.equalsIgnoreCase (name)) {
+return true;
+}}
+}return false;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.makeExonAlignment = Clazz.defineMethod (c$, "makeExonAlignment",
+function (dna, mappings) {
+var newMappings = new java.util.LinkedHashSet ();
+var exonSequences = new java.util.ArrayList ();
+for (var dnaSeq, $dnaSeq = 0, $$dnaSeq = dna; $dnaSeq < $$dnaSeq.length && ((dnaSeq = $$dnaSeq[$dnaSeq]) || true); $dnaSeq++) {
+var ds = dnaSeq.getDatasetSequence ();
+var seqMappings = jalview.util.MappingUtils.findMappingsForSequence (ds, mappings);
+for (var acf, $acf = seqMappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+var newMapping = new jalview.datamodel.AlignedCodonFrame ();
+var mappedExons = jalview.analysis.AlignmentUtils.makeExonSequences (ds, acf, newMapping);
+if (!mappedExons.isEmpty ()) {
+exonSequences.addAll (mappedExons);
+newMappings.add (newMapping);
+}}
+}
+var al = new jalview.datamodel.Alignment (exonSequences.toArray ( new Array (exonSequences.size ())));
+al.setDataset (null);
+mappings.clear ();
+mappings.addAll (newMappings);
+return al;
+}, "~A,java.util.Set");
+c$.makeExonSequences = Clazz.defineMethod (c$, "makeExonSequences",
+function (dnaSeq, mapping, newMapping) {
+var exonSequences = new java.util.ArrayList ();
+var seqMappings = mapping.getMappingsForSequence (dnaSeq);
+var dna = dnaSeq.getSequence ();
+for (var seqMapping, $seqMapping = seqMappings.iterator (); $seqMapping.hasNext () && ((seqMapping = $seqMapping.next ()) || true);) {
+var newSequence = new StringBuilder (dnaSeq.getLength ());
+var dnaExonRanges = seqMapping.getMap ().getFromRanges ();
+for (var range, $range = dnaExonRanges.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
+for (var pos = range[0]; pos <= range[1]; pos++) {
+newSequence.append (dna[pos - 1]);
+}
+}
+var exon = new jalview.datamodel.Sequence (dnaSeq.getName (), newSequence.toString ());
+var cdsAccId = jalview.datamodel.FeatureProperties.getCodingFeature (jalview.datamodel.DBRefSource.EMBL);
+var cdsRefs = jalview.util.DBRefUtils.selectRefs (seqMapping.getTo ().getDBRef (), jalview.datamodel.DBRefSource.CODINGDBS);
+if (cdsRefs != null) {
+for (var cdsRef, $cdsRef = 0, $$cdsRef = cdsRefs; $cdsRef < $$cdsRef.length && ((cdsRef = $$cdsRef[$cdsRef]) || true); $cdsRef++) {
+exon.addDBRef ( new jalview.datamodel.DBRefEntry (cdsRef));
+cdsAccId = cdsRef.getAccessionId ();
+}
+}exon.setName (exon.getName () + "|" + cdsAccId);
+exon.createDatasetSequence ();
+var exonRange = new java.util.ArrayList ();
+exonRange.add ( Clazz.newIntArray (-1, [1, newSequence.length ()]));
+var map = new jalview.util.MapList (exonRange, seqMapping.getMap ().getToRanges (), 3, 1);
+newMapping.addMap (exon.getDatasetSequence (), seqMapping.getTo (), map);
+var cdsToDnaMap = new jalview.util.MapList (dnaExonRanges, exonRange, 1, 1);
+newMapping.addMap (dnaSeq, exon.getDatasetSequence (), cdsToDnaMap);
+exonSequences.add (exon);
+}
+return exonSequences;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignedCodonFrame,jalview.datamodel.AlignedCodonFrame");
+});
diff --git a/bin/jalview/analysis/AnnotationSorter.js b/bin/jalview/analysis/AnnotationSorter.js
index 2757955..b7d78cd 100644
--- a/bin/jalview/analysis/AnnotationSorter.js
+++ b/bin/jalview/analysis/AnnotationSorter.js
@@ -1,171 +1,171 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (["java.lang.Enum", "java.util.HashMap"], "jalview.analysis.AnnotationSorter", ["jalview.analysis.AlignmentUtils", "java.lang.UnsupportedOperationException", "java.util.Arrays"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.alignment = null;
-this.showAutocalcAbove = false;
-this.sequenceIndices = null;
-this.bySequenceAndLabel = null;
-this.byLabelAndSequence = null;
-this.noSort = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "AnnotationSorter");
-Clazz.prepareFields (c$, function () {
-this.sequenceIndices = new java.util.HashMap ();
-this.bySequenceAndLabel = ((Clazz.isClassDefined ("jalview.analysis.AnnotationSorter$1") ? 0 : jalview.analysis.AnnotationSorter.$AnnotationSorter$1$ ()), Clazz.innerTypeInstance (jalview.analysis.AnnotationSorter$1, this, null));
-this.byLabelAndSequence = ((Clazz.isClassDefined ("jalview.analysis.AnnotationSorter$2") ? 0 : jalview.analysis.AnnotationSorter.$AnnotationSorter$2$ ()), Clazz.innerTypeInstance (jalview.analysis.AnnotationSorter$2, this, null));
-this.noSort = ((Clazz.isClassDefined ("jalview.analysis.AnnotationSorter$3") ? 0 : jalview.analysis.AnnotationSorter.$AnnotationSorter$3$ ()), Clazz.innerTypeInstance (jalview.analysis.AnnotationSorter$3, this, null));
-});
-Clazz.makeConstructor (c$,
-function (alignmentI, showAutocalculatedAbove) {
-this.alignment = alignmentI;
-this.showAutocalcAbove = showAutocalculatedAbove;
-}, "jalview.datamodel.AlignmentI,~B");
-Clazz.defineMethod (c$, "sort",
-function (alignmentAnnotations, order) {
-if (alignmentAnnotations == null) {
-return;
-}this.saveSequenceIndices (alignmentAnnotations);
-var comparator = this.getComparator (order);
-if (alignmentAnnotations != null) {
-{
-java.util.Arrays.sort (alignmentAnnotations, comparator);
-}}}, "~A,jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
-Clazz.defineMethod (c$, "saveSequenceIndices",
-($fz = function (alignmentAnnotations) {
-this.sequenceIndices.clear ();
-for (var ann, $ann = 0, $$ann = alignmentAnnotations; $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
-var seq = ann.sequenceRef;
-if (seq != null) {
-var index = jalview.analysis.AlignmentUtils.getSequenceIndex (this.alignment, seq);
-this.sequenceIndices.put (seq, new Integer (index));
-}}
-}, $fz.isPrivate = true, $fz), "~A");
-Clazz.defineMethod (c$, "getComparator",
-($fz = function (order) {
-if (order == null) {
-return this.noSort;
-}switch (order) {
-case jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.NONE:
-return this.noSort;
-case jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.SEQUENCE_AND_LABEL:
-return this.bySequenceAndLabel;
-case jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.LABEL_AND_SEQUENCE:
-return this.byLabelAndSequence;
-default:
-throw new UnsupportedOperationException (order.toString ());
-}
-}, $fz.isPrivate = true, $fz), "jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
-Clazz.defineMethod (c$, "compareLabels",
-($fz = function (o1, o2) {
-if (o1 == null || o2 == null) {
-return 0;
-}var label1 = o1.label;
-var label2 = o2.label;
-if (label1 == null && label2 == null) {
-return 0;
-}if (label1 == null) {
-return -1;
-}if (label2 == null) {
-return 1;
-}return label1.toUpperCase ().compareTo (label2.toUpperCase ());
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "compareSequences",
-($fz = function (o1, o2) {
-var seq1 = o1.sequenceRef;
-var seq2 = o2.sequenceRef;
-if (seq1 == null && seq2 == null) {
-return 0;
-}if (seq1 == null) {
-return this.showAutocalcAbove ? -1 : 1;
-}if (seq2 == null) {
-return this.showAutocalcAbove ? 1 : -1;
-}var index1 = (this.sequenceIndices.get (seq1)).intValue ();
-var index2 = (this.sequenceIndices.get (seq2)).intValue ();
-if (index1 == index2) {
-return 0;
-}if (index1 == -1) {
-return -1;
-}if (index2 == -1) {
-return 1;
-}return Integer.compare (index1, index2);
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
-c$.$AnnotationSorter$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.analysis, "AnnotationSorter$1", null, java.util.Comparator);
-Clazz.overrideMethod (c$, "compare",
-function (o1, o2) {
-if (o1 == null && o2 == null) {
-return 0;
-}if (o1 == null) {
-return -1;
-}if (o2 == null) {
-return 1;
-}if (o1.sequenceRef == null && o2.sequenceRef == null) {
-return 0;
-}var sequenceOrder = this.b$["jalview.analysis.AnnotationSorter"].compareSequences (o1, o2);
-return sequenceOrder == 0 ? this.b$["jalview.analysis.AnnotationSorter"].compareLabels (o1, o2) : sequenceOrder;
-}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationSorter$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.analysis, "AnnotationSorter$2", null, java.util.Comparator);
-Clazz.overrideMethod (c$, "compare",
-function (o1, o2) {
-if (o1 == null && o2 == null) {
-return 0;
-}if (o1 == null) {
-return -1;
-}if (o2 == null) {
-return 1;
-}if (o1.sequenceRef == null && o2.sequenceRef == null) {
-return 0;
-}if (o1.sequenceRef == null) {
-return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? -1 : 1;
-}if (o2.sequenceRef == null) {
-return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? 1 : -1;
-}var labelOrder = this.b$["jalview.analysis.AnnotationSorter"].compareLabels (o1, o2);
-return labelOrder == 0 ? this.b$["jalview.analysis.AnnotationSorter"].compareSequences (o1, o2) : labelOrder;
-}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationSorter$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.analysis, "AnnotationSorter$3", null, java.util.Comparator);
-Clazz.overrideMethod (c$, "compare",
-function (o1, o2) {
-if (o1 != null && o2 != null) {
-if (o1.sequenceRef == null && o2.sequenceRef != null) {
-return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? -1 : 1;
-}if (o1.sequenceRef != null && o2.sequenceRef == null) {
-return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? 1 : -1;
-}}return 0;
-}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
-c$ = Clazz.p0p ();
-};
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.description = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis.AnnotationSorter, "SequenceAnnotationOrder", Enum);
-Clazz.makeConstructor (c$,
-($fz = function (a) {
-this.description = a;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.description;
-});
-c$.forDescription = Clazz.defineMethod (c$, "forDescription",
-function (a) {
-for (var order, $order = 0, $$order = jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.values (); $order < $$order.length && ((order = $$order[$order]) || true); $order++) {
-if (order.toString ().equals (a)) {
-return order;
-}}
-return null;
-}, "~S");
-Clazz.defineEnumConstant (c$, "SEQUENCE_AND_LABEL", 0, ["Sequence"]);
-Clazz.defineEnumConstant (c$, "LABEL_AND_SEQUENCE", 1, ["Label"]);
-Clazz.defineEnumConstant (c$, "NONE", 2, ["No sort"]);
-c$ = Clazz.p0p ();
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (["java.lang.Enum", "java.util.HashMap"], "jalview.analysis.AnnotationSorter", ["jalview.analysis.AlignmentUtils", "java.lang.UnsupportedOperationException", "java.util.Arrays"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.alignment = null;
+this.showAutocalcAbove = false;
+this.sequenceIndices = null;
+this.bySequenceAndLabel = null;
+this.byLabelAndSequence = null;
+this.noSort = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "AnnotationSorter");
+Clazz.prepareFields (c$, function () {
+this.sequenceIndices = new java.util.HashMap ();
+this.bySequenceAndLabel = ((Clazz.isClassDefined ("jalview.analysis.AnnotationSorter$1") ? 0 : jalview.analysis.AnnotationSorter.$AnnotationSorter$1$ ()), Clazz.innerTypeInstance (jalview.analysis.AnnotationSorter$1, this, null));
+this.byLabelAndSequence = ((Clazz.isClassDefined ("jalview.analysis.AnnotationSorter$2") ? 0 : jalview.analysis.AnnotationSorter.$AnnotationSorter$2$ ()), Clazz.innerTypeInstance (jalview.analysis.AnnotationSorter$2, this, null));
+this.noSort = ((Clazz.isClassDefined ("jalview.analysis.AnnotationSorter$3") ? 0 : jalview.analysis.AnnotationSorter.$AnnotationSorter$3$ ()), Clazz.innerTypeInstance (jalview.analysis.AnnotationSorter$3, this, null));
+});
+Clazz.makeConstructor (c$,
+function (alignmentI, showAutocalculatedAbove) {
+this.alignment = alignmentI;
+this.showAutocalcAbove = showAutocalculatedAbove;
+}, "jalview.datamodel.AlignmentI,~B");
+Clazz.defineMethod (c$, "sort",
+function (alignmentAnnotations, order) {
+if (alignmentAnnotations == null) {
+return;
+}this.saveSequenceIndices (alignmentAnnotations);
+var comparator = this.getComparator (order);
+if (alignmentAnnotations != null) {
+{
+java.util.Arrays.sort (alignmentAnnotations, comparator);
+}}}, "~A,jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
+Clazz.defineMethod (c$, "saveSequenceIndices",
+($fz = function (alignmentAnnotations) {
+this.sequenceIndices.clear ();
+for (var ann, $ann = 0, $$ann = alignmentAnnotations; $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
+var seq = ann.sequenceRef;
+if (seq != null) {
+var index = jalview.analysis.AlignmentUtils.getSequenceIndex (this.alignment, seq);
+this.sequenceIndices.put (seq, new Integer (index));
+}}
+}, $fz.isPrivate = true, $fz), "~A");
+Clazz.defineMethod (c$, "getComparator",
+($fz = function (order) {
+if (order == null) {
+return this.noSort;
+}switch (order) {
+case jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.NONE:
+return this.noSort;
+case jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.SEQUENCE_AND_LABEL:
+return this.bySequenceAndLabel;
+case jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.LABEL_AND_SEQUENCE:
+return this.byLabelAndSequence;
+default:
+throw new UnsupportedOperationException (order.toString ());
+}
+}, $fz.isPrivate = true, $fz), "jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
+Clazz.defineMethod (c$, "compareLabels",
+($fz = function (o1, o2) {
+if (o1 == null || o2 == null) {
+return 0;
+}var label1 = o1.label;
+var label2 = o2.label;
+if (label1 == null && label2 == null) {
+return 0;
+}if (label1 == null) {
+return -1;
+}if (label2 == null) {
+return 1;
+}return label1.toUpperCase ().compareTo (label2.toUpperCase ());
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "compareSequences",
+($fz = function (o1, o2) {
+var seq1 = o1.sequenceRef;
+var seq2 = o2.sequenceRef;
+if (seq1 == null && seq2 == null) {
+return 0;
+}if (seq1 == null) {
+return this.showAutocalcAbove ? -1 : 1;
+}if (seq2 == null) {
+return this.showAutocalcAbove ? 1 : -1;
+}var index1 = (this.sequenceIndices.get (seq1)).intValue ();
+var index2 = (this.sequenceIndices.get (seq2)).intValue ();
+if (index1 == index2) {
+return 0;
+}if (index1 == -1) {
+return -1;
+}if (index2 == -1) {
+return 1;
+}return Integer.compare (index1, index2);
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
+c$.$AnnotationSorter$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.analysis, "AnnotationSorter$1", null, java.util.Comparator);
+Clazz.overrideMethod (c$, "compare",
+function (o1, o2) {
+if (o1 == null && o2 == null) {
+return 0;
+}if (o1 == null) {
+return -1;
+}if (o2 == null) {
+return 1;
+}if (o1.sequenceRef == null && o2.sequenceRef == null) {
+return 0;
+}var sequenceOrder = this.b$["jalview.analysis.AnnotationSorter"].compareSequences (o1, o2);
+return sequenceOrder == 0 ? this.b$["jalview.analysis.AnnotationSorter"].compareLabels (o1, o2) : sequenceOrder;
+}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationSorter$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.analysis, "AnnotationSorter$2", null, java.util.Comparator);
+Clazz.overrideMethod (c$, "compare",
+function (o1, o2) {
+if (o1 == null && o2 == null) {
+return 0;
+}if (o1 == null) {
+return -1;
+}if (o2 == null) {
+return 1;
+}if (o1.sequenceRef == null && o2.sequenceRef == null) {
+return 0;
+}if (o1.sequenceRef == null) {
+return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? -1 : 1;
+}if (o2.sequenceRef == null) {
+return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? 1 : -1;
+}var labelOrder = this.b$["jalview.analysis.AnnotationSorter"].compareLabels (o1, o2);
+return labelOrder == 0 ? this.b$["jalview.analysis.AnnotationSorter"].compareSequences (o1, o2) : labelOrder;
+}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationSorter$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.analysis, "AnnotationSorter$3", null, java.util.Comparator);
+Clazz.overrideMethod (c$, "compare",
+function (o1, o2) {
+if (o1 != null && o2 != null) {
+if (o1.sequenceRef == null && o2.sequenceRef != null) {
+return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? -1 : 1;
+}if (o1.sequenceRef != null && o2.sequenceRef == null) {
+return this.b$["jalview.analysis.AnnotationSorter"].showAutocalcAbove ? 1 : -1;
+}}return 0;
+}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation");
+c$ = Clazz.p0p ();
+};
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.description = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis.AnnotationSorter, "SequenceAnnotationOrder", Enum);
+Clazz.makeConstructor (c$,
+($fz = function (a) {
+this.description = a;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.description;
+});
+c$.forDescription = Clazz.defineMethod (c$, "forDescription",
+function (a) {
+for (var order, $order = 0, $$order = jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.values (); $order < $$order.length && ((order = $$order[$order]) || true); $order++) {
+if (order.toString ().equals (a)) {
+return order;
+}}
+return null;
+}, "~S");
+Clazz.defineEnumConstant (c$, "SEQUENCE_AND_LABEL", 0, ["Sequence"]);
+Clazz.defineEnumConstant (c$, "LABEL_AND_SEQUENCE", 1, ["Label"]);
+Clazz.defineEnumConstant (c$, "NONE", 2, ["No sort"]);
+c$ = Clazz.p0p ();
+});
diff --git a/bin/jalview/analysis/CodingUtils.js b/bin/jalview/analysis/CodingUtils.js
index 08fa0ce..69abb90 100644
--- a/bin/jalview/analysis/CodingUtils.js
+++ b/bin/jalview/analysis/CodingUtils.js
@@ -1,64 +1,64 @@
-Clazz.declarePackage ("jalview.analysis");
-c$ = Clazz.declareType (jalview.analysis, "CodingUtils");
-c$.encodeCodon = Clazz.defineMethod (c$, "encodeCodon",
-function (codon) {
-if (codon == null) {
-return -1;
-}return jalview.analysis.CodingUtils.encodeCodon (codon[2]) + (jalview.analysis.CodingUtils.encodeCodon (codon[1]) << 2) + (jalview.analysis.CodingUtils.encodeCodon (codon[0]) << (4));
-}, "~A");
-c$.encodeCodon = Clazz.defineMethod (c$, "encodeCodon",
-function (c) {
-var result = -2147483648;
-switch (c) {
-case 'A':
-case 'a':
-result = 0;
-break;
-case 'C':
-case 'c':
-result = 1;
-break;
-case 'G':
-case 'g':
-result = 2;
-break;
-case 'T':
-case 't':
-case 'U':
-case 'u':
-result = 3;
-break;
-}
-return result;
-}, "~S");
-c$.decodeCodon = Clazz.defineMethod (c$, "decodeCodon",
-function (encoded) {
-var result = Clazz.newCharArray (3, '\0');
-result[2] = jalview.analysis.CodingUtils.decodeNucleotide (encoded & 3);
-encoded = encoded >>> 2;
-result[1] = jalview.analysis.CodingUtils.decodeNucleotide (encoded & 3);
-encoded = encoded >>> 2;
-result[0] = jalview.analysis.CodingUtils.decodeNucleotide (encoded & 3);
-return result;
-}, "~N");
-c$.decodeNucleotide = Clazz.defineMethod (c$, "decodeNucleotide",
-function (i) {
-var result = '0';
-switch (i) {
-case 0:
-result = 'A';
-break;
-case 1:
-result = 'C';
-break;
-case 2:
-result = 'G';
-break;
-case 3:
-result = 'T';
-break;
-}
-return result;
-}, "~N");
-Clazz.defineStatics (c$,
-"CODON_ENCODING_BITSHIFT", 2);
+Clazz.declarePackage ("jalview.analysis");
+c$ = Clazz.declareType (jalview.analysis, "CodingUtils");
+c$.encodeCodon = Clazz.defineMethod (c$, "encodeCodon",
+function (codon) {
+if (codon == null) {
+return -1;
+}return jalview.analysis.CodingUtils.encodeCodon (codon[2]) + (jalview.analysis.CodingUtils.encodeCodon (codon[1]) << 2) + (jalview.analysis.CodingUtils.encodeCodon (codon[0]) << (4));
+}, "~A");
+c$.encodeCodon = Clazz.defineMethod (c$, "encodeCodon",
+function (c) {
+var result = -2147483648;
+switch (c) {
+case 'A':
+case 'a':
+result = 0;
+break;
+case 'C':
+case 'c':
+result = 1;
+break;
+case 'G':
+case 'g':
+result = 2;
+break;
+case 'T':
+case 't':
+case 'U':
+case 'u':
+result = 3;
+break;
+}
+return result;
+}, "~S");
+c$.decodeCodon = Clazz.defineMethod (c$, "decodeCodon",
+function (encoded) {
+var result = Clazz.newCharArray (3, '\0');
+result[2] = jalview.analysis.CodingUtils.decodeNucleotide (encoded & 3);
+encoded = encoded >>> 2;
+result[1] = jalview.analysis.CodingUtils.decodeNucleotide (encoded & 3);
+encoded = encoded >>> 2;
+result[0] = jalview.analysis.CodingUtils.decodeNucleotide (encoded & 3);
+return result;
+}, "~N");
+c$.decodeNucleotide = Clazz.defineMethod (c$, "decodeNucleotide",
+function (i) {
+var result = '0';
+switch (i) {
+case 0:
+result = 'A';
+break;
+case 1:
+result = 'C';
+break;
+case 2:
+result = 'G';
+break;
+case 3:
+result = 'T';
+break;
+}
+return result;
+}, "~N");
+Clazz.defineStatics (c$,
+"CODON_ENCODING_BITSHIFT", 2);
diff --git a/bin/jalview/analysis/CodonComparator.js b/bin/jalview/analysis/CodonComparator.js
index 7c07b92..afa4c8d 100644
--- a/bin/jalview/analysis/CodonComparator.js
+++ b/bin/jalview/analysis/CodonComparator.js
@@ -1,21 +1,21 @@
-Clazz.declarePackage ("jalview.analysis");
-c$ = Clazz.declareType (jalview.analysis, "CodonComparator", null, java.util.Comparator);
-Clazz.overrideMethod (c$, "compare",
-function (ac1, ac2) {
-if (ac1 == null || ac2 == null || ac1.equals (ac2)) {
-return 0;
-}if (ac1.pos1 < ac2.pos1 && ac1.pos3 <= ac2.pos3) {
-return -1;
-}if (ac2.pos1 < ac1.pos1 && ac2.pos3 <= ac1.pos3) {
-return 1;
-}if (ac1.pos3 > ac2.pos3 && ac1.pos1 >= ac2.pos1) {
-return 1;
-}if (ac2.pos3 > ac1.pos3 && ac2.pos1 >= ac1.pos1) {
-return -1;
-}if (ac1.pos1 == ac2.pos1 && ac1.pos3 == ac2.pos3) {
-return Integer.compare (ac1.pos2, ac2.pos2);
-}var compareMiddles = Integer.compare (ac1.pos2, ac2.pos2);
-if (compareMiddles != 0) {
-return compareMiddles;
-}return Integer.compare (ac1.pos1, ac2.pos1);
-}, "jalview.datamodel.AlignedCodon,jalview.datamodel.AlignedCodon");
+Clazz.declarePackage ("jalview.analysis");
+c$ = Clazz.declareType (jalview.analysis, "CodonComparator", null, java.util.Comparator);
+Clazz.overrideMethod (c$, "compare",
+function (ac1, ac2) {
+if (ac1 == null || ac2 == null || ac1.equals (ac2)) {
+return 0;
+}if (ac1.pos1 < ac2.pos1 && ac1.pos3 <= ac2.pos3) {
+return -1;
+}if (ac2.pos1 < ac1.pos1 && ac2.pos3 <= ac1.pos3) {
+return 1;
+}if (ac1.pos3 > ac2.pos3 && ac1.pos1 >= ac2.pos1) {
+return 1;
+}if (ac2.pos3 > ac1.pos3 && ac2.pos1 >= ac1.pos1) {
+return -1;
+}if (ac1.pos1 == ac2.pos1 && ac1.pos3 == ac2.pos3) {
+return Integer.compare (ac1.pos2, ac2.pos2);
+}var compareMiddles = Integer.compare (ac1.pos2, ac2.pos2);
+if (compareMiddles != 0) {
+return compareMiddles;
+}return Integer.compare (ac1.pos1, ac2.pos1);
+}, "jalview.datamodel.AlignedCodon,jalview.datamodel.AlignedCodon");
diff --git a/bin/jalview/analysis/Conservation.class b/bin/jalview/analysis/Conservation.class
index c48157a..91e2340 100644
Binary files a/bin/jalview/analysis/Conservation.class and b/bin/jalview/analysis/Conservation.class differ
diff --git a/bin/jalview/analysis/Conservation.js b/bin/jalview/analysis/Conservation.js
index 1a43b1a..aa95a73 100644
--- a/bin/jalview/analysis/Conservation.js
+++ b/bin/jalview/analysis/Conservation.js
@@ -1,371 +1,370 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.Conservation", ["jalview.datamodel.Annotation", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color", "java.lang.Character", "$.Double", "$.StringBuffer", "java.util.Hashtable", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sequences = null;
-this.start = 0;
-this.end = 0;
-this.seqNums = null;
-this.maxLength = 0;
-this.seqNumsChanged = false;
-this.total = null;
-this.canonicaliseAa = true;
-this.quality = null;
-this.qualityRange = null;
-this.consString = "";
-this.consSequence = null;
-this.propHash = null;
-this.threshold = 0;
-this.name = "";
-this.cons2 = null;
-this.consSymbs = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "Conservation");
-Clazz.prepareFields (c$, function () {
-this.qualityRange = new Array (2);
-});
-Clazz.makeConstructor (c$,
-function (name, propHash, threshold, sequences, start, end) {
-this.name = name;
-this.propHash = propHash;
-this.threshold = threshold;
-this.start = start;
-this.end = end;
-this.maxLength = end - start + 1;
-var s;
-var sSize = sequences.size ();
-var sarray = new Array (sSize);
-this.sequences = sarray;
-try {
-for (s = 0; s < sSize; s++) {
-sarray[s] = sequences.get (s);
-if (sarray[s].getLength () > this.maxLength) {
-this.maxLength = sarray[s].getLength ();
-}}
-} catch (ex) {
-if (Clazz.exceptionOf (ex, ArrayIndexOutOfBoundsException)) {
-this.sequences = new Array (0);
-this.maxLength = 0;
-} else {
-throw ex;
-}
-}
-}, "~S,java.util.Hashtable,~N,java.util.List,~N,~N");
-Clazz.defineMethod (c$, "calcSeqNum",
-($fz = function (i) {
-var sq = null;
-var sqnum = null;
-var sSize = this.sequences.length;
-if ((i > -1) && (i < sSize)) {
-sq = this.sequences[i].getSequenceAsString ();
-if (this.seqNums.size () <= i) {
-this.seqNums.addElement ( Clazz.newIntArray (sq.length + 1, 0));
-}if (sq.hashCode () != (this.seqNums.elementAt (i))[0]) {
-var j;
-var len;
-this.seqNumsChanged = true;
-len = sq.length;
-if (this.maxLength < len) {
-this.maxLength = len;
-}sqnum = Clazz.newIntArray (len + 1, 0);
-sqnum[0] = sq.hashCode ();
-for (j = 1; j <= len; j++) {
-sqnum[j] = jalview.schemes.ResidueProperties.aaIndex[sq.charCodeAt (j - 1)];
-}
-this.seqNums.setElementAt (sqnum, i);
-} else {
-System.out.println ("SEQUENCE HAS BEEN DELETED!!!");
-}} else {
-System.err.println ("ERROR: calcSeqNum called with out of range sequence index for Alignment\n");
-}}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "calculate",
-function () {
-var resultHash;
-var ht;
-var thresh;
-var j;
-var jSize = this.sequences.length;
-var values;
-var type;
-var res = null;
-var c;
-var enumeration2;
-this.total = new Array (this.maxLength);
-for (var i = this.start; i <= this.end; i++) {
-values = Clazz.newIntArray (255, 0);
-for (j = 0; j < jSize; j++) {
-if (this.sequences[j].getLength () > i) {
-c = this.sequences[j].getCharAt (i);
-if (this.canonicaliseAa) {
-c = String.fromCharCode (jalview.schemes.ResidueProperties.aaIndex[this.sequences[j].getCharAt (i).charCodeAt (0)]);
-if (c.charCodeAt (0) > 20) {
-c = '-';
-} else {
-c = jalview.schemes.ResidueProperties.aa[c.charCodeAt (0)].charAt (0);
-}} else {
-if (c == '.' || c == ' ') {
-c = '-';
-}if (!this.canonicaliseAa && 'a' <= c && c <= 'z') {
-c = String.fromCharCode (c.charCodeAt (0) - (32));
-}}values[c.charCodeAt (0)]++;
-} else {
-values['-'.charCodeAt (0)]++;
-}}
-thresh = Clazz.doubleToInt ((this.threshold * (jSize)) / 100);
-resultHash = new java.util.Hashtable ();
-for (var v = '-'; v < 'Z'; v = String.fromCharCode (v.charCodeAt (0) + 1)) {
-if (values[v.charCodeAt (0)] > thresh) {
-res = String.valueOf (v);
-enumeration2 = this.propHash.keys ();
-while (enumeration2.hasMoreElements ()) {
-type = enumeration2.nextElement ();
-ht = this.propHash.get (type);
-if (!resultHash.containsKey (type)) {
-if (ht.containsKey (res)) {
-resultHash.put (type, ht.get (res));
-} else {
-resultHash.put (type, ht.get ("-"));
-}} else if ((resultHash.get (type)).equals (ht.get (res)) == false) {
-resultHash.put (type, new Integer (-1));
-}}
-}}
-if (this.total.length > 0) {
-this.total[i - this.start] = resultHash;
-}}
-});
-Clazz.defineMethod (c$, "countConsNGaps",
-function (j) {
-var count = 0;
-var cons = 0;
-var nres = 0;
-var r = Clazz.newIntArray (2, 0);
-var f = '$';
-var i;
-var iSize = this.sequences.length;
-var c;
-for (i = 0; i < iSize; i++) {
-if (j >= this.sequences[i].getLength ()) {
-count++;
-continue;
-}c = this.sequences[i].getCharAt (j);
-if (jalview.util.Comparison.isGap ((c))) {
-count++;
-} else {
-nres++;
-if (nres == 1) {
-f = c;
-cons++;
-} else if (f == c) {
-cons++;
-}}}
-r[0] = (nres == cons) ? 1 : 0;
-r[1] = count;
-return r;
-}, "~N");
-Clazz.defineMethod (c$, "verdict",
-function (consflag, percentageGaps) {
-var consString = new StringBuffer ();
-var type;
-var result;
-var gapcons;
-var totGaps;
-var count;
-var pgaps;
-var resultHash;
-var enumeration;
-for (var i = 0; i < this.start; i++) {
-consString.append ('-');
-}
-this.consSymbs = new Array (this.end - this.start + 1);
-for (var i = this.start; i <= this.end; i++) {
-gapcons = this.countConsNGaps (i);
-totGaps = gapcons[1];
-pgaps = (totGaps * 100) / this.sequences.length;
-this.consSymbs[i - this.start] = String.instantialize ();
-if (percentageGaps > pgaps) {
-resultHash = this.total[i - this.start];
-count = 0;
-enumeration = resultHash.keys ();
-while (enumeration.hasMoreElements ()) {
-type = enumeration.nextElement ();
-result = resultHash.get (type);
-if (consflag) {
-if (result.intValue () == 1) {
-this.consSymbs[i - this.start] = type + " " + this.consSymbs[i - this.start];
-count++;
-}} else {
-if (result.intValue () != -1) {
-{
-if (result.intValue () == 0) {
-this.consSymbs[i - this.start] = this.consSymbs[i - this.start] + " !" + type;
-} else {
-this.consSymbs[i - this.start] = type + " " + this.consSymbs[i - this.start];
-}}count++;
-}}}
-if (count < 10) {
-{
-consString.append(""+count);
-}} else {
-consString.append ((gapcons[0] == 1) ? "*" : "+");
-}} else {
-consString.append ('-');
-}}
-this.consSequence = new jalview.datamodel.Sequence (this.name, consString.toString (), this.start, this.end);
-}, "~B,~N");
-Clazz.defineMethod (c$, "getConsSequence",
-function () {
-return this.consSequence;
-});
-Clazz.defineMethod (c$, "findQuality",
-function () {
-this.findQuality (0, this.maxLength - 1);
-});
-Clazz.defineMethod (c$, "percentIdentity2",
-($fz = function () {
-this.seqNums = new java.util.Vector ();
-var i = 0;
-var iSize = this.sequences.length;
-for (i = 0; i < iSize; i++) {
-this.calcSeqNum (i);
-}
-if ((this.cons2 == null) || this.seqNumsChanged) {
-this.cons2 = Clazz.newIntArray (this.maxLength, 24, 0);
-for (var j = 0; j < 24; j++) {
-for (i = 0; i < this.maxLength; i++) {
-this.cons2[i][j] = 0;
-}
-}
-var sqnum;
-var j = 0;
-while (j < this.sequences.length) {
-sqnum = this.seqNums.elementAt (j);
-for (i = 1; i < sqnum.length; i++) {
-this.cons2[i - 1][sqnum[i]]++;
-}
-for (i = sqnum.length - 1; i < this.maxLength; i++) {
-this.cons2[i][23]++;
-}
-j++;
-}
-}}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "findQuality",
-function (start, end) {
-this.quality = new java.util.Vector ();
-var max = -10000;
-var BLOSUM62 = jalview.schemes.ResidueProperties.getBLOSUM62 ();
-this.percentIdentity2 ();
-var size = this.seqNums.size ();
-var lengths = Clazz.newIntArray (size, 0);
-var tot;
-var bigtot;
-var sr;
-var tmp;
-var x;
-var xx;
-var l;
-var j;
-var i;
-var ii;
-var i2;
-var k;
-var seqNum;
-for (l = 0; l < size; l++) {
-lengths[l] = (this.seqNums.elementAt (l)).length - 1;
-}
-for (j = start; j <= end; j++) {
-bigtot = 0;
-x = Clazz.newDoubleArray (24, 0);
-for (ii = 0; ii < 24; ii++) {
-x[ii] = 0;
-for (i2 = 0; i2 < 24; i2++) {
-x[ii] += ((this.cons2[j][i2] * BLOSUM62[ii][i2]) + 4);
-}
-x[ii] /= size;
-}
-for (k = 0; k < size; k++) {
-tot = 0;
-xx = Clazz.newDoubleArray (24, 0);
-seqNum = (j < lengths[k]) ? (this.seqNums.elementAt (k))[j + 1] : 23;
-for (i = 0; i < 23; i++) {
-sr = 0;
-sr = BLOSUM62[i][seqNum] + 4;
-xx[i] = x[i] - sr;
-tot += (xx[i] * xx[i]);
-}
-bigtot += Math.sqrt (tot);
-}
-if (max < bigtot) {
-max = bigtot;
-}this.quality.addElement ( new Double (bigtot));
-}
-var newmax = -10000;
-for (j = start; j <= end; j++) {
-tmp = (this.quality.elementAt (j)).doubleValue ();
-tmp = ((max - tmp) * (size - this.cons2[j][23])) / size;
-this.quality.setElementAt ( new Double (tmp), j);
-if (tmp > newmax) {
-newmax = tmp;
-}}
-this.qualityRange[0] = new Double (0);
-this.qualityRange[1] = new Double (newmax);
-}, "~N,~N");
-Clazz.defineMethod (c$, "completeAnnotations",
-function (conservation, quality2, istart, alWidth) {
-var sequence = this.getConsSequence ().getSequence ();
-var minR;
-var minG;
-var minB;
-var maxR;
-var maxG;
-var maxB;
-minR = 0.3;
-minG = 0.0;
-minB = 0;
-maxR = 1.0 - minR;
-maxG = 0.9 - minG;
-maxB = 0 - minB;
-var min = 0;
-var max = 11;
-var qmin = 0;
-var qmax = 0;
-var c;
-if (conservation.annotations != null && conservation.annotations.length < alWidth) {
-conservation.annotations = new Array (alWidth);
-}if (quality2 != null) {
-quality2.graphMax = this.qualityRange[1].floatValue ();
-if (quality2.annotations != null && quality2.annotations.length < alWidth) {
-quality2.annotations = new Array (alWidth);
-}qmin = this.qualityRange[0].floatValue ();
-qmax = this.qualityRange[1].floatValue ();
-}for (var i = 0; i < alWidth; i++) {
-var value = 0;
-c = sequence[i];
-if (Character.isDigit (c)) {
-value = c.charCodeAt (0) - 48;
-} else if (c == '*') {
-value = 11;
-} else if (c == '+') {
-value = 10;
-}var vprop = value - min;
-vprop /= max;
-conservation.annotations[i] = new jalview.datamodel.Annotation (String.valueOf (c), this.consSymbs[i - this.start], ' ', value, new java.awt.Color (minR + (maxR * vprop), minG + (maxG * vprop), minB + (maxB * vprop)));
-if (quality2 != null) {
-value = (this.quality.elementAt (i)).floatValue ();
-vprop = value - qmin;
-vprop /= qmax;
-quality2.annotations[i] = new jalview.datamodel.Annotation (" ", String.valueOf (value), ' ', value, new java.awt.Color (minR + (maxR * vprop), minG + (maxG * vprop), minB + (maxB * vprop)));
-}}
-}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation,~N,~N");
-c$.calculateConservation = Clazz.defineMethod (c$, "calculateConservation",
-function (name, consHash, threshold, seqs, start, end, posOrNeg, consPercGaps, calcQuality) {
-var cons = new jalview.analysis.Conservation (name, consHash, threshold, seqs, start, end);
-return jalview.analysis.Conservation.calculateConservation (cons, posOrNeg, consPercGaps, calcQuality);
-}, "~S,java.util.Hashtable,~N,java.util.List,~N,~N,~B,~N,~B");
-c$.calculateConservation = Clazz.defineMethod (c$, "calculateConservation",
-function (cons, b, consPercGaps, calcQuality) {
-cons.calculate ();
-cons.verdict (b, consPercGaps);
-if (calcQuality) {
-cons.findQuality ();
-}return cons;
-}, "jalview.analysis.Conservation,~B,~N,~B");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.Conservation", ["jalview.datamodel.Annotation", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color", "java.lang.Character", "$.Double", "$.StringBuffer", "java.util.Hashtable", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sequences = null;
+this.start = 0;
+this.end = 0;
+this.seqNums = null;
+this.maxLength = 0;
+this.seqNumsChanged = false;
+this.total = null;
+this.canonicaliseAa = true;
+this.quality = null;
+this.qualityRange = null;
+this.consString = "";
+this.consSequence = null;
+this.propHash = null;
+this.threshold = 0;
+this.name = "";
+this.cons2 = null;
+this.consSymbs = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "Conservation");
+Clazz.prepareFields (c$, function () {
+this.qualityRange = new Array (2);
+});
+Clazz.makeConstructor (c$,
+function (name, propHash, threshold, sequences, start, end) {
+this.name = name;
+this.propHash = propHash;
+this.threshold = threshold;
+this.start = start;
+this.end = end;
+this.maxLength = end - start + 1;
+var s;
+var sSize = sequences.size ();
+var sarray = new Array (sSize);
+this.sequences = sarray;
+try {
+for (s = 0; s < sSize; s++) {
+sarray[s] = sequences.get (s);
+if (sarray[s].getLength () > this.maxLength) {
+this.maxLength = sarray[s].getLength ();
+}}
+} catch (ex) {
+if (Clazz.exceptionOf (ex, ArrayIndexOutOfBoundsException)) {
+this.sequences = new Array (0);
+this.maxLength = 0;
+} else {
+throw ex;
+}
+}
+}, "~S,java.util.Hashtable,~N,java.util.List,~N,~N");
+Clazz.defineMethod (c$, "calcSeqNum",
+($fz = function (i) {
+var sq = null;
+var sqnum = null;
+var sSize = this.sequences.length;
+if ((i > -1) && (i < sSize)) {
+sq = this.sequences[i].getSequenceAsString ();
+if (this.seqNums.size () <= i) {
+this.seqNums.addElement ( Clazz.newIntArray (sq.length + 1, 0));
+}if (sq.hashCode () != (this.seqNums.elementAt (i))[0]) {
+var j;
+var len;
+this.seqNumsChanged = true;
+len = sq.length;
+if (this.maxLength < len) {
+this.maxLength = len;
+}sqnum = Clazz.newIntArray (len + 1, 0);
+sqnum[0] = sq.hashCode ();
+for (j = 1; j <= len; j++) {
+sqnum[j] = jalview.schemes.ResidueProperties.aaIndex[sq.charCodeAt (j - 1)];
+}
+this.seqNums.setElementAt (sqnum, i);
+} else {
+System.out.println ("SEQUENCE HAS BEEN DELETED!!!");
+}} else {
+System.err.println ("ERROR: calcSeqNum called with out of range sequence index for Alignment\n");
+}}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "calculate",
+function () {
+var resultHash;
+var ht;
+var thresh;
+var j;
+var jSize = this.sequences.length;
+var values;
+var type;
+var res = null;
+var c;
+var enumeration2;
+this.total = new Array (this.maxLength);
+for (var i = this.start; i <= this.end; i++) {
+values = Clazz.newIntArray (255, 0);
+for (j = 0; j < jSize; j++) {
+if (this.sequences[j].getLength () > i) {
+c = this.sequences[j].getCharAt (i);
+if (this.canonicaliseAa) {
+c = String.fromCharCode (jalview.schemes.ResidueProperties.aaIndex[this.sequences[j].getCharAt (i).charCodeAt (0)]);
+if (c.charCodeAt (0) > 20) {
+c = '-';
+} else {
+c = jalview.schemes.ResidueProperties.aa[c.charCodeAt (0)].charAt (0);
+}} else {
+if (c == '.' || c == ' ') {
+c = '-';
+}if (!this.canonicaliseAa && 'a' <= c && c <= 'z') {
+c = String.fromCharCode (c.charCodeAt (0) - (32));
+}}values[c.charCodeAt (0)]++;
+} else {
+values['-'.charCodeAt (0)]++;
+}}
+thresh = Clazz.doubleToInt ((this.threshold * (jSize)) / 100);
+resultHash = new java.util.Hashtable ();
+for (var v = '-'; v < 'Z'; v = String.fromCharCode (v.charCodeAt (0) + 1)) {
+if (values[v.charCodeAt (0)] > thresh) {
+res = String.valueOf (v);
+enumeration2 = this.propHash.keys ();
+while (enumeration2.hasMoreElements ()) {
+type = enumeration2.nextElement ();
+ht = this.propHash.get (type);
+if (!resultHash.containsKey (type)) {
+if (ht.containsKey (res)) {
+resultHash.put (type, ht.get (res));
+} else {
+resultHash.put (type, ht.get ("-"));
+}} else if ((resultHash.get (type)).equals (ht.get (res)) == false) {
+resultHash.put (type, new Integer (-1));
+}}
+}}
+if (this.total.length > 0) {
+this.total[i - this.start] = resultHash;
+}}
+});
+Clazz.defineMethod (c$, "countConsNGaps",
+function (j) {
+var count = 0;
+var cons = 0;
+var nres = 0;
+var r = Clazz.newIntArray (2, 0);
+var f = '$';
+var i;
+var iSize = this.sequences.length;
+var c;
+for (i = 0; i < iSize; i++) {
+if (j >= this.sequences[i].getLength ()) {
+count++;
+continue;
+}c = this.sequences[i].getCharAt (j);
+if (jalview.util.Comparison.isGap ((c))) {
+count++;
+} else {
+nres++;
+if (nres == 1) {
+f = c;
+cons++;
+} else if (f == c) {
+cons++;
+}}}
+r[0] = (nres == cons) ? 1 : 0;
+r[1] = count;
+return r;
+}, "~N");
+Clazz.defineMethod (c$, "verdict",
+function (consflag, percentageGaps) {
+var consString = new StringBuffer ();
+var type;
+var result;
+var gapcons;
+var totGaps;
+var count;
+var pgaps;
+var resultHash;
+var enumeration;
+for (var i = 0; i < this.start; i++) {
+consString.append ('-');
+}
+this.consSymbs = new Array (this.end - this.start + 1);
+for (var i = this.start; i <= this.end; i++) {
+gapcons = this.countConsNGaps (i);
+totGaps = gapcons[1];
+pgaps = (totGaps * 100) / this.sequences.length;
+this.consSymbs[i - this.start] = String.instantialize ();
+if (percentageGaps > pgaps) {
+resultHash = this.total[i - this.start];
+count = 0;
+enumeration = resultHash.keys ();
+while (enumeration.hasMoreElements ()) {
+type = enumeration.nextElement ();
+result = resultHash.get (type);
+if (consflag) {
+if (result.intValue () == 1) {
+this.consSymbs[i - this.start] = type + " " + this.consSymbs[i - this.start];
+count++;
+}} else {
+if (result.intValue () != -1) {
+{
+if (result.intValue () == 0) {
+this.consSymbs[i - this.start] = this.consSymbs[i - this.start] + " !" + type;
+} else {
+this.consSymbs[i - this.start] = type + " " + this.consSymbs[i - this.start];
+}}count++;
+}}}
+if (count < 10) {
+consString.append ("" + count);
+} else {
+consString.append ((gapcons[0] == 1) ? "*" : "+");
+}} else {
+consString.append ('-');
+}}
+this.consSequence = new jalview.datamodel.Sequence (this.name, consString.toString (), this.start, this.end);
+}, "~B,~N");
+Clazz.defineMethod (c$, "getConsSequence",
+function () {
+return this.consSequence;
+});
+Clazz.defineMethod (c$, "findQuality",
+function () {
+this.findQuality (0, this.maxLength - 1);
+});
+Clazz.defineMethod (c$, "percentIdentity2",
+($fz = function () {
+this.seqNums = new java.util.Vector ();
+var i = 0;
+var iSize = this.sequences.length;
+for (i = 0; i < iSize; i++) {
+this.calcSeqNum (i);
+}
+if ((this.cons2 == null) || this.seqNumsChanged) {
+this.cons2 = Clazz.newIntArray (this.maxLength, 24, 0);
+for (var j = 0; j < 24; j++) {
+for (i = 0; i < this.maxLength; i++) {
+this.cons2[i][j] = 0;
+}
+}
+var sqnum;
+var j = 0;
+while (j < this.sequences.length) {
+sqnum = this.seqNums.elementAt (j);
+for (i = 1; i < sqnum.length; i++) {
+this.cons2[i - 1][sqnum[i]]++;
+}
+for (i = sqnum.length - 1; i < this.maxLength; i++) {
+this.cons2[i][23]++;
+}
+j++;
+}
+}}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "findQuality",
+function (start, end) {
+this.quality = new java.util.Vector ();
+var max = -10000;
+var BLOSUM62 = jalview.schemes.ResidueProperties.getBLOSUM62 ();
+this.percentIdentity2 ();
+var size = this.seqNums.size ();
+var lengths = Clazz.newIntArray (size, 0);
+var tot;
+var bigtot;
+var sr;
+var tmp;
+var x;
+var xx;
+var l;
+var j;
+var i;
+var ii;
+var i2;
+var k;
+var seqNum;
+for (l = 0; l < size; l++) {
+lengths[l] = (this.seqNums.elementAt (l)).length - 1;
+}
+for (j = start; j <= end; j++) {
+bigtot = 0;
+x = Clazz.newDoubleArray (24, 0);
+for (ii = 0; ii < 24; ii++) {
+x[ii] = 0;
+for (i2 = 0; i2 < 24; i2++) {
+x[ii] += ((this.cons2[j][i2] * BLOSUM62[ii][i2]) + 4);
+}
+x[ii] /= size;
+}
+for (k = 0; k < size; k++) {
+tot = 0;
+xx = Clazz.newDoubleArray (24, 0);
+seqNum = (j < lengths[k]) ? (this.seqNums.elementAt (k))[j + 1] : 23;
+for (i = 0; i < 23; i++) {
+sr = 0;
+sr = BLOSUM62[i][seqNum] + 4;
+xx[i] = x[i] - sr;
+tot += (xx[i] * xx[i]);
+}
+bigtot += Math.sqrt (tot);
+}
+if (max < bigtot) {
+max = bigtot;
+}this.quality.addElement ( new Double (bigtot));
+}
+var newmax = -10000;
+for (j = start; j <= end; j++) {
+tmp = (this.quality.elementAt (j)).doubleValue ();
+tmp = ((max - tmp) * (size - this.cons2[j][23])) / size;
+this.quality.setElementAt ( new Double (tmp), j);
+if (tmp > newmax) {
+newmax = tmp;
+}}
+this.qualityRange[0] = new Double (0);
+this.qualityRange[1] = new Double (newmax);
+}, "~N,~N");
+Clazz.defineMethod (c$, "completeAnnotations",
+function (conservation, quality2, istart, alWidth) {
+var sequence = this.getConsSequence ().getSequence ();
+var minR;
+var minG;
+var minB;
+var maxR;
+var maxG;
+var maxB;
+minR = 0.3;
+minG = 0.0;
+minB = 0;
+maxR = 1.0 - minR;
+maxG = 0.9 - minG;
+maxB = 0 - minB;
+var min = 0;
+var max = 11;
+var qmin = 0;
+var qmax = 0;
+var c;
+if (conservation.annotations != null && conservation.annotations.length < alWidth) {
+conservation.annotations = new Array (alWidth);
+}if (quality2 != null) {
+quality2.graphMax = this.qualityRange[1].floatValue ();
+if (quality2.annotations != null && quality2.annotations.length < alWidth) {
+quality2.annotations = new Array (alWidth);
+}qmin = this.qualityRange[0].floatValue ();
+qmax = this.qualityRange[1].floatValue ();
+}for (var i = 0; i < alWidth; i++) {
+var value = 0;
+c = sequence[i];
+if (Character.isDigit (c)) {
+value = c.charCodeAt (0) - 48;
+} else if (c == '*') {
+value = 11;
+} else if (c == '+') {
+value = 10;
+}var vprop = value - min;
+vprop /= max;
+conservation.annotations[i] = new jalview.datamodel.Annotation (String.valueOf (c), this.consSymbs[i - this.start], ' ', value, new java.awt.Color (minR + (maxR * vprop), minG + (maxG * vprop), minB + (maxB * vprop)));
+if (quality2 != null) {
+value = (this.quality.elementAt (i)).floatValue ();
+vprop = value - qmin;
+vprop /= qmax;
+quality2.annotations[i] = new jalview.datamodel.Annotation (" ", String.valueOf (value), ' ', value, new java.awt.Color (minR + (maxR * vprop), minG + (maxG * vprop), minB + (maxB * vprop)));
+}}
+}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.AlignmentAnnotation,~N,~N");
+c$.calculateConservation = Clazz.defineMethod (c$, "calculateConservation",
+function (name, consHash, threshold, seqs, start, end, posOrNeg, consPercGaps, calcQuality) {
+var cons = new jalview.analysis.Conservation (name, consHash, threshold, seqs, start, end);
+return jalview.analysis.Conservation.calculateConservation (cons, posOrNeg, consPercGaps, calcQuality);
+}, "~S,java.util.Hashtable,~N,java.util.List,~N,~N,~B,~N,~B");
+c$.calculateConservation = Clazz.defineMethod (c$, "calculateConservation",
+function (cons, b, consPercGaps, calcQuality) {
+cons.calculate ();
+cons.verdict (b, consPercGaps);
+if (calcQuality) {
+cons.findQuality ();
+}return cons;
+}, "jalview.analysis.Conservation,~B,~N,~B");
+});
diff --git a/bin/jalview/analysis/Dna.class b/bin/jalview/analysis/Dna.class
index 3ae87d0..23cc7cb 100644
Binary files a/bin/jalview/analysis/Dna.class and b/bin/jalview/analysis/Dna.class differ
diff --git a/bin/jalview/analysis/Dna.js b/bin/jalview/analysis/Dna.js
index 68086a9..57c052f 100644
--- a/bin/jalview/analysis/Dna.js
+++ b/bin/jalview/analysis/Dna.js
@@ -1,327 +1,327 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (["jalview.analysis.CodonComparator"], "jalview.analysis.Dna", ["jalview.datamodel.AlignedCodon", "$.AlignedCodonFrame", "$.Alignment", "$.AlignmentAnnotation", "$.Annotation", "$.DBRefSource", "$.FeatureProperties", "$.GraphLine", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "$.DBRefUtils", "$.MapList", "$.ShiftList", "java.lang.IllegalStateException", "$.StringBuilder", "java.util.ArrayList", "$.Arrays"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.selection = null;
-this.seqstring = null;
-this.contigs = null;
-this.gapChar = '\0';
-this.annotations = null;
-this.dnaWidth = 0;
-this.dataset = null;
-this.aaWidth = 0;
-this.alignedCodons = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "Dna");
-Clazz.makeConstructor (c$,
-function (viewport, visibleContigs) {
-this.selection = java.util.Arrays.asList (viewport.getSequenceSelection ());
-this.seqstring = viewport.getViewAsString (true);
-this.contigs = visibleContigs;
-this.gapChar = viewport.getGapCharacter ();
-this.annotations = viewport.getAlignment ().getAlignmentAnnotation ();
-this.dnaWidth = viewport.getAlignment ().getWidth ();
-this.dataset = viewport.getAlignment ().getDataset ();
-}, "jalview.api.AlignViewportI,~A");
-c$.compareCodonPos = Clazz.defineMethod (c$, "compareCodonPos",
-function (ac1, ac2) {
-return jalview.analysis.Dna.comparator.compare (ac1, ac2);
-}, "jalview.datamodel.AlignedCodon,jalview.datamodel.AlignedCodon");
-Clazz.defineMethod (c$, "translateCdna",
-function () {
-var acf = new jalview.datamodel.AlignedCodonFrame ();
-this.alignedCodons = new Array (this.dnaWidth);
-var s;
-var sSize = this.selection.size ();
-var pepseqs = new java.util.ArrayList ();
-for (s = 0; s < sSize; s++) {
-var newseq = this.translateCodingRegion (this.selection.get (s), this.seqstring[s], acf, pepseqs);
-if (newseq != null) {
-pepseqs.add (newseq);
-var ds = newseq;
-if (this.dataset != null) {
-while (ds.getDatasetSequence () != null) {
-ds = ds.getDatasetSequence ();
-}
-this.dataset.addSequence (ds);
-}}}
-var newseqs = pepseqs.toArray ( new Array (pepseqs.size ()));
-var al = new jalview.datamodel.Alignment (newseqs);
-al.padGaps ();
-al.setDataset (this.dataset);
-this.translateAlignedAnnotations (al, acf);
-al.addCodonFrame (acf);
-return al;
-});
-c$.canTranslate = Clazz.defineMethod (c$, "canTranslate",
-function (selection, viscontigs) {
-for (var gd = 0; gd < selection.length; gd++) {
-var dna = selection[gd];
-var dnarefs = jalview.util.DBRefUtils.selectRefs (dna.getDBRef (), jalview.datamodel.DBRefSource.DNACODINGDBS);
-if (dnarefs != null) {
-var mappedrefs = new java.util.ArrayList ();
-var refs = dna.getDBRef ();
-for (var d = 0; d < refs.length; d++) {
-if (refs[d].getMap () != null && refs[d].getMap ().getMap () != null && refs[d].getMap ().getMap ().getFromRatio () == 3 && refs[d].getMap ().getMap ().getToRatio () == 1) {
-mappedrefs.add (refs[d]);
-}}
-dnarefs = mappedrefs.toArray ( new Array (mappedrefs.size ()));
-for (var d = 0; d < dnarefs.length; d++) {
-var mp = dnarefs[d].getMap ();
-if (mp != null) {
-for (var vc = 0; vc < viscontigs.length; vc += 2) {
-var mpr = mp.locateMappedRange (viscontigs[vc], viscontigs[vc + 1]);
-if (mpr != null) {
-return true;
-}}
-}}
-}}
-return false;
-}, "~A,~A");
-Clazz.defineMethod (c$, "translateAlignedAnnotations",
-function (al, acf) {
-if (this.annotations != null) {
-for (var annotation, $annotation = 0, $$annotation = this.annotations; $annotation < $$annotation.length && ((annotation = $$annotation[$annotation]) || true); $annotation++) {
-if (annotation.autoCalculated || !annotation.visible || annotation.isRNA ()) {
-continue;
-}var aSize = this.aaWidth;
-var anots = (annotation.annotations == null) ? null : new Array (aSize);
-if (anots != null) {
-for (var a = 0; a < aSize; a++) {
-if (a < this.alignedCodons.length && this.alignedCodons[a] != null && this.alignedCodons[a].pos1 == (this.alignedCodons[a].pos3 - 2)) {
-anots[a] = jalview.analysis.Dna.getCodonAnnotation (this.alignedCodons[a], annotation.annotations);
-}}
-}var aa = new jalview.datamodel.AlignmentAnnotation (annotation.label, annotation.description, anots);
-aa.graph = annotation.graph;
-aa.graphGroup = annotation.graphGroup;
-aa.graphHeight = annotation.graphHeight;
-if (annotation.getThreshold () != null) {
-aa.setThreshold ( new jalview.datamodel.GraphLine (annotation.getThreshold ()));
-}if (annotation.$hasScore) {
-aa.setScore (annotation.getScore ());
-}var seqRef = annotation.sequenceRef;
-if (seqRef != null) {
-var aaSeq = acf.getAaForDnaSeq (seqRef);
-if (aaSeq != null) {
-aa.setSequenceRef (aaSeq);
-aa.createSequenceMapping (aaSeq, aaSeq.getStart (), true);
-aa.adjustForAlignment ();
-aaSeq.addAlignmentAnnotation (aa);
-}}al.addAnnotation (aa);
-}
-}}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignedCodonFrame");
-c$.getCodonAnnotation = Clazz.defineMethod (c$, "getCodonAnnotation",
-($fz = function (is, annotations) {
-var contrib = 0;
-var annot = null;
-for (var p = 1; p <= 3; p++) {
-var dnaCol = is.getBaseColumn (p);
-if (annotations[dnaCol] != null) {
-if (annot == null) {
-annot = new jalview.datamodel.Annotation (annotations[dnaCol]);
-contrib = 1;
-} else {
-var cpy = new jalview.datamodel.Annotation (annotations[dnaCol]);
-if (annot.colour == null) {
-annot.colour = cpy.colour;
-}if (annot.description == null || annot.description.length == 0) {
-annot.description = cpy.description;
-}if (annot.displayCharacter == null) {
-annot.displayCharacter = cpy.displayCharacter;
-}if (annot.secondaryStructure.charCodeAt (0) == 0) {
-annot.secondaryStructure = cpy.secondaryStructure;
-}annot.value += cpy.value;
-contrib++;
-}}}
-if (contrib > 1) {
-annot.value /= contrib;
-}return annot;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignedCodon,~A");
-Clazz.defineMethod (c$, "translateCodingRegion",
-function (selection, seqstring, acf, proteinSeqs) {
-var skip = new java.util.ArrayList ();
-var skipint = null;
-var vismapping = new jalview.util.ShiftList ();
-var vc;
-var scontigs = Clazz.newIntArray (this.contigs.length, 0);
-var npos = 0;
-for (vc = 0; vc < this.contigs.length; vc += 2) {
-if (vc == 0) {
-vismapping.addShift (npos, this.contigs[vc]);
-} else {
-vismapping.addShift (npos, this.contigs[vc] - this.contigs[vc - 1] + 1);
-}scontigs[vc] = this.contigs[vc];
-scontigs[vc + 1] = this.contigs[vc + 1];
-}
-var protein = new StringBuilder (Clazz.doubleToInt (seqstring.length / 2));
-var seq = seqstring.$replace ('U', 'T').$replace ('u', 'T');
-var codon = Clazz.newCharArray (3, '\0');
-var cdp = Clazz.newIntArray (3, 0);
-var rf = 0;
-var lastnpos = 0;
-var nend;
-var aspos = 0;
-var resSize = 0;
-for (npos = 0, nend = seq.length; npos < nend; npos++) {
-if (!jalview.util.Comparison.isGap (seq.charAt (npos))) {
-cdp[rf] = npos;
-codon[rf++] = seq.charAt (npos);
-}if (rf == 3) {
-var alignedCodon = new jalview.datamodel.AlignedCodon (cdp[0], cdp[1], cdp[2]);
-var aa = jalview.schemes.ResidueProperties.codonTranslate ( String.instantialize (codon));
-rf = 0;
-var gapString = String.valueOf (this.gapChar);
-if (aa == null) {
-aa = gapString;
-if (skipint == null) {
-skipint = Clazz.newIntArray (-1, [alignedCodon.pos1, alignedCodon.pos3]);
-}skipint[1] = alignedCodon.pos3;
-} else {
-if (skipint != null) {
-skipint[0] = vismapping.shift (skipint[0]);
-skipint[1] = vismapping.shift (skipint[1]);
-for (vc = 0; vc < scontigs.length; ) {
-if (scontigs[vc + 1] < skipint[0]) {
-vc += 2;
-continue;
-}if (scontigs[vc] > skipint[1]) {
-break;
-}var t;
-if (scontigs[vc] <= skipint[0]) {
-if (skipint[0] == scontigs[vc]) {
-if (scontigs[vc + 1] > skipint[1]) {
-scontigs[vc] = skipint[1];
-vc += 2;
-} else {
-if (scontigs[vc + 1] == skipint[1]) {
-t = Clazz.newIntArray (scontigs.length - 2, 0);
-if (vc > 0) {
-System.arraycopy (scontigs, 0, t, 0, vc - 1);
-}if (vc + 2 < t.length) {
-System.arraycopy (scontigs, vc + 2, t, vc, t.length - vc + 2);
-}scontigs = t;
-} else {
-scontigs[vc + 1] = skipint[0] - 1;
-vc += 2;
-}}} else {
-if (scontigs[vc + 1] < skipint[1]) {
-scontigs[vc + 1] = skipint[0] - 1;
-vc += 2;
-} else {
-t = Clazz.newIntArray (scontigs.length + 2, 0);
-System.arraycopy (scontigs, 0, t, 0, vc + 1);
-t[vc + 1] = skipint[0];
-t[vc + 2] = skipint[1];
-System.arraycopy (scontigs, vc + 1, t, vc + 3, scontigs.length - (vc + 1));
-scontigs = t;
-vc += 4;
-}}}}
-skip.add (skipint);
-skipint = null;
-}if (aa.equals ("STOP")) {
-aa = "X";
-}resSize++;
-}var findpos = true;
-while (findpos) {
-var compareCodonPos = jalview.analysis.Dna.compareCodonPos (alignedCodon, this.alignedCodons[aspos]);
-switch (compareCodonPos) {
-case -1:
-this.insertAAGap (aspos, proteinSeqs);
-findpos = false;
-break;
-case 1:
-aa = gapString + aa;
-aspos++;
-break;
-case 0:
-findpos = false;
-}
-}
-protein.append (aa);
-lastnpos = npos;
-if (this.alignedCodons[aspos] == null) {
-this.alignedCodons[aspos] = alignedCodon;
-} else if (!this.alignedCodons[aspos].equals (alignedCodon)) {
-throw new IllegalStateException ("Tried to coalign " + this.alignedCodons[aspos].toString () + " with " + alignedCodon.toString ());
-}if (aspos >= this.aaWidth) {
-this.aaWidth = aspos;
-}aspos++;
-}}
-if (resSize > 0) {
-var newseq = new jalview.datamodel.Sequence (selection.getName (), protein.toString ());
-if (rf != 0) {
-var errMsg = "trimming contigs for incomplete terminal codon.";
-System.err.println ("trimming contigs for incomplete terminal codon.");
-vc = scontigs.length - 1;
-lastnpos = vismapping.shift (lastnpos);
-while (vc >= 0 && scontigs[vc] > lastnpos) {
-if (vc > 0 && scontigs[vc - 1] > lastnpos) {
-vc -= 2;
-} else {
-scontigs[vc] = lastnpos;
-}}
-if (vc > 0 && (vc + 1) < scontigs.length) {
-var t = Clazz.newIntArray (vc + 1, 0);
-System.arraycopy (scontigs, 0, t, 0, vc + 1);
-scontigs = t;
-}if (vc <= 0) {
-scontigs = null;
-}}if (scontigs != null) {
-npos = 0;
-for (vc = 0; vc < scontigs.length; vc += 2) {
-scontigs[vc] = selection.findPosition (scontigs[vc]);
-scontigs[vc + 1] = selection.findPosition (scontigs[vc + 1]);
-if (scontigs[vc + 1] == selection.getEnd ()) {
-break;
-}}
-if ((vc + 2) < scontigs.length) {
-var t = Clazz.newIntArray (vc + 2, 0);
-System.arraycopy (scontigs, 0, t, 0, vc + 2);
-scontigs = t;
-}var map = new jalview.util.MapList (scontigs, Clazz.newIntArray (-1, [1, resSize]), 3, 1);
-jalview.analysis.Dna.transferCodedFeatures (selection, newseq, map, null, null);
-var rseq = newseq.deriveSequence ();
-acf.addMap (selection, rseq, map);
-return rseq;
-}}return null;
-}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.AlignedCodonFrame,java.util.List");
-Clazz.defineMethod (c$, "insertAAGap",
-function (pos, proteinSeqs) {
-this.aaWidth++;
-for (var seq, $seq = proteinSeqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-seq.insertCharAt (pos, this.gapChar);
-}
-this.checkCodonFrameWidth ();
-if (pos < this.aaWidth) {
-this.aaWidth++;
-System.arraycopy (this.alignedCodons, pos, this.alignedCodons, pos + 1, this.alignedCodons.length - pos - 1);
-this.alignedCodons[pos] = null;
-}}, "~N,java.util.List");
-Clazz.defineMethod (c$, "checkCodonFrameWidth",
-function () {
-if (this.alignedCodons[this.alignedCodons.length - 1] != null) {
-var c = new Array (this.alignedCodons.length + 10);
-System.arraycopy (this.alignedCodons, 0, c, 0, this.alignedCodons.length);
-this.alignedCodons = c;
-}});
-c$.transferCodedFeatures = Clazz.defineMethod (c$, "transferCodedFeatures",
-($fz = function (dna, pep, map, featureTypes, featureGroups) {
-var sfs = dna.getSequenceFeatures ();
-var fgstate;
-var dnarefs = jalview.util.DBRefUtils.selectRefs (dna.getDBRef (), jalview.datamodel.DBRefSource.DNACODINGDBS);
-if (dnarefs != null) {
-for (var d = 0; d < dnarefs.length; d++) {
-var mp = dnarefs[d].getMap ();
-if (mp != null) {
-}}
-}if (sfs != null) {
-for (var sf, $sf = 0, $$sf = sfs; $sf < $$sf.length && ((sf = $$sf[$sf]) || true); $sf++) {
-fgstate = (featureGroups == null) ? null : featureGroups.get (sf.featureGroup);
-if ((featureTypes == null || featureTypes.containsKey (sf.getType ())) && (fgstate == null || fgstate.booleanValue ())) {
-if (jalview.datamodel.FeatureProperties.isCodingFeature (null, sf.getType ())) {
-{
-}}}}
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.util.MapList,java.util.Map,java.util.Map");
-Clazz.defineStatics (c$,
-"STOP_X", "X");
-c$.comparator = c$.prototype.comparator = new jalview.analysis.CodonComparator ();
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (["jalview.analysis.CodonComparator"], "jalview.analysis.Dna", ["jalview.datamodel.AlignedCodon", "$.AlignedCodonFrame", "$.Alignment", "$.AlignmentAnnotation", "$.Annotation", "$.DBRefSource", "$.FeatureProperties", "$.GraphLine", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "$.DBRefUtils", "$.MapList", "$.ShiftList", "java.lang.IllegalStateException", "$.StringBuilder", "java.util.ArrayList", "$.Arrays"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.selection = null;
+this.seqstring = null;
+this.contigs = null;
+this.gapChar = '\0';
+this.annotations = null;
+this.dnaWidth = 0;
+this.dataset = null;
+this.aaWidth = 0;
+this.alignedCodons = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "Dna");
+Clazz.makeConstructor (c$,
+function (viewport, visibleContigs) {
+this.selection = java.util.Arrays.asList (viewport.getSequenceSelection ());
+this.seqstring = viewport.getViewAsString (true);
+this.contigs = visibleContigs;
+this.gapChar = viewport.getGapCharacter ();
+this.annotations = viewport.getAlignment ().getAlignmentAnnotation ();
+this.dnaWidth = viewport.getAlignment ().getWidth ();
+this.dataset = viewport.getAlignment ().getDataset ();
+}, "jalview.api.AlignViewportI,~A");
+c$.compareCodonPos = Clazz.defineMethod (c$, "compareCodonPos",
+function (ac1, ac2) {
+return jalview.analysis.Dna.comparator.compare (ac1, ac2);
+}, "jalview.datamodel.AlignedCodon,jalview.datamodel.AlignedCodon");
+Clazz.defineMethod (c$, "translateCdna",
+function () {
+var acf = new jalview.datamodel.AlignedCodonFrame ();
+this.alignedCodons = new Array (this.dnaWidth);
+var s;
+var sSize = this.selection.size ();
+var pepseqs = new java.util.ArrayList ();
+for (s = 0; s < sSize; s++) {
+var newseq = this.translateCodingRegion (this.selection.get (s), this.seqstring[s], acf, pepseqs);
+if (newseq != null) {
+pepseqs.add (newseq);
+var ds = newseq;
+if (this.dataset != null) {
+while (ds.getDatasetSequence () != null) {
+ds = ds.getDatasetSequence ();
+}
+this.dataset.addSequence (ds);
+}}}
+var newseqs = pepseqs.toArray ( new Array (pepseqs.size ()));
+var al = new jalview.datamodel.Alignment (newseqs);
+al.padGaps ();
+al.setDataset (this.dataset);
+this.translateAlignedAnnotations (al, acf);
+al.addCodonFrame (acf);
+return al;
+});
+c$.canTranslate = Clazz.defineMethod (c$, "canTranslate",
+function (selection, viscontigs) {
+for (var gd = 0; gd < selection.length; gd++) {
+var dna = selection[gd];
+var dnarefs = jalview.util.DBRefUtils.selectRefs (dna.getDBRef (), jalview.datamodel.DBRefSource.DNACODINGDBS);
+if (dnarefs != null) {
+var mappedrefs = new java.util.ArrayList ();
+var refs = dna.getDBRef ();
+for (var d = 0; d < refs.length; d++) {
+if (refs[d].getMap () != null && refs[d].getMap ().getMap () != null && refs[d].getMap ().getMap ().getFromRatio () == 3 && refs[d].getMap ().getMap ().getToRatio () == 1) {
+mappedrefs.add (refs[d]);
+}}
+dnarefs = mappedrefs.toArray ( new Array (mappedrefs.size ()));
+for (var d = 0; d < dnarefs.length; d++) {
+var mp = dnarefs[d].getMap ();
+if (mp != null) {
+for (var vc = 0; vc < viscontigs.length; vc += 2) {
+var mpr = mp.locateMappedRange (viscontigs[vc], viscontigs[vc + 1]);
+if (mpr != null) {
+return true;
+}}
+}}
+}}
+return false;
+}, "~A,~A");
+Clazz.defineMethod (c$, "translateAlignedAnnotations",
+function (al, acf) {
+if (this.annotations != null) {
+for (var annotation, $annotation = 0, $$annotation = this.annotations; $annotation < $$annotation.length && ((annotation = $$annotation[$annotation]) || true); $annotation++) {
+if (annotation.autoCalculated || !annotation.visible || annotation.isRNA ()) {
+continue;
+}var aSize = this.aaWidth;
+var anots = (annotation.annotations == null) ? null : new Array (aSize);
+if (anots != null) {
+for (var a = 0; a < aSize; a++) {
+if (a < this.alignedCodons.length && this.alignedCodons[a] != null && this.alignedCodons[a].pos1 == (this.alignedCodons[a].pos3 - 2)) {
+anots[a] = jalview.analysis.Dna.getCodonAnnotation (this.alignedCodons[a], annotation.annotations);
+}}
+}var aa = new jalview.datamodel.AlignmentAnnotation (annotation.label, annotation.description, anots);
+aa.graph = annotation.graph;
+aa.graphGroup = annotation.graphGroup;
+aa.graphHeight = annotation.graphHeight;
+if (annotation.getThreshold () != null) {
+aa.setThreshold ( new jalview.datamodel.GraphLine (annotation.getThreshold ()));
+}if (annotation.$hasScore) {
+aa.setScore (annotation.getScore ());
+}var seqRef = annotation.sequenceRef;
+if (seqRef != null) {
+var aaSeq = acf.getAaForDnaSeq (seqRef);
+if (aaSeq != null) {
+aa.setSequenceRef (aaSeq);
+aa.createSequenceMapping (aaSeq, aaSeq.getStart (), true);
+aa.adjustForAlignment ();
+aaSeq.addAlignmentAnnotation (aa);
+}}al.addAnnotation (aa);
+}
+}}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignedCodonFrame");
+c$.getCodonAnnotation = Clazz.defineMethod (c$, "getCodonAnnotation",
+($fz = function (is, annotations) {
+var contrib = 0;
+var annot = null;
+for (var p = 1; p <= 3; p++) {
+var dnaCol = is.getBaseColumn (p);
+if (annotations[dnaCol] != null) {
+if (annot == null) {
+annot = new jalview.datamodel.Annotation (annotations[dnaCol]);
+contrib = 1;
+} else {
+var cpy = new jalview.datamodel.Annotation (annotations[dnaCol]);
+if (annot.colour == null) {
+annot.colour = cpy.colour;
+}if (annot.description == null || annot.description.length == 0) {
+annot.description = cpy.description;
+}if (annot.displayCharacter == null) {
+annot.displayCharacter = cpy.displayCharacter;
+}if (annot.secondaryStructure.charCodeAt (0) == 0) {
+annot.secondaryStructure = cpy.secondaryStructure;
+}annot.value += cpy.value;
+contrib++;
+}}}
+if (contrib > 1) {
+annot.value /= contrib;
+}return annot;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignedCodon,~A");
+Clazz.defineMethod (c$, "translateCodingRegion",
+function (selection, seqstring, acf, proteinSeqs) {
+var skip = new java.util.ArrayList ();
+var skipint = null;
+var vismapping = new jalview.util.ShiftList ();
+var vc;
+var scontigs = Clazz.newIntArray (this.contigs.length, 0);
+var npos = 0;
+for (vc = 0; vc < this.contigs.length; vc += 2) {
+if (vc == 0) {
+vismapping.addShift (npos, this.contigs[vc]);
+} else {
+vismapping.addShift (npos, this.contigs[vc] - this.contigs[vc - 1] + 1);
+}scontigs[vc] = this.contigs[vc];
+scontigs[vc + 1] = this.contigs[vc + 1];
+}
+var protein = new StringBuilder (Clazz.doubleToInt (seqstring.length / 2));
+var seq = seqstring.$replace ('U', 'T').$replace ('u', 'T');
+var codon = Clazz.newCharArray (3, '\0');
+var cdp = Clazz.newIntArray (3, 0);
+var rf = 0;
+var lastnpos = 0;
+var nend;
+var aspos = 0;
+var resSize = 0;
+for (npos = 0, nend = seq.length; npos < nend; npos++) {
+if (!jalview.util.Comparison.isGap (seq.charAt (npos))) {
+cdp[rf] = npos;
+codon[rf++] = seq.charAt (npos);
+}if (rf == 3) {
+var alignedCodon = new jalview.datamodel.AlignedCodon (cdp[0], cdp[1], cdp[2]);
+var aa = jalview.schemes.ResidueProperties.codonTranslate ( String.instantialize (codon));
+rf = 0;
+var gapString = String.valueOf (this.gapChar);
+if (aa == null) {
+aa = gapString;
+if (skipint == null) {
+skipint = Clazz.newIntArray (-1, [alignedCodon.pos1, alignedCodon.pos3]);
+}skipint[1] = alignedCodon.pos3;
+} else {
+if (skipint != null) {
+skipint[0] = vismapping.shift (skipint[0]);
+skipint[1] = vismapping.shift (skipint[1]);
+for (vc = 0; vc < scontigs.length; ) {
+if (scontigs[vc + 1] < skipint[0]) {
+vc += 2;
+continue;
+}if (scontigs[vc] > skipint[1]) {
+break;
+}var t;
+if (scontigs[vc] <= skipint[0]) {
+if (skipint[0] == scontigs[vc]) {
+if (scontigs[vc + 1] > skipint[1]) {
+scontigs[vc] = skipint[1];
+vc += 2;
+} else {
+if (scontigs[vc + 1] == skipint[1]) {
+t = Clazz.newIntArray (scontigs.length - 2, 0);
+if (vc > 0) {
+System.arraycopy (scontigs, 0, t, 0, vc - 1);
+}if (vc + 2 < t.length) {
+System.arraycopy (scontigs, vc + 2, t, vc, t.length - vc + 2);
+}scontigs = t;
+} else {
+scontigs[vc + 1] = skipint[0] - 1;
+vc += 2;
+}}} else {
+if (scontigs[vc + 1] < skipint[1]) {
+scontigs[vc + 1] = skipint[0] - 1;
+vc += 2;
+} else {
+t = Clazz.newIntArray (scontigs.length + 2, 0);
+System.arraycopy (scontigs, 0, t, 0, vc + 1);
+t[vc + 1] = skipint[0];
+t[vc + 2] = skipint[1];
+System.arraycopy (scontigs, vc + 1, t, vc + 3, scontigs.length - (vc + 1));
+scontigs = t;
+vc += 4;
+}}}}
+skip.add (skipint);
+skipint = null;
+}if (aa.equals ("STOP")) {
+aa = "X";
+}resSize++;
+}var findpos = true;
+while (findpos) {
+var compareCodonPos = jalview.analysis.Dna.compareCodonPos (alignedCodon, this.alignedCodons[aspos]);
+switch (compareCodonPos) {
+case -1:
+this.insertAAGap (aspos, proteinSeqs);
+findpos = false;
+break;
+case 1:
+aa = gapString + aa;
+aspos++;
+break;
+case 0:
+findpos = false;
+}
+}
+protein.append (aa);
+lastnpos = npos;
+if (this.alignedCodons[aspos] == null) {
+this.alignedCodons[aspos] = alignedCodon;
+} else if (!this.alignedCodons[aspos].equals (alignedCodon)) {
+throw new IllegalStateException ("Tried to coalign " + this.alignedCodons[aspos].toString () + " with " + alignedCodon.toString ());
+}if (aspos >= this.aaWidth) {
+this.aaWidth = aspos;
+}aspos++;
+}}
+if (resSize > 0) {
+var newseq = new jalview.datamodel.Sequence (selection.getName (), protein.toString ());
+if (rf != 0) {
+var errMsg = "trimming contigs for incomplete terminal codon.";
+System.err.println ("trimming contigs for incomplete terminal codon.");
+vc = scontigs.length - 1;
+lastnpos = vismapping.shift (lastnpos);
+while (vc >= 0 && scontigs[vc] > lastnpos) {
+if (vc > 0 && scontigs[vc - 1] > lastnpos) {
+vc -= 2;
+} else {
+scontigs[vc] = lastnpos;
+}}
+if (vc > 0 && (vc + 1) < scontigs.length) {
+var t = Clazz.newIntArray (vc + 1, 0);
+System.arraycopy (scontigs, 0, t, 0, vc + 1);
+scontigs = t;
+}if (vc <= 0) {
+scontigs = null;
+}}if (scontigs != null) {
+npos = 0;
+for (vc = 0; vc < scontigs.length; vc += 2) {
+scontigs[vc] = selection.findPosition (scontigs[vc]);
+scontigs[vc + 1] = selection.findPosition (scontigs[vc + 1]);
+if (scontigs[vc + 1] == selection.getEnd ()) {
+break;
+}}
+if ((vc + 2) < scontigs.length) {
+var t = Clazz.newIntArray (vc + 2, 0);
+System.arraycopy (scontigs, 0, t, 0, vc + 2);
+scontigs = t;
+}var map = new jalview.util.MapList (scontigs, Clazz.newIntArray (-1, [1, resSize]), 3, 1);
+jalview.analysis.Dna.transferCodedFeatures (selection, newseq, map, null, null);
+var rseq = newseq.deriveSequence ();
+acf.addMap (selection, rseq, map);
+return rseq;
+}}return null;
+}, "jalview.datamodel.SequenceI,~S,jalview.datamodel.AlignedCodonFrame,java.util.List");
+Clazz.defineMethod (c$, "insertAAGap",
+function (pos, proteinSeqs) {
+this.aaWidth++;
+for (var seq, $seq = proteinSeqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+seq.insertCharAt (pos, this.gapChar);
+}
+this.checkCodonFrameWidth ();
+if (pos < this.aaWidth) {
+this.aaWidth++;
+System.arraycopy (this.alignedCodons, pos, this.alignedCodons, pos + 1, this.alignedCodons.length - pos - 1);
+this.alignedCodons[pos] = null;
+}}, "~N,java.util.List");
+Clazz.defineMethod (c$, "checkCodonFrameWidth",
+function () {
+if (this.alignedCodons[this.alignedCodons.length - 1] != null) {
+var c = new Array (this.alignedCodons.length + 10);
+System.arraycopy (this.alignedCodons, 0, c, 0, this.alignedCodons.length);
+this.alignedCodons = c;
+}});
+c$.transferCodedFeatures = Clazz.defineMethod (c$, "transferCodedFeatures",
+($fz = function (dna, pep, map, featureTypes, featureGroups) {
+var sfs = dna.getSequenceFeatures ();
+var fgstate;
+var dnarefs = jalview.util.DBRefUtils.selectRefs (dna.getDBRef (), jalview.datamodel.DBRefSource.DNACODINGDBS);
+if (dnarefs != null) {
+for (var d = 0; d < dnarefs.length; d++) {
+var mp = dnarefs[d].getMap ();
+if (mp != null) {
+}}
+}if (sfs != null) {
+for (var sf, $sf = 0, $$sf = sfs; $sf < $$sf.length && ((sf = $$sf[$sf]) || true); $sf++) {
+fgstate = (featureGroups == null) ? null : featureGroups.get (sf.featureGroup);
+if ((featureTypes == null || featureTypes.containsKey (sf.getType ())) && (fgstate == null || fgstate.booleanValue ())) {
+if (jalview.datamodel.FeatureProperties.isCodingFeature (null, sf.getType ())) {
+{
+}}}}
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.util.MapList,java.util.Map,java.util.Map");
+Clazz.defineStatics (c$,
+"STOP_X", "X");
+c$.comparator = c$.prototype.comparator = new jalview.analysis.CodonComparator ();
+});
diff --git a/bin/jalview/analysis/Finder.class b/bin/jalview/analysis/Finder.class
index ec046f2..3648614 100644
Binary files a/bin/jalview/analysis/Finder.class and b/bin/jalview/analysis/Finder.class differ
diff --git a/bin/jalview/analysis/Finder.js b/bin/jalview/analysis/Finder.js
index cf1d8f9..5d20c2c 100644
--- a/bin/jalview/analysis/Finder.js
+++ b/bin/jalview/analysis/Finder.js
@@ -1,182 +1,182 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.Finder", ["jalview.datamodel.SearchResults", "jalview.jsdev.RegExp", "jalview.util.Comparison", "java.lang.StringBuffer", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.searchResults = null;
-this.alignment = null;
-this.selection = null;
-this.idMatch = null;
-this.caseSensitive = false;
-this.includeDescription = false;
-this.findAll = false;
-this.regex = null;
-this.seqIndex = 0;
-this.resIndex = -1;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "Finder");
-Clazz.makeConstructor (c$,
-function (alignment, selection) {
-this.alignment = alignment;
-this.selection = selection;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
-Clazz.makeConstructor (c$,
-function (alignment, selectionGroup, seqIndex, resIndex) {
-this.construct (alignment, selectionGroup);
-this.seqIndex = seqIndex;
-this.resIndex = resIndex;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup,~N,~N");
-Clazz.defineMethod (c$, "find",
-function (searchString) {
-var hasResults = false;
-if (!this.caseSensitive) {
-searchString = searchString.toUpperCase ();
-}this.regex = jalview.jsdev.RegExp.newRegex ([searchString]);
-this.regex.setIgnoreCase (!this.caseSensitive);
-this.searchResults = new jalview.datamodel.SearchResults ();
-this.idMatch = new java.util.Vector ();
-var seq;
-var item = null;
-var found = false;
-var end = this.alignment.getHeight ();
-if (this.selection != null) {
-if ((this.selection.getSize () < 1) || ((this.selection.getEndRes () - this.selection.getStartRes ()) < 2)) {
-this.selection = null;
-}}while (!found && (this.seqIndex < end)) {
-seq = this.alignment.getSequenceAt (this.seqIndex);
-if ((this.selection != null && this.selection.getSize () > 0) && !this.selection.getSequences (null).contains (seq)) {
-this.seqIndex++;
-this.resIndex = -1;
-continue;
-}if (this.resIndex < 0) {
-this.resIndex = 0;
-try {
-var res = Integer.parseInt (searchString);
-if (seq.getEnd () >= res) {
-this.searchResults.addResult (seq, res, res);
-hasResults = true;
-if (!this.findAll) {
-found = true;
-break;
-}}} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-if (this.regex.search (seq.getName ())) {
-this.idMatch.addElement (seq);
-hasResults = true;
-if (!this.findAll) {
-found = true;
-break;
-}}if (this.isIncludeDescription () && seq.getDescription () != null && this.regex.search (seq.getDescription ())) {
-this.idMatch.addElement (seq);
-hasResults = true;
-if (!this.findAll) {
-found = true;
-break;
-}}}item = seq.getSequenceAsString ();
-if ((this.selection != null) && (this.selection.getEndRes () < this.alignment.getWidth () - 1)) {
-item = item.substring (0, this.selection.getEndRes () + 1);
-}var noGapsSB = new StringBuffer ();
-var insertCount = 0;
-var spaces = new java.util.Vector ();
-for (var j = 0; j < item.length; j++) {
-if (!jalview.util.Comparison.isGap (item.charAt (j))) {
-noGapsSB.append (item.charAt (j));
-spaces.addElement ( new Integer (insertCount));
-} else {
-insertCount++;
-}}
-var noGaps = noGapsSB.toString ();
-for (var r = this.resIndex; r < noGaps.length; r++) {
-if (this.regex.searchFrom (noGaps, r)) {
-this.resIndex = this.regex.matchedFrom ();
-if ((this.selection != null && this.selection.getSize () > 0) && ((this.resIndex + Integer.parseInt (spaces.elementAt (this.resIndex).toString ())) < this.selection.getStartRes ())) {
-continue;
-}var sres = seq.findPosition (this.resIndex + Integer.parseInt (spaces.elementAt (this.resIndex).toString ()));
-var eres = seq.findPosition (this.regex.matchedTo () - 1 + Integer.parseInt (spaces.elementAt (this.regex.matchedTo () - 1).toString ()));
-this.searchResults.addResult (seq, sres, eres);
-hasResults = true;
-if (!this.findAll) {
-found = true;
-this.resIndex++;
-break;
-}r = this.resIndex;
-} else {
-break;
-}}
-if (!found) {
-this.seqIndex++;
-this.resIndex = -1;
-}}
-return hasResults;
-}, "~S");
-Clazz.defineMethod (c$, "getAlignment",
-function () {
-return this.alignment;
-});
-Clazz.defineMethod (c$, "setAlignment",
-function (alignment) {
-this.alignment = alignment;
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "isCaseSensitive",
-function () {
-return this.caseSensitive;
-});
-Clazz.defineMethod (c$, "setCaseSensitive",
-function (caseSensitive) {
-this.caseSensitive = caseSensitive;
-}, "~B");
-Clazz.defineMethod (c$, "isFindAll",
-function () {
-return this.findAll;
-});
-Clazz.defineMethod (c$, "setFindAll",
-function (findAll) {
-this.findAll = findAll;
-}, "~B");
-Clazz.defineMethod (c$, "getSelection",
-function () {
-return this.selection;
-});
-Clazz.defineMethod (c$, "setSelection",
-function (selection) {
-this.selection = selection;
-}, "jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "getIdMatch",
-function () {
-return this.idMatch;
-});
-Clazz.defineMethod (c$, "getRegex",
-function () {
-return this.regex;
-});
-Clazz.defineMethod (c$, "getSearchResults",
-function () {
-return this.searchResults;
-});
-Clazz.defineMethod (c$, "getResIndex",
-function () {
-return this.resIndex;
-});
-Clazz.defineMethod (c$, "setResIndex",
-function (resIndex) {
-this.resIndex = resIndex;
-}, "~N");
-Clazz.defineMethod (c$, "getSeqIndex",
-function () {
-return this.seqIndex;
-});
-Clazz.defineMethod (c$, "setSeqIndex",
-function (seqIndex) {
-this.seqIndex = seqIndex;
-}, "~N");
-Clazz.defineMethod (c$, "isIncludeDescription",
-function () {
-return this.includeDescription;
-});
-Clazz.defineMethod (c$, "setIncludeDescription",
-function (includeDescription) {
-this.includeDescription = includeDescription;
-}, "~B");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.Finder", ["jalview.datamodel.SearchResults", "jalview.jsdev.RegExp", "jalview.util.Comparison", "java.lang.StringBuffer", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.searchResults = null;
+this.alignment = null;
+this.selection = null;
+this.idMatch = null;
+this.caseSensitive = false;
+this.includeDescription = false;
+this.findAll = false;
+this.regex = null;
+this.seqIndex = 0;
+this.resIndex = -1;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "Finder");
+Clazz.makeConstructor (c$,
+function (alignment, selection) {
+this.alignment = alignment;
+this.selection = selection;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
+Clazz.makeConstructor (c$,
+function (alignment, selectionGroup, seqIndex, resIndex) {
+this.construct (alignment, selectionGroup);
+this.seqIndex = seqIndex;
+this.resIndex = resIndex;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup,~N,~N");
+Clazz.defineMethod (c$, "find",
+function (searchString) {
+var hasResults = false;
+if (!this.caseSensitive) {
+searchString = searchString.toUpperCase ();
+}this.regex = jalview.jsdev.RegExp.newRegex ([searchString]);
+this.regex.setIgnoreCase (!this.caseSensitive);
+this.searchResults = new jalview.datamodel.SearchResults ();
+this.idMatch = new java.util.Vector ();
+var seq;
+var item = null;
+var found = false;
+var end = this.alignment.getHeight ();
+if (this.selection != null) {
+if ((this.selection.getSize () < 1) || ((this.selection.getEndRes () - this.selection.getStartRes ()) < 2)) {
+this.selection = null;
+}}while (!found && (this.seqIndex < end)) {
+seq = this.alignment.getSequenceAt (this.seqIndex);
+if ((this.selection != null && this.selection.getSize () > 0) && !this.selection.getSequences (null).contains (seq)) {
+this.seqIndex++;
+this.resIndex = -1;
+continue;
+}if (this.resIndex < 0) {
+this.resIndex = 0;
+try {
+var res = Integer.parseInt (searchString);
+if (seq.getEnd () >= res) {
+this.searchResults.addResult (seq, res, res);
+hasResults = true;
+if (!this.findAll) {
+found = true;
+break;
+}}} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+if (this.regex.search (seq.getName ())) {
+this.idMatch.addElement (seq);
+hasResults = true;
+if (!this.findAll) {
+found = true;
+break;
+}}if (this.isIncludeDescription () && seq.getDescription () != null && this.regex.search (seq.getDescription ())) {
+this.idMatch.addElement (seq);
+hasResults = true;
+if (!this.findAll) {
+found = true;
+break;
+}}}item = seq.getSequenceAsString ();
+if ((this.selection != null) && (this.selection.getEndRes () < this.alignment.getWidth () - 1)) {
+item = item.substring (0, this.selection.getEndRes () + 1);
+}var noGapsSB = new StringBuffer ();
+var insertCount = 0;
+var spaces = new java.util.Vector ();
+for (var j = 0; j < item.length; j++) {
+if (!jalview.util.Comparison.isGap (item.charAt (j))) {
+noGapsSB.append (item.charAt (j));
+spaces.addElement ( new Integer (insertCount));
+} else {
+insertCount++;
+}}
+var noGaps = noGapsSB.toString ();
+for (var r = this.resIndex; r < noGaps.length; r++) {
+if (this.regex.searchFrom (noGaps, r)) {
+this.resIndex = this.regex.matchedFrom ();
+if ((this.selection != null && this.selection.getSize () > 0) && ((this.resIndex + Integer.parseInt (spaces.elementAt (this.resIndex).toString ())) < this.selection.getStartRes ())) {
+continue;
+}var sres = seq.findPosition (this.resIndex + Integer.parseInt (spaces.elementAt (this.resIndex).toString ()));
+var eres = seq.findPosition (this.regex.matchedTo () - 1 + Integer.parseInt (spaces.elementAt (this.regex.matchedTo () - 1).toString ()));
+this.searchResults.addResult (seq, sres, eres);
+hasResults = true;
+if (!this.findAll) {
+found = true;
+this.resIndex++;
+break;
+}r = this.resIndex;
+} else {
+break;
+}}
+if (!found) {
+this.seqIndex++;
+this.resIndex = -1;
+}}
+return hasResults;
+}, "~S");
+Clazz.defineMethod (c$, "getAlignment",
+function () {
+return this.alignment;
+});
+Clazz.defineMethod (c$, "setAlignment",
+function (alignment) {
+this.alignment = alignment;
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "isCaseSensitive",
+function () {
+return this.caseSensitive;
+});
+Clazz.defineMethod (c$, "setCaseSensitive",
+function (caseSensitive) {
+this.caseSensitive = caseSensitive;
+}, "~B");
+Clazz.defineMethod (c$, "isFindAll",
+function () {
+return this.findAll;
+});
+Clazz.defineMethod (c$, "setFindAll",
+function (findAll) {
+this.findAll = findAll;
+}, "~B");
+Clazz.defineMethod (c$, "getSelection",
+function () {
+return this.selection;
+});
+Clazz.defineMethod (c$, "setSelection",
+function (selection) {
+this.selection = selection;
+}, "jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "getIdMatch",
+function () {
+return this.idMatch;
+});
+Clazz.defineMethod (c$, "getRegex",
+function () {
+return this.regex;
+});
+Clazz.defineMethod (c$, "getSearchResults",
+function () {
+return this.searchResults;
+});
+Clazz.defineMethod (c$, "getResIndex",
+function () {
+return this.resIndex;
+});
+Clazz.defineMethod (c$, "setResIndex",
+function (resIndex) {
+this.resIndex = resIndex;
+}, "~N");
+Clazz.defineMethod (c$, "getSeqIndex",
+function () {
+return this.seqIndex;
+});
+Clazz.defineMethod (c$, "setSeqIndex",
+function (seqIndex) {
+this.seqIndex = seqIndex;
+}, "~N");
+Clazz.defineMethod (c$, "isIncludeDescription",
+function () {
+return this.includeDescription;
+});
+Clazz.defineMethod (c$, "setIncludeDescription",
+function (includeDescription) {
+this.includeDescription = includeDescription;
+}, "~B");
+});
diff --git a/bin/jalview/analysis/Grouping.js b/bin/jalview/analysis/Grouping.js
index 60e2571..49d4004 100644
--- a/bin/jalview/analysis/Grouping.js
+++ b/bin/jalview/analysis/Grouping.js
@@ -1,88 +1,88 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.Grouping", ["jalview.datamodel.SequenceGroup", "java.lang.StringBuilder", "java.util.ArrayList", "$.HashMap"], function () {
-c$ = Clazz.declareType (jalview.analysis, "Grouping");
-c$.makeGroupsFrom = Clazz.defineMethod (c$, "makeGroupsFrom",
-function (sequences, selectedChars, list) {
-var gps = new java.util.HashMap ();
-var width = 0;
-var i;
-var pgroup = new java.util.HashMap ();
-if (list != null) {
-for (var sg, $sg = list.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-for (var sq, $sq = sg.getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-pgroup.put (sq.toString (), sg);
-}
-}
-}for (i = 0; i < sequences.length; i++) {
-var schar = selectedChars[i];
-var pgp = pgroup.get ((sequences[i]).toString ());
-if (pgp != null) {
-schar = pgp.getName () + ":" + schar;
-}var svec = gps.get (schar);
-if (svec == null) {
-svec = new java.util.ArrayList ();
-gps.put (schar, svec);
-}if (width < sequences[i].getLength ()) {
-width = sequences[i].getLength ();
-}svec.add (sequences[i]);
-}
-var groups = new Array (gps.size ());
-i = 0;
-for (var key, $key = gps.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
-var group = new jalview.datamodel.SequenceGroup (gps.get (key), "Subseq: " + key, null, true, true, false, 0, width - 1);
-groups[i++] = group;
-}
-gps.clear ();
-pgroup.clear ();
-return groups;
-}, "~A,~A,java.util.List");
-c$.makeGroupsFromCols = Clazz.defineMethod (c$, "makeGroupsFromCols",
-function (sequences, cs, list) {
-var gps = new java.util.HashMap ();
-var pgroup = new java.util.HashMap ();
-if (list != null) {
-for (var sg, $sg = list.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-for (var sq, $sq = sg.getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-pgroup.put (sq.toString (), sg);
-}
-}
-}var spos = Clazz.newIntArray (cs.getSelected ().size (), 0);
-var width = -1;
-var i = 0;
-for (var pos, $pos = cs.getSelected ().iterator (); $pos.hasNext () && ((pos = $pos.next ()) || true);) {
-spos[i++] = pos.intValue ();
-}
-;for (i = 0; i < sequences.length; i++) {
-var slen = sequences[i].getLength ();
-if (width < slen) {
-width = slen;
-}var pgp = pgroup.get ((sequences[i]).toString ());
-var schar = new StringBuilder ();
-if (pgp != null) {
-schar.append (pgp.getName () + ":");
-}for (var p, $p = 0, $$p = spos; $p < $$p.length && ((p = $$p[$p]) || true); $p++) {
-if (p >= slen) {
-schar.append ("~");
-} else {
-schar.append (sequences[i].getCharAt (p));
-}}
-var svec = gps.get (schar.toString ());
-if (svec == null) {
-svec = new java.util.ArrayList ();
-gps.put (schar.toString (), svec);
-}svec.add (sequences[i]);
-}
-var groups = new Array (gps.size ());
-i = 0;
-for (var key, $key = gps.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
-var group = new jalview.datamodel.SequenceGroup (gps.get (key), "Subseq: " + key, null, true, true, false, 0, width - 1);
-groups[i++] = group;
-}
-gps.clear ();
-pgroup.clear ();
-return groups;
-}, "~A,jalview.datamodel.ColumnSelection,java.util.List");
-c$.divideByFeature = Clazz.defineMethod (c$, "divideByFeature",
-function (featureLabels, groupLabels, start, stop, sequences, exgroups, method) {
-}, "~A,~A,~N,~N,~A,java.util.Vector,~S");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.Grouping", ["jalview.datamodel.SequenceGroup", "java.lang.StringBuilder", "java.util.ArrayList", "$.HashMap"], function () {
+c$ = Clazz.declareType (jalview.analysis, "Grouping");
+c$.makeGroupsFrom = Clazz.defineMethod (c$, "makeGroupsFrom",
+function (sequences, selectedChars, list) {
+var gps = new java.util.HashMap ();
+var width = 0;
+var i;
+var pgroup = new java.util.HashMap ();
+if (list != null) {
+for (var sg, $sg = list.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+for (var sq, $sq = sg.getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+pgroup.put (sq.toString (), sg);
+}
+}
+}for (i = 0; i < sequences.length; i++) {
+var schar = selectedChars[i];
+var pgp = pgroup.get ((sequences[i]).toString ());
+if (pgp != null) {
+schar = pgp.getName () + ":" + schar;
+}var svec = gps.get (schar);
+if (svec == null) {
+svec = new java.util.ArrayList ();
+gps.put (schar, svec);
+}if (width < sequences[i].getLength ()) {
+width = sequences[i].getLength ();
+}svec.add (sequences[i]);
+}
+var groups = new Array (gps.size ());
+i = 0;
+for (var key, $key = gps.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
+var group = new jalview.datamodel.SequenceGroup (gps.get (key), "Subseq: " + key, null, true, true, false, 0, width - 1);
+groups[i++] = group;
+}
+gps.clear ();
+pgroup.clear ();
+return groups;
+}, "~A,~A,java.util.List");
+c$.makeGroupsFromCols = Clazz.defineMethod (c$, "makeGroupsFromCols",
+function (sequences, cs, list) {
+var gps = new java.util.HashMap ();
+var pgroup = new java.util.HashMap ();
+if (list != null) {
+for (var sg, $sg = list.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+for (var sq, $sq = sg.getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+pgroup.put (sq.toString (), sg);
+}
+}
+}var spos = Clazz.newIntArray (cs.getSelected ().size (), 0);
+var width = -1;
+var i = 0;
+for (var pos, $pos = cs.getSelected ().iterator (); $pos.hasNext () && ((pos = $pos.next ()) || true);) {
+spos[i++] = pos.intValue ();
+}
+;for (i = 0; i < sequences.length; i++) {
+var slen = sequences[i].getLength ();
+if (width < slen) {
+width = slen;
+}var pgp = pgroup.get ((sequences[i]).toString ());
+var schar = new StringBuilder ();
+if (pgp != null) {
+schar.append (pgp.getName () + ":");
+}for (var p, $p = 0, $$p = spos; $p < $$p.length && ((p = $$p[$p]) || true); $p++) {
+if (p >= slen) {
+schar.append ("~");
+} else {
+schar.append (sequences[i].getCharAt (p));
+}}
+var svec = gps.get (schar.toString ());
+if (svec == null) {
+svec = new java.util.ArrayList ();
+gps.put (schar.toString (), svec);
+}svec.add (sequences[i]);
+}
+var groups = new Array (gps.size ());
+i = 0;
+for (var key, $key = gps.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
+var group = new jalview.datamodel.SequenceGroup (gps.get (key), "Subseq: " + key, null, true, true, false, 0, width - 1);
+groups[i++] = group;
+}
+gps.clear ();
+pgroup.clear ();
+return groups;
+}, "~A,jalview.datamodel.ColumnSelection,java.util.List");
+c$.divideByFeature = Clazz.defineMethod (c$, "divideByFeature",
+function (featureLabels, groupLabels, start, stop, sequences, exgroups, method) {
+}, "~A,~A,~N,~N,~A,java.util.Vector,~S");
+});
diff --git a/bin/jalview/analysis/NJTree.class b/bin/jalview/analysis/NJTree.class
index d31a891..b64f07a 100644
Binary files a/bin/jalview/analysis/NJTree.class and b/bin/jalview/analysis/NJTree.class differ
diff --git a/bin/jalview/analysis/NJTree.js b/bin/jalview/analysis/NJTree.js
index 24a8fc5..8f3a367 100644
--- a/bin/jalview/analysis/NJTree.js
+++ b/bin/jalview/analysis/NJTree.js
@@ -1,577 +1,577 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (["java.util.Vector"], ["jalview.analysis.Cluster", "$.NJTree"], ["jalview.analysis.SequenceIdMatcher", "jalview.datamodel.AlignmentView", "$.CigarArray", "$.NodeTransformI", "$.SeqCigar", "$.Sequence", "$.SequenceI", "$.SequenceNode", "jalview.io.NewickFile", "jalview.schemes.ResidueProperties", "jalview.util.Format", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.$cluster = null;
-this.sequence = null;
-this.seqData = null;
-this.done = null;
-this.noseqs = 0;
-this.noClus = 0;
-this.distance = null;
-this.mini = 0;
-this.minj = 0;
-this.ri = 0;
-this.rj = 0;
-this.groups = null;
-this.maxdist = null;
-this.top = null;
-this.maxDistValue = 0;
-this.maxheight = 0;
-this.ycount = 0;
-this.node = null;
-this.type = null;
-this.pwtype = null;
-this.found = null;
-this.leaves = null;
-this.hasDistances = true;
-this.hasBootstrap = false;
-this.hasRootDistance = true;
-this._lycount = 0;
-this._lylimit = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "NJTree");
-Clazz.prepareFields (c$, function () {
-this.groups = new java.util.Vector ();
-});
-Clazz.makeConstructor (c$,
-function (seqs, odata, treefile) {
-this.construct (seqs, treefile);
-if (odata != null) {
-this.seqData = odata;
-}}, "~A,jalview.datamodel.AlignmentView,jalview.io.NewickFile");
-Clazz.makeConstructor (c$,
-function (seqs, treefile) {
-this.sequence = seqs;
-this.top = treefile.getTree ();
-this.hasDistances = treefile.HasDistances ();
-this.hasBootstrap = treefile.HasBootstrap ();
-this.hasRootDistance = treefile.HasRootDistance ();
-this.maxheight = this.findHeight (this.top);
-var algnIds = new jalview.analysis.SequenceIdMatcher (seqs);
-var leaves = new java.util.Vector ();
-this.findLeaves (this.top, leaves);
-var i = 0;
-var namesleft = seqs.length;
-var j;
-var nam;
-var realnam;
-var one2many = new java.util.Vector ();
-var countOne2Many = 0;
-while (i < leaves.size ()) {
-j = leaves.elementAt (i++);
-realnam = j.getName ();
-nam = null;
-if (namesleft > -1) {
-nam = algnIds.findIdMatch (realnam);
-}if (nam != null) {
-j.setElement (nam);
-if (one2many.contains (nam)) {
-countOne2Many++;
-} else {
-one2many.addElement (nam);
-namesleft--;
-}} else {
-j.setElement ( new jalview.datamodel.Sequence (realnam, "THISISAPLACEHLDER"));
-j.setPlaceholder (true);
-}}
-}, "~A,jalview.io.NewickFile");
-Clazz.makeConstructor (c$,
-function (sequence, seqData, type, pwtype, sm, start, end) {
-this.sequence = sequence;
-this.node = new java.util.Vector ();
-this.type = type;
-this.pwtype = pwtype;
-if (seqData != null) {
-this.seqData = seqData;
-} else {
-var seqs = new Array (sequence.length);
-for (var i = 0; i < sequence.length; i++) {
-seqs[i] = new jalview.datamodel.SeqCigar (sequence[i], start, end);
-}
-var sdata = new jalview.datamodel.CigarArray (seqs);
-sdata.addOperation ('M', end - start + 1);
-this.seqData = new jalview.datamodel.AlignmentView (sdata, start);
-}if (!(type.equals ("NJ"))) {
-type = "AV";
-}if (sm == null && !(pwtype.equals ("PID"))) {
-if (jalview.schemes.ResidueProperties.getScoreMatrix (pwtype) == null) {
-pwtype = "BLOSUM62";
-}}var i = 0;
-this.done = Clazz.newIntArray (sequence.length, 0);
-while ((i < sequence.length) && (sequence[i] != null)) {
-this.done[i] = 0;
-i++;
-}
-this.noseqs = i++;
-this.distance = this.findDistances (sm);
-this.makeLeaves ();
-this.noClus = this.$cluster.size ();
-this.cluster ();
-}, "~A,jalview.datamodel.AlignmentView,~S,~S,jalview.api.analysis.ScoreModelI,~N,~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var fout = new jalview.io.NewickFile (this.getTopNode ());
-return fout.print (this.isHasBootstrap (), this.isHasDistances (), this.isHasRootDistance ());
-});
-Clazz.defineMethod (c$, "UpdatePlaceHolders",
-function (list) {
-var leaves = new java.util.Vector ();
-this.findLeaves (this.top, leaves);
-var sz = leaves.size ();
-var seqmatcher = null;
-var i = 0;
-while (i < sz) {
-var leaf = leaves.elementAt (i++);
-if (list.contains (leaf.element ())) {
-leaf.setPlaceholder (false);
-} else {
-if (seqmatcher == null) {
-var seqs = new Array (list.size ());
-for (var j = 0; j < seqs.length; j++) {
-seqs[j] = list.get (j);
-}
-seqmatcher = new jalview.analysis.SequenceIdMatcher (seqs);
-}var nam = seqmatcher.findIdMatch (leaf.getName ());
-if (nam != null) {
-if (!leaf.isPlaceholder ()) {
-}leaf.setPlaceholder (false);
-leaf.setElement (nam);
-} else {
-if (!leaf.isPlaceholder ()) {
-leaf.setElement ( new jalview.datamodel.Sequence (leaf.getName (), "THISISAPLACEHLDER"));
-}leaf.setPlaceholder (true);
-}}}
-}, "java.util.List");
-Clazz.defineMethod (c$, "renameAssociatedNodes",
-function () {
-this.applyToNodes (((Clazz.isClassDefined ("jalview.analysis.NJTree$1") ? 0 : jalview.analysis.NJTree.$NJTree$1$ ()), Clazz.innerTypeInstance (jalview.analysis.NJTree$1, this, null)));
-});
-Clazz.defineMethod (c$, "cluster",
-function () {
-while (this.noClus > 2) {
-if (this.type.equals ("NJ")) {
-this.findMinNJDistance ();
-} else {
-this.findMinDistance ();
-}var c = this.joinClusters (this.mini, this.minj);
-this.done[this.minj] = 1;
-this.$cluster.setElementAt (null, this.minj);
-this.$cluster.setElementAt (c, this.mini);
-this.noClus--;
-}
-var onefound = false;
-var one = -1;
-var two = -1;
-for (var i = 0; i < this.noseqs; i++) {
-if (this.done[i] != 1) {
-if (onefound == false) {
-two = i;
-onefound = true;
-} else {
-one = i;
-}}}
-this.joinClusters (one, two);
-this.top = (this.node.elementAt (one));
-this.reCount (this.top);
-this.findHeight (this.top);
-this.findMaxDist (this.top);
-});
-Clazz.defineMethod (c$, "joinClusters",
-function (i, j) {
-var dist = this.distance[i][j];
-var noi = (this.$cluster.elementAt (i)).value.length;
-var noj = (this.$cluster.elementAt (j)).value.length;
-var value = Clazz.newIntArray (noi + noj, 0);
-for (var ii = 0; ii < noi; ii++) {
-value[ii] = (this.$cluster.elementAt (i)).value[ii];
-}
-for (var ii = noi; ii < (noi + noj); ii++) {
-value[ii] = (this.$cluster.elementAt (j)).value[ii - noi];
-}
-var c = new jalview.analysis.Cluster (value);
-this.ri = this.findr (i, j);
-this.rj = this.findr (j, i);
-if (this.type.equals ("NJ")) {
-this.findClusterNJDistance (i, j);
-} else {
-this.findClusterDistance (i, j);
-}var sn = new jalview.datamodel.SequenceNode ();
-sn.setLeft ((this.node.elementAt (i)));
-sn.setRight ((this.node.elementAt (j)));
-var tmpi = (this.node.elementAt (i));
-var tmpj = (this.node.elementAt (j));
-if (this.type.equals ("NJ")) {
-this.findNewNJDistances (tmpi, tmpj, dist);
-} else {
-this.findNewDistances (tmpi, tmpj, dist);
-}tmpi.setParent (sn);
-tmpj.setParent (sn);
-this.node.setElementAt (sn, i);
-return c;
-}, "~N,~N");
-Clazz.defineMethod (c$, "findNewNJDistances",
-function (tmpi, tmpj, dist) {
-tmpi.dist = ((dist + this.ri) - this.rj) / 2;
-tmpj.dist = (dist - tmpi.dist);
-if (tmpi.dist < 0) {
-tmpi.dist = 0;
-}if (tmpj.dist < 0) {
-tmpj.dist = 0;
-}}, "jalview.datamodel.SequenceNode,jalview.datamodel.SequenceNode,~N");
-Clazz.defineMethod (c$, "findNewDistances",
-function (tmpi, tmpj, dist) {
-var ih = 0;
-var jh = 0;
-var sni = tmpi;
-var snj = tmpj;
-while (sni != null) {
-ih = ih + sni.dist;
-sni = sni.left ();
-}
-while (snj != null) {
-jh = jh + snj.dist;
-snj = snj.left ();
-}
-tmpi.dist = ((dist / 2) - ih);
-tmpj.dist = ((dist / 2) - jh);
-}, "jalview.datamodel.SequenceNode,jalview.datamodel.SequenceNode,~N");
-Clazz.defineMethod (c$, "findClusterDistance",
-function (i, j) {
-var noi = (this.$cluster.elementAt (i)).value.length;
-var noj = (this.$cluster.elementAt (j)).value.length;
-var newdist = Clazz.newFloatArray (this.noseqs, 0);
-for (var l = 0; l < this.noseqs; l++) {
-if ((l != i) && (l != j)) {
-newdist[l] = ((this.distance[i][l] * noi) + (this.distance[j][l] * noj)) / (noi + noj);
-} else {
-newdist[l] = 0;
-}}
-for (var ii = 0; ii < this.noseqs; ii++) {
-this.distance[i][ii] = newdist[ii];
-this.distance[ii][i] = newdist[ii];
-}
-}, "~N,~N");
-Clazz.defineMethod (c$, "findClusterNJDistance",
-function (i, j) {
-var newdist = Clazz.newFloatArray (this.noseqs, 0);
-for (var l = 0; l < this.noseqs; l++) {
-if ((l != i) && (l != j)) {
-newdist[l] = ((this.distance[i][l] + this.distance[j][l]) - this.distance[i][j]) / 2;
-} else {
-newdist[l] = 0;
-}}
-for (var ii = 0; ii < this.noseqs; ii++) {
-this.distance[i][ii] = newdist[ii];
-this.distance[ii][i] = newdist[ii];
-}
-}, "~N,~N");
-Clazz.defineMethod (c$, "findr",
-function (i, j) {
-var tmp = 1;
-for (var k = 0; k < this.noseqs; k++) {
-if ((k != i) && (k != j) && (this.done[k] != 1)) {
-tmp = tmp + this.distance[i][k];
-}}
-if (this.noClus > 2) {
-tmp = tmp / (this.noClus - 2);
-}return tmp;
-}, "~N,~N");
-Clazz.defineMethod (c$, "findMinNJDistance",
-function () {
-var min = 100000;
-for (var i = 0; i < (this.noseqs - 1); i++) {
-for (var j = i + 1; j < this.noseqs; j++) {
-if ((this.done[i] != 1) && (this.done[j] != 1)) {
-var tmp = this.distance[i][j] - (this.findr (i, j) + this.findr (j, i));
-if (tmp < min) {
-this.mini = i;
-this.minj = j;
-min = tmp;
-}}}
-}
-return min;
-});
-Clazz.defineMethod (c$, "findMinDistance",
-function () {
-var min = 100000;
-for (var i = 0; i < (this.noseqs - 1); i++) {
-for (var j = i + 1; j < this.noseqs; j++) {
-if ((this.done[i] != 1) && (this.done[j] != 1)) {
-if (this.distance[i][j] < min) {
-this.mini = i;
-this.minj = j;
-min = this.distance[i][j];
-}}}
-}
-return min;
-});
-Clazz.defineMethod (c$, "findDistances",
-function (_pwmatrix) {
-var distance = Clazz.newFloatArray (this.noseqs, this.noseqs, 0);
-if (_pwmatrix == null) {
-_pwmatrix = jalview.schemes.ResidueProperties.getScoreModel (this.pwtype);
-if (_pwmatrix == null) {
-_pwmatrix = jalview.schemes.ResidueProperties.getScoreMatrix ("BLOSUM62");
-}}distance = _pwmatrix.findDistances (this.seqData);
-return distance;
-}, "jalview.api.analysis.ScoreModelI");
-Clazz.defineMethod (c$, "makeLeaves",
-function () {
-this.$cluster = new java.util.Vector ();
-for (var i = 0; i < this.noseqs; i++) {
-var sn = new jalview.datamodel.SequenceNode ();
-sn.setElement (this.sequence[i]);
-sn.setName (this.sequence[i].getName ());
-this.node.addElement (sn);
-var value = Clazz.newIntArray (1, 0);
-value[0] = i;
-var c = new jalview.analysis.Cluster (value);
-this.$cluster.addElement (c);
-}
-});
-Clazz.defineMethod (c$, "findLeaves",
-function (node, leaves) {
-if (node == null) {
-return leaves;
-}if ((node.left () == null) && (node.right () == null)) {
-leaves.addElement (node);
-return leaves;
-} else {
-this.findLeaves (node.left (), leaves);
-this.findLeaves (node.right (), leaves);
-}return leaves;
-}, "jalview.datamodel.SequenceNode,java.util.Vector");
-Clazz.defineMethod (c$, "findLeaf",
-function (node, count) {
-this.found = this._findLeaf (node, count);
-return this.found;
-}, "jalview.datamodel.SequenceNode,~N");
-Clazz.defineMethod (c$, "_findLeaf",
-function (node, count) {
-if (node == null) {
-return null;
-}if (node.ycount == count) {
-this.found = node.element ();
-return this.found;
-} else {
-this._findLeaf (node.left (), count);
-this._findLeaf (node.right (), count);
-}return this.found;
-}, "jalview.datamodel.SequenceNode,~N");
-Clazz.defineMethod (c$, "printNode",
-function (node) {
-if (node == null) {
-return;
-}if ((node.left () == null) && (node.right () == null)) {
-System.out.println ("Leaf = " + (node.element ()).getName ());
-System.out.println ("Dist " + node.dist);
-System.out.println ("Boot " + node.getBootstrap ());
-} else {
-System.out.println ("Dist " + node.dist);
-this.printNode (node.left ());
-this.printNode (node.right ());
-}}, "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "findMaxDist",
-function (node) {
-if (node == null) {
-return;
-}if ((node.left () == null) && (node.right () == null)) {
-var dist = node.dist;
-if (dist > this.maxDistValue) {
-this.maxdist = node;
-this.maxDistValue = dist;
-}} else {
-this.findMaxDist (node.left ());
-this.findMaxDist (node.right ());
-}}, "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "getGroups",
-function () {
-return this.groups;
-});
-Clazz.defineMethod (c$, "getMaxHeight",
-function () {
-return this.maxheight;
-});
-Clazz.defineMethod (c$, "groupNodes",
-function (node, threshold) {
-if (node == null) {
-return;
-}if ((node.height / this.maxheight) > threshold) {
-this.groups.addElement (node);
-} else {
-this.groupNodes (node.left (), threshold);
-this.groupNodes (node.right (), threshold);
-}}, "jalview.datamodel.SequenceNode,~N");
-Clazz.defineMethod (c$, "findHeight",
-function (node) {
-if (node == null) {
-return this.maxheight;
-}if ((node.left () == null) && (node.right () == null)) {
-node.height = (node.parent ()).height + node.dist;
-if (node.height > this.maxheight) {
-return node.height;
-} else {
-return this.maxheight;
-}} else {
-if (node.parent () != null) {
-node.height = (node.parent ()).height + node.dist;
-} else {
-this.maxheight = 0;
-node.height = 0.0;
-}this.maxheight = this.findHeight ((node.left ()));
-this.maxheight = this.findHeight ((node.right ()));
-}return this.maxheight;
-}, "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "reRoot",
-function () {
-if (this.maxdist != null) {
-this.ycount = 0;
-var tmpdist = this.maxdist.dist;
-var sn = new jalview.datamodel.SequenceNode ();
-sn.setParent (null);
-var snr = this.maxdist.parent ();
-this.changeDirection (snr, this.maxdist);
-System.out.println ("Printing reversed tree");
-this.printN (snr);
-snr.dist = tmpdist / 2;
-this.maxdist.dist = tmpdist / 2;
-snr.setParent (sn);
-this.maxdist.setParent (sn);
-sn.setRight (snr);
-sn.setLeft (this.maxdist);
-this.top = sn;
-this.ycount = 0;
-this.reCount (this.top);
-this.findHeight (this.top);
-}return this.top;
-});
-Clazz.defineMethod (c$, "hasOriginalSequenceData",
-function () {
-return this.seqData != null;
-});
-Clazz.defineMethod (c$, "printOriginalSequenceData",
-function (gapChar) {
-if (this.seqData == null) {
-return null;
-}var sb = new StringBuffer ();
-var seqdatas = this.seqData.getSequenceStrings (gapChar);
-for (var i = 0; i < seqdatas.length; i++) {
-sb.append ( new jalview.util.Format ("%-15s").form (this.sequence[i].getName ()));
-sb.append (" " + seqdatas[i] + "\n");
-}
-return sb.toString ();
-}, "~S");
-Clazz.defineMethod (c$, "printN",
-function (node) {
-if (node == null) {
-return;
-}if ((node.left () != null) && (node.right () != null)) {
-this.printN (node.left ());
-this.printN (node.right ());
-} else {
-System.out.println (" name = " + (node.element ()).getName ());
-}System.out.println (" dist = " + node.dist + " " + node.count + " " + node.height);
-}, "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "reCount",
-function (node) {
-this.ycount = 0;
-this._lycount = 0;
-this._reCount (node);
-}, "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "_reCount",
-function (node) {
-if (node == null) {
-return;
-}this._lycount++;
-if ((node.left () != null) && (node.right () != null)) {
-this._reCount (node.left ());
-this._reCount (node.right ());
-var l = node.left ();
-var r = node.right ();
-node.count = l.count + r.count;
-node.ycount = (l.ycount + r.ycount) / 2;
-} else {
-node.count = 1;
-node.ycount = this.ycount++;
-}this._lycount--;
-}, "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "swapNodes",
-function (node) {
-if (node == null) {
-return;
-}var tmp = node.left ();
-node.setLeft (node.right ());
-node.setRight (tmp);
-}, "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "changeDirection",
-function (node, dir) {
-if (node == null) {
-return;
-}if (node.parent () !== this.top) {
-this.changeDirection (node.parent (), node);
-var tmp = node.parent ();
-if (dir === node.left ()) {
-node.setParent (dir);
-node.setLeft (tmp);
-} else if (dir === node.right ()) {
-node.setParent (dir);
-node.setRight (tmp);
-}} else {
-if (dir === node.left ()) {
-node.setParent (node.left ());
-if (this.top.left () === node) {
-node.setRight (this.top.right ());
-} else {
-node.setRight (this.top.left ());
-}} else {
-node.setParent (node.right ());
-if (this.top.left () === node) {
-node.setLeft (this.top.right ());
-} else {
-node.setLeft (this.top.left ());
-}}}}, "jalview.datamodel.SequenceNode,jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "getMaxDist",
-function () {
-return this.maxdist;
-});
-Clazz.defineMethod (c$, "getTopNode",
-function () {
-return this.top;
-});
-Clazz.defineMethod (c$, "isHasDistances",
-function () {
-return this.hasDistances;
-});
-Clazz.defineMethod (c$, "isHasBootstrap",
-function () {
-return this.hasBootstrap;
-});
-Clazz.defineMethod (c$, "isHasRootDistance",
-function () {
-return this.hasRootDistance;
-});
-Clazz.defineMethod (c$, "applyToNodes",
-function (nodeTransformI) {
-for (var nodes = this.node.elements (); nodes.hasMoreElements (); nodeTransformI.transform (nodes.nextElement ())) {
-;}
-}, "jalview.datamodel.NodeTransformI");
-c$.$NJTree$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.analysis, "NJTree$1", null, jalview.datamodel.NodeTransformI);
-Clazz.defineMethod (c$, "transform",
-function (node) {
-var el = node.element ();
-if (el != null && Clazz.instanceOf (el, jalview.datamodel.SequenceI)) {
-node.setName ((el).getName ());
-}}, "jalview.datamodel.BinaryNode");
-c$ = Clazz.p0p ();
-};
-c$ = Clazz.decorateAsClass (function () {
-this.value = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "Cluster");
-Clazz.makeConstructor (c$,
-function (value) {
-this.value = value;
-}, "~A");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (["java.util.Vector"], ["jalview.analysis.Cluster", "$.NJTree"], ["jalview.analysis.SequenceIdMatcher", "jalview.datamodel.AlignmentView", "$.CigarArray", "$.NodeTransformI", "$.SeqCigar", "$.Sequence", "$.SequenceI", "$.SequenceNode", "jalview.io.NewickFile", "jalview.schemes.ResidueProperties", "jalview.util.Format", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.$cluster = null;
+this.sequence = null;
+this.seqData = null;
+this.done = null;
+this.noseqs = 0;
+this.noClus = 0;
+this.distance = null;
+this.mini = 0;
+this.minj = 0;
+this.ri = 0;
+this.rj = 0;
+this.groups = null;
+this.maxdist = null;
+this.top = null;
+this.maxDistValue = 0;
+this.maxheight = 0;
+this.ycount = 0;
+this.node = null;
+this.type = null;
+this.pwtype = null;
+this.found = null;
+this.leaves = null;
+this.hasDistances = true;
+this.hasBootstrap = false;
+this.hasRootDistance = true;
+this._lycount = 0;
+this._lylimit = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "NJTree");
+Clazz.prepareFields (c$, function () {
+this.groups = new java.util.Vector ();
+});
+Clazz.makeConstructor (c$,
+function (seqs, odata, treefile) {
+this.construct (seqs, treefile);
+if (odata != null) {
+this.seqData = odata;
+}}, "~A,jalview.datamodel.AlignmentView,jalview.io.NewickFile");
+Clazz.makeConstructor (c$,
+function (seqs, treefile) {
+this.sequence = seqs;
+this.top = treefile.getTree ();
+this.hasDistances = treefile.HasDistances ();
+this.hasBootstrap = treefile.HasBootstrap ();
+this.hasRootDistance = treefile.HasRootDistance ();
+this.maxheight = this.findHeight (this.top);
+var algnIds = new jalview.analysis.SequenceIdMatcher (seqs);
+var leaves = new java.util.Vector ();
+this.findLeaves (this.top, leaves);
+var i = 0;
+var namesleft = seqs.length;
+var j;
+var nam;
+var realnam;
+var one2many = new java.util.Vector ();
+var countOne2Many = 0;
+while (i < leaves.size ()) {
+j = leaves.elementAt (i++);
+realnam = j.getName ();
+nam = null;
+if (namesleft > -1) {
+nam = algnIds.findIdMatch (realnam);
+}if (nam != null) {
+j.setElement (nam);
+if (one2many.contains (nam)) {
+countOne2Many++;
+} else {
+one2many.addElement (nam);
+namesleft--;
+}} else {
+j.setElement ( new jalview.datamodel.Sequence (realnam, "THISISAPLACEHLDER"));
+j.setPlaceholder (true);
+}}
+}, "~A,jalview.io.NewickFile");
+Clazz.makeConstructor (c$,
+function (sequence, seqData, type, pwtype, sm, start, end) {
+this.sequence = sequence;
+this.node = new java.util.Vector ();
+this.type = type;
+this.pwtype = pwtype;
+if (seqData != null) {
+this.seqData = seqData;
+} else {
+var seqs = new Array (sequence.length);
+for (var i = 0; i < sequence.length; i++) {
+seqs[i] = new jalview.datamodel.SeqCigar (sequence[i], start, end);
+}
+var sdata = new jalview.datamodel.CigarArray (seqs);
+sdata.addOperation ('M', end - start + 1);
+this.seqData = new jalview.datamodel.AlignmentView (sdata, start);
+}if (!(type.equals ("NJ"))) {
+type = "AV";
+}if (sm == null && !(pwtype.equals ("PID"))) {
+if (jalview.schemes.ResidueProperties.getScoreMatrix (pwtype) == null) {
+pwtype = "BLOSUM62";
+}}var i = 0;
+this.done = Clazz.newIntArray (sequence.length, 0);
+while ((i < sequence.length) && (sequence[i] != null)) {
+this.done[i] = 0;
+i++;
+}
+this.noseqs = i++;
+this.distance = this.findDistances (sm);
+this.makeLeaves ();
+this.noClus = this.$cluster.size ();
+this.cluster ();
+}, "~A,jalview.datamodel.AlignmentView,~S,~S,jalview.api.analysis.ScoreModelI,~N,~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var fout = new jalview.io.NewickFile (this.getTopNode ());
+return fout.print (this.isHasBootstrap (), this.isHasDistances (), this.isHasRootDistance ());
+});
+Clazz.defineMethod (c$, "UpdatePlaceHolders",
+function (list) {
+var leaves = new java.util.Vector ();
+this.findLeaves (this.top, leaves);
+var sz = leaves.size ();
+var seqmatcher = null;
+var i = 0;
+while (i < sz) {
+var leaf = leaves.elementAt (i++);
+if (list.contains (leaf.element ())) {
+leaf.setPlaceholder (false);
+} else {
+if (seqmatcher == null) {
+var seqs = new Array (list.size ());
+for (var j = 0; j < seqs.length; j++) {
+seqs[j] = list.get (j);
+}
+seqmatcher = new jalview.analysis.SequenceIdMatcher (seqs);
+}var nam = seqmatcher.findIdMatch (leaf.getName ());
+if (nam != null) {
+if (!leaf.isPlaceholder ()) {
+}leaf.setPlaceholder (false);
+leaf.setElement (nam);
+} else {
+if (!leaf.isPlaceholder ()) {
+leaf.setElement ( new jalview.datamodel.Sequence (leaf.getName (), "THISISAPLACEHLDER"));
+}leaf.setPlaceholder (true);
+}}}
+}, "java.util.List");
+Clazz.defineMethod (c$, "renameAssociatedNodes",
+function () {
+this.applyToNodes (((Clazz.isClassDefined ("jalview.analysis.NJTree$1") ? 0 : jalview.analysis.NJTree.$NJTree$1$ ()), Clazz.innerTypeInstance (jalview.analysis.NJTree$1, this, null)));
+});
+Clazz.defineMethod (c$, "cluster",
+function () {
+while (this.noClus > 2) {
+if (this.type.equals ("NJ")) {
+this.findMinNJDistance ();
+} else {
+this.findMinDistance ();
+}var c = this.joinClusters (this.mini, this.minj);
+this.done[this.minj] = 1;
+this.$cluster.setElementAt (null, this.minj);
+this.$cluster.setElementAt (c, this.mini);
+this.noClus--;
+}
+var onefound = false;
+var one = -1;
+var two = -1;
+for (var i = 0; i < this.noseqs; i++) {
+if (this.done[i] != 1) {
+if (onefound == false) {
+two = i;
+onefound = true;
+} else {
+one = i;
+}}}
+this.joinClusters (one, two);
+this.top = (this.node.elementAt (one));
+this.reCount (this.top);
+this.findHeight (this.top);
+this.findMaxDist (this.top);
+});
+Clazz.defineMethod (c$, "joinClusters",
+function (i, j) {
+var dist = this.distance[i][j];
+var noi = (this.$cluster.elementAt (i)).value.length;
+var noj = (this.$cluster.elementAt (j)).value.length;
+var value = Clazz.newIntArray (noi + noj, 0);
+for (var ii = 0; ii < noi; ii++) {
+value[ii] = (this.$cluster.elementAt (i)).value[ii];
+}
+for (var ii = noi; ii < (noi + noj); ii++) {
+value[ii] = (this.$cluster.elementAt (j)).value[ii - noi];
+}
+var c = new jalview.analysis.Cluster (value);
+this.ri = this.findr (i, j);
+this.rj = this.findr (j, i);
+if (this.type.equals ("NJ")) {
+this.findClusterNJDistance (i, j);
+} else {
+this.findClusterDistance (i, j);
+}var sn = new jalview.datamodel.SequenceNode ();
+sn.setLeft ((this.node.elementAt (i)));
+sn.setRight ((this.node.elementAt (j)));
+var tmpi = (this.node.elementAt (i));
+var tmpj = (this.node.elementAt (j));
+if (this.type.equals ("NJ")) {
+this.findNewNJDistances (tmpi, tmpj, dist);
+} else {
+this.findNewDistances (tmpi, tmpj, dist);
+}tmpi.setParent (sn);
+tmpj.setParent (sn);
+this.node.setElementAt (sn, i);
+return c;
+}, "~N,~N");
+Clazz.defineMethod (c$, "findNewNJDistances",
+function (tmpi, tmpj, dist) {
+tmpi.dist = ((dist + this.ri) - this.rj) / 2;
+tmpj.dist = (dist - tmpi.dist);
+if (tmpi.dist < 0) {
+tmpi.dist = 0;
+}if (tmpj.dist < 0) {
+tmpj.dist = 0;
+}}, "jalview.datamodel.SequenceNode,jalview.datamodel.SequenceNode,~N");
+Clazz.defineMethod (c$, "findNewDistances",
+function (tmpi, tmpj, dist) {
+var ih = 0;
+var jh = 0;
+var sni = tmpi;
+var snj = tmpj;
+while (sni != null) {
+ih = ih + sni.dist;
+sni = sni.left ();
+}
+while (snj != null) {
+jh = jh + snj.dist;
+snj = snj.left ();
+}
+tmpi.dist = ((dist / 2) - ih);
+tmpj.dist = ((dist / 2) - jh);
+}, "jalview.datamodel.SequenceNode,jalview.datamodel.SequenceNode,~N");
+Clazz.defineMethod (c$, "findClusterDistance",
+function (i, j) {
+var noi = (this.$cluster.elementAt (i)).value.length;
+var noj = (this.$cluster.elementAt (j)).value.length;
+var newdist = Clazz.newFloatArray (this.noseqs, 0);
+for (var l = 0; l < this.noseqs; l++) {
+if ((l != i) && (l != j)) {
+newdist[l] = ((this.distance[i][l] * noi) + (this.distance[j][l] * noj)) / (noi + noj);
+} else {
+newdist[l] = 0;
+}}
+for (var ii = 0; ii < this.noseqs; ii++) {
+this.distance[i][ii] = newdist[ii];
+this.distance[ii][i] = newdist[ii];
+}
+}, "~N,~N");
+Clazz.defineMethod (c$, "findClusterNJDistance",
+function (i, j) {
+var newdist = Clazz.newFloatArray (this.noseqs, 0);
+for (var l = 0; l < this.noseqs; l++) {
+if ((l != i) && (l != j)) {
+newdist[l] = ((this.distance[i][l] + this.distance[j][l]) - this.distance[i][j]) / 2;
+} else {
+newdist[l] = 0;
+}}
+for (var ii = 0; ii < this.noseqs; ii++) {
+this.distance[i][ii] = newdist[ii];
+this.distance[ii][i] = newdist[ii];
+}
+}, "~N,~N");
+Clazz.defineMethod (c$, "findr",
+function (i, j) {
+var tmp = 1;
+for (var k = 0; k < this.noseqs; k++) {
+if ((k != i) && (k != j) && (this.done[k] != 1)) {
+tmp = tmp + this.distance[i][k];
+}}
+if (this.noClus > 2) {
+tmp = tmp / (this.noClus - 2);
+}return tmp;
+}, "~N,~N");
+Clazz.defineMethod (c$, "findMinNJDistance",
+function () {
+var min = 100000;
+for (var i = 0; i < (this.noseqs - 1); i++) {
+for (var j = i + 1; j < this.noseqs; j++) {
+if ((this.done[i] != 1) && (this.done[j] != 1)) {
+var tmp = this.distance[i][j] - (this.findr (i, j) + this.findr (j, i));
+if (tmp < min) {
+this.mini = i;
+this.minj = j;
+min = tmp;
+}}}
+}
+return min;
+});
+Clazz.defineMethod (c$, "findMinDistance",
+function () {
+var min = 100000;
+for (var i = 0; i < (this.noseqs - 1); i++) {
+for (var j = i + 1; j < this.noseqs; j++) {
+if ((this.done[i] != 1) && (this.done[j] != 1)) {
+if (this.distance[i][j] < min) {
+this.mini = i;
+this.minj = j;
+min = this.distance[i][j];
+}}}
+}
+return min;
+});
+Clazz.defineMethod (c$, "findDistances",
+function (_pwmatrix) {
+var distance = Clazz.newFloatArray (this.noseqs, this.noseqs, 0);
+if (_pwmatrix == null) {
+_pwmatrix = jalview.schemes.ResidueProperties.getScoreModel (this.pwtype);
+if (_pwmatrix == null) {
+_pwmatrix = jalview.schemes.ResidueProperties.getScoreMatrix ("BLOSUM62");
+}}distance = _pwmatrix.findDistances (this.seqData);
+return distance;
+}, "jalview.api.analysis.ScoreModelI");
+Clazz.defineMethod (c$, "makeLeaves",
+function () {
+this.$cluster = new java.util.Vector ();
+for (var i = 0; i < this.noseqs; i++) {
+var sn = new jalview.datamodel.SequenceNode ();
+sn.setElement (this.sequence[i]);
+sn.setName (this.sequence[i].getName ());
+this.node.addElement (sn);
+var value = Clazz.newIntArray (1, 0);
+value[0] = i;
+var c = new jalview.analysis.Cluster (value);
+this.$cluster.addElement (c);
+}
+});
+Clazz.defineMethod (c$, "findLeaves",
+function (node, leaves) {
+if (node == null) {
+return leaves;
+}if ((node.left () == null) && (node.right () == null)) {
+leaves.addElement (node);
+return leaves;
+} else {
+this.findLeaves (node.left (), leaves);
+this.findLeaves (node.right (), leaves);
+}return leaves;
+}, "jalview.datamodel.SequenceNode,java.util.Vector");
+Clazz.defineMethod (c$, "findLeaf",
+function (node, count) {
+this.found = this._findLeaf (node, count);
+return this.found;
+}, "jalview.datamodel.SequenceNode,~N");
+Clazz.defineMethod (c$, "_findLeaf",
+function (node, count) {
+if (node == null) {
+return null;
+}if (node.ycount == count) {
+this.found = node.element ();
+return this.found;
+} else {
+this._findLeaf (node.left (), count);
+this._findLeaf (node.right (), count);
+}return this.found;
+}, "jalview.datamodel.SequenceNode,~N");
+Clazz.defineMethod (c$, "printNode",
+function (node) {
+if (node == null) {
+return;
+}if ((node.left () == null) && (node.right () == null)) {
+System.out.println ("Leaf = " + (node.element ()).getName ());
+System.out.println ("Dist " + node.dist);
+System.out.println ("Boot " + node.getBootstrap ());
+} else {
+System.out.println ("Dist " + node.dist);
+this.printNode (node.left ());
+this.printNode (node.right ());
+}}, "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "findMaxDist",
+function (node) {
+if (node == null) {
+return;
+}if ((node.left () == null) && (node.right () == null)) {
+var dist = node.dist;
+if (dist > this.maxDistValue) {
+this.maxdist = node;
+this.maxDistValue = dist;
+}} else {
+this.findMaxDist (node.left ());
+this.findMaxDist (node.right ());
+}}, "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "getGroups",
+function () {
+return this.groups;
+});
+Clazz.defineMethod (c$, "getMaxHeight",
+function () {
+return this.maxheight;
+});
+Clazz.defineMethod (c$, "groupNodes",
+function (node, threshold) {
+if (node == null) {
+return;
+}if ((node.height / this.maxheight) > threshold) {
+this.groups.addElement (node);
+} else {
+this.groupNodes (node.left (), threshold);
+this.groupNodes (node.right (), threshold);
+}}, "jalview.datamodel.SequenceNode,~N");
+Clazz.defineMethod (c$, "findHeight",
+function (node) {
+if (node == null) {
+return this.maxheight;
+}if ((node.left () == null) && (node.right () == null)) {
+node.height = (node.parent ()).height + node.dist;
+if (node.height > this.maxheight) {
+return node.height;
+} else {
+return this.maxheight;
+}} else {
+if (node.parent () != null) {
+node.height = (node.parent ()).height + node.dist;
+} else {
+this.maxheight = 0;
+node.height = 0.0;
+}this.maxheight = this.findHeight ((node.left ()));
+this.maxheight = this.findHeight ((node.right ()));
+}return this.maxheight;
+}, "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "reRoot",
+function () {
+if (this.maxdist != null) {
+this.ycount = 0;
+var tmpdist = this.maxdist.dist;
+var sn = new jalview.datamodel.SequenceNode ();
+sn.setParent (null);
+var snr = this.maxdist.parent ();
+this.changeDirection (snr, this.maxdist);
+System.out.println ("Printing reversed tree");
+this.printN (snr);
+snr.dist = tmpdist / 2;
+this.maxdist.dist = tmpdist / 2;
+snr.setParent (sn);
+this.maxdist.setParent (sn);
+sn.setRight (snr);
+sn.setLeft (this.maxdist);
+this.top = sn;
+this.ycount = 0;
+this.reCount (this.top);
+this.findHeight (this.top);
+}return this.top;
+});
+Clazz.defineMethod (c$, "hasOriginalSequenceData",
+function () {
+return this.seqData != null;
+});
+Clazz.defineMethod (c$, "printOriginalSequenceData",
+function (gapChar) {
+if (this.seqData == null) {
+return null;
+}var sb = new StringBuffer ();
+var seqdatas = this.seqData.getSequenceStrings (gapChar);
+for (var i = 0; i < seqdatas.length; i++) {
+sb.append ( new jalview.util.Format ("%-15s").form (this.sequence[i].getName ()));
+sb.append (" " + seqdatas[i] + "\n");
+}
+return sb.toString ();
+}, "~S");
+Clazz.defineMethod (c$, "printN",
+function (node) {
+if (node == null) {
+return;
+}if ((node.left () != null) && (node.right () != null)) {
+this.printN (node.left ());
+this.printN (node.right ());
+} else {
+System.out.println (" name = " + (node.element ()).getName ());
+}System.out.println (" dist = " + node.dist + " " + node.count + " " + node.height);
+}, "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "reCount",
+function (node) {
+this.ycount = 0;
+this._lycount = 0;
+this._reCount (node);
+}, "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "_reCount",
+function (node) {
+if (node == null) {
+return;
+}this._lycount++;
+if ((node.left () != null) && (node.right () != null)) {
+this._reCount (node.left ());
+this._reCount (node.right ());
+var l = node.left ();
+var r = node.right ();
+node.count = l.count + r.count;
+node.ycount = (l.ycount + r.ycount) / 2;
+} else {
+node.count = 1;
+node.ycount = this.ycount++;
+}this._lycount--;
+}, "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "swapNodes",
+function (node) {
+if (node == null) {
+return;
+}var tmp = node.left ();
+node.setLeft (node.right ());
+node.setRight (tmp);
+}, "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "changeDirection",
+function (node, dir) {
+if (node == null) {
+return;
+}if (node.parent () !== this.top) {
+this.changeDirection (node.parent (), node);
+var tmp = node.parent ();
+if (dir === node.left ()) {
+node.setParent (dir);
+node.setLeft (tmp);
+} else if (dir === node.right ()) {
+node.setParent (dir);
+node.setRight (tmp);
+}} else {
+if (dir === node.left ()) {
+node.setParent (node.left ());
+if (this.top.left () === node) {
+node.setRight (this.top.right ());
+} else {
+node.setRight (this.top.left ());
+}} else {
+node.setParent (node.right ());
+if (this.top.left () === node) {
+node.setLeft (this.top.right ());
+} else {
+node.setLeft (this.top.left ());
+}}}}, "jalview.datamodel.SequenceNode,jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "getMaxDist",
+function () {
+return this.maxdist;
+});
+Clazz.defineMethod (c$, "getTopNode",
+function () {
+return this.top;
+});
+Clazz.defineMethod (c$, "isHasDistances",
+function () {
+return this.hasDistances;
+});
+Clazz.defineMethod (c$, "isHasBootstrap",
+function () {
+return this.hasBootstrap;
+});
+Clazz.defineMethod (c$, "isHasRootDistance",
+function () {
+return this.hasRootDistance;
+});
+Clazz.defineMethod (c$, "applyToNodes",
+function (nodeTransformI) {
+for (var nodes = this.node.elements (); nodes.hasMoreElements (); nodeTransformI.transform (nodes.nextElement ())) {
+;}
+}, "jalview.datamodel.NodeTransformI");
+c$.$NJTree$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.analysis, "NJTree$1", null, jalview.datamodel.NodeTransformI);
+Clazz.defineMethod (c$, "transform",
+function (node) {
+var el = node.element ();
+if (el != null && Clazz.instanceOf (el, jalview.datamodel.SequenceI)) {
+node.setName ((el).getName ());
+}}, "jalview.datamodel.BinaryNode");
+c$ = Clazz.p0p ();
+};
+c$ = Clazz.decorateAsClass (function () {
+this.value = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "Cluster");
+Clazz.makeConstructor (c$,
+function (value) {
+this.value = value;
+}, "~A");
+});
diff --git a/bin/jalview/analysis/PCA.js b/bin/jalview/analysis/PCA.js
index c9e885c..5effde0 100644
--- a/bin/jalview/analysis/PCA.js
+++ b/bin/jalview/analysis/PCA.js
@@ -1,163 +1,163 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (["java.lang.StringBuffer"], "jalview.analysis.PCA", ["jalview.datamodel.BinarySequence", "jalview.math.Matrix", "jalview.schemes.ResidueProperties"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.m = null;
-this.symm = null;
-this.m2 = null;
-this.eigenvalue = null;
-this.eigenvector = null;
-this.details = null;
-this.jvCalcMode = true;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "PCA", null, Runnable);
-Clazz.prepareFields (c$, function () {
-this.details = new StringBuffer ();
-});
-Clazz.makeConstructor (c$,
-function (s) {
-this.construct (s, false);
-}, "~A");
-Clazz.makeConstructor (c$,
-function (s, nucleotides) {
-this.construct (s, nucleotides, null);
-}, "~A,~B");
-Clazz.makeConstructor (c$,
-function (s, nucleotides, s_m) {
-var bs = new Array (s.length);
-var ii = 0;
-while ((ii < s.length) && (s[ii] != null)) {
-bs[ii] = new jalview.datamodel.BinarySequence (s[ii], nucleotides);
-bs[ii].encode ();
-ii++;
-}
-var bs2 = new Array (s.length);
-ii = 0;
-var smtrx = null;
-var sm = s_m;
-if (sm != null) {
-smtrx = jalview.schemes.ResidueProperties.getScoreMatrix (sm);
-}if (smtrx == null) {
-smtrx = jalview.schemes.ResidueProperties.getScoreMatrix (sm = (nucleotides ? "DNA" : "BLOSUM62"));
-}this.details.append ("PCA calculation using " + sm + " sequence similarity matrix\n========\n\n");
-while ((ii < s.length) && (s[ii] != null)) {
-bs2[ii] = new jalview.datamodel.BinarySequence (s[ii], nucleotides);
-if (smtrx != null) {
-try {
-bs2[ii].matrixEncode (smtrx);
-} catch (x) {
-if (Clazz.exceptionOf (x, jalview.datamodel.BinarySequence.InvalidSequenceTypeException)) {
-this.details.append ("Unexpected mismatch of sequence type and score matrix. Calculation will not be valid!\n\n");
-} else {
-throw x;
-}
-}
-}ii++;
-}
-var count = 0;
-while ((count < bs.length) && (bs[count] != null)) {
-count++;
-}
-var seqmat = Clazz.newDoubleArray (count, bs[0].getDBinary ().length, 0);
-var seqmat2 = Clazz.newDoubleArray (count, bs2[0].getDBinary ().length, 0);
-var i = 0;
-while (i < count) {
-seqmat[i] = bs[i].getDBinary ();
-seqmat2[i] = bs2[i].getDBinary ();
-i++;
-}
-this.m = new jalview.math.Matrix (seqmat, count, bs[0].getDBinary ().length);
-this.m2 = new jalview.math.Matrix (seqmat2, count, bs2[0].getDBinary ().length);
-}, "~A,~B,~S");
-Clazz.defineMethod (c$, "getM",
-function () {
-return this.m;
-});
-Clazz.defineMethod (c$, "getEigenvalue",
-function (i) {
-return this.eigenvector.d[i];
-}, "~N");
-Clazz.defineMethod (c$, "getComponents",
-function (l, n, mm, factor) {
-var out = Clazz.newFloatArray (this.m.rows, 3, 0);
-for (var i = 0; i < this.m.rows; i++) {
-out[i][0] = this.component (i, l) * factor;
-out[i][1] = this.component (i, n) * factor;
-out[i][2] = this.component (i, mm) * factor;
-}
-return out;
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "component",
-function (n) {
-var out = Clazz.newDoubleArray (this.m.rows, 0);
-for (var i = 0; i < this.m.rows; i++) {
-out[i] = this.component (i, n);
-}
-return out;
-}, "~N");
-Clazz.defineMethod (c$, "component",
-function (row, n) {
-var out = 0.0;
-for (var i = 0; i < this.symm.cols; i++) {
-out += (this.symm.value[row][i] * this.eigenvector.value[i][n]);
-}
-return out / this.eigenvector.d[n];
-}, "~N,~N");
-Clazz.defineMethod (c$, "getDetails",
-function () {
-return this.details.toString ();
-});
-Clazz.overrideMethod (c$, "run",
-function () {
-var ps = ((Clazz.isClassDefined ("jalview.analysis.PCA$1") ? 0 : jalview.analysis.PCA.$PCA$1$ ()), Clazz.innerTypeInstance (jalview.analysis.PCA$1, this, null, System.out));
-try {
-this.details.append ("PCA Calculation Mode is " + (this.jvCalcMode ? "Jalview variant" : "Original SeqSpace") + "\n");
-var mt = this.m.transpose ();
-this.details.append (" --- OrigT * Orig ---- \n");
-if (!this.jvCalcMode) {
-this.eigenvector = mt.preMultiply (this.m);
-} else {
-this.eigenvector = mt.preMultiply (this.m2);
-}this.eigenvector.print (ps);
-this.symm = this.eigenvector.copy ();
-this.eigenvector.tred ();
-this.details.append (" ---Tridiag transform matrix ---\n");
-this.details.append (" --- D vector ---\n");
-this.eigenvector.printD (ps);
-ps.println ();
-this.details.append ("--- E vector ---\n");
-this.eigenvector.printE (ps);
-ps.println ();
-this.eigenvector.tqli ();
-} catch (q) {
-if (Clazz.exceptionOf (q, Exception)) {
-q.printStackTrace ();
-this.details.append ("\n*** Unexpected exception when performing PCA ***\n" + q.getLocalizedMessage ());
-this.details.append ("*** Matrices below may not be fully diagonalised. ***\n");
-} else {
-throw q;
-}
-}
-this.details.append (" --- New diagonalization matrix ---\n");
-this.eigenvector.print (ps);
-this.details.append (" --- Eigenvalues ---\n");
-this.eigenvector.printD (ps);
-ps.println ();
-});
-Clazz.defineMethod (c$, "setJvCalcMode",
-function (calcMode) {
-this.jvCalcMode = calcMode;
-}, "~B");
-c$.$PCA$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.analysis, "PCA$1", java.io.PrintStream);
-Clazz.defineMethod (c$, "print",
-function (x) {
-this.b$["jalview.analysis.PCA"].details.append (x);
-}, "~S");
-Clazz.defineMethod (c$, "println",
-function () {
-this.b$["jalview.analysis.PCA"].details.append ("\n");
-});
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (["java.lang.StringBuffer"], "jalview.analysis.PCA", ["jalview.datamodel.BinarySequence", "jalview.math.Matrix", "jalview.schemes.ResidueProperties"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.m = null;
+this.symm = null;
+this.m2 = null;
+this.eigenvalue = null;
+this.eigenvector = null;
+this.details = null;
+this.jvCalcMode = true;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "PCA", null, Runnable);
+Clazz.prepareFields (c$, function () {
+this.details = new StringBuffer ();
+});
+Clazz.makeConstructor (c$,
+function (s) {
+this.construct (s, false);
+}, "~A");
+Clazz.makeConstructor (c$,
+function (s, nucleotides) {
+this.construct (s, nucleotides, null);
+}, "~A,~B");
+Clazz.makeConstructor (c$,
+function (s, nucleotides, s_m) {
+var bs = new Array (s.length);
+var ii = 0;
+while ((ii < s.length) && (s[ii] != null)) {
+bs[ii] = new jalview.datamodel.BinarySequence (s[ii], nucleotides);
+bs[ii].encode ();
+ii++;
+}
+var bs2 = new Array (s.length);
+ii = 0;
+var smtrx = null;
+var sm = s_m;
+if (sm != null) {
+smtrx = jalview.schemes.ResidueProperties.getScoreMatrix (sm);
+}if (smtrx == null) {
+smtrx = jalview.schemes.ResidueProperties.getScoreMatrix (sm = (nucleotides ? "DNA" : "BLOSUM62"));
+}this.details.append ("PCA calculation using " + sm + " sequence similarity matrix\n========\n\n");
+while ((ii < s.length) && (s[ii] != null)) {
+bs2[ii] = new jalview.datamodel.BinarySequence (s[ii], nucleotides);
+if (smtrx != null) {
+try {
+bs2[ii].matrixEncode (smtrx);
+} catch (x) {
+if (Clazz.exceptionOf (x, jalview.datamodel.BinarySequence.InvalidSequenceTypeException)) {
+this.details.append ("Unexpected mismatch of sequence type and score matrix. Calculation will not be valid!\n\n");
+} else {
+throw x;
+}
+}
+}ii++;
+}
+var count = 0;
+while ((count < bs.length) && (bs[count] != null)) {
+count++;
+}
+var seqmat = Clazz.newDoubleArray (count, bs[0].getDBinary ().length, 0);
+var seqmat2 = Clazz.newDoubleArray (count, bs2[0].getDBinary ().length, 0);
+var i = 0;
+while (i < count) {
+seqmat[i] = bs[i].getDBinary ();
+seqmat2[i] = bs2[i].getDBinary ();
+i++;
+}
+this.m = new jalview.math.Matrix (seqmat, count, bs[0].getDBinary ().length);
+this.m2 = new jalview.math.Matrix (seqmat2, count, bs2[0].getDBinary ().length);
+}, "~A,~B,~S");
+Clazz.defineMethod (c$, "getM",
+function () {
+return this.m;
+});
+Clazz.defineMethod (c$, "getEigenvalue",
+function (i) {
+return this.eigenvector.d[i];
+}, "~N");
+Clazz.defineMethod (c$, "getComponents",
+function (l, n, mm, factor) {
+var out = Clazz.newFloatArray (this.m.rows, 3, 0);
+for (var i = 0; i < this.m.rows; i++) {
+out[i][0] = this.component (i, l) * factor;
+out[i][1] = this.component (i, n) * factor;
+out[i][2] = this.component (i, mm) * factor;
+}
+return out;
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "component",
+function (n) {
+var out = Clazz.newDoubleArray (this.m.rows, 0);
+for (var i = 0; i < this.m.rows; i++) {
+out[i] = this.component (i, n);
+}
+return out;
+}, "~N");
+Clazz.defineMethod (c$, "component",
+function (row, n) {
+var out = 0.0;
+for (var i = 0; i < this.symm.cols; i++) {
+out += (this.symm.value[row][i] * this.eigenvector.value[i][n]);
+}
+return out / this.eigenvector.d[n];
+}, "~N,~N");
+Clazz.defineMethod (c$, "getDetails",
+function () {
+return this.details.toString ();
+});
+Clazz.overrideMethod (c$, "run",
+function () {
+var ps = ((Clazz.isClassDefined ("jalview.analysis.PCA$1") ? 0 : jalview.analysis.PCA.$PCA$1$ ()), Clazz.innerTypeInstance (jalview.analysis.PCA$1, this, null, System.out));
+try {
+this.details.append ("PCA Calculation Mode is " + (this.jvCalcMode ? "Jalview variant" : "Original SeqSpace") + "\n");
+var mt = this.m.transpose ();
+this.details.append (" --- OrigT * Orig ---- \n");
+if (!this.jvCalcMode) {
+this.eigenvector = mt.preMultiply (this.m);
+} else {
+this.eigenvector = mt.preMultiply (this.m2);
+}this.eigenvector.print (ps);
+this.symm = this.eigenvector.copy ();
+this.eigenvector.tred ();
+this.details.append (" ---Tridiag transform matrix ---\n");
+this.details.append (" --- D vector ---\n");
+this.eigenvector.printD (ps);
+ps.println ();
+this.details.append ("--- E vector ---\n");
+this.eigenvector.printE (ps);
+ps.println ();
+this.eigenvector.tqli ();
+} catch (q) {
+if (Clazz.exceptionOf (q, Exception)) {
+q.printStackTrace ();
+this.details.append ("\n*** Unexpected exception when performing PCA ***\n" + q.getLocalizedMessage ());
+this.details.append ("*** Matrices below may not be fully diagonalised. ***\n");
+} else {
+throw q;
+}
+}
+this.details.append (" --- New diagonalization matrix ---\n");
+this.eigenvector.print (ps);
+this.details.append (" --- Eigenvalues ---\n");
+this.eigenvector.printD (ps);
+ps.println ();
+});
+Clazz.defineMethod (c$, "setJvCalcMode",
+function (calcMode) {
+this.jvCalcMode = calcMode;
+}, "~B");
+c$.$PCA$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.analysis, "PCA$1", java.io.PrintStream);
+Clazz.defineMethod (c$, "print",
+function (x) {
+this.b$["jalview.analysis.PCA"].details.append (x);
+}, "~S");
+Clazz.defineMethod (c$, "println",
+function () {
+this.b$["jalview.analysis.PCA"].details.append ("\n");
+});
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/analysis/ParseProperties.js b/bin/jalview/analysis/ParseProperties.js
index d18979d..c117d07 100644
--- a/bin/jalview/analysis/ParseProperties.js
+++ b/bin/jalview/analysis/ParseProperties.js
@@ -1,75 +1,75 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.ParseProperties", ["jalview.datamodel.AlignmentAnnotation", "jalview.jsdev.RegExp", "java.lang.Double"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.al = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "ParseProperties");
-Clazz.makeConstructor (c$,
-function (al) {
-this.al = al;
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "getScoresFromDescription",
-function (ScoreName, ScoreDescriptions, regex, repeat) {
-return this.getScoresFromDescription ( Clazz.newArray (-1, [ScoreName]), Clazz.newArray (-1, [ScoreDescriptions]), regex, repeat);
-}, "~S,~S,~S,~B");
-Clazz.defineMethod (c$, "getScoresFromDescription",
-function (ScoreNames, ScoreDescriptions, regex, repeat) {
-return this.getScoresFromDescription (this.al.getSequencesArray (), ScoreNames, ScoreDescriptions, regex, repeat);
-}, "~A,~A,~S,~B");
-Clazz.defineMethod (c$, "getScoresFromDescription",
-function (seqs, ScoreNames, ScoreDescriptions, regex, repeat) {
-var count = 0;
-var pattern = jalview.jsdev.RegExp.newRegex ([regex]);
-if (pattern.numSubs () > ScoreNames.length) {
-var onamelen = ScoreNames.length;
-var tnames = new Array (pattern.numSubs () + 1);
-System.arraycopy (ScoreNames, 0, tnames, 0, ScoreNames.length);
-var base = tnames[ScoreNames.length - 1];
-ScoreNames = tnames;
-var descrbase = ScoreDescriptions[onamelen - 1];
-if (descrbase == null) {
-descrbase = "Score parsed from (" + regex + ")";
-}tnames = new Array (pattern.numSubs () + 1);
-System.arraycopy (ScoreDescriptions, 0, tnames, 0, ScoreDescriptions.length);
-ScoreDescriptions = tnames;
-for (var i = onamelen; i < ScoreNames.length; i++) {
-ScoreNames[i] = base + "_" + i;
-ScoreDescriptions[i] = descrbase + " (column " + i + ")";
-}
-}for (var i = 0; i < seqs.length; i++) {
-var descr = seqs[i].getDescription ();
-if (descr == null) {
-continue;
-}var pos = 0;
-var added = false;
-var reps = 0;
-while ((repeat || pos == 0) && pattern.searchFrom (descr, pos)) {
-pos = pattern.matchedTo ();
-for (var cols = 0; cols < pattern.numSubs (); cols++) {
-var sstring = pattern.stringMatchedI (cols + 1);
-var score = NaN;
-try {
-score = new Double (sstring).doubleValue ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-continue;
-} else {
-throw e;
-}
-}
-var an = new jalview.datamodel.AlignmentAnnotation (ScoreNames[cols] + ((reps > 0) ? "_" + reps : ""), ScoreDescriptions[cols], null);
-an.setScore (score);
-System.out.println (seqs[i].getName () + " score: '" + ScoreNames[cols] + "' = " + score);
-an.setSequenceRef (seqs[i]);
-seqs[i].addAlignmentAnnotation (an);
-this.al.addAnnotation (an);
-added = true;
-}
-reps++;
-}
-if (added) {
-count++;
-}}
-return count;
-}, "~A,~A,~A,~S,~B");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.ParseProperties", ["jalview.datamodel.AlignmentAnnotation", "jalview.jsdev.RegExp", "java.lang.Double"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.al = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "ParseProperties");
+Clazz.makeConstructor (c$,
+function (al) {
+this.al = al;
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "getScoresFromDescription",
+function (ScoreName, ScoreDescriptions, regex, repeat) {
+return this.getScoresFromDescription ( Clazz.newArray (-1, [ScoreName]), Clazz.newArray (-1, [ScoreDescriptions]), regex, repeat);
+}, "~S,~S,~S,~B");
+Clazz.defineMethod (c$, "getScoresFromDescription",
+function (ScoreNames, ScoreDescriptions, regex, repeat) {
+return this.getScoresFromDescription (this.al.getSequencesArray (), ScoreNames, ScoreDescriptions, regex, repeat);
+}, "~A,~A,~S,~B");
+Clazz.defineMethod (c$, "getScoresFromDescription",
+function (seqs, ScoreNames, ScoreDescriptions, regex, repeat) {
+var count = 0;
+var pattern = jalview.jsdev.RegExp.newRegex ([regex]);
+if (pattern.numSubs () > ScoreNames.length) {
+var onamelen = ScoreNames.length;
+var tnames = new Array (pattern.numSubs () + 1);
+System.arraycopy (ScoreNames, 0, tnames, 0, ScoreNames.length);
+var base = tnames[ScoreNames.length - 1];
+ScoreNames = tnames;
+var descrbase = ScoreDescriptions[onamelen - 1];
+if (descrbase == null) {
+descrbase = "Score parsed from (" + regex + ")";
+}tnames = new Array (pattern.numSubs () + 1);
+System.arraycopy (ScoreDescriptions, 0, tnames, 0, ScoreDescriptions.length);
+ScoreDescriptions = tnames;
+for (var i = onamelen; i < ScoreNames.length; i++) {
+ScoreNames[i] = base + "_" + i;
+ScoreDescriptions[i] = descrbase + " (column " + i + ")";
+}
+}for (var i = 0; i < seqs.length; i++) {
+var descr = seqs[i].getDescription ();
+if (descr == null) {
+continue;
+}var pos = 0;
+var added = false;
+var reps = 0;
+while ((repeat || pos == 0) && pattern.searchFrom (descr, pos)) {
+pos = pattern.matchedTo ();
+for (var cols = 0; cols < pattern.numSubs (); cols++) {
+var sstring = pattern.stringMatchedI (cols + 1);
+var score = NaN;
+try {
+score = new Double (sstring).doubleValue ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+continue;
+} else {
+throw e;
+}
+}
+var an = new jalview.datamodel.AlignmentAnnotation (ScoreNames[cols] + ((reps > 0) ? "_" + reps : ""), ScoreDescriptions[cols], null);
+an.setScore (score);
+System.out.println (seqs[i].getName () + " score: '" + ScoreNames[cols] + "' = " + score);
+an.setSequenceRef (seqs[i]);
+seqs[i].addAlignmentAnnotation (an);
+this.al.addAnnotation (an);
+added = true;
+}
+reps++;
+}
+if (added) {
+count++;
+}}
+return count;
+}, "~A,~A,~A,~S,~B");
+});
diff --git a/bin/jalview/analysis/Rna.js b/bin/jalview/analysis/Rna.js
index 0ed5a63..4b23f2d 100644
--- a/bin/jalview/analysis/Rna.js
+++ b/bin/jalview/analysis/Rna.js
@@ -1,106 +1,106 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (["java.util.Arrays", "$.HashSet", "$.Hashtable"], "jalview.analysis.Rna", ["jalview.analysis.SecStrConsensus", "$.WUSSParseException", "jalview.datamodel.SequenceFeature", "jalview.util.MessageManager", "java.lang.StringBuffer", "java.util.ArrayList", "$.Stack", "$.Vector"], function () {
-c$ = Clazz.declareType (jalview.analysis, "Rna");
-c$.isOpeningParenthesis = Clazz.defineMethod (c$, "isOpeningParenthesis",
-($fz = function (c) {
-return jalview.analysis.Rna.openingParsSet.contains (new Character (c).charCodeAt (0));
-}, $fz.isPrivate = true, $fz), "~S");
-c$.isClosingParenthesis = Clazz.defineMethod (c$, "isClosingParenthesis",
-($fz = function (c) {
-return jalview.analysis.Rna.closingParsSet.contains (new Character (c).charCodeAt (0));
-}, $fz.isPrivate = true, $fz), "~S");
-c$.matchingOpeningParenthesis = Clazz.defineMethod (c$, "matchingOpeningParenthesis",
-($fz = function (closingParenthesis) {
-if (!jalview.analysis.Rna.isClosingParenthesis (closingParenthesis)) {
-throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis", Clazz.newArray (-1, [ new StringBuffer (closingParenthesis.charCodeAt (0)).toString ()])), -1);
-}return String.fromCharCode (jalview.analysis.Rna.closingToOpening.get (new Character (closingParenthesis).charCodeAt (0)));
-}, $fz.isPrivate = true, $fz), "~S");
-c$.GetSimpleBPs = Clazz.defineMethod (c$, "GetSimpleBPs",
-function (line) {
-var stacks = new java.util.Hashtable ();
-var pairs = new java.util.Vector ();
-var i = 0;
-while (i < line.length) {
-var base = line.charAt (i);
-if (jalview.analysis.Rna.isOpeningParenthesis (base)) {
-if (!stacks.containsKey (new Character (base).charCodeAt (0))) {
-stacks.put (new Character (base).charCodeAt (0), new java.util.Stack ());
-}stacks.get (new Character (base).charCodeAt (0)).push (new Integer (i));
-} else if (jalview.analysis.Rna.isClosingParenthesis (base)) {
-var opening = jalview.analysis.Rna.matchingOpeningParenthesis (base);
-if (!stacks.containsKey (new Character (opening).charCodeAt (0))) {
-throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.mismatched_unseen_closing_char", Clazz.newArray (-1, [ new StringBuffer (base.charCodeAt (0)).toString ()])), i);
-}var stack = stacks.get (new Character (opening).charCodeAt (0));
-if (stack.isEmpty ()) {
-throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.mismatched_closing_char", Clazz.newArray (-1, [ new StringBuffer (base.charCodeAt (0)).toString ()])), i);
-}var temp = (stack.pop ()).intValue ();
-pairs.add ( new jalview.analysis.SecStrConsensus.SimpleBP (temp, i));
-}i++;
-}
-for (var opening, $opening = stacks.keySet ().iterator (); $opening.hasNext () && ((opening = $opening.next ()) || true);) {
-var stack = stacks.get (new Character (opening).charCodeAt (0));
-if (!stack.empty ()) {
-throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.mismatched_opening_char", Clazz.newArray (-1, [ new StringBuffer (opening.charCodeAt (0)).toString (), Integer.$valueOf ((stack.pop ()).intValue ()).toString ()])), i);
-}}
-return pairs;
-}, "CharSequence");
-c$.GetBasePairs = Clazz.defineMethod (c$, "GetBasePairs",
-function (line) {
-var bps = jalview.analysis.Rna.GetSimpleBPs (line);
-var outPairs = new Array (bps.size ());
-for (var p = 0; p < bps.size (); p++) {
-var bp = bps.elementAt (p);
-outPairs[p] = new jalview.datamodel.SequenceFeature ("RNA helix", "", "", bp.getBP5 (), bp.getBP3 (), "");
-}
-return outPairs;
-}, "CharSequence");
-c$.GetModeleBP = Clazz.defineMethod (c$, "GetModeleBP",
-function (line) {
-var bps = jalview.analysis.Rna.GetSimpleBPs (line);
-return new java.util.ArrayList (bps);
-}, "CharSequence");
-c$.HelixMap = Clazz.defineMethod (c$, "HelixMap",
-function (pairs) {
-var helix = 0;
-var lastopen = 0;
-var lastclose = 9999999;
-var i = pairs.length;
-var open;
-var close;
-var j;
-var helices = new java.util.Hashtable ();
-for (i = 0; i < pairs.length; i++) {
-open = pairs[i].getBegin ();
-close = pairs[i].getEnd ();
-if (open > lastclose) {
-helix++;
-}j = pairs.length - 1;
-while (j >= 0) {
-var popen = pairs[j].getBegin ();
-if ((popen < lastopen) && (popen > open)) {
-if (helices.containsValue (new Integer (popen)) && (((helices.get (new Integer (popen)))).intValue () === helix)) {
-continue;
-} else {
-helix++;
-break;
-}}j -= 1;
-}
-helices.put (new Integer (open), new Integer (helix));
-helices.put (new Integer (close), new Integer (helix));
-pairs[i].setFeatureGroup (Integer.toString (helix));
-lastopen = open;
-lastclose = close;
-}
-}, "~A");
-c$.pairHash = c$.prototype.pairHash = new java.util.Hashtable ();
-Clazz.defineStatics (c$,
-"openingPars", Clazz.newArray (-1, [new Character ('('), new Character ('['), new Character ('{'), new Character ('<'), new Character ('A'), new Character ('B'), new Character ('C'), new Character ('D'), new Character ('E'), new Character ('F'), new Character ('G'), new Character ('H'), new Character ('I'), new Character ('J'), new Character ('K'), new Character ('L'), new Character ('M'), new Character ('N'), new Character ('O'), new Character ('P'), new Character ('Q'), new Character ('R'), new Character ('S'), new Character ('T'), new Character ('U'), new Character ('V'), new Character ('W'), new Character ('X'), new Character ('Y'), new Character ('Z')]),
-"closingPars", Clazz.newArray (-1, [new Character (')'), new Character (']'), new Character ('}'), new Character ('>'), new Character ('a'), new Character ('b'), new Character ('c'), new Character ('d'), new Character ('e'), new Character ('f'), new Character ('g'), new Character ('h'), new Character ('i'), new Character ('j'), new Character ('k'), new Character ('l'), new Character ('m'), new Character ('n'), new Character ('o'), new Character ('p'), new Character ('q'), new Character ('r'), new Character ('s'), new Character ('t'), new Character ('u'), new Character ('v'), new Character ('w'), new Character ('x'), new Character ('y'), new Character ('z')]));
-c$.openingParsSet = c$.prototype.openingParsSet = new java.util.HashSet (java.util.Arrays.asList (jalview.analysis.Rna.openingPars));
-c$.closingParsSet = c$.prototype.closingParsSet = new java.util.HashSet (java.util.Arrays.asList (jalview.analysis.Rna.closingPars));
-c$.closingToOpening = c$.prototype.closingToOpening = new java.util.Hashtable ();
-{
-for (var i = 0; i < jalview.analysis.Rna.openingPars.length; i++) {
-jalview.analysis.Rna.closingToOpening.put (jalview.analysis.Rna.closingPars[i], jalview.analysis.Rna.openingPars[i]);
-}
-}});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (["java.util.Arrays", "$.HashSet", "$.Hashtable"], "jalview.analysis.Rna", ["jalview.analysis.SecStrConsensus", "$.WUSSParseException", "jalview.datamodel.SequenceFeature", "jalview.util.MessageManager", "java.lang.StringBuffer", "java.util.ArrayList", "$.Stack", "$.Vector"], function () {
+c$ = Clazz.declareType (jalview.analysis, "Rna");
+c$.isOpeningParenthesis = Clazz.defineMethod (c$, "isOpeningParenthesis",
+($fz = function (c) {
+return jalview.analysis.Rna.openingParsSet.contains (new Character (c).charCodeAt (0));
+}, $fz.isPrivate = true, $fz), "~S");
+c$.isClosingParenthesis = Clazz.defineMethod (c$, "isClosingParenthesis",
+($fz = function (c) {
+return jalview.analysis.Rna.closingParsSet.contains (new Character (c).charCodeAt (0));
+}, $fz.isPrivate = true, $fz), "~S");
+c$.matchingOpeningParenthesis = Clazz.defineMethod (c$, "matchingOpeningParenthesis",
+($fz = function (closingParenthesis) {
+if (!jalview.analysis.Rna.isClosingParenthesis (closingParenthesis)) {
+throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis", Clazz.newArray (-1, [ new StringBuffer (closingParenthesis.charCodeAt (0)).toString ()])), -1);
+}return String.fromCharCode (jalview.analysis.Rna.closingToOpening.get (new Character (closingParenthesis).charCodeAt (0)));
+}, $fz.isPrivate = true, $fz), "~S");
+c$.GetSimpleBPs = Clazz.defineMethod (c$, "GetSimpleBPs",
+function (line) {
+var stacks = new java.util.Hashtable ();
+var pairs = new java.util.Vector ();
+var i = 0;
+while (i < line.length) {
+var base = line.charAt (i);
+if (jalview.analysis.Rna.isOpeningParenthesis (base)) {
+if (!stacks.containsKey (new Character (base).charCodeAt (0))) {
+stacks.put (new Character (base).charCodeAt (0), new java.util.Stack ());
+}stacks.get (new Character (base).charCodeAt (0)).push (new Integer (i));
+} else if (jalview.analysis.Rna.isClosingParenthesis (base)) {
+var opening = jalview.analysis.Rna.matchingOpeningParenthesis (base);
+if (!stacks.containsKey (new Character (opening).charCodeAt (0))) {
+throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.mismatched_unseen_closing_char", Clazz.newArray (-1, [ new StringBuffer (base.charCodeAt (0)).toString ()])), i);
+}var stack = stacks.get (new Character (opening).charCodeAt (0));
+if (stack.isEmpty ()) {
+throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.mismatched_closing_char", Clazz.newArray (-1, [ new StringBuffer (base.charCodeAt (0)).toString ()])), i);
+}var temp = (stack.pop ()).intValue ();
+pairs.add ( new jalview.analysis.SecStrConsensus.SimpleBP (temp, i));
+}i++;
+}
+for (var opening, $opening = stacks.keySet ().iterator (); $opening.hasNext () && ((opening = $opening.next ()) || true);) {
+var stack = stacks.get (new Character (opening).charCodeAt (0));
+if (!stack.empty ()) {
+throw new jalview.analysis.WUSSParseException (jalview.util.MessageManager.formatMessage ("exception.mismatched_opening_char", Clazz.newArray (-1, [ new StringBuffer (opening.charCodeAt (0)).toString (), Integer.$valueOf ((stack.pop ()).intValue ()).toString ()])), i);
+}}
+return pairs;
+}, "CharSequence");
+c$.GetBasePairs = Clazz.defineMethod (c$, "GetBasePairs",
+function (line) {
+var bps = jalview.analysis.Rna.GetSimpleBPs (line);
+var outPairs = new Array (bps.size ());
+for (var p = 0; p < bps.size (); p++) {
+var bp = bps.elementAt (p);
+outPairs[p] = new jalview.datamodel.SequenceFeature ("RNA helix", "", "", bp.getBP5 (), bp.getBP3 (), "");
+}
+return outPairs;
+}, "CharSequence");
+c$.GetModeleBP = Clazz.defineMethod (c$, "GetModeleBP",
+function (line) {
+var bps = jalview.analysis.Rna.GetSimpleBPs (line);
+return new java.util.ArrayList (bps);
+}, "CharSequence");
+c$.HelixMap = Clazz.defineMethod (c$, "HelixMap",
+function (pairs) {
+var helix = 0;
+var lastopen = 0;
+var lastclose = 9999999;
+var i = pairs.length;
+var open;
+var close;
+var j;
+var helices = new java.util.Hashtable ();
+for (i = 0; i < pairs.length; i++) {
+open = pairs[i].getBegin ();
+close = pairs[i].getEnd ();
+if (open > lastclose) {
+helix++;
+}j = pairs.length - 1;
+while (j >= 0) {
+var popen = pairs[j].getBegin ();
+if ((popen < lastopen) && (popen > open)) {
+if (helices.containsValue (new Integer (popen)) && (((helices.get (new Integer (popen)))).intValue () === helix)) {
+continue;
+} else {
+helix++;
+break;
+}}j -= 1;
+}
+helices.put (new Integer (open), new Integer (helix));
+helices.put (new Integer (close), new Integer (helix));
+pairs[i].setFeatureGroup (Integer.toString (helix));
+lastopen = open;
+lastclose = close;
+}
+}, "~A");
+c$.pairHash = c$.prototype.pairHash = new java.util.Hashtable ();
+Clazz.defineStatics (c$,
+"openingPars", Clazz.newArray (-1, [new Character ('('), new Character ('['), new Character ('{'), new Character ('<'), new Character ('A'), new Character ('B'), new Character ('C'), new Character ('D'), new Character ('E'), new Character ('F'), new Character ('G'), new Character ('H'), new Character ('I'), new Character ('J'), new Character ('K'), new Character ('L'), new Character ('M'), new Character ('N'), new Character ('O'), new Character ('P'), new Character ('Q'), new Character ('R'), new Character ('S'), new Character ('T'), new Character ('U'), new Character ('V'), new Character ('W'), new Character ('X'), new Character ('Y'), new Character ('Z')]),
+"closingPars", Clazz.newArray (-1, [new Character (')'), new Character (']'), new Character ('}'), new Character ('>'), new Character ('a'), new Character ('b'), new Character ('c'), new Character ('d'), new Character ('e'), new Character ('f'), new Character ('g'), new Character ('h'), new Character ('i'), new Character ('j'), new Character ('k'), new Character ('l'), new Character ('m'), new Character ('n'), new Character ('o'), new Character ('p'), new Character ('q'), new Character ('r'), new Character ('s'), new Character ('t'), new Character ('u'), new Character ('v'), new Character ('w'), new Character ('x'), new Character ('y'), new Character ('z')]));
+c$.openingParsSet = c$.prototype.openingParsSet = new java.util.HashSet (java.util.Arrays.asList (jalview.analysis.Rna.openingPars));
+c$.closingParsSet = c$.prototype.closingParsSet = new java.util.HashSet (java.util.Arrays.asList (jalview.analysis.Rna.closingPars));
+c$.closingToOpening = c$.prototype.closingToOpening = new java.util.Hashtable ();
+{
+for (var i = 0; i < jalview.analysis.Rna.openingPars.length; i++) {
+jalview.analysis.Rna.closingToOpening.put (jalview.analysis.Rna.closingPars[i], jalview.analysis.Rna.openingPars[i]);
+}
+}});
diff --git a/bin/jalview/analysis/SecStrConsensus.class b/bin/jalview/analysis/SecStrConsensus.class
index d4b9f08..c7ac833 100644
Binary files a/bin/jalview/analysis/SecStrConsensus.class and b/bin/jalview/analysis/SecStrConsensus.class differ
diff --git a/bin/jalview/analysis/SecStrConsensus.js b/bin/jalview/analysis/SecStrConsensus.js
index 44e1009..f96678e 100644
--- a/bin/jalview/analysis/SecStrConsensus.js
+++ b/bin/jalview/analysis/SecStrConsensus.js
@@ -1,139 +1,139 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.SecStrConsensus", ["java.util.ArrayList", "$.Hashtable"], function () {
-c$ = Clazz.declareType (jalview.analysis, "SecStrConsensus");
-c$.extractConsensus = Clazz.defineMethod (c$, "extractConsensus",
-function (bps) {
-var maxlength = 0;
-for (var strs, $strs = bps.iterator (); $strs.hasNext () && ((strs = $strs.next ()) || true);) {
-for (var bp, $bp = strs.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {
-maxlength = Math.max (1 + Math.max (bp.bp5, bp.bp3), maxlength);
-}
-}
-var seq = new java.util.ArrayList ();
-for (var i = 0; i < maxlength; i++) {
-seq.add ( new java.util.Hashtable ());
-}
-for (var strs, $strs = bps.iterator (); $strs.hasNext () && ((strs = $strs.next ()) || true);) {
-for (var bp, $bp = strs.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {
-var i = bp.bp5;
-var j = bp.bp3;
-var h = seq.get (i);
-if (!h.containsKey (new Integer (j))) {
-h.put (new Integer (j), new Double (0.0));
-}h.put (new Integer (j), new Double ((h.get (new Integer (j))).doubleValue () + 1.));
-}
-}
-var mat = jalview.analysis.SecStrConsensus.fillMatrix (seq);
-var res = jalview.analysis.SecStrConsensus.backtrack (mat, seq);
-var finalres = Clazz.newIntArray (seq.size (), 0);
-for (var i = 0; i < seq.size (); i++) {
-finalres[i] = -1;
-}
-for (var bp, $bp = res.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {
-finalres[bp.bp5] = bp.bp3;
-finalres[bp.bp3] = bp.bp5;
-}
-return finalres;
-}, "java.util.ArrayList");
-c$.canBasePair = Clazz.defineMethod (c$, "canBasePair",
-($fz = function (seq, i, k) {
-return seq.get (i).containsKey (new Integer (k));
-}, $fz.isPrivate = true, $fz), "java.util.ArrayList,~N,~N");
-c$.basePairScore = Clazz.defineMethod (c$, "basePairScore",
-($fz = function (seq, i, k) {
-return seq.get (i).get (new Integer (k));
-}, $fz.isPrivate = true, $fz), "java.util.ArrayList,~N,~N");
-c$.fillMatrix = Clazz.defineMethod (c$, "fillMatrix",
-($fz = function (seq) {
-var n = seq.size ();
-var tab = Clazz.newDoubleArray (n, n, 0);
-for (var m = 1; m <= n; m++) {
-for (var i = 0; i < n - m + 1; i++) {
-var j = i + m - 1;
-tab[i][j] = 0;
-if (i < j) {
-tab[i][j] = Math.max (tab[i][j], tab[i + 1][j]);
-for (var k = i + 1; k <= j; k++) {
-if (jalview.analysis.SecStrConsensus.canBasePair (seq, i, k)) {
-var fact1 = 0;
-if (k > i + 1) {
-fact1 = tab[i + 1][k - 1];
-}var fact2 = 0;
-if (k < j) {
-fact2 = tab[k + 1][j];
-}tab[i][j] = Math.max (tab[i][j], jalview.analysis.SecStrConsensus.basePairScore (seq, i, k) + fact1 + fact2);
-}}
-}}
-}
-return tab;
-}, $fz.isPrivate = true, $fz), "java.util.ArrayList");
-c$.backtrack = Clazz.defineMethod (c$, "backtrack",
-($fz = function (tab, seq) {
-return jalview.analysis.SecStrConsensus.backtrack (tab, seq, 0, seq.size () - 1);
-}, $fz.isPrivate = true, $fz), "~A,java.util.ArrayList");
-c$.backtrack = Clazz.defineMethod (c$, "backtrack",
-($fz = function (tab, seq, i, j) {
-var result = new java.util.ArrayList ();
-if (i < j) {
-var indices = new java.util.ArrayList ();
-indices.add (new Integer (-1));
-for (var k = i + 1; k <= j; k++) {
-indices.add (new Integer (k));
-}
-for (var k, $k = indices.iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {
-if (k == -1) {
-if (tab[i][j] == tab[i + 1][j]) {
-result = jalview.analysis.SecStrConsensus.backtrack (tab, seq, i + 1, j);
-}} else {
-if (jalview.analysis.SecStrConsensus.canBasePair (seq, i, k)) {
-var fact1 = 0;
-if (k > i + 1) {
-fact1 = tab[i + 1][k - 1];
-}var fact2 = 0;
-if (k < j) {
-fact2 = tab[k + 1][j];
-}if (tab[i][j] == jalview.analysis.SecStrConsensus.basePairScore (seq, i, k) + fact1 + fact2) {
-result = jalview.analysis.SecStrConsensus.backtrack (tab, seq, i + 1, k - 1);
-result.addAll (jalview.analysis.SecStrConsensus.backtrack (tab, seq, k + 1, j));
-result.add ( new jalview.analysis.SecStrConsensus.SimpleBP (i, k));
-}}}}
-} else if (i == j) {
-} else {
-}return result;
-}, $fz.isPrivate = true, $fz), "~A,java.util.ArrayList,~N,~N");
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.bp5 = 0;
-this.bp3 = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis.SecStrConsensus, "SimpleBP");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (a, b) {
-this.bp5 = a;
-this.bp3 = b;
-}, "~N,~N");
-Clazz.defineMethod (c$, "setBP5",
-function (a) {
-this.bp5 = a;
-}, "~N");
-Clazz.defineMethod (c$, "setBP3",
-function (a) {
-this.bp3 = a;
-}, "~N");
-Clazz.defineMethod (c$, "getBP5",
-function () {
-return this.bp5;
-});
-Clazz.defineMethod (c$, "getBP3",
-function () {
-return this.bp3;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(" + this.bp5 + "," + this.bp3 + ")";
-});
-c$ = Clazz.p0p ();
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.SecStrConsensus", ["java.util.ArrayList", "$.Hashtable"], function () {
+c$ = Clazz.declareType (jalview.analysis, "SecStrConsensus");
+c$.extractConsensus = Clazz.defineMethod (c$, "extractConsensus",
+function (bps) {
+var maxlength = 0;
+for (var strs, $strs = bps.iterator (); $strs.hasNext () && ((strs = $strs.next ()) || true);) {
+for (var bp, $bp = strs.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {
+maxlength = Math.max (1 + Math.max (bp.bp5, bp.bp3), maxlength);
+}
+}
+var seq = new java.util.ArrayList ();
+for (var i = 0; i < maxlength; i++) {
+seq.add ( new java.util.Hashtable ());
+}
+for (var strs, $strs = bps.iterator (); $strs.hasNext () && ((strs = $strs.next ()) || true);) {
+for (var bp, $bp = strs.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {
+var i = bp.bp5;
+var j = bp.bp3;
+var h = seq.get (i);
+if (!h.containsKey (new Integer (j))) {
+h.put (new Integer (j), new Double (0.0));
+}h.put (new Integer (j), new Double ((h.get (new Integer (j))).doubleValue () + 1.));
+}
+}
+var mat = jalview.analysis.SecStrConsensus.fillMatrix (seq);
+var res = jalview.analysis.SecStrConsensus.backtrack (mat, seq);
+var finalres = Clazz.newIntArray (seq.size (), 0);
+for (var i = 0; i < seq.size (); i++) {
+finalres[i] = -1;
+}
+for (var bp, $bp = res.iterator (); $bp.hasNext () && ((bp = $bp.next ()) || true);) {
+finalres[bp.bp5] = bp.bp3;
+finalres[bp.bp3] = bp.bp5;
+}
+return finalres;
+}, "java.util.ArrayList");
+c$.canBasePair = Clazz.defineMethod (c$, "canBasePair",
+($fz = function (seq, i, k) {
+return seq.get (i).containsKey (new Integer (k));
+}, $fz.isPrivate = true, $fz), "java.util.ArrayList,~N,~N");
+c$.basePairScore = Clazz.defineMethod (c$, "basePairScore",
+($fz = function (seq, i, k) {
+return seq.get (i).get (new Integer (k));
+}, $fz.isPrivate = true, $fz), "java.util.ArrayList,~N,~N");
+c$.fillMatrix = Clazz.defineMethod (c$, "fillMatrix",
+($fz = function (seq) {
+var n = seq.size ();
+var tab = Clazz.newDoubleArray (n, n, 0);
+for (var m = 1; m <= n; m++) {
+for (var i = 0; i < n - m + 1; i++) {
+var j = i + m - 1;
+tab[i][j] = 0;
+if (i < j) {
+tab[i][j] = Math.max (tab[i][j], tab[i + 1][j]);
+for (var k = i + 1; k <= j; k++) {
+if (jalview.analysis.SecStrConsensus.canBasePair (seq, i, k)) {
+var fact1 = 0;
+if (k > i + 1) {
+fact1 = tab[i + 1][k - 1];
+}var fact2 = 0;
+if (k < j) {
+fact2 = tab[k + 1][j];
+}tab[i][j] = Math.max (tab[i][j], jalview.analysis.SecStrConsensus.basePairScore (seq, i, k) + fact1 + fact2);
+}}
+}}
+}
+return tab;
+}, $fz.isPrivate = true, $fz), "java.util.ArrayList");
+c$.backtrack = Clazz.defineMethod (c$, "backtrack",
+($fz = function (tab, seq) {
+return jalview.analysis.SecStrConsensus.backtrack (tab, seq, 0, seq.size () - 1);
+}, $fz.isPrivate = true, $fz), "~A,java.util.ArrayList");
+c$.backtrack = Clazz.defineMethod (c$, "backtrack",
+($fz = function (tab, seq, i, j) {
+var result = new java.util.ArrayList ();
+if (i < j) {
+var indices = new java.util.ArrayList ();
+indices.add (new Integer (-1));
+for (var k = i + 1; k <= j; k++) {
+indices.add (new Integer (k));
+}
+for (var k, $k = indices.iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {
+if (k == -1) {
+if (tab[i][j] == tab[i + 1][j]) {
+result = jalview.analysis.SecStrConsensus.backtrack (tab, seq, i + 1, j);
+}} else {
+if (jalview.analysis.SecStrConsensus.canBasePair (seq, i, k)) {
+var fact1 = 0;
+if (k > i + 1) {
+fact1 = tab[i + 1][k - 1];
+}var fact2 = 0;
+if (k < j) {
+fact2 = tab[k + 1][j];
+}if (tab[i][j] == jalview.analysis.SecStrConsensus.basePairScore (seq, i, k) + fact1 + fact2) {
+result = jalview.analysis.SecStrConsensus.backtrack (tab, seq, i + 1, k - 1);
+result.addAll (jalview.analysis.SecStrConsensus.backtrack (tab, seq, k + 1, j));
+result.add ( new jalview.analysis.SecStrConsensus.SimpleBP (i, k));
+}}}}
+} else if (i == j) {
+} else {
+}return result;
+}, $fz.isPrivate = true, $fz), "~A,java.util.ArrayList,~N,~N");
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.bp5 = 0;
+this.bp3 = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis.SecStrConsensus, "SimpleBP");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (a, b) {
+this.bp5 = a;
+this.bp3 = b;
+}, "~N,~N");
+Clazz.defineMethod (c$, "setBP5",
+function (a) {
+this.bp5 = a;
+}, "~N");
+Clazz.defineMethod (c$, "setBP3",
+function (a) {
+this.bp3 = a;
+}, "~N");
+Clazz.defineMethod (c$, "getBP5",
+function () {
+return this.bp5;
+});
+Clazz.defineMethod (c$, "getBP3",
+function () {
+return this.bp3;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(" + this.bp5 + "," + this.bp3 + ")";
+});
+c$ = Clazz.p0p ();
+});
diff --git a/bin/jalview/analysis/SeqsetUtils.js b/bin/jalview/analysis/SeqsetUtils.js
index a93fedd..f8914e1 100644
--- a/bin/jalview/analysis/SeqsetUtils.js
+++ b/bin/jalview/analysis/SeqsetUtils.js
@@ -1,124 +1,124 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.SeqsetUtils", ["jalview.analysis.AlignSeq", "$.SequenceIdMatcher", "jalview.datamodel.Sequence", "jalview.util.Comparison", "java.util.Hashtable", "$.Vector"], function () {
-c$ = Clazz.declareType (jalview.analysis, "SeqsetUtils");
-c$.SeqCharacterHash = Clazz.defineMethod (c$, "SeqCharacterHash",
-function (seq) {
-var sqinfo = new java.util.Hashtable ();
-sqinfo.put ("Name", seq.getName ());
-sqinfo.put ("Start", new Integer (seq.getStart ()));
-sqinfo.put ("End", new Integer (seq.getEnd ()));
-if (seq.getDescription () != null) {
-sqinfo.put ("Description", seq.getDescription ());
-}var sfeat = new java.util.Vector ();
-var sfarray = seq.getSequenceFeatures ();
-if (sfarray != null && sfarray.length > 0) {
-for (var i = 0; i < sfarray.length; i++) {
-sfeat.addElement (sfarray[i]);
-}
-}sqinfo.put ("SeqFeatures", sfeat);
-sqinfo.put ("PdbId", (seq.getPDBId () != null) ? seq.getPDBId () : new java.util.Vector ());
-sqinfo.put ("datasetSequence", (seq.getDatasetSequence () != null) ? seq.getDatasetSequence () : new jalview.datamodel.Sequence ("THISISAPLACEHOLDER", ""));
-return sqinfo;
-}, "jalview.datamodel.SequenceI");
-c$.SeqCharacterUnhash = Clazz.defineMethod (c$, "SeqCharacterUnhash",
-function (sq, sqinfo) {
-var namePresent = true;
-if (sqinfo == null) {
-return false;
-}var oldname = sqinfo.get ("Name");
-var start = sqinfo.get ("Start");
-var end = sqinfo.get ("End");
-var sfeatures = sqinfo.get ("SeqFeatures");
-var pdbid = sqinfo.get ("PdbId");
-var description = sqinfo.get ("Description");
-var seqds = sqinfo.get ("datasetSequence");
-if (oldname == null) {
-namePresent = false;
-} else {
-sq.setName (oldname);
-}if (pdbid != null && pdbid.size () > 0) {
-sq.setPDBId (pdbid);
-}if ((start != null) && (end != null)) {
-sq.setStart (start.intValue ());
-sq.setEnd (end.intValue ());
-}if ((sfeatures != null) && (sfeatures.size () > 0)) {
-var sfarray = new Array (sfeatures.size ());
-for (var is = 0, isize = sfeatures.size (); is < isize; is++) {
-sfarray[is] = sfeatures.elementAt (is);
-}
-sq.setSequenceFeatures (sfarray);
-}if (description != null) {
-sq.setDescription (description);
-}if ((seqds != null) && !(seqds.getName ().equals ("THISISAPLACEHOLDER") && seqds.getLength () == 0)) {
-sq.setDatasetSequence (seqds);
-}return namePresent;
-}, "jalview.datamodel.SequenceI,java.util.Hashtable");
-c$.unique_name = Clazz.defineMethod (c$, "unique_name",
-function (i) {
-return String.instantialize ("Sequence" + i);
-}, "~N");
-c$.uniquify = Clazz.defineMethod (c$, "uniquify",
-function (sequences, write_names) {
-var map = new java.util.Hashtable ();
-for (var i = 0; i < sequences.length; i++) {
-var safename = jalview.analysis.SeqsetUtils.unique_name (i);
-map.put (safename, jalview.analysis.SeqsetUtils.SeqCharacterHash (sequences[i]));
-if (write_names) {
-sequences[i].setName (safename);
-}}
-return map;
-}, "~A,~B");
-c$.deuniquify = Clazz.defineMethod (c$, "deuniquify",
-function (map, sequences) {
-return jalview.analysis.SeqsetUtils.deuniquify (map, sequences, true);
-}, "java.util.Hashtable,~A");
-c$.deuniquify = Clazz.defineMethod (c$, "deuniquify",
-function (map, sequences, quiet) {
-var matcher = new jalview.analysis.SequenceIdMatcher (sequences);
-var msq = null;
-var keys = map.keys ();
-var unmatched = new java.util.Vector ();
-for (var i = 0, j = sequences.length; i < j; i++) {
-unmatched.addElement (sequences[i]);
-}
-while (keys.hasMoreElements ()) {
-var key = keys.nextElement ();
-if (Clazz.instanceOf (key, String)) {
-if ((msq = matcher.findIdMatch (key)) != null) {
-var sqinfo = map.get (key);
-unmatched.removeElement (msq);
-jalview.analysis.SeqsetUtils.SeqCharacterUnhash (msq, sqinfo);
-} else {
-if (!quiet) {
-System.err.println ("Can't find '" + (key) + "' in uniquified alignment");
-}}}}
-if (unmatched.size () > 0 && !quiet) {
-System.err.println ("Did not find matches for :");
-for (var i = unmatched.elements (); i.hasMoreElements (); System.out.println ((i.nextElement ()).getName ())) {
-;}
-return false;
-}return true;
-}, "java.util.Hashtable,~A,~B");
-c$.getNonEmptySequenceSet = Clazz.defineMethod (c$, "getNonEmptySequenceSet",
-function (sequences) {
-var ungapped = Clazz.newBooleanArray (sequences.length, false);
-var msflen = 0;
-for (var i = 0, j = sequences.length; i < j; i++) {
-var tempseq = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, sequences[i].getSequenceAsString ());
-if (tempseq.length == 0) {
-ungapped[i] = false;
-} else {
-ungapped[i] = true;
-msflen++;
-}}
-if (msflen == 0) {
-return null;
-}var mset = new Array (msflen);
-for (var i = 0, j = sequences.length, k = 0; i < j; i++) {
-if (ungapped[i]) {
-mset[k++] = sequences[i];
-}}
-ungapped = null;
-return mset;
-}, "~A");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.SeqsetUtils", ["jalview.analysis.AlignSeq", "$.SequenceIdMatcher", "jalview.datamodel.Sequence", "jalview.util.Comparison", "java.util.Hashtable", "$.Vector"], function () {
+c$ = Clazz.declareType (jalview.analysis, "SeqsetUtils");
+c$.SeqCharacterHash = Clazz.defineMethod (c$, "SeqCharacterHash",
+function (seq) {
+var sqinfo = new java.util.Hashtable ();
+sqinfo.put ("Name", seq.getName ());
+sqinfo.put ("Start", new Integer (seq.getStart ()));
+sqinfo.put ("End", new Integer (seq.getEnd ()));
+if (seq.getDescription () != null) {
+sqinfo.put ("Description", seq.getDescription ());
+}var sfeat = new java.util.Vector ();
+var sfarray = seq.getSequenceFeatures ();
+if (sfarray != null && sfarray.length > 0) {
+for (var i = 0; i < sfarray.length; i++) {
+sfeat.addElement (sfarray[i]);
+}
+}sqinfo.put ("SeqFeatures", sfeat);
+sqinfo.put ("PdbId", (seq.getPDBId () != null) ? seq.getPDBId () : new java.util.Vector ());
+sqinfo.put ("datasetSequence", (seq.getDatasetSequence () != null) ? seq.getDatasetSequence () : new jalview.datamodel.Sequence ("THISISAPLACEHOLDER", ""));
+return sqinfo;
+}, "jalview.datamodel.SequenceI");
+c$.SeqCharacterUnhash = Clazz.defineMethod (c$, "SeqCharacterUnhash",
+function (sq, sqinfo) {
+var namePresent = true;
+if (sqinfo == null) {
+return false;
+}var oldname = sqinfo.get ("Name");
+var start = sqinfo.get ("Start");
+var end = sqinfo.get ("End");
+var sfeatures = sqinfo.get ("SeqFeatures");
+var pdbid = sqinfo.get ("PdbId");
+var description = sqinfo.get ("Description");
+var seqds = sqinfo.get ("datasetSequence");
+if (oldname == null) {
+namePresent = false;
+} else {
+sq.setName (oldname);
+}if (pdbid != null && pdbid.size () > 0) {
+sq.setPDBId (pdbid);
+}if ((start != null) && (end != null)) {
+sq.setStart (start.intValue ());
+sq.setEnd (end.intValue ());
+}if ((sfeatures != null) && (sfeatures.size () > 0)) {
+var sfarray = new Array (sfeatures.size ());
+for (var is = 0, isize = sfeatures.size (); is < isize; is++) {
+sfarray[is] = sfeatures.elementAt (is);
+}
+sq.setSequenceFeatures (sfarray);
+}if (description != null) {
+sq.setDescription (description);
+}if ((seqds != null) && !(seqds.getName ().equals ("THISISAPLACEHOLDER") && seqds.getLength () == 0)) {
+sq.setDatasetSequence (seqds);
+}return namePresent;
+}, "jalview.datamodel.SequenceI,java.util.Hashtable");
+c$.unique_name = Clazz.defineMethod (c$, "unique_name",
+function (i) {
+return String.instantialize ("Sequence" + i);
+}, "~N");
+c$.uniquify = Clazz.defineMethod (c$, "uniquify",
+function (sequences, write_names) {
+var map = new java.util.Hashtable ();
+for (var i = 0; i < sequences.length; i++) {
+var safename = jalview.analysis.SeqsetUtils.unique_name (i);
+map.put (safename, jalview.analysis.SeqsetUtils.SeqCharacterHash (sequences[i]));
+if (write_names) {
+sequences[i].setName (safename);
+}}
+return map;
+}, "~A,~B");
+c$.deuniquify = Clazz.defineMethod (c$, "deuniquify",
+function (map, sequences) {
+return jalview.analysis.SeqsetUtils.deuniquify (map, sequences, true);
+}, "java.util.Hashtable,~A");
+c$.deuniquify = Clazz.defineMethod (c$, "deuniquify",
+function (map, sequences, quiet) {
+var matcher = new jalview.analysis.SequenceIdMatcher (sequences);
+var msq = null;
+var keys = map.keys ();
+var unmatched = new java.util.Vector ();
+for (var i = 0, j = sequences.length; i < j; i++) {
+unmatched.addElement (sequences[i]);
+}
+while (keys.hasMoreElements ()) {
+var key = keys.nextElement ();
+if (Clazz.instanceOf (key, String)) {
+if ((msq = matcher.findIdMatch (key)) != null) {
+var sqinfo = map.get (key);
+unmatched.removeElement (msq);
+jalview.analysis.SeqsetUtils.SeqCharacterUnhash (msq, sqinfo);
+} else {
+if (!quiet) {
+System.err.println ("Can't find '" + (key) + "' in uniquified alignment");
+}}}}
+if (unmatched.size () > 0 && !quiet) {
+System.err.println ("Did not find matches for :");
+for (var i = unmatched.elements (); i.hasMoreElements (); System.out.println ((i.nextElement ()).getName ())) {
+;}
+return false;
+}return true;
+}, "java.util.Hashtable,~A,~B");
+c$.getNonEmptySequenceSet = Clazz.defineMethod (c$, "getNonEmptySequenceSet",
+function (sequences) {
+var ungapped = Clazz.newBooleanArray (sequences.length, false);
+var msflen = 0;
+for (var i = 0, j = sequences.length; i < j; i++) {
+var tempseq = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, sequences[i].getSequenceAsString ());
+if (tempseq.length == 0) {
+ungapped[i] = false;
+} else {
+ungapped[i] = true;
+msflen++;
+}}
+if (msflen == 0) {
+return null;
+}var mset = new Array (msflen);
+for (var i = 0, j = sequences.length, k = 0; i < j; i++) {
+if (ungapped[i]) {
+mset[k++] = sequences[i];
+}}
+ungapped = null;
+return mset;
+}, "~A");
+});
diff --git a/bin/jalview/analysis/SequenceIdMatcher$SeqIdName.class b/bin/jalview/analysis/SequenceIdMatcher$SeqIdName.class
index 1735f8a..58766c1 100644
Binary files a/bin/jalview/analysis/SequenceIdMatcher$SeqIdName.class and b/bin/jalview/analysis/SequenceIdMatcher$SeqIdName.class differ
diff --git a/bin/jalview/analysis/SequenceIdMatcher.js b/bin/jalview/analysis/SequenceIdMatcher.js
index 6e94b5f..adb0a5a 100644
--- a/bin/jalview/analysis/SequenceIdMatcher.js
+++ b/bin/jalview/analysis/SequenceIdMatcher.js
@@ -1,167 +1,167 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.SequenceIdMatcher", ["java.util.ArrayList", "$.Arrays", "$.HashMap", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.names = null;
-if (!Clazz.isClassDefined ("jalview.analysis.SequenceIdMatcher.SeqIdName")) {
-jalview.analysis.SequenceIdMatcher.$SequenceIdMatcher$SeqIdName$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "SequenceIdMatcher");
-Clazz.makeConstructor (c$,
-function (seqs) {
-this.names = new java.util.HashMap ();
-this.addAll (seqs);
-}, "java.util.List");
-Clazz.defineMethod (c$, "addAll",
-function (seqs) {
-for (var seq, $seq = seqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-this.names.put (Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seq.getDisplayId (true)), seq);
-var dbseq = seq;
-while (dbseq.getDatasetSequence () != null) {
-dbseq = dbseq.getDatasetSequence ();
-}
-if (dbseq.getDBRef () != null) {
-var dbr = dbseq.getDBRef ();
-var sid = null;
-for (var r = 0; r < dbr.length; r++) {
-sid = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, dbr[r].getAccessionId ());
-if (!this.names.containsKey (sid)) {
-this.names.put (sid, seq);
-}}
-}}
-}, "java.util.List");
-Clazz.makeConstructor (c$,
-function (sequences) {
-this.construct (java.util.Arrays.asList (sequences));
-}, "~A");
-Clazz.defineMethod (c$, "pickbestMatch",
-($fz = function (candName, matches) {
-var st = this.pickbestMatches (candName, matches);
-return st == null || st.size () == 0 ? null : st.get (0);
-}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName,java.util.List");
-Clazz.defineMethod (c$, "pickbestMatches",
-($fz = function (candName, matches) {
-var best = new java.util.ArrayList ();
-if (candName == null || matches == null || matches.size () == 0) {
-return null;
-}var match = matches.remove (0);
-best.add (match);
-this.names.put (Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, match.getName ()), match);
-var matchlen = match.getName ().length;
-var namlen = candName.id.length;
-while (matches.size () > 0) {
-var cand = matches.remove (0);
-this.names.put (Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, cand.getName ()), cand);
-var q;
-var w;
-var candlen = cand.getName ().length;
-if ((q = Math.abs (matchlen - namlen)) > (w = Math.abs (candlen - namlen)) && candlen > matchlen) {
-best.clear ();
-match = cand;
-matchlen = candlen;
-best.add (match);
-}if (q == w && candlen == matchlen) {
-best.add (cand);
-}}
-if (best.size () == 0) {
-return null;
-};return best;
-}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName,java.util.List");
-Clazz.defineMethod (c$, "findIdMatch",
-function (seq) {
-var nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seq.getName ());
-return this.findIdMatch (nam);
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "findIdMatch",
-function (seqnam) {
-var nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seqnam);
-return this.findIdMatch (nam);
-}, "~S");
-Clazz.defineMethod (c$, "findAllIdMatches",
-function (seqnam) {
-var nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seqnam);
-var m = this.findAllIdMatches (nam);
-if (m != null) {
-return m.toArray ( new Array (m.size ()));
-}return null;
-}, "~S");
-Clazz.defineMethod (c$, "findIdMatch",
-function (seqs) {
-var namedseqs = null;
-var i = 0;
-var nam;
-if (seqs.length > 0) {
-namedseqs = new Array (seqs.length);
-do {
-nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seqs[i].getName ());
-if (this.names.containsKey (nam)) {
-namedseqs[i] = this.findIdMatch (nam);
-} else {
-namedseqs[i] = null;
-}} while (++i < seqs.length);
-}return namedseqs;
-}, "~A");
-Clazz.defineMethod (c$, "findIdMatch",
-($fz = function (nam) {
-var matches = new java.util.Vector ();
-while (this.names.containsKey (nam)) {
-matches.addElement (this.names.remove (nam));
-}
-return this.pickbestMatch (nam, matches);
-}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName");
-Clazz.defineMethod (c$, "findAllIdMatches",
-($fz = function (nam) {
-var matches = new java.util.ArrayList ();
-while (this.names.containsKey (nam)) {
-matches.add (this.names.remove (nam));
-}
-var r = this.pickbestMatches (nam, matches);
-return r;
-}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName");
-c$.$SequenceIdMatcher$SeqIdName$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.id = null;
-this.WORD_SEP = "~. |#\\/<>!\"\u00a4$%^*)}[@\',?_";
-Clazz.instantialize (this, arguments);
-}, jalview.analysis.SequenceIdMatcher, "SeqIdName");
-Clazz.makeConstructor (c$,
-function (a) {
-if (a != null) {
-this.id = String.instantialize (a);
-} else {
-this.id = "";
-}}, "~S");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-return ((this.id.length >= 4) ? this.id.substring (0, 4).hashCode () : this.id.hashCode ());
-});
-Clazz.defineMethod (c$, "equals",
-function (a) {
-if (a == null) {
-return false;
-}if (Clazz.instanceOf (a, jalview.analysis.SequenceIdMatcher.SeqIdName)) {
-return this.equals (a);
-} else {
-if (Clazz.instanceOf (a, String)) {
-return this.equals (a);
-}}return false;
-}, "~O");
-Clazz.defineMethod (c$, "equals",
-function (a) {
-if (this.id.length > a.id.length) {
-return this.id.startsWith (a.id) ? (this.WORD_SEP.indexOf (this.id.charAt (a.id.length)) > -1) : false;
-} else {
-return a.id.startsWith (this.id) ? (a.id.equals (this.id) ? true : (this.WORD_SEP.indexOf (a.id.charAt (this.id.length)) > -1)) : false;
-}}, "jalview.analysis.SequenceIdMatcher.SeqIdName");
-Clazz.defineMethod (c$, "equals",
-function (a) {
-if (this.id.length > a.length) {
-return this.id.startsWith (a) ? (this.WORD_SEP.indexOf (this.id.charAt (a.length)) > -1) : false;
-} else {
-return a.startsWith (this.id) ? (a.equals (this.id) ? true : (this.WORD_SEP.indexOf (a.charAt (this.id.length)) > -1)) : false;
-}}, "~S");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.SequenceIdMatcher", ["java.util.ArrayList", "$.Arrays", "$.HashMap", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.names = null;
+if (!Clazz.isClassDefined ("jalview.analysis.SequenceIdMatcher.SeqIdName")) {
+jalview.analysis.SequenceIdMatcher.$SequenceIdMatcher$SeqIdName$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "SequenceIdMatcher");
+Clazz.makeConstructor (c$,
+function (seqs) {
+this.names = new java.util.HashMap ();
+this.addAll (seqs);
+}, "java.util.List");
+Clazz.defineMethod (c$, "addAll",
+function (seqs) {
+for (var seq, $seq = seqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+this.names.put (Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seq.getDisplayId (true)), seq);
+var dbseq = seq;
+while (dbseq.getDatasetSequence () != null) {
+dbseq = dbseq.getDatasetSequence ();
+}
+if (dbseq.getDBRef () != null) {
+var dbr = dbseq.getDBRef ();
+var sid = null;
+for (var r = 0; r < dbr.length; r++) {
+sid = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, dbr[r].getAccessionId ());
+if (!this.names.containsKey (sid)) {
+this.names.put (sid, seq);
+}}
+}}
+}, "java.util.List");
+Clazz.makeConstructor (c$,
+function (sequences) {
+this.construct (java.util.Arrays.asList (sequences));
+}, "~A");
+Clazz.defineMethod (c$, "pickbestMatch",
+($fz = function (candName, matches) {
+var st = this.pickbestMatches (candName, matches);
+return st == null || st.size () == 0 ? null : st.get (0);
+}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName,java.util.List");
+Clazz.defineMethod (c$, "pickbestMatches",
+($fz = function (candName, matches) {
+var best = new java.util.ArrayList ();
+if (candName == null || matches == null || matches.size () == 0) {
+return null;
+}var match = matches.remove (0);
+best.add (match);
+this.names.put (Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, match.getName ()), match);
+var matchlen = match.getName ().length;
+var namlen = candName.id.length;
+while (matches.size () > 0) {
+var cand = matches.remove (0);
+this.names.put (Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, cand.getName ()), cand);
+var q;
+var w;
+var candlen = cand.getName ().length;
+if ((q = Math.abs (matchlen - namlen)) > (w = Math.abs (candlen - namlen)) && candlen > matchlen) {
+best.clear ();
+match = cand;
+matchlen = candlen;
+best.add (match);
+}if (q == w && candlen == matchlen) {
+best.add (cand);
+}}
+if (best.size () == 0) {
+return null;
+};return best;
+}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName,java.util.List");
+Clazz.defineMethod (c$, "findIdMatch",
+function (seq) {
+var nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seq.getName ());
+return this.findIdMatch (nam);
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "findIdMatch",
+function (seqnam) {
+var nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seqnam);
+return this.findIdMatch (nam);
+}, "~S");
+Clazz.defineMethod (c$, "findAllIdMatches",
+function (seqnam) {
+var nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seqnam);
+var m = this.findAllIdMatches (nam);
+if (m != null) {
+return m.toArray ( new Array (m.size ()));
+}return null;
+}, "~S");
+Clazz.defineMethod (c$, "findIdMatch",
+function (seqs) {
+var namedseqs = null;
+var i = 0;
+var nam;
+if (seqs.length > 0) {
+namedseqs = new Array (seqs.length);
+do {
+nam = Clazz.innerTypeInstance (jalview.analysis.SequenceIdMatcher.SeqIdName, this, null, seqs[i].getName ());
+if (this.names.containsKey (nam)) {
+namedseqs[i] = this.findIdMatch (nam);
+} else {
+namedseqs[i] = null;
+}} while (++i < seqs.length);
+}return namedseqs;
+}, "~A");
+Clazz.defineMethod (c$, "findIdMatch",
+($fz = function (nam) {
+var matches = new java.util.Vector ();
+while (this.names.containsKey (nam)) {
+matches.addElement (this.names.remove (nam));
+}
+return this.pickbestMatch (nam, matches);
+}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName");
+Clazz.defineMethod (c$, "findAllIdMatches",
+($fz = function (nam) {
+var matches = new java.util.ArrayList ();
+while (this.names.containsKey (nam)) {
+matches.add (this.names.remove (nam));
+}
+var r = this.pickbestMatches (nam, matches);
+return r;
+}, $fz.isPrivate = true, $fz), "jalview.analysis.SequenceIdMatcher.SeqIdName");
+c$.$SequenceIdMatcher$SeqIdName$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.id = null;
+this.WORD_SEP = "~. |#\\/<>!\"\u00a4$%^*)}[@\',?_";
+Clazz.instantialize (this, arguments);
+}, jalview.analysis.SequenceIdMatcher, "SeqIdName");
+Clazz.makeConstructor (c$,
+function (a) {
+if (a != null) {
+this.id = String.instantialize (a);
+} else {
+this.id = "";
+}}, "~S");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+return ((this.id.length >= 4) ? this.id.substring (0, 4).hashCode () : this.id.hashCode ());
+});
+Clazz.defineMethod (c$, "equals",
+function (a) {
+if (a == null) {
+return false;
+}if (Clazz.instanceOf (a, jalview.analysis.SequenceIdMatcher.SeqIdName)) {
+return this.equals (a);
+} else {
+if (Clazz.instanceOf (a, String)) {
+return this.equals (a);
+}}return false;
+}, "~O");
+Clazz.defineMethod (c$, "equals",
+function (a) {
+if (this.id.length > a.id.length) {
+return this.id.startsWith (a.id) ? (this.WORD_SEP.indexOf (this.id.charAt (a.id.length)) > -1) : false;
+} else {
+return a.id.startsWith (this.id) ? (a.id.equals (this.id) ? true : (this.WORD_SEP.indexOf (a.id.charAt (this.id.length)) > -1)) : false;
+}}, "jalview.analysis.SequenceIdMatcher.SeqIdName");
+Clazz.defineMethod (c$, "equals",
+function (a) {
+if (this.id.length > a.length) {
+return this.id.startsWith (a) ? (this.WORD_SEP.indexOf (this.id.charAt (a.length)) > -1) : false;
+} else {
+return a.startsWith (this.id) ? (a.equals (this.id) ? true : (this.WORD_SEP.indexOf (a.charAt (this.id.length)) > -1)) : false;
+}}, "~S");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/analysis/StructureFrequency.class b/bin/jalview/analysis/StructureFrequency.class
index 8b6d9eb..f7f3fc4 100644
Binary files a/bin/jalview/analysis/StructureFrequency.class and b/bin/jalview/analysis/StructureFrequency.class differ
diff --git a/bin/jalview/analysis/StructureFrequency.js b/bin/jalview/analysis/StructureFrequency.js
index 6c90b65..83c8f02 100644
--- a/bin/jalview/analysis/StructureFrequency.js
+++ b/bin/jalview/analysis/StructureFrequency.js
@@ -1,260 +1,260 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (null, "jalview.analysis.StructureFrequency", ["jalview.datamodel.Annotation", "jalview.util.Format", "$.QuickSort", "java.lang.Float", "java.util.Hashtable", "javajs.util.AU"], function () {
-c$ = Clazz.declareType (jalview.analysis, "StructureFrequency");
-c$.findPair = Clazz.defineMethod (c$, "findPair",
-function (pairs, indice) {
-for (var i = 0; i < pairs.length; i++) {
-if (pairs[i].getBegin () == indice) {
-return pairs[i].getEnd ();
-}}
-return -1;
-}, "~A,~N");
-c$.calculate = Clazz.defineMethod (c$, "calculate",
-function (sequences, start, end, result, profile, rnaStruc) {
-var residueHash;
-var maxResidue;
-var struc = rnaStruc.getRNAStruc ().toCharArray ();
-var rna = rnaStruc._rnasecstr;
-var c;
-var s;
-var cEnd;
-var count = 0;
-var nonGap = 0;
-var i;
-var bpEnd = -1;
-var j;
-var jSize = sequences.length;
-var values;
-var pairs;
-var percentage;
-var wooble = true;
-for (i = start; i < end; i++) {
-residueHash = new java.util.Hashtable ();
-maxResidue = "-";
-values = Clazz.newIntArray (255, 0);
-pairs = Clazz.newIntArray (255, 255, 0);
-bpEnd = -1;
-if (i < struc.length) {
-s = struc[i];
-} else {
-s = '-';
-}if (s == '.' || s == ' ') {
-s = '-';
-}if (s != '(' && s != '[') {
-if (s == '-') {
-values['-'.charCodeAt (0)]++;
-}} else {
-bpEnd = jalview.analysis.StructureFrequency.findPair (rna, i);
-if (bpEnd > -1) {
-for (j = 0; j < jSize; j++) {
-if (sequences[j] == null) {
-System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");
-continue;
-}c = sequences[j].getCharAt (i);
-if (c == '.' || c == ' ') {
-c = '-';
-}if (c == '-') {
-values['-'.charCodeAt (0)]++;
-continue;
-}cEnd = sequences[j].getCharAt (bpEnd);
-if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == true) {
-values['('.charCodeAt (0)]++;
-maxResidue = "(";
-wooble = true;
-}if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == false) {
-wooble = false;
-values['['.charCodeAt (0)]++;
-maxResidue = "[";
-}pairs[c.charCodeAt (0)][cEnd.charCodeAt (0)]++;
-}
-}}if (profile) {
-residueHash.put ("P", Clazz.newArray (-1, [values, Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));
-residueHash.put ("B", pairs);
-}if (wooble == true) {
-count = values['('.charCodeAt (0)];
-}if (wooble == false) {
-count = values['['.charCodeAt (0)];
-}residueHash.put ("C", new Integer (count));
-residueHash.put ("R", maxResidue);
-percentage = (count * 100) / jSize;
-residueHash.put ("G", new Float (percentage));
-if (result[i] == null) {
-result[i] = residueHash;
-}if (bpEnd > 0) {
-values[')'.charCodeAt (0)] = values['('.charCodeAt (0)];
-values[']'.charCodeAt (0)] = values['['.charCodeAt (0)];
-values['('.charCodeAt (0)] = 0;
-values['['.charCodeAt (0)] = 0;
-residueHash = new java.util.Hashtable ();
-if (wooble == true) {
-maxResidue = ")";
-}if (wooble == false) {
-maxResidue = "]";
-}if (profile) {
-residueHash.put ("P", Clazz.newArray (-1, [values, Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));
-residueHash.put ("B", pairs);
-}residueHash.put ("C", new Integer (count));
-residueHash.put ("R", maxResidue);
-percentage = (count * 100) / jSize;
-residueHash.put ("G", new Float (percentage));
-result[bpEnd] = residueHash;
-}}
-}, "~A,~N,~N,~A,~B,jalview.datamodel.AlignmentAnnotation");
-c$.checkBpType = Clazz.defineMethod (c$, "checkBpType",
-function (up, down) {
-if (up > 'Z') {
-up = String.fromCharCode (up.charCodeAt (0) - 32);
-}if (down > 'Z') {
-down = String.fromCharCode (down.charCodeAt (0) - 32);
-}switch (up) {
-case 'A':
-switch (down) {
-case 'T':
-return true;
-case 'U':
-return true;
-}
-break;
-case 'C':
-switch (down) {
-case 'G':
-return true;
-}
-break;
-case 'T':
-switch (down) {
-case 'A':
-return true;
-case 'G':
-return true;
-}
-break;
-case 'G':
-switch (down) {
-case 'C':
-return true;
-case 'T':
-return true;
-case 'U':
-return true;
-}
-break;
-case 'U':
-switch (down) {
-case 'A':
-return true;
-case 'G':
-return true;
-}
-break;
-}
-return false;
-}, "~S,~S");
-c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
-function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {
-var tval;
-var value;
-if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {
-return;
-}var fmtstr = "%3.1f";
-var precision = 2;
-while (nseq > 100) {
-precision++;
-nseq /= 10;
-}
-if (precision > 2) {
-fmtstr = "%" + (2 + precision) + "." + precision + "f";
-}var fmt = new jalview.util.Format (fmtstr);
-for (var i = iStart; i < width; i++) {
-var hci;
-if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {
-consensus.annotations[i] = null;
-continue;
-}value = 0;
-var fv;
-if (ignoreGapsInConsensusCalculation) {
-fv = hci.get ("N");
-} else {
-fv = hci.get ("G");
-}if (fv == null) {
-consensus.annotations[i] = null;
-continue;
-}value = fv.floatValue ();
-var maxRes = hci.get ("R").toString ();
-var mouseOver = hci.get ("R") + " ";
-if (maxRes.length > 1) {
-mouseOver = "[" + maxRes + "] ";
-maxRes = "+";
-}var profile = hci.get ("P");
-var pairs = hci.get ("B");
-if (pairs != null && includeAllConsSymbols) {
-mouseOver = "";
-var ca = javajs.util.AU.newInt2 (625);
-var vl = Clazz.newFloatArray (625, 0);
-var x = 0;
-for (var c = 65; c < 90; c++) {
-for (var d = 65; d < 90; d++) {
-ca[x] = Clazz.newIntArray (-1, [c, d]);
-vl[x] = pairs[c][d];
-x++;
-}
-}
-jalview.util.QuickSort.sortFloatObject (vl, ca);
-var p = 0;
-var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
-for (var c = 624; c > 0; c--) {
-if (vl[c] > 0) {
-tval = (vl[c] * 100 / divisor);
-mouseOver += ((p == 0) ? "" : "; ") + String.fromCharCode (ca[c][0]) + String.fromCharCode (ca[c][1]) + " " + fmt.formDouble (tval) + "%";
-p++;
-}}
-} else {
-mouseOver += (fmt.formDouble (value) + "%");
-}consensus.annotations[i] = new jalview.datamodel.Annotation (maxRes, mouseOver, ' ', value);
-}
-}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");
-c$.extractProfile = Clazz.defineMethod (c$, "extractProfile",
-function (hconsensus, ignoreGapsInConsensusCalculation) {
-var rtnval = Clazz.newIntArray (74, 0);
-var profile = hconsensus.get ("P");
-var pairs = hconsensus.get ("B");
-if (profile == null) {
-return null;
-}var ca = javajs.util.AU.newInt2 (625);
-var vl = Clazz.newFloatArray (625, 0);
-var x = 0;
-for (var c = 65; c < 90; c++) {
-for (var d = 65; d < 90; d++) {
-ca[x] = Clazz.newIntArray (-1, [c, d]);
-vl[x] = pairs[c][d];
-x++;
-}
-}
-jalview.util.QuickSort.sortFloatObject (vl, ca);
-var valuesCount = 0;
-rtnval[1] = 0;
-var offset = 2;
-var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
-for (var c = 624; c > 0; c--) {
-if (vl[c] > 0) {
-rtnval[offset++] = ca[c][0];
-rtnval[offset++] = ca[c][1];
-rtnval[offset] = Clazz.floatToInt (vl[c] * 100 / divisor);
-rtnval[1] += rtnval[offset++];
-valuesCount++;
-}}
-rtnval[0] = valuesCount;
-var result = Clazz.newIntArray (rtnval.length + 1, 0);
-result[0] = 1;
-System.arraycopy (rtnval, 0, result, 1, rtnval.length);
-return result;
-}, "java.util.Hashtable,~B");
-Clazz.defineStatics (c$,
-"STRUCTURE_PROFILE_LENGTH", 74,
-"MAXCOUNT", "C",
-"MAXRESIDUE", "R",
-"PID_GAPS", "G",
-"PID_NOGAPS", "N",
-"PROFILE", "P",
-"PAIRPROFILE", "B");
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (null, "jalview.analysis.StructureFrequency", ["jalview.datamodel.Annotation", "jalview.util.Format", "$.QuickSort", "java.lang.Float", "java.util.Hashtable", "javajs.util.AU"], function () {
+c$ = Clazz.declareType (jalview.analysis, "StructureFrequency");
+c$.findPair = Clazz.defineMethod (c$, "findPair",
+function (pairs, indice) {
+for (var i = 0; i < pairs.length; i++) {
+if (pairs[i].getBegin () == indice) {
+return pairs[i].getEnd ();
+}}
+return -1;
+}, "~A,~N");
+c$.calculate = Clazz.defineMethod (c$, "calculate",
+function (sequences, start, end, result, profile, rnaStruc) {
+var residueHash;
+var maxResidue;
+var struc = rnaStruc.getRNAStruc ().toCharArray ();
+var rna = rnaStruc._rnasecstr;
+var c;
+var s;
+var cEnd;
+var count = 0;
+var nonGap = 0;
+var i;
+var bpEnd = -1;
+var j;
+var jSize = sequences.length;
+var values;
+var pairs;
+var percentage;
+var wooble = true;
+for (i = start; i < end; i++) {
+residueHash = new java.util.Hashtable ();
+maxResidue = "-";
+values = Clazz.newIntArray (255, 0);
+pairs = Clazz.newIntArray (255, 255, 0);
+bpEnd = -1;
+if (i < struc.length) {
+s = struc[i];
+} else {
+s = '-';
+}if (s == '.' || s == ' ') {
+s = '-';
+}if (s != '(' && s != '[') {
+if (s == '-') {
+values['-'.charCodeAt (0)]++;
+}} else {
+bpEnd = jalview.analysis.StructureFrequency.findPair (rna, i);
+if (bpEnd > -1) {
+for (j = 0; j < jSize; j++) {
+if (sequences[j] == null) {
+System.err.println ("WARNING: Consensus skipping null sequence - possible race condition.");
+continue;
+}c = sequences[j].getCharAt (i);
+if (c == '.' || c == ' ') {
+c = '-';
+}if (c == '-') {
+values['-'.charCodeAt (0)]++;
+continue;
+}cEnd = sequences[j].getCharAt (bpEnd);
+if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == true) {
+values['('.charCodeAt (0)]++;
+maxResidue = "(";
+wooble = true;
+}if (jalview.analysis.StructureFrequency.checkBpType (c, cEnd) == false) {
+wooble = false;
+values['['.charCodeAt (0)]++;
+maxResidue = "[";
+}pairs[c.charCodeAt (0)][cEnd.charCodeAt (0)]++;
+}
+}}if (profile) {
+residueHash.put ("P", Clazz.newArray (-1, [values, Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));
+residueHash.put ("B", pairs);
+}if (wooble == true) {
+count = values['('.charCodeAt (0)];
+}if (wooble == false) {
+count = values['['.charCodeAt (0)];
+}residueHash.put ("C", new Integer (count));
+residueHash.put ("R", maxResidue);
+percentage = (count * 100) / jSize;
+residueHash.put ("G", new Float (percentage));
+if (result[i] == null) {
+result[i] = residueHash;
+}if (bpEnd > 0) {
+values[')'.charCodeAt (0)] = values['('.charCodeAt (0)];
+values[']'.charCodeAt (0)] = values['['.charCodeAt (0)];
+values['('.charCodeAt (0)] = 0;
+values['['.charCodeAt (0)] = 0;
+residueHash = new java.util.Hashtable ();
+if (wooble == true) {
+maxResidue = ")";
+}if (wooble == false) {
+maxResidue = "]";
+}if (profile) {
+residueHash.put ("P", Clazz.newArray (-1, [values, Clazz.newIntArray (-1, [jSize, (jSize - values['-'.charCodeAt (0)])])]));
+residueHash.put ("B", pairs);
+}residueHash.put ("C", new Integer (count));
+residueHash.put ("R", maxResidue);
+percentage = (count * 100) / jSize;
+residueHash.put ("G", new Float (percentage));
+result[bpEnd] = residueHash;
+}}
+}, "~A,~N,~N,~A,~B,jalview.datamodel.AlignmentAnnotation");
+c$.checkBpType = Clazz.defineMethod (c$, "checkBpType",
+function (up, down) {
+if (up > 'Z') {
+up = String.fromCharCode (up.charCodeAt (0) - 32);
+}if (down > 'Z') {
+down = String.fromCharCode (down.charCodeAt (0) - 32);
+}switch (up) {
+case 'A':
+switch (down) {
+case 'T':
+return true;
+case 'U':
+return true;
+}
+break;
+case 'C':
+switch (down) {
+case 'G':
+return true;
+}
+break;
+case 'T':
+switch (down) {
+case 'A':
+return true;
+case 'G':
+return true;
+}
+break;
+case 'G':
+switch (down) {
+case 'C':
+return true;
+case 'T':
+return true;
+case 'U':
+return true;
+}
+break;
+case 'U':
+switch (down) {
+case 'A':
+return true;
+case 'G':
+return true;
+}
+break;
+}
+return false;
+}, "~S,~S");
+c$.completeConsensus = Clazz.defineMethod (c$, "completeConsensus",
+function (consensus, hconsensus, iStart, width, ignoreGapsInConsensusCalculation, includeAllConsSymbols, nseq) {
+var tval;
+var value;
+if (consensus == null || consensus.annotations == null || consensus.annotations.length < width) {
+return;
+}var fmtstr = "%3.1f";
+var precision = 2;
+while (nseq > 100) {
+precision++;
+nseq /= 10;
+}
+if (precision > 2) {
+fmtstr = "%" + (2 + precision) + "." + precision + "f";
+}var fmt = new jalview.util.Format (fmtstr);
+for (var i = iStart; i < width; i++) {
+var hci;
+if (i >= hconsensus.length || ((hci = hconsensus[i]) == null)) {
+consensus.annotations[i] = null;
+continue;
+}value = 0;
+var fv;
+if (ignoreGapsInConsensusCalculation) {
+fv = hci.get ("N");
+} else {
+fv = hci.get ("G");
+}if (fv == null) {
+consensus.annotations[i] = null;
+continue;
+}value = fv.floatValue ();
+var maxRes = hci.get ("R").toString ();
+var mouseOver = hci.get ("R") + " ";
+if (maxRes.length > 1) {
+mouseOver = "[" + maxRes + "] ";
+maxRes = "+";
+}var profile = hci.get ("P");
+var pairs = hci.get ("B");
+if (pairs != null && includeAllConsSymbols) {
+mouseOver = "";
+var ca = javajs.util.AU.newInt2 (625);
+var vl = Clazz.newFloatArray (625, 0);
+var x = 0;
+for (var c = 65; c < 90; c++) {
+for (var d = 65; d < 90; d++) {
+ca[x] = Clazz.newIntArray (-1, [c, d]);
+vl[x] = pairs[c][d];
+x++;
+}
+}
+jalview.util.QuickSort.sortFloatObject (vl, ca);
+var p = 0;
+var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
+for (var c = 624; c > 0; c--) {
+if (vl[c] > 0) {
+tval = (vl[c] * 100 / divisor);
+mouseOver += ((p == 0) ? "" : "; ") + String.fromCharCode (ca[c][0]) + String.fromCharCode (ca[c][1]) + " " + fmt.formDouble (tval) + "%";
+p++;
+}}
+} else {
+mouseOver += (fmt.formDouble (value) + "%");
+}consensus.annotations[i] = new jalview.datamodel.Annotation (maxRes, mouseOver, ' ', value);
+}
+}, "jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~B,~B,~N");
+c$.extractProfile = Clazz.defineMethod (c$, "extractProfile",
+function (hconsensus, ignoreGapsInConsensusCalculation) {
+var rtnval = Clazz.newIntArray (74, 0);
+var profile = hconsensus.get ("P");
+var pairs = hconsensus.get ("B");
+if (profile == null) {
+return null;
+}var ca = javajs.util.AU.newInt2 (625);
+var vl = Clazz.newFloatArray (625, 0);
+var x = 0;
+for (var c = 65; c < 90; c++) {
+for (var d = 65; d < 90; d++) {
+ca[x] = Clazz.newIntArray (-1, [c, d]);
+vl[x] = pairs[c][d];
+x++;
+}
+}
+jalview.util.QuickSort.sortFloatObject (vl, ca);
+var valuesCount = 0;
+rtnval[1] = 0;
+var offset = 2;
+var divisor = profile[1][ignoreGapsInConsensusCalculation ? 1 : 0];
+for (var c = 624; c > 0; c--) {
+if (vl[c] > 0) {
+rtnval[offset++] = ca[c][0];
+rtnval[offset++] = ca[c][1];
+rtnval[offset] = Clazz.floatToInt (vl[c] * 100 / divisor);
+rtnval[1] += rtnval[offset++];
+valuesCount++;
+}}
+rtnval[0] = valuesCount;
+var result = Clazz.newIntArray (rtnval.length + 1, 0);
+result[0] = 1;
+System.arraycopy (rtnval, 0, result, 1, rtnval.length);
+return result;
+}, "java.util.Hashtable,~B");
+Clazz.defineStatics (c$,
+"STRUCTURE_PROFILE_LENGTH", 74,
+"MAXCOUNT", "C",
+"MAXRESIDUE", "R",
+"PID_GAPS", "G",
+"PID_NOGAPS", "N",
+"PROFILE", "P",
+"PAIRPROFILE", "B");
+});
diff --git a/bin/jalview/analysis/WUSSParseException.js b/bin/jalview/analysis/WUSSParseException.js
index 535f6ac..32861ff 100644
--- a/bin/jalview/analysis/WUSSParseException.js
+++ b/bin/jalview/analysis/WUSSParseException.js
@@ -1,20 +1,20 @@
-Clazz.declarePackage ("jalview.analysis");
-Clazz.load (["java.lang.Exception"], "jalview.analysis.WUSSParseException", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.problemPos = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis, "WUSSParseException", Exception);
-Clazz.makeConstructor (c$,
-function (problemPos) {
-this.construct ("Invalid WUSS Notation", problemPos);
-}, "~N");
-Clazz.makeConstructor (c$,
-function (message, problemPos) {
-Clazz.superConstructor (this, jalview.analysis.WUSSParseException, [message + " at or near position " + problemPos]);
-this.problemPos = problemPos;
-}, "~S,~N");
-Clazz.defineMethod (c$, "getProblemPos",
-function () {
-return this.problemPos;
-});
-});
+Clazz.declarePackage ("jalview.analysis");
+Clazz.load (["java.lang.Exception"], "jalview.analysis.WUSSParseException", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.problemPos = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis, "WUSSParseException", Exception);
+Clazz.makeConstructor (c$,
+function (problemPos) {
+this.construct ("Invalid WUSS Notation", problemPos);
+}, "~N");
+Clazz.makeConstructor (c$,
+function (message, problemPos) {
+Clazz.superConstructor (this, jalview.analysis.WUSSParseException, [message + " at or near position " + problemPos]);
+this.problemPos = problemPos;
+}, "~S,~N");
+Clazz.defineMethod (c$, "getProblemPos",
+function () {
+return this.problemPos;
+});
+});
diff --git a/bin/jalview/analysis/package.js b/bin/jalview/analysis/package.js
index 45e0428..a23ac21 100644
--- a/bin/jalview/analysis/package.js
+++ b/bin/jalview/analysis/package.js
@@ -1,5 +1,5 @@
-var path = ClazzLoader.getClasspathFor ("jalview.analysis.package");
-path = path.substring (0, path.lastIndexOf ("package.js"));
-ClazzLoader.jarClasspath (path + "NJTree.js", [
-"jalview.analysis.Cluster",
-"$.NJTree"]);
+var path = ClazzLoader.getClasspathFor ("jalview.analysis.package");
+path = path.substring (0, path.lastIndexOf ("package.js"));
+ClazzLoader.jarClasspath (path + "NJTree.js", [
+"jalview.analysis.Cluster",
+"$.NJTree"]);
diff --git a/bin/jalview/analysis/scoremodels/FeatureScoreModel.js b/bin/jalview/analysis/scoremodels/FeatureScoreModel.js
index 3e8e57d..7e483bd 100644
--- a/bin/jalview/analysis/scoremodels/FeatureScoreModel.js
+++ b/bin/jalview/analysis/scoremodels/FeatureScoreModel.js
@@ -1,86 +1,86 @@
-Clazz.declarePackage ("jalview.analysis.scoremodels");
-Clazz.load (["jalview.api.analysis.ScoreModelI", "$.ViewBasedAnalysisI"], "jalview.analysis.scoremodels.FeatureScoreModel", ["jalview.util.Comparison", "java.util.ArrayList", "$.Arrays", "$.Hashtable"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fr = null;
-Clazz.instantialize (this, arguments);
-}, jalview.analysis.scoremodels, "FeatureScoreModel", null, [jalview.api.analysis.ScoreModelI, jalview.api.analysis.ViewBasedAnalysisI]);
-Clazz.overrideMethod (c$, "configureFromAlignmentView",
-function (view) {
-this.fr = view.cloneFeatureRenderer ();
-return true;
-}, "jalview.api.AlignmentViewPanel");
-Clazz.overrideMethod (c$, "findDistances",
-function (seqData) {
-var nofeats = 0;
-var dft = java.util.Arrays.asList (this.fr.getDisplayedFeatureTypes ());
-if (dft != null) {
-nofeats = dft.size ();
-}var sequenceString = seqData.getVisibleAlignment (jalview.util.Comparison.GapChars.charAt (0)).getSequencesArray ();
-var noseqs = sequenceString.length;
-var cpwidth = seqData.getWidth ();
-var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
-if (nofeats == 0) {
-for (var d, $d = 0, $$d = distance; $d < $$d.length && ((d = $$d[$d]) || true); $d++) {
-for (var i = 0; i < d.length; d[i++] = 0) {
-;}
-}
-return distance;
-}var max = 0;
-for (var cpos = 0; cpos < cpwidth; cpos++) {
-var sfap = new java.util.ArrayList ();
-for (var i = 0; i < noseqs; i++) {
-var types = new java.util.Hashtable ();
-var sfs = this.fr.findFeaturesAtRes (sequenceString[i], sequenceString[i].findPosition (cpos));
-for (var sf, $sf = sfs.iterator (); $sf.hasNext () && ((sf = $sf.next ()) || true);) {
-types.put (sf.getType (), sf);
-}
-sfap.add (types);
-}
-for (var i = 0; i < (noseqs - 1); i++) {
-if (cpos == 0) {
-distance[i][i] = 0;
-}for (var j = i + 1; j < noseqs; j++) {
-var sfcommon = 0;
-var fi = sfap.get (i);
-var fk;
-var fj = sfap.get (j);
-if (fi.size () > fj.size ()) {
-fk = fj;
-} else {
-fk = fi;
-fi = fj;
-}for (var k, $k = fi.keySet ().iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {
-var sfj = fk.get (k);
-if (sfj != null) {
-sfcommon++;
-}}
-distance[i][j] += (fi.size () + fk.size () - 2 * sfcommon);
-distance[j][i] += distance[i][j];
-}
-}
-}
-for (var i = 0; i < noseqs; i++) {
-for (var j = i + 1; j < noseqs; j++) {
-distance[i][j] /= cpwidth;
-distance[j][i] = distance[i][j];
-}
-}
-return distance;
-}, "jalview.datamodel.AlignmentView");
-Clazz.overrideMethod (c$, "getName",
-function () {
-return "Sequence Feature Similarity";
-});
-Clazz.overrideMethod (c$, "isDNA",
-function () {
-return true;
-});
-Clazz.overrideMethod (c$, "isProtein",
-function () {
-return true;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "Score between sequences based on hamming distance between binary vectors marking features displayed at each column";
-});
-});
+Clazz.declarePackage ("jalview.analysis.scoremodels");
+Clazz.load (["jalview.api.analysis.ScoreModelI", "$.ViewBasedAnalysisI"], "jalview.analysis.scoremodels.FeatureScoreModel", ["jalview.util.Comparison", "java.util.ArrayList", "$.Arrays", "$.Hashtable"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fr = null;
+Clazz.instantialize (this, arguments);
+}, jalview.analysis.scoremodels, "FeatureScoreModel", null, [jalview.api.analysis.ScoreModelI, jalview.api.analysis.ViewBasedAnalysisI]);
+Clazz.overrideMethod (c$, "configureFromAlignmentView",
+function (view) {
+this.fr = view.cloneFeatureRenderer ();
+return true;
+}, "jalview.api.AlignmentViewPanel");
+Clazz.overrideMethod (c$, "findDistances",
+function (seqData) {
+var nofeats = 0;
+var dft = java.util.Arrays.asList (this.fr.getDisplayedFeatureTypes ());
+if (dft != null) {
+nofeats = dft.size ();
+}var sequenceString = seqData.getVisibleAlignment (jalview.util.Comparison.GapChars.charAt (0)).getSequencesArray ();
+var noseqs = sequenceString.length;
+var cpwidth = seqData.getWidth ();
+var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
+if (nofeats == 0) {
+for (var d, $d = 0, $$d = distance; $d < $$d.length && ((d = $$d[$d]) || true); $d++) {
+for (var i = 0; i < d.length; d[i++] = 0) {
+;}
+}
+return distance;
+}var max = 0;
+for (var cpos = 0; cpos < cpwidth; cpos++) {
+var sfap = new java.util.ArrayList ();
+for (var i = 0; i < noseqs; i++) {
+var types = new java.util.Hashtable ();
+var sfs = this.fr.findFeaturesAtRes (sequenceString[i], sequenceString[i].findPosition (cpos));
+for (var sf, $sf = sfs.iterator (); $sf.hasNext () && ((sf = $sf.next ()) || true);) {
+types.put (sf.getType (), sf);
+}
+sfap.add (types);
+}
+for (var i = 0; i < (noseqs - 1); i++) {
+if (cpos == 0) {
+distance[i][i] = 0;
+}for (var j = i + 1; j < noseqs; j++) {
+var sfcommon = 0;
+var fi = sfap.get (i);
+var fk;
+var fj = sfap.get (j);
+if (fi.size () > fj.size ()) {
+fk = fj;
+} else {
+fk = fi;
+fi = fj;
+}for (var k, $k = fi.keySet ().iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {
+var sfj = fk.get (k);
+if (sfj != null) {
+sfcommon++;
+}}
+distance[i][j] += (fi.size () + fk.size () - 2 * sfcommon);
+distance[j][i] += distance[i][j];
+}
+}
+}
+for (var i = 0; i < noseqs; i++) {
+for (var j = i + 1; j < noseqs; j++) {
+distance[i][j] /= cpwidth;
+distance[j][i] = distance[i][j];
+}
+}
+return distance;
+}, "jalview.datamodel.AlignmentView");
+Clazz.overrideMethod (c$, "getName",
+function () {
+return "Sequence Feature Similarity";
+});
+Clazz.overrideMethod (c$, "isDNA",
+function () {
+return true;
+});
+Clazz.overrideMethod (c$, "isProtein",
+function () {
+return true;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "Score between sequences based on hamming distance between binary vectors marking features displayed at each column";
+});
+});
diff --git a/bin/jalview/analysis/scoremodels/PIDScoreModel.js b/bin/jalview/analysis/scoremodels/PIDScoreModel.js
index 0266c33..09c86e5 100644
--- a/bin/jalview/analysis/scoremodels/PIDScoreModel.js
+++ b/bin/jalview/analysis/scoremodels/PIDScoreModel.js
@@ -1,32 +1,32 @@
-Clazz.declarePackage ("jalview.analysis.scoremodels");
-Clazz.load (["jalview.api.analysis.ScoreModelI"], "jalview.analysis.scoremodels.PIDScoreModel", ["jalview.util.Comparison"], function () {
-c$ = Clazz.declareType (jalview.analysis.scoremodels, "PIDScoreModel", null, jalview.api.analysis.ScoreModelI);
-Clazz.overrideMethod (c$, "findDistances",
-function (seqData) {
-var sequenceString = seqData.getSequenceStrings (jalview.util.Comparison.GapChars.charAt (0));
-var noseqs = sequenceString.length;
-var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
-for (var i = 0; i < (noseqs - 1); i++) {
-for (var j = i; j < noseqs; j++) {
-if (j == i) {
-distance[i][i] = 0;
-} else {
-distance[i][j] = 100 - jalview.util.Comparison.PID (sequenceString[i], sequenceString[j]);
-distance[j][i] = distance[i][j];
-}}
-}
-return distance;
-}, "jalview.datamodel.AlignmentView");
-Clazz.overrideMethod (c$, "getName",
-function () {
-return "PID";
-});
-Clazz.overrideMethod (c$, "isDNA",
-function () {
-return true;
-});
-Clazz.overrideMethod (c$, "isProtein",
-function () {
-return true;
-});
-});
+Clazz.declarePackage ("jalview.analysis.scoremodels");
+Clazz.load (["jalview.api.analysis.ScoreModelI"], "jalview.analysis.scoremodels.PIDScoreModel", ["jalview.util.Comparison"], function () {
+c$ = Clazz.declareType (jalview.analysis.scoremodels, "PIDScoreModel", null, jalview.api.analysis.ScoreModelI);
+Clazz.overrideMethod (c$, "findDistances",
+function (seqData) {
+var sequenceString = seqData.getSequenceStrings (jalview.util.Comparison.GapChars.charAt (0));
+var noseqs = sequenceString.length;
+var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
+for (var i = 0; i < (noseqs - 1); i++) {
+for (var j = i; j < noseqs; j++) {
+if (j == i) {
+distance[i][i] = 0;
+} else {
+distance[i][j] = 100 - jalview.util.Comparison.PID (sequenceString[i], sequenceString[j]);
+distance[j][i] = distance[i][j];
+}}
+}
+return distance;
+}, "jalview.datamodel.AlignmentView");
+Clazz.overrideMethod (c$, "getName",
+function () {
+return "PID";
+});
+Clazz.overrideMethod (c$, "isDNA",
+function () {
+return true;
+});
+Clazz.overrideMethod (c$, "isProtein",
+function () {
+return true;
+});
+});
diff --git a/bin/jalview/analysis/scoremodels/PairwiseSeqScoreModel.js b/bin/jalview/analysis/scoremodels/PairwiseSeqScoreModel.js
index 6cfe67a..4c1456f 100644
--- a/bin/jalview/analysis/scoremodels/PairwiseSeqScoreModel.js
+++ b/bin/jalview/analysis/scoremodels/PairwiseSeqScoreModel.js
@@ -1,39 +1,39 @@
-Clazz.declarePackage ("jalview.analysis.scoremodels");
-Clazz.load (["jalview.api.analysis.ScoreModelI"], "jalview.analysis.scoremodels.PairwiseSeqScoreModel", ["jalview.util.Comparison"], function () {
-c$ = Clazz.declareType (jalview.analysis.scoremodels, "PairwiseSeqScoreModel", null, jalview.api.analysis.ScoreModelI);
-Clazz.overrideMethod (c$, "findDistances",
-function (seqData) {
-var sequenceString = seqData.getSequenceStrings (jalview.util.Comparison.GapChars.charAt (0));
-var noseqs = sequenceString.length;
-var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
-var maxscore = 0;
-var end = sequenceString[0].length;
-for (var i = 0; i < (noseqs - 1); i++) {
-for (var j = i; j < noseqs; j++) {
-var score = 0;
-for (var k = 0; k < end; k++) {
-try {
-score += this.getPairwiseScore (sequenceString[i].charAt (k), sequenceString[j].charAt (k));
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("err creating " + this.getName () + " tree");
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}
-distance[i][j] = score;
-if (score > maxscore) {
-maxscore = score;
-}}
-}
-for (var i = 0; i < (noseqs - 1); i++) {
-for (var j = i; j < noseqs; j++) {
-distance[i][j] = maxscore - distance[i][j];
-distance[j][i] = distance[i][j];
-}
-}
-return distance;
-}, "jalview.datamodel.AlignmentView");
-});
+Clazz.declarePackage ("jalview.analysis.scoremodels");
+Clazz.load (["jalview.api.analysis.ScoreModelI"], "jalview.analysis.scoremodels.PairwiseSeqScoreModel", ["jalview.util.Comparison"], function () {
+c$ = Clazz.declareType (jalview.analysis.scoremodels, "PairwiseSeqScoreModel", null, jalview.api.analysis.ScoreModelI);
+Clazz.overrideMethod (c$, "findDistances",
+function (seqData) {
+var sequenceString = seqData.getSequenceStrings (jalview.util.Comparison.GapChars.charAt (0));
+var noseqs = sequenceString.length;
+var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
+var maxscore = 0;
+var end = sequenceString[0].length;
+for (var i = 0; i < (noseqs - 1); i++) {
+for (var j = i; j < noseqs; j++) {
+var score = 0;
+for (var k = 0; k < end; k++) {
+try {
+score += this.getPairwiseScore (sequenceString[i].charAt (k), sequenceString[j].charAt (k));
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("err creating " + this.getName () + " tree");
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}
+distance[i][j] = score;
+if (score > maxscore) {
+maxscore = score;
+}}
+}
+for (var i = 0; i < (noseqs - 1); i++) {
+for (var j = i; j < noseqs; j++) {
+distance[i][j] = maxscore - distance[i][j];
+distance[j][i] = distance[i][j];
+}
+}
+return distance;
+}, "jalview.datamodel.AlignmentView");
+});
diff --git a/bin/jalview/analysis/scoremodels/SWScoreModel.js b/bin/jalview/analysis/scoremodels/SWScoreModel.js
index 06ef966..e2e0eef 100644
--- a/bin/jalview/analysis/scoremodels/SWScoreModel.js
+++ b/bin/jalview/analysis/scoremodels/SWScoreModel.js
@@ -1,45 +1,45 @@
-Clazz.declarePackage ("jalview.analysis.scoremodels");
-Clazz.load (["jalview.api.analysis.ScoreModelI"], "jalview.analysis.scoremodels.SWScoreModel", ["jalview.analysis.AlignSeq", "jalview.util.Comparison"], function () {
-c$ = Clazz.declareType (jalview.analysis.scoremodels, "SWScoreModel", null, jalview.api.analysis.ScoreModelI);
-Clazz.overrideMethod (c$, "findDistances",
-function (seqData) {
-var sequenceString = seqData.getVisibleAlignment (jalview.util.Comparison.GapChars.charAt (0)).getSequencesArray ();
-var noseqs = sequenceString.length;
-var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
-var max = -1;
-for (var i = 0; i < (noseqs - 1); i++) {
-for (var j = i; j < noseqs; j++) {
-var as = new jalview.analysis.AlignSeq (sequenceString[i], sequenceString[j], seqData.isNa () ? "dna" : "pep");
-as.calcScoreMatrix ();
-as.traceAlignment ();
-as.printAlignment (System.out);
-distance[i][j] = as.maxscore;
-if (max < distance[i][j]) {
-max = distance[i][j];
-}}
-}
-for (var i = 0; i < (noseqs - 1); i++) {
-for (var j = i; j < noseqs; j++) {
-distance[i][j] = max - distance[i][j];
-distance[j][i] = distance[i][j];
-}
-}
-return distance;
-}, "jalview.datamodel.AlignmentView");
-Clazz.overrideMethod (c$, "getName",
-function () {
-return "Smith Waterman Score";
-});
-Clazz.overrideMethod (c$, "isDNA",
-function () {
-return true;
-});
-Clazz.overrideMethod (c$, "isProtein",
-function () {
-return true;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "Score between two sequences aligned with Smith Waterman with default Peptide/Nucleotide matrix";
-});
-});
+Clazz.declarePackage ("jalview.analysis.scoremodels");
+Clazz.load (["jalview.api.analysis.ScoreModelI"], "jalview.analysis.scoremodels.SWScoreModel", ["jalview.analysis.AlignSeq", "jalview.util.Comparison"], function () {
+c$ = Clazz.declareType (jalview.analysis.scoremodels, "SWScoreModel", null, jalview.api.analysis.ScoreModelI);
+Clazz.overrideMethod (c$, "findDistances",
+function (seqData) {
+var sequenceString = seqData.getVisibleAlignment (jalview.util.Comparison.GapChars.charAt (0)).getSequencesArray ();
+var noseqs = sequenceString.length;
+var distance = Clazz.newFloatArray (noseqs, noseqs, 0);
+var max = -1;
+for (var i = 0; i < (noseqs - 1); i++) {
+for (var j = i; j < noseqs; j++) {
+var as = new jalview.analysis.AlignSeq (sequenceString[i], sequenceString[j], seqData.isNa () ? "dna" : "pep");
+as.calcScoreMatrix ();
+as.traceAlignment ();
+as.printAlignment (System.out);
+distance[i][j] = as.maxscore;
+if (max < distance[i][j]) {
+max = distance[i][j];
+}}
+}
+for (var i = 0; i < (noseqs - 1); i++) {
+for (var j = i; j < noseqs; j++) {
+distance[i][j] = max - distance[i][j];
+distance[j][i] = distance[i][j];
+}
+}
+return distance;
+}, "jalview.datamodel.AlignmentView");
+Clazz.overrideMethod (c$, "getName",
+function () {
+return "Smith Waterman Score";
+});
+Clazz.overrideMethod (c$, "isDNA",
+function () {
+return true;
+});
+Clazz.overrideMethod (c$, "isProtein",
+function () {
+return true;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "Score between two sequences aligned with Smith Waterman with default Peptide/Nucleotide matrix";
+});
+});
diff --git a/bin/jalview/api/AlignCalcManagerI.js b/bin/jalview/api/AlignCalcManagerI.js
index 47dd8f5..231cd97 100644
--- a/bin/jalview/api/AlignCalcManagerI.js
+++ b/bin/jalview/api/AlignCalcManagerI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "AlignCalcManagerI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "AlignCalcManagerI");
diff --git a/bin/jalview/api/AlignCalcWorkerI.js b/bin/jalview/api/AlignCalcWorkerI.js
index cf7fe41..77fffcc 100644
--- a/bin/jalview/api/AlignCalcWorkerI.js
+++ b/bin/jalview/api/AlignCalcWorkerI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "AlignCalcWorkerI", Runnable);
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "AlignCalcWorkerI", Runnable);
diff --git a/bin/jalview/api/AlignExportSettingI.js b/bin/jalview/api/AlignExportSettingI.js
index d26a509..512e454 100644
--- a/bin/jalview/api/AlignExportSettingI.js
+++ b/bin/jalview/api/AlignExportSettingI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "AlignExportSettingI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "AlignExportSettingI");
diff --git a/bin/jalview/api/AlignViewControllerGuiI.js b/bin/jalview/api/AlignViewControllerGuiI.js
index b132c71..8dd9d75 100644
--- a/bin/jalview/api/AlignViewControllerGuiI.js
+++ b/bin/jalview/api/AlignViewControllerGuiI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "AlignViewControllerGuiI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "AlignViewControllerGuiI");
diff --git a/bin/jalview/api/AlignViewControllerI.js b/bin/jalview/api/AlignViewControllerI.js
index 9851769..4dbfb00 100644
--- a/bin/jalview/api/AlignViewControllerI.js
+++ b/bin/jalview/api/AlignViewControllerI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "AlignViewControllerI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "AlignViewControllerI");
diff --git a/bin/jalview/api/AlignViewportI.js b/bin/jalview/api/AlignViewportI.js
index b8de508..c65c3f7 100644
--- a/bin/jalview/api/AlignViewportI.js
+++ b/bin/jalview/api/AlignViewportI.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.load (["jalview.api.ViewStyleI"], "jalview.api.AlignViewportI", null, function () {
-Clazz.declareInterface (jalview.api, "AlignViewportI", jalview.api.ViewStyleI);
-});
+Clazz.declarePackage ("jalview.api");
+Clazz.load (["jalview.api.ViewStyleI"], "jalview.api.AlignViewportI", null, function () {
+Clazz.declareInterface (jalview.api, "AlignViewportI", jalview.api.ViewStyleI);
+});
diff --git a/bin/jalview/api/AlignmentViewPanel.js b/bin/jalview/api/AlignmentViewPanel.js
index 1a1598e..5e0dc22 100644
--- a/bin/jalview/api/AlignmentViewPanel.js
+++ b/bin/jalview/api/AlignmentViewPanel.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.load (["jalview.api.OOMHandlerI"], "jalview.api.AlignmentViewPanel", null, function () {
-Clazz.declareInterface (jalview.api, "AlignmentViewPanel", jalview.api.OOMHandlerI);
-});
+Clazz.declarePackage ("jalview.api");
+Clazz.load (["jalview.api.OOMHandlerI"], "jalview.api.AlignmentViewPanel", null, function () {
+Clazz.declareInterface (jalview.api, "AlignmentViewPanel", jalview.api.OOMHandlerI);
+});
diff --git a/bin/jalview/api/ComplexAlignFile.js b/bin/jalview/api/ComplexAlignFile.js
index 7e6e24d..c15e9ab 100644
--- a/bin/jalview/api/ComplexAlignFile.js
+++ b/bin/jalview/api/ComplexAlignFile.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "ComplexAlignFile");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "ComplexAlignFile");
diff --git a/bin/jalview/api/FeatureRenderer.js b/bin/jalview/api/FeatureRenderer.js
index cce7fb2..e845bcd 100644
--- a/bin/jalview/api/FeatureRenderer.js
+++ b/bin/jalview/api/FeatureRenderer.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "FeatureRenderer");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "FeatureRenderer");
diff --git a/bin/jalview/api/FeatureSettingsControllerI.js b/bin/jalview/api/FeatureSettingsControllerI.js
index d7e477c..6785f01 100644
--- a/bin/jalview/api/FeatureSettingsControllerI.js
+++ b/bin/jalview/api/FeatureSettingsControllerI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "FeatureSettingsControllerI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "FeatureSettingsControllerI");
diff --git a/bin/jalview/api/FeatureSettingsModelI.js b/bin/jalview/api/FeatureSettingsModelI.js
index a01cd0e..0fded11 100644
--- a/bin/jalview/api/FeatureSettingsModelI.js
+++ b/bin/jalview/api/FeatureSettingsModelI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "FeatureSettingsModelI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "FeatureSettingsModelI");
diff --git a/bin/jalview/api/FeaturesDisplayedI.js b/bin/jalview/api/FeaturesDisplayedI.js
index c796711..331bf21 100644
--- a/bin/jalview/api/FeaturesDisplayedI.js
+++ b/bin/jalview/api/FeaturesDisplayedI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "FeaturesDisplayedI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "FeaturesDisplayedI");
diff --git a/bin/jalview/api/OOMHandlerI.js b/bin/jalview/api/OOMHandlerI.js
index 48ab467..1f61be8 100644
--- a/bin/jalview/api/OOMHandlerI.js
+++ b/bin/jalview/api/OOMHandlerI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "OOMHandlerI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "OOMHandlerI");
diff --git a/bin/jalview/api/RotatableCanvasI.js b/bin/jalview/api/RotatableCanvasI.js
index ccaa5b8..e582e4c 100644
--- a/bin/jalview/api/RotatableCanvasI.js
+++ b/bin/jalview/api/RotatableCanvasI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "RotatableCanvasI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "RotatableCanvasI");
diff --git a/bin/jalview/api/SequenceRenderer.js b/bin/jalview/api/SequenceRenderer.js
index ce4be46..247757d 100644
--- a/bin/jalview/api/SequenceRenderer.js
+++ b/bin/jalview/api/SequenceRenderer.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "SequenceRenderer");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "SequenceRenderer");
diff --git a/bin/jalview/api/SequenceStructureBinding.js b/bin/jalview/api/SequenceStructureBinding.js
index f1a45f3..4eee259 100644
--- a/bin/jalview/api/SequenceStructureBinding.js
+++ b/bin/jalview/api/SequenceStructureBinding.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "SequenceStructureBinding");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "SequenceStructureBinding");
diff --git a/bin/jalview/api/SplitContainerI.js b/bin/jalview/api/SplitContainerI.js
index 03965d8..eb0b347 100644
--- a/bin/jalview/api/SplitContainerI.js
+++ b/bin/jalview/api/SplitContainerI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "SplitContainerI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "SplitContainerI");
diff --git a/bin/jalview/api/StructureSelectionManagerProvider.js b/bin/jalview/api/StructureSelectionManagerProvider.js
index a051fb2..e65f1a5 100644
--- a/bin/jalview/api/StructureSelectionManagerProvider.js
+++ b/bin/jalview/api/StructureSelectionManagerProvider.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "StructureSelectionManagerProvider");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "StructureSelectionManagerProvider");
diff --git a/bin/jalview/api/ViewStyleI.js b/bin/jalview/api/ViewStyleI.js
index 9838149..ea7a773 100644
--- a/bin/jalview/api/ViewStyleI.js
+++ b/bin/jalview/api/ViewStyleI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api");
-Clazz.declareInterface (jalview.api, "ViewStyleI");
+Clazz.declarePackage ("jalview.api");
+Clazz.declareInterface (jalview.api, "ViewStyleI");
diff --git a/bin/jalview/api/analysis/ScoreModelI.js b/bin/jalview/api/analysis/ScoreModelI.js
index 56b0281..4b5c4fb 100644
--- a/bin/jalview/api/analysis/ScoreModelI.js
+++ b/bin/jalview/api/analysis/ScoreModelI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api.analysis");
-Clazz.declareInterface (jalview.api.analysis, "ScoreModelI");
+Clazz.declarePackage ("jalview.api.analysis");
+Clazz.declareInterface (jalview.api.analysis, "ScoreModelI");
diff --git a/bin/jalview/api/analysis/ViewBasedAnalysisI.js b/bin/jalview/api/analysis/ViewBasedAnalysisI.js
index bc5e92d..cbb8c8d 100644
--- a/bin/jalview/api/analysis/ViewBasedAnalysisI.js
+++ b/bin/jalview/api/analysis/ViewBasedAnalysisI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api.analysis");
-Clazz.declareInterface (jalview.api.analysis, "ViewBasedAnalysisI");
+Clazz.declarePackage ("jalview.api.analysis");
+Clazz.declareInterface (jalview.api.analysis, "ViewBasedAnalysisI");
diff --git a/bin/jalview/api/structures/JalviewStructureDisplayI.js b/bin/jalview/api/structures/JalviewStructureDisplayI.js
index 2512221..643feb8 100644
--- a/bin/jalview/api/structures/JalviewStructureDisplayI.js
+++ b/bin/jalview/api/structures/JalviewStructureDisplayI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.api.structures");
-Clazz.declareInterface (jalview.api.structures, "JalviewStructureDisplayI");
+Clazz.declarePackage ("jalview.api.structures");
+Clazz.declareInterface (jalview.api.structures, "JalviewStructureDisplayI");
diff --git a/bin/jalview/appletgui/APopupMenu.class b/bin/jalview/appletgui/APopupMenu.class
index a328b2c..0400004 100644
Binary files a/bin/jalview/appletgui/APopupMenu.class and b/bin/jalview/appletgui/APopupMenu.class differ
diff --git a/bin/jalview/appletgui/APopupMenu.js b/bin/jalview/appletgui/APopupMenu.js
index eac223b..1e89852 100644
--- a/bin/jalview/appletgui/APopupMenu.js
+++ b/bin/jalview/appletgui/APopupMenu.js
@@ -1,797 +1,797 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.PopupMenu", "java.awt.event.ActionListener", "$.ItemListener", "awt2swing.CheckboxMenuItem", "$.Menu", "$.MenuItem", "jalview.util.MessageManager"], "jalview.appletgui.APopupMenu", ["awt2swing.Frame", "jalview.analysis.AAFrequency", "$.AlignmentAnnotationUtils", "$.AlignmentUtils", "$.Conservation", "jalview.appletgui.AppletJmol", "$.CutAndPasteTransfer", "$.EditNameDialog", "$.SliderPanel", "$.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.commands.ChangeCaseCommand", "$.EditCommand", "jalview.datamodel.SequenceFeature", "jalview.io.AppletFormatAdapter", "$.SequenceAnnotationReport", "jalview.schemes.Blosum62ColourScheme", "$.BuriedColourScheme", "$.ClustalxColourScheme", "$.HelixColourScheme", "$.HydrophobicColourScheme", "$.NucleotideColourScheme", "$.PIDColourScheme", "$.ResidueProperties", "$.StrandColourScheme", "$.TaylorColourScheme", "$.TurnColourScheme", "$.ZappoColourScheme", "jalview.util.DBRefUtils", "$.UrlLink", "java.lang.StringBuffer", "$.StringBuilder", "java.util.Arrays", "$.Collections", "$.LinkedHashMap", "$.TreeMap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.groupMenu = null;
-this.editGroupName = null;
-this.clustalColour = null;
-this.zappoColour = null;
-this.taylorColour = null;
-this.hydrophobicityColour = null;
-this.helixColour = null;
-this.strandColour = null;
-this.turnColour = null;
-this.buriedColour = null;
-this.abovePIDColour = null;
-this.userDefinedColour = null;
-this.PIDColour = null;
-this.BLOSUM62Colour = null;
-this.noColourmenuItem = null;
-this.conservationMenuItem = null;
-this.ap = null;
-this.unGroupMenuItem = null;
-this.createGroupMenuItem = null;
-this.nucleotideMenuItem = null;
-this.colourMenu = null;
-this.showBoxes = null;
-this.showText = null;
-this.showColourText = null;
-this.displayNonconserved = null;
-this.seqShowAnnotationsMenu = null;
-this.seqHideAnnotationsMenu = null;
-this.seqAddReferenceAnnotations = null;
-this.groupShowAnnotationsMenu = null;
-this.groupHideAnnotationsMenu = null;
-this.groupAddReferenceAnnotations = null;
-this.editMenu = null;
-this.copy = null;
-this.cut = null;
-this.toUpper = null;
-this.toLower = null;
-this.toggleCase = null;
-this.outputmenu = null;
-this.seqMenu = null;
-this.pdb = null;
-this.hideSeqs = null;
-this.repGroup = null;
-this.sequenceName = null;
-this.sequenceFeature = null;
-this.editSequence = null;
-this.sequenceDetails = null;
-this.selSeqDetails = null;
-this.makeReferenceSeq = null;
-this.seq = null;
-this.revealAll = null;
-this.revealSeq = null;
-this.revealSeq_index = -1;
-this.menu1 = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "APopupMenu", awt2swing.PopupMenu, [java.awt.event.ActionListener, java.awt.event.ItemListener]);
-Clazz.prepareFields (c$, function () {
-this.groupMenu = new awt2swing.Menu ();
-this.editGroupName = new awt2swing.MenuItem ();
-this.clustalColour = new awt2swing.MenuItem ();
-this.zappoColour = new awt2swing.MenuItem ();
-this.taylorColour = new awt2swing.MenuItem ();
-this.hydrophobicityColour = new awt2swing.MenuItem ();
-this.helixColour = new awt2swing.MenuItem ();
-this.strandColour = new awt2swing.MenuItem ();
-this.turnColour = new awt2swing.MenuItem ();
-this.buriedColour = new awt2swing.MenuItem ();
-this.abovePIDColour = new awt2swing.CheckboxMenuItem ();
-this.userDefinedColour = new awt2swing.MenuItem ();
-this.PIDColour = new awt2swing.MenuItem ();
-this.BLOSUM62Colour = new awt2swing.MenuItem ();
-this.noColourmenuItem = new awt2swing.MenuItem ();
-this.conservationMenuItem = new awt2swing.CheckboxMenuItem ();
-this.unGroupMenuItem = new awt2swing.MenuItem ();
-this.createGroupMenuItem = new awt2swing.MenuItem ();
-this.nucleotideMenuItem = new awt2swing.MenuItem ();
-this.colourMenu = new awt2swing.Menu ();
-this.showBoxes = new awt2swing.CheckboxMenuItem ();
-this.showText = new awt2swing.CheckboxMenuItem ();
-this.showColourText = new awt2swing.CheckboxMenuItem ();
-this.displayNonconserved = new awt2swing.CheckboxMenuItem ();
-this.seqShowAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.show_annotations"));
-this.seqHideAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.hide_annotations"));
-this.seqAddReferenceAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.add_reference_annotations"));
-this.groupShowAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.show_annotations"));
-this.groupHideAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.hide_annotations"));
-this.groupAddReferenceAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.add_reference_annotations"));
-this.editMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.edit"));
-this.copy = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.copy"));
-this.cut = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.cut"));
-this.toUpper = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.to_upper_case"));
-this.toLower = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.to_lower_case"));
-this.toggleCase = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.toggle_case"));
-this.outputmenu = new awt2swing.Menu ();
-this.seqMenu = new awt2swing.Menu ();
-this.pdb = new awt2swing.MenuItem ();
-this.hideSeqs = new awt2swing.MenuItem ();
-this.repGroup = new awt2swing.MenuItem ();
-this.sequenceName = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.edit_name_description"));
-this.sequenceFeature = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.create_sequence_feature"));
-this.editSequence = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.edit_sequence"));
-this.sequenceDetails = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sequence_details") + "...");
-this.selSeqDetails = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sequence_details") + "...");
-this.makeReferenceSeq = new awt2swing.MenuItem ();
-this.revealAll = new awt2swing.MenuItem ();
-this.revealSeq = new awt2swing.MenuItem ();
-this.menu1 = new awt2swing.Menu ();
-});
-Clazz.makeConstructor (c$,
-function (apanel, seq, links) {
-Clazz.superConstructor (this, jalview.appletgui.APopupMenu, []);
-this.ap = apanel;
-this.seq = seq;
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-for (var i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++) {
-var item = new awt2swing.MenuItem (jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
-item.addActionListener (this);
-this.outputmenu.add (item);
-}
-this.buildAnnotationSubmenus ();
-var sg = this.ap.av.getSelectionGroup ();
-if (sg != null && sg.getSize () > 0) {
-this.editGroupName.setLabel (jalview.util.MessageManager.formatMessage ("label.name_param", Clazz.newArray (-1, [sg.getName ()])));
-this.showText.setState (sg.getDisplayText ());
-this.showColourText.setState (sg.getColourText ());
-this.showBoxes.setState (sg.getDisplayBoxes ());
-this.displayNonconserved.setState (sg.getShowNonconserved ());
-if (!this.ap.av.getAlignment ().getGroups ().contains (sg)) {
-this.menu1.setLabel (jalview.util.MessageManager.getString ("action.edit_new_group"));
-this.groupMenu.remove (this.unGroupMenuItem);
-} else {
-this.menu1.setLabel (jalview.util.MessageManager.getString ("action.edit_group"));
-this.groupMenu.remove (this.createGroupMenuItem);
-}} else {
-this.remove (this.hideSeqs);
-this.remove (this.groupMenu);
-}if (links != null && links.size () > 0) {
-var linkMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.link"));
-for (var i = 0; i < links.size (); i++) {
-var link = links.elementAt (i);
-var urlLink = new jalview.util.UrlLink (link);
-if (!urlLink.isValid ()) {
-System.err.println (urlLink.getInvalidMessage ());
-continue;
-}var target = urlLink.getTarget ();
-var label = urlLink.getLabel ();
-if (seq != null && urlLink.isDynamic ()) {
-var dbr = jalview.util.DBRefUtils.selectRefs (seq.getDBRef (), Clazz.newArray (-1, [target]));
-var id = seq.getName ();
-var descr = seq.getDescription ();
-if (descr != null && descr.length < 1) {
-descr = null;
-}if (dbr != null) {
-for (var r = 0; r < dbr.length; r++) {
-if (id != null && dbr[r].getAccessionId ().equals (id)) {
-id = null;
-}var urls = urlLink.makeUrls (dbr[r].getAccessionId (), true);
-if (urls != null) {
-for (var u = 0; u < urls.length; u += 2) {
-this.addshowLink (linkMenu, label + "|" + urls[u], urls[u + 1]);
-}
-}}
-}if (id != null) {
-var urls = urlLink.makeUrls (id, true);
-if (urls != null) {
-for (var u = 0; u < urls.length; u += 2) {
-this.addshowLink (linkMenu, label, urls[u + 1]);
-}
-}}if (descr != null && urlLink.getRegexReplace () != null) {
-var urls = urlLink.makeUrls (descr, true);
-if (urls != null) {
-for (var u = 0; u < urls.length; u += 2) {
-this.addshowLink (linkMenu, label, urls[u + 1]);
-}
-}}} else {
-this.addshowLink (linkMenu, target, urlLink.getUrl_prefix ());
-}}
-if (linkMenu.getItemCount () > 0) {
-if (seq != null) {
-this.seqMenu.add (linkMenu);
-} else {
-this.add (linkMenu);
-}}}if (seq != null) {
-this.seqMenu.setLabel (seq.getName ());
-if (seq === this.ap.av.getAlignment ().getSeqrep ()) {
-this.makeReferenceSeq.setLabel (jalview.util.MessageManager.getString ("action.unmark_as_reference"));
-} else {
-this.makeReferenceSeq.setLabel (jalview.util.MessageManager.getString ("action.set_as_reference"));
-}this.repGroup.setLabel (jalview.util.MessageManager.formatMessage ("label.represent_group_with", Clazz.newArray (-1, [seq.getName ()])));
-} else {
-this.remove (this.seqMenu);
-}if (!this.ap.av.hasHiddenRows ()) {
-this.remove (this.revealAll);
-this.remove (this.revealSeq);
-} else {
-var index = this.ap.av.getAlignment ().findIndex (seq);
-if (this.ap.av.adjustForHiddenSeqs (index) - this.ap.av.adjustForHiddenSeqs (index - 1) > 1) {
-this.revealSeq_index = index;
-} else {
-this.remove (this.revealSeq);
-}}}, "jalview.appletgui.AlignmentPanel,jalview.datamodel.SequenceI,java.util.Vector");
-Clazz.defineMethod (c$, "buildAnnotationSubmenus",
-($fz = function () {
-var selectedSequence = (this.seq == null ? java.util.Collections.emptyList () : java.util.Arrays.asList ([this.seq]));
-this.buildAnnotationTypesMenus (this.seqShowAnnotationsMenu, this.seqHideAnnotationsMenu, selectedSequence);
-this.configureReferenceAnnotationsMenu (this.seqAddReferenceAnnotations, selectedSequence);
-var selectedGroup = (this.ap.av.getSelectionGroup () == null ? java.util.Collections.emptyList () : this.ap.av.getSelectionGroup ().getSequences ());
-this.buildAnnotationTypesMenus (this.groupShowAnnotationsMenu, this.groupHideAnnotationsMenu, selectedGroup);
-this.configureReferenceAnnotationsMenu (this.groupAddReferenceAnnotations, selectedGroup);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "configureReferenceAnnotationsMenu",
-($fz = function (menuItem, forSequences) {
-menuItem.setEnabled (false);
-var tipEntries = new java.util.TreeMap ();
-var candidates = new java.util.LinkedHashMap ();
-var al = this.ap.av.getAlignment ();
-jalview.analysis.AlignmentUtils.findAddableReferenceAnnotations (forSequences, tipEntries, candidates, al);
-if (!candidates.isEmpty ()) {
-var tooltip = new StringBuilder (64);
-tooltip.append (jalview.util.MessageManager.getString ("label.add_annotations_for"));
-menuItem.setEnabled (true);
-menuItem.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.APopupMenu$1") ? 0 : jalview.appletgui.APopupMenu.$APopupMenu$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.APopupMenu$1, this, Clazz.cloneFinals ("candidates", candidates))));
-}}, $fz.isPrivate = true, $fz), "awt2swing.MenuItem,java.util.List");
-Clazz.defineMethod (c$, "addReferenceAnnotations_actionPerformed",
-function (candidates) {
-var selectionGroup = this.ap.av.getSelectionGroup ();
-var alignment = this.ap.getAlignment ();
-jalview.analysis.AlignmentUtils.addReferenceAnnotations (candidates, alignment, selectionGroup);
-this.refresh ();
-}, "java.util.Map");
-Clazz.defineMethod (c$, "addshowLink",
-($fz = function (linkMenu, target, url) {
-this.addshowLink (linkMenu, target, target, url);
-}, $fz.isPrivate = true, $fz), "awt2swing.Menu,~S,~S");
-Clazz.defineMethod (c$, "addshowLink",
-($fz = function (linkMenu, target, label, url) {
-var item = new awt2swing.MenuItem (label);
-item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.APopupMenu$2") ? 0 : jalview.appletgui.APopupMenu.$APopupMenu$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.APopupMenu$2, this, Clazz.cloneFinals ("url", url, "target", target))));
-linkMenu.add (item);
-}, $fz.isPrivate = true, $fz), "awt2swing.Menu,~S,~S,~S");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-if (evt.getSource () === this.abovePIDColour) {
-this.abovePIDColour_itemStateChanged ();
-} else if (evt.getSource () === this.showColourText) {
-this.showColourText_itemStateChanged ();
-} else if (evt.getSource () === this.showText) {
-this.showText_itemStateChanged ();
-} else if (evt.getSource () === this.showBoxes) {
-this.showBoxes_itemStateChanged ();
-} else if (evt.getSource () === this.displayNonconserved) {
-this.showNonconserved_itemStateChanged ();
-}}, "java.awt.event.ItemEvent");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-var source = evt.getSource ();
-if (source === this.clustalColour) {
-this.clustalColour_actionPerformed ();
-} else if (source === this.zappoColour) {
-this.zappoColour_actionPerformed ();
-} else if (source === this.taylorColour) {
-this.taylorColour_actionPerformed ();
-} else if (source === this.hydrophobicityColour) {
-this.hydrophobicityColour_actionPerformed ();
-} else if (source === this.helixColour) {
-this.helixColour_actionPerformed ();
-} else if (source === this.strandColour) {
-this.strandColour_actionPerformed ();
-} else if (source === this.turnColour) {
-this.turnColour_actionPerformed ();
-} else if (source === this.buriedColour) {
-this.buriedColour_actionPerformed ();
-} else if (source === this.nucleotideMenuItem) {
-this.nucleotideMenuItem_actionPerformed ();
-} else if (source === this.userDefinedColour) {
-this.userDefinedColour_actionPerformed ();
-} else if (source === this.PIDColour) {
-this.PIDColour_actionPerformed ();
-} else if (source === this.BLOSUM62Colour) {
-this.BLOSUM62Colour_actionPerformed ();
-} else if (source === this.noColourmenuItem) {
-this.noColourmenuItem_actionPerformed ();
-} else if (source === this.conservationMenuItem) {
-this.conservationMenuItem_itemStateChanged ();
-} else if (source === this.unGroupMenuItem) {
-this.unGroupMenuItem_actionPerformed ();
-} else if (source === this.createGroupMenuItem) {
-this.createGroupMenuItem_actionPerformed ();
-} else if (source === this.sequenceName) {
-this.editName ();
-} else if (source === this.makeReferenceSeq) {
-this.makeReferenceSeq_actionPerformed ();
-} else if (source === this.sequenceDetails) {
-this.showSequenceDetails ();
-} else if (source === this.selSeqDetails) {
-this.showSequenceSelectionDetails ();
-} else if (source === this.pdb) {
-this.addPDB ();
-} else if (source === this.hideSeqs) {
-this.hideSequences (false);
-} else if (source === this.repGroup) {
-this.hideSequences (true);
-} else if (source === this.revealSeq) {
-this.ap.av.showSequence (this.revealSeq_index);
-} else if (source === this.revealAll) {
-this.ap.av.showAllHiddenSeqs ();
-} else if (source === this.editGroupName) {
-var dialog = new jalview.appletgui.EditNameDialog (this.getGroup ().getName (), this.getGroup ().getDescription (), " Group Name", "Group Description", this.ap.alignFrame, "Edit Group Name / Description", 500, 100, true);
-if (dialog.accept) {
-this.getGroup ().setName (dialog.getName ().$replace (' ', '_'));
-this.getGroup ().setDescription (dialog.getDescription ());
-}} else if (source === this.copy) {
-this.ap.alignFrame.copy_actionPerformed ();
-} else if (source === this.cut) {
-this.ap.alignFrame.cut_actionPerformed ();
-} else if (source === this.editSequence) {
-var sg = this.ap.av.getSelectionGroup ();
-if (sg != null) {
-if (this.seq == null) {
-this.seq = sg.getSequenceAt (0);
-}var dialog = new jalview.appletgui.EditNameDialog (this.seq.getSequenceAsString (sg.getStartRes (), sg.getEndRes () + 1), null, "Edit Sequence ", null, this.ap.alignFrame, "Edit Sequence", 500, 100, true);
-if (dialog.accept) {
-var editCommand = new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("label.edit_sequences"), jalview.commands.EditCommand.Action.REPLACE, dialog.getName ().$replace (' ', this.ap.av.getGapCharacter ()), sg.getSequencesAsArray (this.ap.av.getHiddenRepSequences ()), sg.getStartRes (), sg.getEndRes () + 1, this.ap.av.getAlignment ());
-this.ap.alignFrame.addHistoryItem (editCommand);
-this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
-}}} else if (source === this.toUpper || source === this.toLower || source === this.toggleCase) {
-var sg = this.ap.av.getSelectionGroup ();
-if (sg != null) {
-var startEnd = this.ap.av.getVisibleRegionBoundaries (sg.getStartRes (), sg.getEndRes () + 1);
-var description;
-var caseChange;
-if (source === this.toggleCase) {
-description = "Toggle Case";
-caseChange = jalview.commands.ChangeCaseCommand.TOGGLE_CASE;
-} else if (source === this.toUpper) {
-description = "To Upper Case";
-caseChange = jalview.commands.ChangeCaseCommand.TO_UPPER;
-} else {
-description = "To Lower Case";
-caseChange = jalview.commands.ChangeCaseCommand.TO_LOWER;
-}var caseCommand = new jalview.commands.ChangeCaseCommand (description, sg.getSequencesAsArray (this.ap.av.getHiddenRepSequences ()), startEnd, caseChange);
-this.ap.alignFrame.addHistoryItem (caseCommand);
-this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
-}} else if (source === this.sequenceFeature) {
-var sg = this.ap.av.getSelectionGroup ();
-if (sg == null) {
-return;
-}var rsize = 0;
-var gSize = sg.getSize ();
-var rseqs;
-var seqs = new Array (gSize);
-var tfeatures;
-var features = new Array (gSize);
-for (var i = 0; i < gSize; i++) {
-var start = sg.getSequenceAt (i).findPosition (sg.getStartRes ());
-var end = sg.findEndRes (sg.getSequenceAt (i));
-if (start <= end) {
-seqs[rsize] = sg.getSequenceAt (i);
-features[rsize] = new jalview.datamodel.SequenceFeature (null, null, null, start, end, "Jalview");
-rsize++;
-}}
-rseqs = new Array (rsize);
-tfeatures = new Array (rsize);
-System.arraycopy (seqs, 0, rseqs, 0, rsize);
-System.arraycopy (features, 0, tfeatures, 0, rsize);
-features = tfeatures;
-seqs = rseqs;
-if (this.ap.seqPanel.seqCanvas.getFeatureRenderer ().amendFeatures (seqs, features, true, this.ap)) {
-this.ap.alignFrame.sequenceFeatures.setState (true);
-this.ap.av.setShowSequenceFeatures (true);
-;this.ap.highlightSearchResults (null);
-}} else {
-this.outputText (evt);
-}}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "outputText",
-function (e) {
-var cap = new jalview.appletgui.CutAndPasteTransfer (true, this.ap.alignFrame);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.selection_output_command", Clazz.newArray (-1, [e.getActionCommand ()])), 600, 500);
-cap.setText ( new jalview.io.AppletFormatAdapter ().formatSequences (e.getActionCommand (), this.ap.av.getShowJVSuffix (), this.ap, true));
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "showSequenceSelectionDetails",
-function () {
-this.createSequenceDetailsReport (this.ap.av.getSequenceSelection ());
-});
-Clazz.defineMethod (c$, "showSequenceDetails",
-function () {
-this.createSequenceDetailsReport ( Clazz.newArray (-1, [this.seq]));
-});
-Clazz.defineMethod (c$, "createSequenceDetailsReport",
-function (sequences) {
-var cap = new jalview.appletgui.CutAndPasteTransfer (false, this.ap.alignFrame);
-var contents = new StringBuffer ();
-for (var seq, $seq = 0, $$seq = sequences; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
-contents.append (jalview.util.MessageManager.formatMessage ("label.annotation_for_displayid", Clazz.newArray (-1, [seq.getDisplayId (true)])));
- new jalview.io.SequenceAnnotationReport (null).createSequenceAnnotationReport (contents, seq, true, true, false, (this.ap.seqPanel.seqCanvas.fr != null) ? this.ap.seqPanel.seqCanvas.fr.getMinMax () : null);
-contents.append ("
");
-}
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, "Sequence Details for " + (sequences.length == 1 ? sequences[0].getDisplayId (true) : "Selection"), 600, 500);
-cap.setText (jalview.util.MessageManager.formatMessage ("label.html_content", Clazz.newArray (-1, [contents.toString ()])));
-}, "~A");
-Clazz.defineMethod (c$, "editName",
-function () {
-var dialog = new jalview.appletgui.EditNameDialog (this.seq.getName (), this.seq.getDescription (), " Sequence Name", "Sequence Description", this.ap.alignFrame, "Edit Sequence Name / Description", 500, 100, true);
-if (dialog.accept) {
-this.seq.setName (dialog.getName ());
-this.seq.setDescription (dialog.getDescription ());
-this.ap.paintAlignment (false);
-}});
-Clazz.defineMethod (c$, "addPDB",
-function () {
-if (this.seq.getPDBId () != null) {
-var entry = this.seq.getPDBId ().firstElement ();
-if (this.ap.av.applet.jmolAvailable) {
- new jalview.appletgui.AppletJmol (entry, Clazz.newArray (-1, [this.seq]), null, this.ap, jalview.io.AppletFormatAdapter.URL);
-}} else {
-var cap = new jalview.appletgui.CutAndPasteTransfer (true, this.ap.alignFrame);
-cap.setText (jalview.util.MessageManager.getString ("label.paste_pdb_file"));
-cap.setPDBImport (this.seq);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.paste_pdb_file_for_sequence", Clazz.newArray (-1, [this.seq.getName ()])), 400, 300);
-}});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.groupMenu.setLabel (jalview.util.MessageManager.getString ("label.selection"));
-this.sequenceFeature.addActionListener (this);
-this.editGroupName.addActionListener (this);
-this.unGroupMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_group"));
-this.unGroupMenuItem.addActionListener (this);
-this.createGroupMenuItem.setLabel (jalview.util.MessageManager.getString ("action.create_group"));
-this.createGroupMenuItem.addActionListener (this);
-this.nucleotideMenuItem.setLabel (jalview.util.MessageManager.getString ("label.nucleotide"));
-this.nucleotideMenuItem.addActionListener (this);
-this.conservationMenuItem.addItemListener (this);
-this.abovePIDColour.addItemListener (this);
-this.colourMenu.setLabel (jalview.util.MessageManager.getString ("label.group_colour"));
-this.showBoxes.setLabel (jalview.util.MessageManager.getString ("action.boxes"));
-this.showBoxes.setState (true);
-this.showBoxes.addItemListener (this);
-this.sequenceName.addActionListener (this);
-this.sequenceDetails.addActionListener (this);
-this.selSeqDetails.addActionListener (this);
-this.displayNonconserved.setLabel (jalview.util.MessageManager.getString ("label.show_non_conversed"));
-this.displayNonconserved.setState (false);
-this.displayNonconserved.addItemListener (this);
-this.showText.setLabel (jalview.util.MessageManager.getString ("action.text"));
-this.showText.addItemListener (this);
-this.showColourText.setLabel (jalview.util.MessageManager.getString ("label.colour_text"));
-this.showColourText.addItemListener (this);
-this.outputmenu.setLabel (jalview.util.MessageManager.getString ("label.out_to_textbox"));
-this.seqMenu.setLabel (jalview.util.MessageManager.getString ("label.sequence"));
-this.pdb.setLabel (jalview.util.MessageManager.getString ("label.view_pdb_structure"));
-this.hideSeqs.setLabel (jalview.util.MessageManager.getString ("action.hide_sequences"));
-this.repGroup.setLabel (jalview.util.MessageManager.formatMessage ("label.represent_group_with", Clazz.newArray (-1, [""])));
-this.revealAll.setLabel (jalview.util.MessageManager.getString ("action.reveal_all"));
-this.revealSeq.setLabel (jalview.util.MessageManager.getString ("action.reveal_sequences"));
-this.menu1.setLabel (jalview.util.MessageManager.getString ("label.group") + ":");
-this.add (this.groupMenu);
-this.add (this.seqMenu);
-this.add (this.hideSeqs);
-this.add (this.revealSeq);
-this.add (this.revealAll);
-this.groupMenu.add (this.groupShowAnnotationsMenu);
-this.groupMenu.add (this.groupHideAnnotationsMenu);
-this.groupMenu.add (this.groupAddReferenceAnnotations);
-this.groupMenu.add (this.editMenu);
-this.groupMenu.add (this.outputmenu);
-this.groupMenu.add (this.sequenceFeature);
-this.groupMenu.add (this.createGroupMenuItem);
-this.groupMenu.add (this.unGroupMenuItem);
-this.groupMenu.add (this.menu1);
-this.colourMenu.add (this.noColourmenuItem);
-this.colourMenu.add (this.clustalColour);
-this.colourMenu.add (this.BLOSUM62Colour);
-this.colourMenu.add (this.PIDColour);
-this.colourMenu.add (this.zappoColour);
-this.colourMenu.add (this.taylorColour);
-this.colourMenu.add (this.hydrophobicityColour);
-this.colourMenu.add (this.helixColour);
-this.colourMenu.add (this.strandColour);
-this.colourMenu.add (this.turnColour);
-this.colourMenu.add (this.buriedColour);
-this.colourMenu.add (this.nucleotideMenuItem);
-this.colourMenu.add (this.userDefinedColour);
-this.colourMenu.addSeparator ();
-this.colourMenu.add (this.abovePIDColour);
-this.colourMenu.add (this.conservationMenuItem);
-this.noColourmenuItem.setLabel (jalview.util.MessageManager.getString ("label.none"));
-this.noColourmenuItem.addActionListener (this);
-this.clustalColour.setLabel (jalview.util.MessageManager.getString ("label.clustalx_colours"));
-this.clustalColour.addActionListener (this);
-this.zappoColour.setLabel (jalview.util.MessageManager.getString ("label.zappo"));
-this.zappoColour.addActionListener (this);
-this.taylorColour.setLabel (jalview.util.MessageManager.getString ("label.taylor"));
-this.taylorColour.addActionListener (this);
-this.hydrophobicityColour.setLabel (jalview.util.MessageManager.getString ("label.hydrophobicity"));
-this.hydrophobicityColour.addActionListener (this);
-this.helixColour.setLabel (jalview.util.MessageManager.getString ("label.helix_propensity"));
-this.helixColour.addActionListener (this);
-this.strandColour.setLabel (jalview.util.MessageManager.getString ("label.strand_propensity"));
-this.strandColour.addActionListener (this);
-this.turnColour.setLabel (jalview.util.MessageManager.getString ("label.turn_propensity"));
-this.turnColour.addActionListener (this);
-this.buriedColour.setLabel (jalview.util.MessageManager.getString ("label.buried_index"));
-this.buriedColour.addActionListener (this);
-this.abovePIDColour.setLabel (jalview.util.MessageManager.getString ("label.above_identity_percentage"));
-this.userDefinedColour.setLabel (jalview.util.MessageManager.getString ("action.user_defined"));
-this.userDefinedColour.addActionListener (this);
-this.PIDColour.setLabel (jalview.util.MessageManager.getString ("action.percentage_identity"));
-this.PIDColour.addActionListener (this);
-this.BLOSUM62Colour.setLabel ("BLOSUM62");
-this.BLOSUM62Colour.addActionListener (this);
-this.conservationMenuItem.setLabel (jalview.util.MessageManager.getString ("label.conservation"));
-this.editMenu.add (this.copy);
-this.copy.addActionListener (this);
-this.editMenu.add (this.cut);
-this.cut.addActionListener (this);
-this.editMenu.add (this.editSequence);
-this.editSequence.addActionListener (this);
-this.editMenu.add (this.toUpper);
-this.toUpper.addActionListener (this);
-this.editMenu.add (this.toLower);
-this.toLower.addActionListener (this);
-this.editMenu.add (this.toggleCase);
-this.seqMenu.add (this.seqShowAnnotationsMenu);
-this.seqMenu.add (this.seqHideAnnotationsMenu);
-this.seqMenu.add (this.seqAddReferenceAnnotations);
-this.seqMenu.add (this.sequenceName);
-this.seqMenu.add (this.makeReferenceSeq);
-if (!this.ap.av.applet.useXtrnalSviewer) {
-this.seqMenu.add (this.pdb);
-}this.seqMenu.add (this.repGroup);
-this.menu1.add (this.editGroupName);
-this.menu1.add (this.colourMenu);
-this.menu1.add (this.showBoxes);
-this.menu1.add (this.showText);
-this.menu1.add (this.showColourText);
-this.menu1.add (this.displayNonconserved);
-this.toggleCase.addActionListener (this);
-this.pdb.addActionListener (this);
-this.hideSeqs.addActionListener (this);
-this.repGroup.addActionListener (this);
-this.revealAll.addActionListener (this);
-this.revealSeq.addActionListener (this);
-this.makeReferenceSeq.addActionListener (this);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "refresh",
-function () {
-this.ap.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "clustalColour_actionPerformed",
-function () {
-var sg = this.getGroup ();
-sg.cs = new jalview.schemes.ClustalxColourScheme (sg, this.ap.av.getHiddenRepSequences ());
-this.refresh ();
-});
-Clazz.defineMethod (c$, "zappoColour_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.ZappoColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "taylorColour_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.TaylorColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "hydrophobicityColour_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.HydrophobicColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "helixColour_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.HelixColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "strandColour_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.StrandColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "turnColour_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.TurnColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "buriedColour_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.BuriedColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "nucleotideMenuItem_actionPerformed",
-function () {
-this.getGroup ().cs = new jalview.schemes.NucleotideColourScheme ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "abovePIDColour_itemStateChanged",
-function () {
-var sg = this.getGroup ();
-if (sg.cs == null) {
-return;
-}if (this.abovePIDColour.getState ()) {
-sg.cs.setConsensus (jalview.analysis.AAFrequency.calculate (sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth ()));
-var threshold = jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, sg.cs, this.getGroup ().getName ());
-sg.cs.setThreshold (threshold, this.ap.av.isIgnoreGapsConsensus ());
-jalview.appletgui.SliderPanel.showPIDSlider ();
-} else {
-sg.cs.setThreshold (0, this.ap.av.isIgnoreGapsConsensus ());
-}this.refresh ();
-});
-Clazz.defineMethod (c$, "userDefinedColour_actionPerformed",
-function () {
- new jalview.appletgui.UserDefinedColours (this.ap, this.getGroup ());
-});
-Clazz.defineMethod (c$, "PIDColour_actionPerformed",
-function () {
-var sg = this.getGroup ();
-sg.cs = new jalview.schemes.PIDColourScheme ();
-sg.cs.setConsensus (jalview.analysis.AAFrequency.calculate (sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth ()));
-this.refresh ();
-});
-Clazz.defineMethod (c$, "BLOSUM62Colour_actionPerformed",
-function () {
-var sg = this.getGroup ();
-sg.cs = new jalview.schemes.Blosum62ColourScheme ();
-sg.cs.setConsensus (jalview.analysis.AAFrequency.calculate (sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth ()));
-this.refresh ();
-});
-Clazz.defineMethod (c$, "noColourmenuItem_actionPerformed",
-function () {
-this.getGroup ().cs = null;
-this.refresh ();
-});
-Clazz.defineMethod (c$, "conservationMenuItem_itemStateChanged",
-function () {
-var sg = this.getGroup ();
-if (sg.cs == null) {
-return;
-}if (this.conservationMenuItem.getState ()) {
-sg.cs.setConservation (jalview.analysis.Conservation.calculateConservation ("Group", jalview.schemes.ResidueProperties.propHash, 3, sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth (), false, this.ap.av.getConsPercGaps (), false));
-jalview.appletgui.SliderPanel.setConservationSlider (this.ap, sg.cs, sg.getName ());
-jalview.appletgui.SliderPanel.showConservationSlider ();
-} else {
-sg.cs.setConservation (null);
-}this.refresh ();
-});
-Clazz.defineMethod (c$, "getGroup",
-function () {
-var sg = this.ap.av.getSelectionGroup ();
-if (sg != null) {
-this.ap.av.getAlignment ().addGroup (sg);
-}return sg;
-});
-Clazz.defineMethod (c$, "unGroupMenuItem_actionPerformed",
-function () {
-var sg = this.ap.av.getSelectionGroup ();
-this.ap.av.getAlignment ().deleteGroup (sg);
-this.ap.av.setSelectionGroup (null);
-this.ap.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "createGroupMenuItem_actionPerformed",
-function () {
-this.getGroup ();
-this.refresh ();
-});
-Clazz.defineMethod (c$, "showColourText_itemStateChanged",
-function () {
-this.getGroup ().setColourText (this.showColourText.getState ());
-this.refresh ();
-});
-Clazz.defineMethod (c$, "showText_itemStateChanged",
-function () {
-this.getGroup ().setDisplayText (this.showText.getState ());
-this.refresh ();
-});
-Clazz.defineMethod (c$, "makeReferenceSeq_actionPerformed",
-function () {
-if (!this.ap.av.getAlignment ().hasSeqrep ()) {
-this.ap.av.setDisplayReferenceSeq (true);
-this.ap.av.setColourByReferenceSeq (true);
-this.ap.av.getAlignment ().setSeqrep (this.seq);
-} else {
-if (this.ap.av.getAlignment ().getSeqrep () === this.seq) {
-this.ap.av.getAlignment ().setSeqrep (null);
-} else {
-this.ap.av.getAlignment ().setSeqrep (this.seq);
-}}this.refresh ();
-});
-Clazz.defineMethod (c$, "showNonconserved_itemStateChanged",
-function () {
-this.getGroup ().setShowNonconserved (this.displayNonconserved.getState ());
-this.refresh ();
-});
-Clazz.defineMethod (c$, "showBoxes_itemStateChanged",
-function () {
-this.getGroup ().setDisplayBoxes (this.showBoxes.getState ());
-this.refresh ();
-});
-Clazz.defineMethod (c$, "hideSequences",
-function (representGroup) {
-var sg = this.ap.av.getSelectionGroup ();
-if (sg == null || sg.getSize () < 1) {
-this.ap.av.hideSequence ( Clazz.newArray (-1, [this.seq]));
-return;
-}this.ap.av.setSelectionGroup (null);
-if (representGroup) {
-this.ap.av.hideRepSequences (this.seq, sg);
-return;
-}var gsize = sg.getSize ();
-var hseqs;
-hseqs = new Array (gsize);
-var index = 0;
-for (var i = 0; i < gsize; i++) {
-hseqs[index++] = sg.getSequenceAt (i);
-}
-this.ap.av.hideSequence (hseqs);
-this.ap.av.sendSelection ();
-}, "~B");
-Clazz.defineMethod (c$, "buildAnnotationTypesMenus",
-function (showMenu, hideMenu, forSequences) {
-showMenu.removeAll ();
-hideMenu.removeAll ();
-var all = java.util.Arrays.asList (["All"]);
-this.addAnnotationTypeToShowHide (showMenu, forSequences, "", all, true, true);
-this.addAnnotationTypeToShowHide (hideMenu, forSequences, "", all, true, false);
-showMenu.addSeparator ();
-hideMenu.addSeparator ();
-var annotations = this.ap.getAlignment ().getAlignmentAnnotation ();
-var shownTypes = new java.util.LinkedHashMap ();
-var hiddenTypes = new java.util.LinkedHashMap ();
-jalview.analysis.AlignmentAnnotationUtils.getShownHiddenTypes (shownTypes, hiddenTypes, jalview.analysis.AlignmentAnnotationUtils.asList (annotations), forSequences);
-for (var calcId, $calcId = hiddenTypes.keySet ().iterator (); $calcId.hasNext () && ((calcId = $calcId.next ()) || true);) {
-for (var type, $type = hiddenTypes.get (calcId).iterator (); $type.hasNext () && ((type = $type.next ()) || true);) {
-this.addAnnotationTypeToShowHide (showMenu, forSequences, calcId, type, false, true);
-}
-}
-showMenu.setEnabled (!hiddenTypes.isEmpty ());
-for (var calcId, $calcId = shownTypes.keySet ().iterator (); $calcId.hasNext () && ((calcId = $calcId.next ()) || true);) {
-for (var type, $type = shownTypes.get (calcId).iterator (); $type.hasNext () && ((type = $type.next ()) || true);) {
-this.addAnnotationTypeToShowHide (hideMenu, forSequences, calcId, type, false, false);
-}
-}
-hideMenu.setEnabled (!shownTypes.isEmpty ());
-}, "awt2swing.Menu,awt2swing.Menu,java.util.List");
-Clazz.defineMethod (c$, "addAnnotationTypeToShowHide",
-function (showOrHideMenu, forSequences, calcId, types, allTypes, actionIsShow) {
-var label = types.toString ();
-label = label.substring (1, label.length - 1);
-var item = new awt2swing.MenuItem (label);
-item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.APopupMenu$3") ? 0 : jalview.appletgui.APopupMenu.$APopupMenu$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.APopupMenu$3, this, Clazz.cloneFinals ("types", types, "forSequences", forSequences, "allTypes", allTypes, "actionIsShow", actionIsShow))));
-showOrHideMenu.add (item);
-}, "awt2swing.Menu,java.util.List,~S,java.util.List,~B,~B");
-c$.$APopupMenu$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "APopupMenu$1", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.APopupMenu"].addReferenceAnnotations_actionPerformed (this.f$.candidates);
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$APopupMenu$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "APopupMenu$2", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.APopupMenu"].ap.alignFrame.showURL (this.f$.url, this.f$.target);
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$APopupMenu$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "APopupMenu$3", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-jalview.analysis.AlignmentUtils.showOrHideSequenceAnnotations (this.b$["jalview.appletgui.APopupMenu"].ap.getAlignment (), this.f$.types, this.f$.forSequences, this.f$.allTypes, this.f$.actionIsShow);
-this.b$["jalview.appletgui.APopupMenu"].refresh ();
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"ALL_ANNOTATIONS", "All");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.PopupMenu", "java.awt.event.ActionListener", "$.ItemListener", "awt2swing.CheckboxMenuItem", "$.Menu", "$.MenuItem", "jalview.util.MessageManager"], "jalview.appletgui.APopupMenu", ["awt2swing.Frame", "jalview.analysis.AAFrequency", "$.AlignmentAnnotationUtils", "$.AlignmentUtils", "$.Conservation", "jalview.appletgui.AppletJmol", "$.CutAndPasteTransfer", "$.EditNameDialog", "$.SliderPanel", "$.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.commands.ChangeCaseCommand", "$.EditCommand", "jalview.datamodel.SequenceFeature", "jalview.io.AppletFormatAdapter", "$.SequenceAnnotationReport", "jalview.schemes.Blosum62ColourScheme", "$.BuriedColourScheme", "$.ClustalxColourScheme", "$.HelixColourScheme", "$.HydrophobicColourScheme", "$.NucleotideColourScheme", "$.PIDColourScheme", "$.ResidueProperties", "$.StrandColourScheme", "$.TaylorColourScheme", "$.TurnColourScheme", "$.ZappoColourScheme", "jalview.util.DBRefUtils", "$.UrlLink", "java.lang.StringBuffer", "$.StringBuilder", "java.util.Arrays", "$.Collections", "$.LinkedHashMap", "$.TreeMap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.groupMenu = null;
+this.editGroupName = null;
+this.clustalColour = null;
+this.zappoColour = null;
+this.taylorColour = null;
+this.hydrophobicityColour = null;
+this.helixColour = null;
+this.strandColour = null;
+this.turnColour = null;
+this.buriedColour = null;
+this.abovePIDColour = null;
+this.userDefinedColour = null;
+this.PIDColour = null;
+this.BLOSUM62Colour = null;
+this.noColourmenuItem = null;
+this.conservationMenuItem = null;
+this.ap = null;
+this.unGroupMenuItem = null;
+this.createGroupMenuItem = null;
+this.nucleotideMenuItem = null;
+this.colourMenu = null;
+this.showBoxes = null;
+this.showText = null;
+this.showColourText = null;
+this.displayNonconserved = null;
+this.seqShowAnnotationsMenu = null;
+this.seqHideAnnotationsMenu = null;
+this.seqAddReferenceAnnotations = null;
+this.groupShowAnnotationsMenu = null;
+this.groupHideAnnotationsMenu = null;
+this.groupAddReferenceAnnotations = null;
+this.editMenu = null;
+this.copy = null;
+this.cut = null;
+this.toUpper = null;
+this.toLower = null;
+this.toggleCase = null;
+this.outputmenu = null;
+this.seqMenu = null;
+this.pdb = null;
+this.hideSeqs = null;
+this.repGroup = null;
+this.sequenceName = null;
+this.sequenceFeature = null;
+this.editSequence = null;
+this.sequenceDetails = null;
+this.selSeqDetails = null;
+this.makeReferenceSeq = null;
+this.seq = null;
+this.revealAll = null;
+this.revealSeq = null;
+this.revealSeq_index = -1;
+this.menu1 = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "APopupMenu", awt2swing.PopupMenu, [java.awt.event.ActionListener, java.awt.event.ItemListener]);
+Clazz.prepareFields (c$, function () {
+this.groupMenu = new awt2swing.Menu ();
+this.editGroupName = new awt2swing.MenuItem ();
+this.clustalColour = new awt2swing.MenuItem ();
+this.zappoColour = new awt2swing.MenuItem ();
+this.taylorColour = new awt2swing.MenuItem ();
+this.hydrophobicityColour = new awt2swing.MenuItem ();
+this.helixColour = new awt2swing.MenuItem ();
+this.strandColour = new awt2swing.MenuItem ();
+this.turnColour = new awt2swing.MenuItem ();
+this.buriedColour = new awt2swing.MenuItem ();
+this.abovePIDColour = new awt2swing.CheckboxMenuItem ();
+this.userDefinedColour = new awt2swing.MenuItem ();
+this.PIDColour = new awt2swing.MenuItem ();
+this.BLOSUM62Colour = new awt2swing.MenuItem ();
+this.noColourmenuItem = new awt2swing.MenuItem ();
+this.conservationMenuItem = new awt2swing.CheckboxMenuItem ();
+this.unGroupMenuItem = new awt2swing.MenuItem ();
+this.createGroupMenuItem = new awt2swing.MenuItem ();
+this.nucleotideMenuItem = new awt2swing.MenuItem ();
+this.colourMenu = new awt2swing.Menu ();
+this.showBoxes = new awt2swing.CheckboxMenuItem ();
+this.showText = new awt2swing.CheckboxMenuItem ();
+this.showColourText = new awt2swing.CheckboxMenuItem ();
+this.displayNonconserved = new awt2swing.CheckboxMenuItem ();
+this.seqShowAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.show_annotations"));
+this.seqHideAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.hide_annotations"));
+this.seqAddReferenceAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.add_reference_annotations"));
+this.groupShowAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.show_annotations"));
+this.groupHideAnnotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.hide_annotations"));
+this.groupAddReferenceAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.add_reference_annotations"));
+this.editMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.edit"));
+this.copy = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.copy"));
+this.cut = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.cut"));
+this.toUpper = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.to_upper_case"));
+this.toLower = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.to_lower_case"));
+this.toggleCase = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.toggle_case"));
+this.outputmenu = new awt2swing.Menu ();
+this.seqMenu = new awt2swing.Menu ();
+this.pdb = new awt2swing.MenuItem ();
+this.hideSeqs = new awt2swing.MenuItem ();
+this.repGroup = new awt2swing.MenuItem ();
+this.sequenceName = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.edit_name_description"));
+this.sequenceFeature = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.create_sequence_feature"));
+this.editSequence = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.edit_sequence"));
+this.sequenceDetails = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sequence_details") + "...");
+this.selSeqDetails = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sequence_details") + "...");
+this.makeReferenceSeq = new awt2swing.MenuItem ();
+this.revealAll = new awt2swing.MenuItem ();
+this.revealSeq = new awt2swing.MenuItem ();
+this.menu1 = new awt2swing.Menu ();
+});
+Clazz.makeConstructor (c$,
+function (apanel, seq, links) {
+Clazz.superConstructor (this, jalview.appletgui.APopupMenu, []);
+this.ap = apanel;
+this.seq = seq;
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+for (var i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++) {
+var item = new awt2swing.MenuItem (jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
+item.addActionListener (this);
+this.outputmenu.add (item);
+}
+this.buildAnnotationSubmenus ();
+var sg = this.ap.av.getSelectionGroup ();
+if (sg != null && sg.getSize () > 0) {
+this.editGroupName.setLabel (jalview.util.MessageManager.formatMessage ("label.name_param", Clazz.newArray (-1, [sg.getName ()])));
+this.showText.setState (sg.getDisplayText ());
+this.showColourText.setState (sg.getColourText ());
+this.showBoxes.setState (sg.getDisplayBoxes ());
+this.displayNonconserved.setState (sg.getShowNonconserved ());
+if (!this.ap.av.getAlignment ().getGroups ().contains (sg)) {
+this.menu1.setLabel (jalview.util.MessageManager.getString ("action.edit_new_group"));
+this.groupMenu.remove (this.unGroupMenuItem);
+} else {
+this.menu1.setLabel (jalview.util.MessageManager.getString ("action.edit_group"));
+this.groupMenu.remove (this.createGroupMenuItem);
+}} else {
+this.remove (this.hideSeqs);
+this.remove (this.groupMenu);
+}if (links != null && links.size () > 0) {
+var linkMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.link"));
+for (var i = 0; i < links.size (); i++) {
+var link = links.elementAt (i);
+var urlLink = new jalview.util.UrlLink (link);
+if (!urlLink.isValid ()) {
+System.err.println (urlLink.getInvalidMessage ());
+continue;
+}var target = urlLink.getTarget ();
+var label = urlLink.getLabel ();
+if (seq != null && urlLink.isDynamic ()) {
+var dbr = jalview.util.DBRefUtils.selectRefs (seq.getDBRef (), Clazz.newArray (-1, [target]));
+var id = seq.getName ();
+var descr = seq.getDescription ();
+if (descr != null && descr.length < 1) {
+descr = null;
+}if (dbr != null) {
+for (var r = 0; r < dbr.length; r++) {
+if (id != null && dbr[r].getAccessionId ().equals (id)) {
+id = null;
+}var urls = urlLink.makeUrls (dbr[r].getAccessionId (), true);
+if (urls != null) {
+for (var u = 0; u < urls.length; u += 2) {
+this.addshowLink (linkMenu, label + "|" + urls[u], urls[u + 1]);
+}
+}}
+}if (id != null) {
+var urls = urlLink.makeUrls (id, true);
+if (urls != null) {
+for (var u = 0; u < urls.length; u += 2) {
+this.addshowLink (linkMenu, label, urls[u + 1]);
+}
+}}if (descr != null && urlLink.getRegexReplace () != null) {
+var urls = urlLink.makeUrls (descr, true);
+if (urls != null) {
+for (var u = 0; u < urls.length; u += 2) {
+this.addshowLink (linkMenu, label, urls[u + 1]);
+}
+}}} else {
+this.addshowLink (linkMenu, target, urlLink.getUrl_prefix ());
+}}
+if (linkMenu.getItemCount () > 0) {
+if (seq != null) {
+this.seqMenu.add (linkMenu);
+} else {
+this.add (linkMenu);
+}}}if (seq != null) {
+this.seqMenu.setLabel (seq.getName ());
+if (seq === this.ap.av.getAlignment ().getSeqrep ()) {
+this.makeReferenceSeq.setLabel (jalview.util.MessageManager.getString ("action.unmark_as_reference"));
+} else {
+this.makeReferenceSeq.setLabel (jalview.util.MessageManager.getString ("action.set_as_reference"));
+}this.repGroup.setLabel (jalview.util.MessageManager.formatMessage ("label.represent_group_with", Clazz.newArray (-1, [seq.getName ()])));
+} else {
+this.remove (this.seqMenu);
+}if (!this.ap.av.hasHiddenRows ()) {
+this.remove (this.revealAll);
+this.remove (this.revealSeq);
+} else {
+var index = this.ap.av.getAlignment ().findIndex (seq);
+if (this.ap.av.adjustForHiddenSeqs (index) - this.ap.av.adjustForHiddenSeqs (index - 1) > 1) {
+this.revealSeq_index = index;
+} else {
+this.remove (this.revealSeq);
+}}}, "jalview.appletgui.AlignmentPanel,jalview.datamodel.SequenceI,java.util.Vector");
+Clazz.defineMethod (c$, "buildAnnotationSubmenus",
+($fz = function () {
+var selectedSequence = (this.seq == null ? java.util.Collections.emptyList () : java.util.Arrays.asList ([this.seq]));
+this.buildAnnotationTypesMenus (this.seqShowAnnotationsMenu, this.seqHideAnnotationsMenu, selectedSequence);
+this.configureReferenceAnnotationsMenu (this.seqAddReferenceAnnotations, selectedSequence);
+var selectedGroup = (this.ap.av.getSelectionGroup () == null ? java.util.Collections.emptyList () : this.ap.av.getSelectionGroup ().getSequences ());
+this.buildAnnotationTypesMenus (this.groupShowAnnotationsMenu, this.groupHideAnnotationsMenu, selectedGroup);
+this.configureReferenceAnnotationsMenu (this.groupAddReferenceAnnotations, selectedGroup);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "configureReferenceAnnotationsMenu",
+($fz = function (menuItem, forSequences) {
+menuItem.setEnabled (false);
+var tipEntries = new java.util.TreeMap ();
+var candidates = new java.util.LinkedHashMap ();
+var al = this.ap.av.getAlignment ();
+jalview.analysis.AlignmentUtils.findAddableReferenceAnnotations (forSequences, tipEntries, candidates, al);
+if (!candidates.isEmpty ()) {
+var tooltip = new StringBuilder (64);
+tooltip.append (jalview.util.MessageManager.getString ("label.add_annotations_for"));
+menuItem.setEnabled (true);
+menuItem.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.APopupMenu$1") ? 0 : jalview.appletgui.APopupMenu.$APopupMenu$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.APopupMenu$1, this, Clazz.cloneFinals ("candidates", candidates))));
+}}, $fz.isPrivate = true, $fz), "awt2swing.MenuItem,java.util.List");
+Clazz.defineMethod (c$, "addReferenceAnnotations_actionPerformed",
+function (candidates) {
+var selectionGroup = this.ap.av.getSelectionGroup ();
+var alignment = this.ap.getAlignment ();
+jalview.analysis.AlignmentUtils.addReferenceAnnotations (candidates, alignment, selectionGroup);
+this.refresh ();
+}, "java.util.Map");
+Clazz.defineMethod (c$, "addshowLink",
+($fz = function (linkMenu, target, url) {
+this.addshowLink (linkMenu, target, target, url);
+}, $fz.isPrivate = true, $fz), "awt2swing.Menu,~S,~S");
+Clazz.defineMethod (c$, "addshowLink",
+($fz = function (linkMenu, target, label, url) {
+var item = new awt2swing.MenuItem (label);
+item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.APopupMenu$2") ? 0 : jalview.appletgui.APopupMenu.$APopupMenu$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.APopupMenu$2, this, Clazz.cloneFinals ("url", url, "target", target))));
+linkMenu.add (item);
+}, $fz.isPrivate = true, $fz), "awt2swing.Menu,~S,~S,~S");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+if (evt.getSource () === this.abovePIDColour) {
+this.abovePIDColour_itemStateChanged ();
+} else if (evt.getSource () === this.showColourText) {
+this.showColourText_itemStateChanged ();
+} else if (evt.getSource () === this.showText) {
+this.showText_itemStateChanged ();
+} else if (evt.getSource () === this.showBoxes) {
+this.showBoxes_itemStateChanged ();
+} else if (evt.getSource () === this.displayNonconserved) {
+this.showNonconserved_itemStateChanged ();
+}}, "java.awt.event.ItemEvent");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+var source = evt.getSource ();
+if (source === this.clustalColour) {
+this.clustalColour_actionPerformed ();
+} else if (source === this.zappoColour) {
+this.zappoColour_actionPerformed ();
+} else if (source === this.taylorColour) {
+this.taylorColour_actionPerformed ();
+} else if (source === this.hydrophobicityColour) {
+this.hydrophobicityColour_actionPerformed ();
+} else if (source === this.helixColour) {
+this.helixColour_actionPerformed ();
+} else if (source === this.strandColour) {
+this.strandColour_actionPerformed ();
+} else if (source === this.turnColour) {
+this.turnColour_actionPerformed ();
+} else if (source === this.buriedColour) {
+this.buriedColour_actionPerformed ();
+} else if (source === this.nucleotideMenuItem) {
+this.nucleotideMenuItem_actionPerformed ();
+} else if (source === this.userDefinedColour) {
+this.userDefinedColour_actionPerformed ();
+} else if (source === this.PIDColour) {
+this.PIDColour_actionPerformed ();
+} else if (source === this.BLOSUM62Colour) {
+this.BLOSUM62Colour_actionPerformed ();
+} else if (source === this.noColourmenuItem) {
+this.noColourmenuItem_actionPerformed ();
+} else if (source === this.conservationMenuItem) {
+this.conservationMenuItem_itemStateChanged ();
+} else if (source === this.unGroupMenuItem) {
+this.unGroupMenuItem_actionPerformed ();
+} else if (source === this.createGroupMenuItem) {
+this.createGroupMenuItem_actionPerformed ();
+} else if (source === this.sequenceName) {
+this.editName ();
+} else if (source === this.makeReferenceSeq) {
+this.makeReferenceSeq_actionPerformed ();
+} else if (source === this.sequenceDetails) {
+this.showSequenceDetails ();
+} else if (source === this.selSeqDetails) {
+this.showSequenceSelectionDetails ();
+} else if (source === this.pdb) {
+this.addPDB ();
+} else if (source === this.hideSeqs) {
+this.hideSequences (false);
+} else if (source === this.repGroup) {
+this.hideSequences (true);
+} else if (source === this.revealSeq) {
+this.ap.av.showSequence (this.revealSeq_index);
+} else if (source === this.revealAll) {
+this.ap.av.showAllHiddenSeqs ();
+} else if (source === this.editGroupName) {
+var dialog = new jalview.appletgui.EditNameDialog (this.getGroup ().getName (), this.getGroup ().getDescription (), " Group Name", "Group Description", this.ap.alignFrame, "Edit Group Name / Description", 500, 100, true);
+if (dialog.accept) {
+this.getGroup ().setName (dialog.getName ().$replace (' ', '_'));
+this.getGroup ().setDescription (dialog.getDescription ());
+}} else if (source === this.copy) {
+this.ap.alignFrame.copy_actionPerformed ();
+} else if (source === this.cut) {
+this.ap.alignFrame.cut_actionPerformed ();
+} else if (source === this.editSequence) {
+var sg = this.ap.av.getSelectionGroup ();
+if (sg != null) {
+if (this.seq == null) {
+this.seq = sg.getSequenceAt (0);
+}var dialog = new jalview.appletgui.EditNameDialog (this.seq.getSequenceAsString (sg.getStartRes (), sg.getEndRes () + 1), null, "Edit Sequence ", null, this.ap.alignFrame, "Edit Sequence", 500, 100, true);
+if (dialog.accept) {
+var editCommand = new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("label.edit_sequences"), jalview.commands.EditCommand.Action.REPLACE, dialog.getName ().$replace (' ', this.ap.av.getGapCharacter ()), sg.getSequencesAsArray (this.ap.av.getHiddenRepSequences ()), sg.getStartRes (), sg.getEndRes () + 1, this.ap.av.getAlignment ());
+this.ap.alignFrame.addHistoryItem (editCommand);
+this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
+}}} else if (source === this.toUpper || source === this.toLower || source === this.toggleCase) {
+var sg = this.ap.av.getSelectionGroup ();
+if (sg != null) {
+var startEnd = this.ap.av.getVisibleRegionBoundaries (sg.getStartRes (), sg.getEndRes () + 1);
+var description;
+var caseChange;
+if (source === this.toggleCase) {
+description = "Toggle Case";
+caseChange = jalview.commands.ChangeCaseCommand.TOGGLE_CASE;
+} else if (source === this.toUpper) {
+description = "To Upper Case";
+caseChange = jalview.commands.ChangeCaseCommand.TO_UPPER;
+} else {
+description = "To Lower Case";
+caseChange = jalview.commands.ChangeCaseCommand.TO_LOWER;
+}var caseCommand = new jalview.commands.ChangeCaseCommand (description, sg.getSequencesAsArray (this.ap.av.getHiddenRepSequences ()), startEnd, caseChange);
+this.ap.alignFrame.addHistoryItem (caseCommand);
+this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
+}} else if (source === this.sequenceFeature) {
+var sg = this.ap.av.getSelectionGroup ();
+if (sg == null) {
+return;
+}var rsize = 0;
+var gSize = sg.getSize ();
+var rseqs;
+var seqs = new Array (gSize);
+var tfeatures;
+var features = new Array (gSize);
+for (var i = 0; i < gSize; i++) {
+var start = sg.getSequenceAt (i).findPosition (sg.getStartRes ());
+var end = sg.findEndRes (sg.getSequenceAt (i));
+if (start <= end) {
+seqs[rsize] = sg.getSequenceAt (i);
+features[rsize] = new jalview.datamodel.SequenceFeature (null, null, null, start, end, "Jalview");
+rsize++;
+}}
+rseqs = new Array (rsize);
+tfeatures = new Array (rsize);
+System.arraycopy (seqs, 0, rseqs, 0, rsize);
+System.arraycopy (features, 0, tfeatures, 0, rsize);
+features = tfeatures;
+seqs = rseqs;
+if (this.ap.seqPanel.seqCanvas.getFeatureRenderer ().amendFeatures (seqs, features, true, this.ap)) {
+this.ap.alignFrame.sequenceFeatures.setState (true);
+this.ap.av.setShowSequenceFeatures (true);
+;this.ap.highlightSearchResults (null);
+}} else {
+this.outputText (evt);
+}}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "outputText",
+function (e) {
+var cap = new jalview.appletgui.CutAndPasteTransfer (true, this.ap.alignFrame);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.selection_output_command", Clazz.newArray (-1, [e.getActionCommand ()])), 600, 500);
+cap.setText ( new jalview.io.AppletFormatAdapter ().formatSequences (e.getActionCommand (), this.ap.av.getShowJVSuffix (), this.ap, true));
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "showSequenceSelectionDetails",
+function () {
+this.createSequenceDetailsReport (this.ap.av.getSequenceSelection ());
+});
+Clazz.defineMethod (c$, "showSequenceDetails",
+function () {
+this.createSequenceDetailsReport ( Clazz.newArray (-1, [this.seq]));
+});
+Clazz.defineMethod (c$, "createSequenceDetailsReport",
+function (sequences) {
+var cap = new jalview.appletgui.CutAndPasteTransfer (false, this.ap.alignFrame);
+var contents = new StringBuffer ();
+for (var seq, $seq = 0, $$seq = sequences; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+contents.append (jalview.util.MessageManager.formatMessage ("label.annotation_for_displayid", Clazz.newArray (-1, [seq.getDisplayId (true)])));
+ new jalview.io.SequenceAnnotationReport (null).createSequenceAnnotationReport (contents, seq, true, true, false, (this.ap.seqPanel.seqCanvas.fr != null) ? this.ap.seqPanel.seqCanvas.fr.getMinMax () : null);
+contents.append ("");
+}
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, "Sequence Details for " + (sequences.length == 1 ? sequences[0].getDisplayId (true) : "Selection"), 600, 500);
+cap.setText (jalview.util.MessageManager.formatMessage ("label.html_content", Clazz.newArray (-1, [contents.toString ()])));
+}, "~A");
+Clazz.defineMethod (c$, "editName",
+function () {
+var dialog = new jalview.appletgui.EditNameDialog (this.seq.getName (), this.seq.getDescription (), " Sequence Name", "Sequence Description", this.ap.alignFrame, "Edit Sequence Name / Description", 500, 100, true);
+if (dialog.accept) {
+this.seq.setName (dialog.getName ());
+this.seq.setDescription (dialog.getDescription ());
+this.ap.paintAlignment (false);
+}});
+Clazz.defineMethod (c$, "addPDB",
+function () {
+if (this.seq.getPDBId () != null) {
+var entry = this.seq.getPDBId ().firstElement ();
+if (this.ap.av.applet.jmolAvailable) {
+ new jalview.appletgui.AppletJmol (entry, Clazz.newArray (-1, [this.seq]), null, this.ap, jalview.io.AppletFormatAdapter.URL);
+}} else {
+var cap = new jalview.appletgui.CutAndPasteTransfer (true, this.ap.alignFrame);
+cap.setText (jalview.util.MessageManager.getString ("label.paste_pdb_file"));
+cap.setPDBImport (this.seq);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.paste_pdb_file_for_sequence", Clazz.newArray (-1, [this.seq.getName ()])), 400, 300);
+}});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.groupMenu.setLabel (jalview.util.MessageManager.getString ("label.selection"));
+this.sequenceFeature.addActionListener (this);
+this.editGroupName.addActionListener (this);
+this.unGroupMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_group"));
+this.unGroupMenuItem.addActionListener (this);
+this.createGroupMenuItem.setLabel (jalview.util.MessageManager.getString ("action.create_group"));
+this.createGroupMenuItem.addActionListener (this);
+this.nucleotideMenuItem.setLabel (jalview.util.MessageManager.getString ("label.nucleotide"));
+this.nucleotideMenuItem.addActionListener (this);
+this.conservationMenuItem.addItemListener (this);
+this.abovePIDColour.addItemListener (this);
+this.colourMenu.setLabel (jalview.util.MessageManager.getString ("label.group_colour"));
+this.showBoxes.setLabel (jalview.util.MessageManager.getString ("action.boxes"));
+this.showBoxes.setState (true);
+this.showBoxes.addItemListener (this);
+this.sequenceName.addActionListener (this);
+this.sequenceDetails.addActionListener (this);
+this.selSeqDetails.addActionListener (this);
+this.displayNonconserved.setLabel (jalview.util.MessageManager.getString ("label.show_non_conversed"));
+this.displayNonconserved.setState (false);
+this.displayNonconserved.addItemListener (this);
+this.showText.setLabel (jalview.util.MessageManager.getString ("action.text"));
+this.showText.addItemListener (this);
+this.showColourText.setLabel (jalview.util.MessageManager.getString ("label.colour_text"));
+this.showColourText.addItemListener (this);
+this.outputmenu.setLabel (jalview.util.MessageManager.getString ("label.out_to_textbox"));
+this.seqMenu.setLabel (jalview.util.MessageManager.getString ("label.sequence"));
+this.pdb.setLabel (jalview.util.MessageManager.getString ("label.view_pdb_structure"));
+this.hideSeqs.setLabel (jalview.util.MessageManager.getString ("action.hide_sequences"));
+this.repGroup.setLabel (jalview.util.MessageManager.formatMessage ("label.represent_group_with", Clazz.newArray (-1, [""])));
+this.revealAll.setLabel (jalview.util.MessageManager.getString ("action.reveal_all"));
+this.revealSeq.setLabel (jalview.util.MessageManager.getString ("action.reveal_sequences"));
+this.menu1.setLabel (jalview.util.MessageManager.getString ("label.group") + ":");
+this.add (this.groupMenu);
+this.add (this.seqMenu);
+this.add (this.hideSeqs);
+this.add (this.revealSeq);
+this.add (this.revealAll);
+this.groupMenu.add (this.groupShowAnnotationsMenu);
+this.groupMenu.add (this.groupHideAnnotationsMenu);
+this.groupMenu.add (this.groupAddReferenceAnnotations);
+this.groupMenu.add (this.editMenu);
+this.groupMenu.add (this.outputmenu);
+this.groupMenu.add (this.sequenceFeature);
+this.groupMenu.add (this.createGroupMenuItem);
+this.groupMenu.add (this.unGroupMenuItem);
+this.groupMenu.add (this.menu1);
+this.colourMenu.add (this.noColourmenuItem);
+this.colourMenu.add (this.clustalColour);
+this.colourMenu.add (this.BLOSUM62Colour);
+this.colourMenu.add (this.PIDColour);
+this.colourMenu.add (this.zappoColour);
+this.colourMenu.add (this.taylorColour);
+this.colourMenu.add (this.hydrophobicityColour);
+this.colourMenu.add (this.helixColour);
+this.colourMenu.add (this.strandColour);
+this.colourMenu.add (this.turnColour);
+this.colourMenu.add (this.buriedColour);
+this.colourMenu.add (this.nucleotideMenuItem);
+this.colourMenu.add (this.userDefinedColour);
+this.colourMenu.addSeparator ();
+this.colourMenu.add (this.abovePIDColour);
+this.colourMenu.add (this.conservationMenuItem);
+this.noColourmenuItem.setLabel (jalview.util.MessageManager.getString ("label.none"));
+this.noColourmenuItem.addActionListener (this);
+this.clustalColour.setLabel (jalview.util.MessageManager.getString ("label.clustalx_colours"));
+this.clustalColour.addActionListener (this);
+this.zappoColour.setLabel (jalview.util.MessageManager.getString ("label.zappo"));
+this.zappoColour.addActionListener (this);
+this.taylorColour.setLabel (jalview.util.MessageManager.getString ("label.taylor"));
+this.taylorColour.addActionListener (this);
+this.hydrophobicityColour.setLabel (jalview.util.MessageManager.getString ("label.hydrophobicity"));
+this.hydrophobicityColour.addActionListener (this);
+this.helixColour.setLabel (jalview.util.MessageManager.getString ("label.helix_propensity"));
+this.helixColour.addActionListener (this);
+this.strandColour.setLabel (jalview.util.MessageManager.getString ("label.strand_propensity"));
+this.strandColour.addActionListener (this);
+this.turnColour.setLabel (jalview.util.MessageManager.getString ("label.turn_propensity"));
+this.turnColour.addActionListener (this);
+this.buriedColour.setLabel (jalview.util.MessageManager.getString ("label.buried_index"));
+this.buriedColour.addActionListener (this);
+this.abovePIDColour.setLabel (jalview.util.MessageManager.getString ("label.above_identity_percentage"));
+this.userDefinedColour.setLabel (jalview.util.MessageManager.getString ("action.user_defined"));
+this.userDefinedColour.addActionListener (this);
+this.PIDColour.setLabel (jalview.util.MessageManager.getString ("action.percentage_identity"));
+this.PIDColour.addActionListener (this);
+this.BLOSUM62Colour.setLabel ("BLOSUM62");
+this.BLOSUM62Colour.addActionListener (this);
+this.conservationMenuItem.setLabel (jalview.util.MessageManager.getString ("label.conservation"));
+this.editMenu.add (this.copy);
+this.copy.addActionListener (this);
+this.editMenu.add (this.cut);
+this.cut.addActionListener (this);
+this.editMenu.add (this.editSequence);
+this.editSequence.addActionListener (this);
+this.editMenu.add (this.toUpper);
+this.toUpper.addActionListener (this);
+this.editMenu.add (this.toLower);
+this.toLower.addActionListener (this);
+this.editMenu.add (this.toggleCase);
+this.seqMenu.add (this.seqShowAnnotationsMenu);
+this.seqMenu.add (this.seqHideAnnotationsMenu);
+this.seqMenu.add (this.seqAddReferenceAnnotations);
+this.seqMenu.add (this.sequenceName);
+this.seqMenu.add (this.makeReferenceSeq);
+if (!this.ap.av.applet.useXtrnalSviewer) {
+this.seqMenu.add (this.pdb);
+}this.seqMenu.add (this.repGroup);
+this.menu1.add (this.editGroupName);
+this.menu1.add (this.colourMenu);
+this.menu1.add (this.showBoxes);
+this.menu1.add (this.showText);
+this.menu1.add (this.showColourText);
+this.menu1.add (this.displayNonconserved);
+this.toggleCase.addActionListener (this);
+this.pdb.addActionListener (this);
+this.hideSeqs.addActionListener (this);
+this.repGroup.addActionListener (this);
+this.revealAll.addActionListener (this);
+this.revealSeq.addActionListener (this);
+this.makeReferenceSeq.addActionListener (this);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "refresh",
+function () {
+this.ap.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "clustalColour_actionPerformed",
+function () {
+var sg = this.getGroup ();
+sg.cs = new jalview.schemes.ClustalxColourScheme (sg, this.ap.av.getHiddenRepSequences ());
+this.refresh ();
+});
+Clazz.defineMethod (c$, "zappoColour_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.ZappoColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "taylorColour_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.TaylorColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "hydrophobicityColour_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.HydrophobicColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "helixColour_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.HelixColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "strandColour_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.StrandColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "turnColour_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.TurnColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "buriedColour_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.BuriedColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "nucleotideMenuItem_actionPerformed",
+function () {
+this.getGroup ().cs = new jalview.schemes.NucleotideColourScheme ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "abovePIDColour_itemStateChanged",
+function () {
+var sg = this.getGroup ();
+if (sg.cs == null) {
+return;
+}if (this.abovePIDColour.getState ()) {
+sg.cs.setConsensus (jalview.analysis.AAFrequency.calculate (sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth ()));
+var threshold = jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, sg.cs, this.getGroup ().getName ());
+sg.cs.setThreshold (threshold, this.ap.av.isIgnoreGapsConsensus ());
+jalview.appletgui.SliderPanel.showPIDSlider ();
+} else {
+sg.cs.setThreshold (0, this.ap.av.isIgnoreGapsConsensus ());
+}this.refresh ();
+});
+Clazz.defineMethod (c$, "userDefinedColour_actionPerformed",
+function () {
+ new jalview.appletgui.UserDefinedColours (this.ap, this.getGroup ());
+});
+Clazz.defineMethod (c$, "PIDColour_actionPerformed",
+function () {
+var sg = this.getGroup ();
+sg.cs = new jalview.schemes.PIDColourScheme ();
+sg.cs.setConsensus (jalview.analysis.AAFrequency.calculate (sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth ()));
+this.refresh ();
+});
+Clazz.defineMethod (c$, "BLOSUM62Colour_actionPerformed",
+function () {
+var sg = this.getGroup ();
+sg.cs = new jalview.schemes.Blosum62ColourScheme ();
+sg.cs.setConsensus (jalview.analysis.AAFrequency.calculate (sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth ()));
+this.refresh ();
+});
+Clazz.defineMethod (c$, "noColourmenuItem_actionPerformed",
+function () {
+this.getGroup ().cs = null;
+this.refresh ();
+});
+Clazz.defineMethod (c$, "conservationMenuItem_itemStateChanged",
+function () {
+var sg = this.getGroup ();
+if (sg.cs == null) {
+return;
+}if (this.conservationMenuItem.getState ()) {
+sg.cs.setConservation (jalview.analysis.Conservation.calculateConservation ("Group", jalview.schemes.ResidueProperties.propHash, 3, sg.getSequences (this.ap.av.getHiddenRepSequences ()), 0, this.ap.av.getAlignment ().getWidth (), false, this.ap.av.getConsPercGaps (), false));
+jalview.appletgui.SliderPanel.setConservationSlider (this.ap, sg.cs, sg.getName ());
+jalview.appletgui.SliderPanel.showConservationSlider ();
+} else {
+sg.cs.setConservation (null);
+}this.refresh ();
+});
+Clazz.defineMethod (c$, "getGroup",
+function () {
+var sg = this.ap.av.getSelectionGroup ();
+if (sg != null) {
+this.ap.av.getAlignment ().addGroup (sg);
+}return sg;
+});
+Clazz.defineMethod (c$, "unGroupMenuItem_actionPerformed",
+function () {
+var sg = this.ap.av.getSelectionGroup ();
+this.ap.av.getAlignment ().deleteGroup (sg);
+this.ap.av.setSelectionGroup (null);
+this.ap.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "createGroupMenuItem_actionPerformed",
+function () {
+this.getGroup ();
+this.refresh ();
+});
+Clazz.defineMethod (c$, "showColourText_itemStateChanged",
+function () {
+this.getGroup ().setColourText (this.showColourText.getState ());
+this.refresh ();
+});
+Clazz.defineMethod (c$, "showText_itemStateChanged",
+function () {
+this.getGroup ().setDisplayText (this.showText.getState ());
+this.refresh ();
+});
+Clazz.defineMethod (c$, "makeReferenceSeq_actionPerformed",
+function () {
+if (!this.ap.av.getAlignment ().hasSeqrep ()) {
+this.ap.av.setDisplayReferenceSeq (true);
+this.ap.av.setColourByReferenceSeq (true);
+this.ap.av.getAlignment ().setSeqrep (this.seq);
+} else {
+if (this.ap.av.getAlignment ().getSeqrep () === this.seq) {
+this.ap.av.getAlignment ().setSeqrep (null);
+} else {
+this.ap.av.getAlignment ().setSeqrep (this.seq);
+}}this.refresh ();
+});
+Clazz.defineMethod (c$, "showNonconserved_itemStateChanged",
+function () {
+this.getGroup ().setShowNonconserved (this.displayNonconserved.getState ());
+this.refresh ();
+});
+Clazz.defineMethod (c$, "showBoxes_itemStateChanged",
+function () {
+this.getGroup ().setDisplayBoxes (this.showBoxes.getState ());
+this.refresh ();
+});
+Clazz.defineMethod (c$, "hideSequences",
+function (representGroup) {
+var sg = this.ap.av.getSelectionGroup ();
+if (sg == null || sg.getSize () < 1) {
+this.ap.av.hideSequence ( Clazz.newArray (-1, [this.seq]));
+return;
+}this.ap.av.setSelectionGroup (null);
+if (representGroup) {
+this.ap.av.hideRepSequences (this.seq, sg);
+return;
+}var gsize = sg.getSize ();
+var hseqs;
+hseqs = new Array (gsize);
+var index = 0;
+for (var i = 0; i < gsize; i++) {
+hseqs[index++] = sg.getSequenceAt (i);
+}
+this.ap.av.hideSequence (hseqs);
+this.ap.av.sendSelection ();
+}, "~B");
+Clazz.defineMethod (c$, "buildAnnotationTypesMenus",
+function (showMenu, hideMenu, forSequences) {
+showMenu.removeAll ();
+hideMenu.removeAll ();
+var all = java.util.Arrays.asList (["All"]);
+this.addAnnotationTypeToShowHide (showMenu, forSequences, "", all, true, true);
+this.addAnnotationTypeToShowHide (hideMenu, forSequences, "", all, true, false);
+showMenu.addSeparator ();
+hideMenu.addSeparator ();
+var annotations = this.ap.getAlignment ().getAlignmentAnnotation ();
+var shownTypes = new java.util.LinkedHashMap ();
+var hiddenTypes = new java.util.LinkedHashMap ();
+jalview.analysis.AlignmentAnnotationUtils.getShownHiddenTypes (shownTypes, hiddenTypes, jalview.analysis.AlignmentAnnotationUtils.asList (annotations), forSequences);
+for (var calcId, $calcId = hiddenTypes.keySet ().iterator (); $calcId.hasNext () && ((calcId = $calcId.next ()) || true);) {
+for (var type, $type = hiddenTypes.get (calcId).iterator (); $type.hasNext () && ((type = $type.next ()) || true);) {
+this.addAnnotationTypeToShowHide (showMenu, forSequences, calcId, type, false, true);
+}
+}
+showMenu.setEnabled (!hiddenTypes.isEmpty ());
+for (var calcId, $calcId = shownTypes.keySet ().iterator (); $calcId.hasNext () && ((calcId = $calcId.next ()) || true);) {
+for (var type, $type = shownTypes.get (calcId).iterator (); $type.hasNext () && ((type = $type.next ()) || true);) {
+this.addAnnotationTypeToShowHide (hideMenu, forSequences, calcId, type, false, false);
+}
+}
+hideMenu.setEnabled (!shownTypes.isEmpty ());
+}, "awt2swing.Menu,awt2swing.Menu,java.util.List");
+Clazz.defineMethod (c$, "addAnnotationTypeToShowHide",
+function (showOrHideMenu, forSequences, calcId, types, allTypes, actionIsShow) {
+var label = types.toString ();
+label = label.substring (1, label.length - 1);
+var item = new awt2swing.MenuItem (label);
+item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.APopupMenu$3") ? 0 : jalview.appletgui.APopupMenu.$APopupMenu$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.APopupMenu$3, this, Clazz.cloneFinals ("types", types, "forSequences", forSequences, "allTypes", allTypes, "actionIsShow", actionIsShow))));
+showOrHideMenu.add (item);
+}, "awt2swing.Menu,java.util.List,~S,java.util.List,~B,~B");
+c$.$APopupMenu$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "APopupMenu$1", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.APopupMenu"].addReferenceAnnotations_actionPerformed (this.f$.candidates);
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$APopupMenu$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "APopupMenu$2", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.APopupMenu"].ap.alignFrame.showURL (this.f$.url, this.f$.target);
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$APopupMenu$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "APopupMenu$3", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+jalview.analysis.AlignmentUtils.showOrHideSequenceAnnotations (this.b$["jalview.appletgui.APopupMenu"].ap.getAlignment (), this.f$.types, this.f$.forSequences, this.f$.allTypes, this.f$.actionIsShow);
+this.b$["jalview.appletgui.APopupMenu"].refresh ();
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"ALL_ANNOTATIONS", "All");
+});
diff --git a/bin/jalview/appletgui/AlignFrame.class b/bin/jalview/appletgui/AlignFrame.class
index c5a8472..f1ac80b 100644
Binary files a/bin/jalview/appletgui/AlignFrame.class and b/bin/jalview/appletgui/AlignFrame.class differ
diff --git a/bin/jalview/appletgui/AlignFrame.js b/bin/jalview/appletgui/AlignFrame.js
index 7221f66..f3c3d8e 100644
--- a/bin/jalview/appletgui/AlignFrame.js
+++ b/bin/jalview/appletgui/AlignFrame.js
@@ -1,2390 +1,2390 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Canvas", "jalview.api.AlignViewControllerGuiI", "jalview.appletgui.EmbmenuFrame", "java.awt.event.ActionListener", "$.ItemListener", "$.KeyListener", "awt2swing.CheckboxMenuItem", "$.Label", "$.Menu", "$.MenuBar", "$.MenuItem", "jalview.util.MessageManager", "java.awt.BorderLayout"], "jalview.appletgui.AlignFrame", ["awt2swing.Frame", "jalview.analysis.AlignmentSorter", "$.AnnotationSorter", "jalview.appletgui.AlignViewport", "$.AlignmentPanel", "$.AnnotationColourChooser", "$.AnnotationColumnChooser", "$.AppletJmol", "$.CutAndPasteTransfer", "$.FeatureSettings", "$.Finder", "$.FontChooser", "$.OverviewPanel", "$.PCAPanel", "$.PaintRefresher", "$.PairwiseAlignPanel", "$.RedundancyPanel", "$.SliderPanel", "$.TreePanel", "$.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.commands.EditCommand", "$.OrderCommand", "$.RemoveGapColCommand", "$.RemoveGapsCommand", "$.SlideSequencesCommand", "$.TrimRegionCommand", "jalview.controller.AlignViewController", "jalview.datamodel.Alignment", "$.PDBEntry", "$.Sequence", "$.SequenceGroup", "jalview.io.AlignmentProperties", "$.AnnotationFile", "$.AppletFormatAdapter", "$.FeaturesFile", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.Blosum62ColourScheme", "$.BuriedColourScheme", "$.ClustalxColourScheme", "$.HelixColourScheme", "$.HydrophobicColourScheme", "$.NucleotideColourScheme", "$.PIDColourScheme", "$.PurinePyrimidineColourScheme", "$.RNAHelicesColourChooser", "$.RNAInteractionColourScheme", "$.StrandColourScheme", "$.TCoffeeColourScheme", "$.TaylorColourScheme", "$.TurnColourScheme", "$.ZappoColourScheme", "jalview.structure.StructureSelectionManager", "jalview.util.Comparison", "$.MappingUtils", "java.awt.Color", "$.Font", "java.awt.event.FocusListener", "$.WindowAdapter", "java.lang.Character", "$.StringBuffer", "java.net.URL", "$.URLEncoder", "java.util.Arrays", "$.HashMap", "$.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.avc = null;
-this.alignPanel = null;
-this.viewport = null;
-this.frameWidth = 700;
-this.frameHeight = 500;
-this.jalviewServletURL = null;
-this.showAutoCalculatedAbove = false;
-this.annotationSortOrder = null;
-this.alignFrameMenuBar = null;
-this.fileMenu = null;
-this.loadApplication = null;
-this.$loadTree = null;
-this.$loadAnnotations = null;
-this.$outputFeatures = null;
-this.$outputAnnotations = null;
-this.closeMenuItem = null;
-this.selectAllSequenceMenuItem = null;
-this.deselectAllSequenceMenuItem = null;
-this.invertSequenceMenuItem = null;
-this.remove2LeftMenuItem = null;
-this.remove2RightMenuItem = null;
-this.removeGappedColumnMenuItem = null;
-this.removeAllGapsMenuItem = null;
-this.viewBoxesMenuItem = null;
-this.viewTextMenuItem = null;
-this.sortPairwiseMenuItem = null;
-this.sortIDMenuItem = null;
-this.sortLengthMenuItem = null;
-this.sortGroupMenuItem = null;
-this.removeRedundancyMenuItem = null;
-this.pairwiseAlignmentMenuItem = null;
-this.PCAMenuItem = null;
-this.averageDistanceTreeMenuItem = null;
-this.neighbourTreeMenuItem = null;
-this.borderLayout1 = null;
-this.statusBar = null;
-this.clustalColour = null;
-this.zappoColour = null;
-this.taylorColour = null;
-this.hydrophobicityColour = null;
-this.helixColour = null;
-this.strandColour = null;
-this.turnColour = null;
-this.buriedColour = null;
-this.purinePyrimidineColour = null;
-this.RNAInteractionColour = null;
-this.RNAHelixColour = null;
-this.userDefinedColour = null;
-this.PIDColour = null;
-this.BLOSUM62Colour = null;
-this.tcoffeeColour = null;
-this.njTreeBlosumMenuItem = null;
-this.avDistanceTreeBlosumMenuItem = null;
-this.annotationPanelMenuItem = null;
-this.colourTextMenuItem = null;
-this.displayNonconservedMenuItem = null;
-this.alProperties = null;
-this.overviewMenuItem = null;
-this.undoMenuItem = null;
-this.redoMenuItem = null;
-this.conservationMenuItem = null;
-this.noColourmenuItem = null;
-this.wrapMenuItem = null;
-this.renderGapsMenuItem = null;
-this.findMenuItem = null;
-this.abovePIDThreshold = null;
-this.nucleotideColour = null;
-this.deleteGroups = null;
-this.grpsFromSelection = null;
-this.createGroup = null;
-this.unGroup = null;
-this.$delete = null;
-this.copy = null;
-this.cut = null;
-this.pasteMenu = null;
-this.pasteNew = null;
-this.pasteThis = null;
-this.applyToAllGroups = null;
-this.$font = null;
-this.scaleAbove = null;
-this.scaleLeft = null;
-this.scaleRight = null;
-this.modifyPID = null;
-this.modifyConservation = null;
-this.autoCalculate = null;
-this.$sortByTree = null;
-this.sortByTreeMenu = null;
-this.inputText = null;
-this.documentation = null;
-this.about = null;
-this.seqLimits = null;
-this.centreColumnLabelFlag = null;
-this.followMouseOverFlag = null;
-this.showSequenceLogo = null;
-this.applyAutoAnnotationSettings = null;
-this.showConsensusHistogram = null;
-this.showGroupConsensus = null;
-this.showGroupConservation = null;
-this.normSequenceLogo = null;
-this.featureSettings = null;
-this.sequenceFeatures = null;
-this.annotationColour = null;
-this.annotationColumnSelection = null;
-this.invertColSel = null;
-this.showColumns = null;
-this.showSeqs = null;
-this.hideColumns = null;
-this.hideSequences = null;
-this.hideAllButSelection = null;
-this.hideAllSelection = null;
-this.showAllHidden = null;
-this.$newView = null;
-this.showAlignmentAnnotations = null;
-this.showSequenceAnnotations = null;
-this.sortAnnBySequence = null;
-this.sortAnnByLabel = null;
-this.showAutoFirst = null;
-this.showAutoLast = null;
-this.splitFrame = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AlignFrame", jalview.appletgui.EmbmenuFrame, [java.awt.event.ActionListener, java.awt.event.ItemListener, java.awt.event.KeyListener, jalview.api.AlignViewControllerGuiI]);
-Clazz.prepareFields (c$, function () {
-this.alignFrameMenuBar = new awt2swing.MenuBar ();
-this.fileMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.file"));
-this.loadApplication = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.view_full_application"));
-this.$loadTree = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.load_associated_tree"));
-this.$loadAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.load_features_annotations"));
-this.$outputFeatures = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.export_features").concat ("..."));
-this.$outputAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.export_annotations").concat ("..."));
-this.closeMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.close"));
-this.selectAllSequenceMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.select_all"));
-this.deselectAllSequenceMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.deselect_all"));
-this.invertSequenceMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.invert_selection"));
-this.remove2LeftMenuItem = new awt2swing.MenuItem ();
-this.remove2RightMenuItem = new awt2swing.MenuItem ();
-this.removeGappedColumnMenuItem = new awt2swing.MenuItem ();
-this.removeAllGapsMenuItem = new awt2swing.MenuItem ();
-this.viewBoxesMenuItem = new awt2swing.CheckboxMenuItem ();
-this.viewTextMenuItem = new awt2swing.CheckboxMenuItem ();
-this.sortPairwiseMenuItem = new awt2swing.MenuItem ();
-this.sortIDMenuItem = new awt2swing.MenuItem ();
-this.sortLengthMenuItem = new awt2swing.MenuItem ();
-this.sortGroupMenuItem = new awt2swing.MenuItem ();
-this.removeRedundancyMenuItem = new awt2swing.MenuItem ();
-this.pairwiseAlignmentMenuItem = new awt2swing.MenuItem ();
-this.PCAMenuItem = new awt2swing.MenuItem ();
-this.averageDistanceTreeMenuItem = new awt2swing.MenuItem ();
-this.neighbourTreeMenuItem = new awt2swing.MenuItem ();
-this.borderLayout1 = new java.awt.BorderLayout ();
-this.statusBar = new awt2swing.Label ();
-this.clustalColour = new awt2swing.MenuItem ();
-this.zappoColour = new awt2swing.MenuItem ();
-this.taylorColour = new awt2swing.MenuItem ();
-this.hydrophobicityColour = new awt2swing.MenuItem ();
-this.helixColour = new awt2swing.MenuItem ();
-this.strandColour = new awt2swing.MenuItem ();
-this.turnColour = new awt2swing.MenuItem ();
-this.buriedColour = new awt2swing.MenuItem ();
-this.purinePyrimidineColour = new awt2swing.MenuItem ();
-this.RNAInteractionColour = new awt2swing.MenuItem ();
-this.RNAHelixColour = new awt2swing.MenuItem ();
-this.userDefinedColour = new awt2swing.MenuItem ();
-this.PIDColour = new awt2swing.MenuItem ();
-this.BLOSUM62Colour = new awt2swing.MenuItem ();
-this.tcoffeeColour = new awt2swing.MenuItem ();
-this.njTreeBlosumMenuItem = new awt2swing.MenuItem ();
-this.avDistanceTreeBlosumMenuItem = new awt2swing.MenuItem ();
-this.annotationPanelMenuItem = new awt2swing.CheckboxMenuItem ();
-this.colourTextMenuItem = new awt2swing.CheckboxMenuItem ();
-this.displayNonconservedMenuItem = new awt2swing.CheckboxMenuItem ();
-this.alProperties = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.alignment_props"));
-this.overviewMenuItem = new awt2swing.MenuItem ();
-this.undoMenuItem = new awt2swing.MenuItem ();
-this.redoMenuItem = new awt2swing.MenuItem ();
-this.conservationMenuItem = new awt2swing.CheckboxMenuItem ();
-this.noColourmenuItem = new awt2swing.MenuItem ();
-this.wrapMenuItem = new awt2swing.CheckboxMenuItem ();
-this.renderGapsMenuItem = new awt2swing.CheckboxMenuItem ();
-this.findMenuItem = new awt2swing.MenuItem ();
-this.abovePIDThreshold = new awt2swing.CheckboxMenuItem ();
-this.nucleotideColour = new awt2swing.MenuItem ();
-this.deleteGroups = new awt2swing.MenuItem ();
-this.grpsFromSelection = new awt2swing.MenuItem ();
-this.createGroup = new awt2swing.MenuItem ();
-this.unGroup = new awt2swing.MenuItem ();
-this.$delete = new awt2swing.MenuItem ();
-this.copy = new awt2swing.MenuItem ();
-this.cut = new awt2swing.MenuItem ();
-this.pasteMenu = new awt2swing.Menu ();
-this.pasteNew = new awt2swing.MenuItem ();
-this.pasteThis = new awt2swing.MenuItem ();
-this.applyToAllGroups = new awt2swing.CheckboxMenuItem ();
-this.$font = new awt2swing.MenuItem ();
-this.scaleAbove = new awt2swing.CheckboxMenuItem ();
-this.scaleLeft = new awt2swing.CheckboxMenuItem ();
-this.scaleRight = new awt2swing.CheckboxMenuItem ();
-this.modifyPID = new awt2swing.MenuItem ();
-this.modifyConservation = new awt2swing.MenuItem ();
-this.$sortByTree = new awt2swing.CheckboxMenuItem ("Sort Alignment With New Tree", true);
-this.sortByTreeMenu = new awt2swing.Menu ();
-this.inputText = new awt2swing.MenuItem ();
-this.documentation = new awt2swing.MenuItem ();
-this.about = new awt2swing.MenuItem ();
-this.seqLimits = new awt2swing.CheckboxMenuItem ();
-this.centreColumnLabelFlag = new awt2swing.CheckboxMenuItem ();
-this.followMouseOverFlag = new awt2swing.CheckboxMenuItem ();
-this.showSequenceLogo = new awt2swing.CheckboxMenuItem ();
-this.applyAutoAnnotationSettings = new awt2swing.CheckboxMenuItem ();
-this.showConsensusHistogram = new awt2swing.CheckboxMenuItem ();
-this.showGroupConsensus = new awt2swing.CheckboxMenuItem ();
-this.showGroupConservation = new awt2swing.CheckboxMenuItem ();
-this.normSequenceLogo = new awt2swing.CheckboxMenuItem ();
-this.featureSettings = new awt2swing.MenuItem ();
-this.sequenceFeatures = new awt2swing.CheckboxMenuItem ();
-this.annotationColour = new awt2swing.MenuItem ();
-this.annotationColumnSelection = new awt2swing.MenuItem ();
-this.invertColSel = new awt2swing.MenuItem ();
-this.showColumns = new awt2swing.MenuItem ();
-this.showSeqs = new awt2swing.MenuItem ();
-this.hideColumns = new awt2swing.MenuItem ();
-this.hideSequences = new awt2swing.MenuItem ();
-this.hideAllButSelection = new awt2swing.MenuItem ();
-this.hideAllSelection = new awt2swing.MenuItem ();
-this.showAllHidden = new awt2swing.MenuItem ();
-this.$newView = new awt2swing.MenuItem ();
-});
-Clazz.makeConstructor (c$,
-function (al, applet, title, embedded) {
-this.construct (al, applet, title, embedded, true);
-}, "jalview.datamodel.AlignmentI,jalview.bin.JalviewLite,~S,~B");
-Clazz.makeConstructor (c$,
-function (al, applet, title, embedded, addToDisplay) {
-this.construct (al, null, null, applet, title, embedded, addToDisplay);
-}, "jalview.datamodel.AlignmentI,jalview.bin.JalviewLite,~S,~B,~B");
-Clazz.makeConstructor (c$,
-function (al, hiddenSeqs, columnSelection, applet, title, embedded) {
-this.construct (al, hiddenSeqs, columnSelection, applet, title, embedded, true);
-}, "jalview.datamodel.AlignmentI,~A,jalview.datamodel.ColumnSelection,jalview.bin.JalviewLite,~S,~B");
-Clazz.makeConstructor (c$,
-function (al, hiddenSeqs, columnSelection, applet, title, embedded, addToDisplay) {
-Clazz.superConstructor (this, jalview.appletgui.AlignFrame, []);
-if (applet != null) {
-this.jalviewServletURL = applet.jalviewServletURL;
-}try {
-this.jbInit ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-if (applet != null) {
-var param;
-try {
-param = applet.windowWidth;
-if (param != null) {
-var width = Integer.parseInt (param);
-this.frameWidth = width;
-}param = applet.windowHeight;
-if (param != null) {
-var height = Integer.parseInt (param);
-this.frameHeight = height;
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-}this.viewport = new jalview.appletgui.AlignViewport (al, applet);
-if (hiddenSeqs != null && hiddenSeqs.length > 0) {
-this.viewport.hideSequence (hiddenSeqs);
-}if (columnSelection != null) {
-this.viewport.setColumnSelection (columnSelection);
-}this.alignPanel = new jalview.appletgui.AlignmentPanel (this, this.viewport);
-this.avc = new jalview.controller.AlignViewController (this, this.viewport, this.alignPanel);
-this.viewport.updateConservation (this.alignPanel);
-this.viewport.updateConsensus (this.alignPanel);
-this.displayNonconservedMenuItem.setState (this.viewport.getShowUnconserved ());
-this.followMouseOverFlag.setState (this.viewport.isFollowHighlight ());
-this.showGroupConsensus.setState (this.viewport.isShowGroupConsensus ());
-this.showGroupConservation.setState (this.viewport.isShowGroupConservation ());
-this.showConsensusHistogram.setState (this.viewport.isShowConsensusHistogram ());
-this.showSequenceLogo.setState (this.viewport.isShowSequenceLogo ());
-this.normSequenceLogo.setState (this.viewport.isNormaliseSequenceLogo ());
-this.applyToAllGroups.setState (this.viewport.getColourAppliesToAllGroups ());
-this.annotationPanelMenuItem.setState (this.viewport.isShowAnnotation ());
-this.showAlignmentAnnotations.setState (this.viewport.isShowAnnotation ());
-this.showSequenceAnnotations.setState (this.viewport.isShowAnnotation ());
-this.seqLimits.setState (this.viewport.getShowJVSuffix ());
-if (applet != null) {
-var param = applet.sortBy;
-if (param != null) {
-if (param.equalsIgnoreCase ("Id")) {
-this.sortIDMenuItem_actionPerformed ();
-} else if (param.equalsIgnoreCase ("Pairwise Identity")) {
-this.sortPairwiseMenuItem_actionPerformed ();
-} else if (param.equalsIgnoreCase ("Length")) {
-this.sortLengthMenuItem_actionPerformed ();
-}}param = applet.wrap;
-if (param != null) {
-if (param.equalsIgnoreCase ("true")) {
-this.wrapMenuItem.setState (true);
-this.wrapMenuItem_actionPerformed ();
-}}param = applet.centrecolumnlabels;
-if (param != null) {
-this.centreColumnLabelFlag.setState (true);
-this.centreColumnLabelFlag_stateChanged ();
-}}if (this.viewport.getAlignment ().isNucleotide ()) {
-this.viewport.updateStrucConsensus (this.alignPanel);
-if (this.viewport.getAlignment ().hasRNAStructure ()) {
-this.RNAHelixColour.setEnabled (true);
-} else {
-this.RNAHelixColour.setEnabled (false);
-}} else {
-this.RNAHelixColour.setEnabled (false);
-this.purinePyrimidineColour.setEnabled (false);
-}this.addKeyListener (this);
-this.alignPanel.seqPanel.seqCanvas.addKeyListener (this);
-this.alignPanel.idPanel.idCanvas.addKeyListener (this);
-this.alignPanel.scalePanel.addKeyListener (this);
-this.alignPanel.annotationPanel.addKeyListener (this);
-this.alignPanel.annotationPanelHolder.addKeyListener (this);
-this.alignPanel.annotationSpaceFillerHolder.addKeyListener (this);
-this.alignPanel.alabels.addKeyListener (this);
-if (addToDisplay) {
-this.addToDisplay (embedded);
-}}, "jalview.datamodel.AlignmentI,~A,jalview.datamodel.ColumnSelection,jalview.bin.JalviewLite,~S,~B,~B");
-Clazz.defineMethod (c$, "addToDisplay",
-function (embedded) {
-this.createAlignFrameWindow (embedded);
-this.validate ();
-this.alignPanel.adjustAnnotationHeight ();
-this.alignPanel.paintAlignment (true);
-}, "~B");
-Clazz.defineMethod (c$, "getAlignViewport",
-function () {
-return this.viewport;
-});
-Clazz.defineMethod (c$, "getSeqcanvas",
-function () {
-return this.alignPanel.seqPanel.seqCanvas;
-});
-Clazz.defineMethod (c$, "parseFeaturesFile",
-function (file, type) {
-return this.parseFeaturesFile (file, type, true);
-}, "~S,~S");
-Clazz.defineMethod (c$, "parseFeaturesFile",
-function (file, type, autoenabledisplay) {
-var featureLinks = new java.util.Hashtable ();
-var featuresFile = false;
-try {
-featuresFile = new jalview.io.FeaturesFile (file, type).parse (this.viewport.getAlignment (), this.alignPanel.seqPanel.seqCanvas.getFeatureRenderer ().getFeatureColours (), featureLinks, true, this.viewport.applet.getDefaultParameter ("relaxedidmatch", false));
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-if (featuresFile) {
-if (featureLinks.size () > 0) {
-this.alignPanel.seqPanel.seqCanvas.getFeatureRenderer ().featureLinks = featureLinks;
-}if (autoenabledisplay) {
-this.viewport.setShowSequenceFeatures (true);
-this.sequenceFeatures.setState (true);
-}if (this.alignPanel.seqPanel.seqCanvas.fr != null) {
-this.alignPanel.seqPanel.seqCanvas.fr.findAllFeatures (true);
-}if (this.viewport.featureSettings != null) {
-this.viewport.featureSettings.refreshTable ();
-}this.alignPanel.paintAlignment (true);
-this.setStatus (jalview.util.MessageManager.getString ("label.successfully_added_features_alignment"));
-}return featuresFile;
-}, "~S,~S,~B");
-Clazz.overrideMethod (c$, "keyPressed",
-function (evt) {
-if (this.viewport.cursorMode && ((evt.getKeyCode () >= 48 && evt.getKeyCode () <= 57) || (evt.getKeyCode () >= 96 && evt.getKeyCode () <= 105)) && Character.isDigit (evt.getKeyChar ())) {
-this.alignPanel.seqPanel.numberPressed (evt.getKeyChar ());
-}switch (evt.getKeyCode ()) {
-case 27:
-this.deselectAllSequenceMenuItem_actionPerformed ();
-this.alignPanel.alabels.cancelDrag ();
-break;
-case 88:
-if (evt.isControlDown () || evt.isMetaDown ()) {
-this.cut_actionPerformed ();
-}break;
-case 67:
-if (this.viewport.cursorMode && !evt.isControlDown ()) {
-this.alignPanel.seqPanel.setCursorColumn ();
-}if (evt.isControlDown () || evt.isMetaDown ()) {
-this.copy_actionPerformed ();
-}break;
-case 86:
-if (evt.isControlDown ()) {
-this.paste (evt.isShiftDown ());
-}break;
-case 65:
-if (evt.isControlDown () || evt.isMetaDown ()) {
-this.selectAllSequenceMenuItem_actionPerformed ();
-}break;
-case 40:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.moveCursor (0, 1);
-} else {
-this.moveSelectedSequences (false);
-}break;
-case 38:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.moveCursor (0, -1);
-} else {
-this.moveSelectedSequences (true);
-}break;
-case 37:
-if (evt.isAltDown () || !this.viewport.cursorMode) {
-this.slideSequences (false, this.alignPanel.seqPanel.getKeyboardNo1 ());
-} else {
-this.alignPanel.seqPanel.moveCursor (-1, 0);
-}break;
-case 39:
-if (evt.isAltDown () || !this.viewport.cursorMode) {
-this.slideSequences (true, this.alignPanel.seqPanel.getKeyboardNo1 ());
-} else {
-this.alignPanel.seqPanel.moveCursor (1, 0);
-}break;
-case 32:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.insertGapAtCursor (evt.isControlDown () || evt.isShiftDown () || evt.isAltDown ());
-}break;
-case 127:
-case 8:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.deleteGapAtCursor (evt.isControlDown () || evt.isShiftDown () || evt.isAltDown ());
-} else {
-this.cut_actionPerformed ();
-this.alignPanel.seqPanel.seqCanvas.repaint ();
-}break;
-case 83:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.setCursorRow ();
-}break;
-case 80:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.setCursorPosition ();
-}break;
-case 10:
-case 44:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.setCursorRowAndColumn ();
-}break;
-case 81:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.setSelectionAreaAtCursor (true);
-}break;
-case 77:
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.setSelectionAreaAtCursor (false);
-}break;
-case 113:
-this.viewport.cursorMode = !this.viewport.cursorMode;
-this.setStatus (jalview.util.MessageManager.formatMessage ("label.keyboard_editing_mode", Clazz.newArray (-1, [(this.viewport.cursorMode ? "on" : "off")])));
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.seqCanvas.cursorX = this.viewport.startRes;
-this.alignPanel.seqPanel.seqCanvas.cursorY = this.viewport.startSeq;
-}break;
-case 70:
-if (evt.isControlDown ()) {
-this.findMenuItem_actionPerformed ();
-}break;
-case 72:
-{
-var toggleSeqs = !evt.isControlDown ();
-var toggleCols = !evt.isShiftDown ();
-this.toggleHiddenRegions (toggleSeqs, toggleCols);
-break;
-}case 33:
-if (this.viewport.getWrapAlignment ()) {
-this.alignPanel.scrollUp (true);
-} else {
-this.alignPanel.setScrollValues (this.viewport.startRes, this.viewport.startSeq - this.viewport.endSeq + this.viewport.startSeq);
-}break;
-case 34:
-if (this.viewport.getWrapAlignment ()) {
-this.alignPanel.scrollUp (false);
-} else {
-this.alignPanel.setScrollValues (this.viewport.startRes, this.viewport.startSeq + this.viewport.endSeq - this.viewport.startSeq);
-}break;
-case 90:
-if (evt.isControlDown ()) {
-this.undoMenuItem_actionPerformed ();
-}break;
-case 89:
-if (evt.isControlDown ()) {
-this.redoMenuItem_actionPerformed ();
-}break;
-case 76:
-if (evt.isControlDown ()) {
-this.trimAlignment (true);
-}break;
-case 82:
-if (evt.isControlDown ()) {
-this.trimAlignment (false);
-}break;
-case 69:
-if (evt.isControlDown ()) {
-if (evt.isShiftDown ()) {
-this.removeAllGapsMenuItem_actionPerformed ();
-} else {
-this.removeGappedColumnMenuItem_actionPerformed ();
-}}break;
-case 73:
-if (evt.isControlDown ()) {
-if (evt.isAltDown ()) {
-this.invertColSel_actionPerformed ();
-} else {
-this.invertSequenceMenuItem_actionPerformed ();
-}}break;
-case 71:
-if (evt.isControlDown ()) {
-if (evt.isShiftDown ()) {
-this.unGroup_actionPerformed ();
-} else {
-this.createGroup_actionPerformed ();
-}}break;
-case 85:
-if (evt.isControlDown ()) {
-this.deleteGroups_actionPerformed ();
-}break;
-case 84:
-if (evt.isControlDown ()) {
-this.newView (null);
-}break;
-}
-this.alignPanel.paintAlignment (true);
-}, "java.awt.event.KeyEvent");
-Clazz.defineMethod (c$, "toggleHiddenRegions",
-($fz = function (toggleSeqs, toggleCols) {
-var hide = false;
-var sg = this.viewport.getSelectionGroup ();
-if (!toggleSeqs && !toggleCols) {
-if ((this.viewport.getColumnSelection () != null && this.viewport.getColumnSelection ().getSelected () != null && this.viewport.getColumnSelection ().getSelected ().size () > 0) || (sg != null && sg.getSize () > 0 && sg.getStartRes () <= sg.getEndRes ())) {
-if (sg != null) {
-this.invertSequenceMenuItem_actionPerformed ();
-sg = this.viewport.getSelectionGroup ();
-toggleSeqs = true;
-}this.viewport.expandColSelection (sg, true);
-this.invertColSel_actionPerformed ();
-toggleCols = true;
-}}if (toggleSeqs) {
-if (sg != null && sg.getSize () != this.viewport.getAlignment ().getHeight ()) {
-hide = true;
-this.viewport.hideAllSelectedSeqs ();
-} else if (!(toggleCols && this.viewport.getColumnSelection ().getSelected ().size () > 0)) {
-this.viewport.showAllHiddenSeqs ();
-}}if (toggleCols) {
-if (this.viewport.getColumnSelection ().getSelected ().size () > 0) {
-this.viewport.hideSelectedColumns ();
-if (!toggleSeqs) {
-this.viewport.setSelectionGroup (sg);
-}} else if (!hide) {
-this.viewport.showAllHiddenColumns ();
-}}}, $fz.isPrivate = true, $fz), "~B,~B");
-Clazz.overrideMethod (c$, "keyReleased",
-function (evt) {
-}, "java.awt.event.KeyEvent");
-Clazz.overrideMethod (c$, "keyTyped",
-function (evt) {
-}, "java.awt.event.KeyEvent");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-var source = evt.getSource ();
-if (source === this.displayNonconservedMenuItem) {
-this.displayNonconservedMenuItem_actionPerformed ();
-} else if (source === this.colourTextMenuItem) {
-this.colourTextMenuItem_actionPerformed ();
-} else if (source === this.wrapMenuItem) {
-this.wrapMenuItem_actionPerformed ();
-} else if (source === this.scaleAbove) {
-this.viewport.setScaleAboveWrapped (this.scaleAbove.getState ());
-} else if (source === this.scaleLeft) {
-this.viewport.setScaleLeftWrapped (this.scaleLeft.getState ());
-} else if (source === this.scaleRight) {
-this.viewport.setScaleRightWrapped (this.scaleRight.getState ());
-} else if (source === this.seqLimits) {
-this.seqLimits_itemStateChanged ();
-} else if (source === this.viewBoxesMenuItem) {
-this.viewport.setShowBoxes (this.viewBoxesMenuItem.getState ());
-} else if (source === this.viewTextMenuItem) {
-this.viewport.setShowText (this.viewTextMenuItem.getState ());
-} else if (source === this.renderGapsMenuItem) {
-this.viewport.setRenderGaps (this.renderGapsMenuItem.getState ());
-} else if (source === this.annotationPanelMenuItem) {
-this.viewport.setShowAnnotation (this.annotationPanelMenuItem.getState ());
-this.alignPanel.setAnnotationVisible (this.annotationPanelMenuItem.getState ());
-} else if (source === this.sequenceFeatures) {
-this.viewport.setShowSequenceFeatures (this.sequenceFeatures.getState ());
-this.alignPanel.seqPanel.seqCanvas.repaint ();
-} else if (source === this.showAlignmentAnnotations) {
-this.setAnnotationsVisibility ();
-} else if (source === this.showSequenceAnnotations) {
-this.setAnnotationsVisibility ();
-} else if (source === this.sortAnnBySequence) {
-var newState = this.sortAnnBySequence.getState ();
-this.sortAnnByLabel.setState (false);
-this.setAnnotationSortOrder (newState ? jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.SEQUENCE_AND_LABEL : jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.NONE);
-this.setViewportAnnotationOrder ();
-} else if (source === this.sortAnnByLabel) {
-var newState = this.sortAnnByLabel.getState ();
-this.sortAnnBySequence.setState (false);
-this.setAnnotationSortOrder (newState ? jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.LABEL_AND_SEQUENCE : jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.NONE);
-this.setViewportAnnotationOrder ();
-} else if (source === this.showAutoFirst) {
-this.showAutoLast.setState (!this.showAutoFirst.getState ());
-this.setShowAutoCalculatedAbove (this.showAutoFirst.getState ());
-this.setViewportAnnotationOrder ();
-} else if (source === this.showAutoLast) {
-this.showAutoFirst.setState (!this.showAutoLast.getState ());
-this.setShowAutoCalculatedAbove (this.showAutoFirst.getState ());
-this.setViewportAnnotationOrder ();
-} else if (source === this.conservationMenuItem) {
-this.conservationMenuItem_actionPerformed ();
-} else if (source === this.abovePIDThreshold) {
-this.abovePIDThreshold_actionPerformed ();
-} else if (source === this.applyToAllGroups) {
-this.viewport.setColourAppliesToAllGroups (this.applyToAllGroups.getState ());
-} else if (source === this.autoCalculate) {
-this.viewport.autoCalculateConsensus = this.autoCalculate.getState ();
-} else if (source === this.$sortByTree) {
-this.viewport.sortByTree = this.$sortByTree.getState ();
-} else if (source === this.centreColumnLabelFlag) {
-this.centreColumnLabelFlag_stateChanged ();
-} else if (source === this.followMouseOverFlag) {
-this.mouseOverFlag_stateChanged ();
-} else if (source === this.showGroupConsensus) {
-this.showGroupConsensus_actionPerformed ();
-} else if (source === this.showGroupConservation) {
-this.showGroupConservation_actionPerformed ();
-} else if (source === this.showSequenceLogo) {
-this.showSequenceLogo_actionPerformed ();
-} else if (source === this.normSequenceLogo) {
-this.normSequenceLogo_actionPerformed ();
-} else if (source === this.showConsensusHistogram) {
-this.showConsensusHistogram_actionPerformed ();
-} else if (source === this.applyAutoAnnotationSettings) {
-this.applyAutoAnnotationSettings_actionPerformed ();
-}this.alignPanel.paintAlignment (true);
-}, "java.awt.event.ItemEvent");
-Clazz.defineMethod (c$, "setAnnotationsVisibility",
-($fz = function () {
-var showForAlignment = this.showAlignmentAnnotations.getState ();
-var showForSequences = this.showSequenceAnnotations.getState ();
-for (var aa, $aa = 0, $$aa = this.alignPanel.getAlignment ().getAlignmentAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
-var visible = (aa.sequenceRef == null ? showForAlignment : showForSequences);
-aa.visible = visible;
-}
-this.alignPanel.validateAnnotationDimensions (true);
-this.validate ();
-this.repaint ();
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "setAnnotationSortOrder",
-($fz = function (order) {
-this.annotationSortOrder = order;
-}, $fz.isPrivate = true, $fz), "jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
-Clazz.defineMethod (c$, "setViewportAnnotationOrder",
-($fz = function () {
-this.alignPanel.av.setSortAnnotationsBy (this.annotationSortOrder);
-this.alignPanel.av.setShowAutocalculatedAbove (this.showAutoCalculatedAbove);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "setShowAutoCalculatedAbove",
-($fz = function (showAbove) {
-this.showAutoCalculatedAbove = showAbove;
-}, $fz.isPrivate = true, $fz), "~B");
-Clazz.defineMethod (c$, "mouseOverFlag_stateChanged",
-($fz = function () {
-this.viewport.setFollowHighlight (this.followMouseOverFlag.getState ());
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "centreColumnLabelFlag_stateChanged",
-($fz = function () {
-this.viewport.centreColumnLabels = this.centreColumnLabelFlag.getState ();
-this.alignPanel.annotationPanel.repaint ();
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-var source = evt.getSource ();
-if (source === this.inputText) {
-this.inputText_actionPerformed ();
-} else if (source === this.$loadTree) {
-this.loadTree_actionPerformed ();
-} else if (source === this.loadApplication) {
-this.launchFullApplication ();
-} else if (source === this.$loadAnnotations) {
-this.loadAnnotations ();
-} else if (source === this.$outputAnnotations) {
-this.outputAnnotations (true);
-} else if (source === this.$outputFeatures) {
-this.outputFeatures (true, "Jalview");
-} else if (source === this.closeMenuItem) {
-this.closeMenuItem_actionPerformed ();
-} else if (source === this.copy) {
-this.copy_actionPerformed ();
-} else if (source === this.undoMenuItem) {
-this.undoMenuItem_actionPerformed ();
-} else if (source === this.redoMenuItem) {
-this.redoMenuItem_actionPerformed ();
-} else if (source === this.inputText) {
-this.inputText_actionPerformed ();
-} else if (source === this.closeMenuItem) {
-this.closeMenuItem_actionPerformed ();
-} else if (source === this.undoMenuItem) {
-this.undoMenuItem_actionPerformed ();
-} else if (source === this.redoMenuItem) {
-this.redoMenuItem_actionPerformed ();
-} else if (source === this.copy) {
-this.copy_actionPerformed ();
-} else if (source === this.pasteNew) {
-this.pasteNew_actionPerformed ();
-} else if (source === this.pasteThis) {
-this.pasteThis_actionPerformed ();
-} else if (source === this.cut) {
-this.cut_actionPerformed ();
-} else if (source === this.$delete) {
-this.delete_actionPerformed ();
-} else if (source === this.grpsFromSelection) {
-this.makeGrpsFromSelection_actionPerformed ();
-} else if (source === this.deleteGroups) {
-this.deleteGroups_actionPerformed ();
-} else if (source === this.selectAllSequenceMenuItem) {
-this.selectAllSequenceMenuItem_actionPerformed ();
-} else if (source === this.deselectAllSequenceMenuItem) {
-this.deselectAllSequenceMenuItem_actionPerformed ();
-} else if (source === this.invertSequenceMenuItem) {
-this.invertSequenceMenuItem_actionPerformed ();
-} else if (source === this.invertColSel) {
-this.viewport.invertColumnSelection ();
-this.alignPanel.paintAlignment (true);
-} else if (source === this.remove2LeftMenuItem) {
-this.trimAlignment (true);
-} else if (source === this.remove2RightMenuItem) {
-this.trimAlignment (false);
-} else if (source === this.removeGappedColumnMenuItem) {
-this.removeGappedColumnMenuItem_actionPerformed ();
-} else if (source === this.removeAllGapsMenuItem) {
-this.removeAllGapsMenuItem_actionPerformed ();
-} else if (source === this.findMenuItem) {
-this.findMenuItem_actionPerformed ();
-} else if (source === this.$font) {
- new jalview.appletgui.FontChooser (this.alignPanel);
-} else if (source === this.$newView) {
-this.newView (null);
-} else if (source === this.showColumns) {
-this.viewport.showAllHiddenColumns ();
-this.alignPanel.paintAlignment (true);
-} else if (source === this.showSeqs) {
-this.viewport.showAllHiddenSeqs ();
-this.alignPanel.paintAlignment (true);
-} else if (source === this.hideColumns) {
-this.viewport.hideSelectedColumns ();
-this.alignPanel.paintAlignment (true);
-} else if (source === this.hideSequences && this.viewport.getSelectionGroup () != null) {
-this.viewport.hideAllSelectedSeqs ();
-this.alignPanel.paintAlignment (true);
-} else if (source === this.hideAllButSelection) {
-this.toggleHiddenRegions (false, false);
-this.alignPanel.paintAlignment (true);
-} else if (source === this.hideAllSelection) {
-var sg = this.viewport.getSelectionGroup ();
-this.viewport.expandColSelection (sg, false);
-this.viewport.hideAllSelectedSeqs ();
-this.viewport.hideSelectedColumns ();
-this.alignPanel.paintAlignment (true);
-} else if (source === this.showAllHidden) {
-this.viewport.showAllHiddenColumns ();
-this.viewport.showAllHiddenSeqs ();
-this.alignPanel.paintAlignment (true);
-} else if (source === this.showGroupConsensus) {
-this.showGroupConsensus_actionPerformed ();
-} else if (source === this.showGroupConservation) {
-this.showGroupConservation_actionPerformed ();
-} else if (source === this.showSequenceLogo) {
-this.showSequenceLogo_actionPerformed ();
-} else if (source === this.normSequenceLogo) {
-this.normSequenceLogo_actionPerformed ();
-} else if (source === this.showConsensusHistogram) {
-this.showConsensusHistogram_actionPerformed ();
-} else if (source === this.applyAutoAnnotationSettings) {
-this.applyAutoAnnotationSettings_actionPerformed ();
-} else if (source === this.featureSettings) {
- new jalview.appletgui.FeatureSettings (this.alignPanel);
-} else if (source === this.alProperties) {
-var contents = new jalview.io.AlignmentProperties (this.viewport.getAlignment ()).formatAsString ();
-var cap = new jalview.appletgui.CutAndPasteTransfer (false, this);
-cap.setText (contents.toString ());
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.alignment_properties", Clazz.newArray (-1, [this.getTitle ()])), 400, 250);
-} else if (source === this.overviewMenuItem) {
-this.overviewMenuItem_actionPerformed ();
-} else if (source === this.noColourmenuItem) {
-this.changeColour (null);
-} else if (source === this.clustalColour) {
-this.abovePIDThreshold.setState (false);
-this.changeColour ( new jalview.schemes.ClustalxColourScheme (this.viewport.getAlignment (), null));
-} else if (source === this.zappoColour) {
-this.changeColour ( new jalview.schemes.ZappoColourScheme ());
-} else if (source === this.taylorColour) {
-this.changeColour ( new jalview.schemes.TaylorColourScheme ());
-} else if (source === this.hydrophobicityColour) {
-this.changeColour ( new jalview.schemes.HydrophobicColourScheme ());
-} else if (source === this.helixColour) {
-this.changeColour ( new jalview.schemes.HelixColourScheme ());
-} else if (source === this.strandColour) {
-this.changeColour ( new jalview.schemes.StrandColourScheme ());
-} else if (source === this.turnColour) {
-this.changeColour ( new jalview.schemes.TurnColourScheme ());
-} else if (source === this.buriedColour) {
-this.changeColour ( new jalview.schemes.BuriedColourScheme ());
-} else if (source === this.nucleotideColour) {
-this.changeColour ( new jalview.schemes.NucleotideColourScheme ());
-} else if (source === this.purinePyrimidineColour) {
-this.changeColour ( new jalview.schemes.PurinePyrimidineColourScheme ());
-} else if (source === this.RNAInteractionColour) {
-this.changeColour ( new jalview.schemes.RNAInteractionColourScheme ());
-} else if (source === this.RNAHelixColour) {
- new jalview.schemes.RNAHelicesColourChooser (this.viewport, this.alignPanel);
-} else if (source === this.modifyPID) {
-this.modifyPID_actionPerformed ();
-} else if (source === this.modifyConservation) {
-this.modifyConservation_actionPerformed ();
-} else if (source === this.userDefinedColour) {
- new jalview.appletgui.UserDefinedColours (this.alignPanel, null);
-} else if (source === this.PIDColour) {
-this.changeColour ( new jalview.schemes.PIDColourScheme ());
-} else if (source === this.BLOSUM62Colour) {
-this.changeColour ( new jalview.schemes.Blosum62ColourScheme ());
-} else if (source === this.tcoffeeColour) {
-this.changeColour ( new jalview.schemes.TCoffeeColourScheme (this.alignPanel.getAlignment ()));
-} else if (source === this.annotationColour) {
- new jalview.appletgui.AnnotationColourChooser (this.viewport, this.alignPanel);
-} else if (source === this.annotationColumnSelection) {
- new jalview.appletgui.AnnotationColumnChooser (this.viewport, this.alignPanel);
-} else if (source === this.sortPairwiseMenuItem) {
-this.sortPairwiseMenuItem_actionPerformed ();
-} else if (source === this.sortIDMenuItem) {
-this.sortIDMenuItem_actionPerformed ();
-} else if (source === this.sortLengthMenuItem) {
-this.sortLengthMenuItem_actionPerformed ();
-} else if (source === this.sortGroupMenuItem) {
-this.sortGroupMenuItem_actionPerformed ();
-} else if (source === this.removeRedundancyMenuItem) {
-this.removeRedundancyMenuItem_actionPerformed ();
-} else if (source === this.pairwiseAlignmentMenuItem) {
-this.pairwiseAlignmentMenuItem_actionPerformed ();
-} else if (source === this.PCAMenuItem) {
-this.PCAMenuItem_actionPerformed ();
-} else if (source === this.averageDistanceTreeMenuItem) {
-this.averageDistanceTreeMenuItem_actionPerformed ();
-} else if (source === this.neighbourTreeMenuItem) {
-this.neighbourTreeMenuItem_actionPerformed ();
-} else if (source === this.njTreeBlosumMenuItem) {
-this.njTreeBlosumMenuItem_actionPerformed ();
-} else if (source === this.avDistanceTreeBlosumMenuItem) {
-this.avTreeBlosumMenuItem_actionPerformed ();
-} else if (source === this.documentation) {
-this.documentation_actionPerformed ();
-} else if (source === this.about) {
-this.about_actionPerformed ();
-}}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "inputText_actionPerformed",
-function () {
-var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.input_cut_paste"), 500, 500);
-});
-Clazz.defineMethod (c$, "outputText_actionPerformed",
-function (e) {
-var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.alignment_output_command", Clazz.newArray (-1, [e.getActionCommand ()])), 600, 500);
-var fr = this.alignPanel.cloneFeatureRenderer ();
-cap.setText ( new jalview.io.AppletFormatAdapter (this.alignPanel).formatSequences (e.getActionCommand (), this.viewport.getAlignment (), this.viewport.getShowJVSuffix ()));
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "loadAnnotations",
-function () {
-var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
-cap.setText (jalview.util.MessageManager.getString ("label.paste_features_annotations_Tcoffee_here"));
-cap.setAnnotationImport ();
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("action.paste_annotations"), 400, 300);
-});
-Clazz.defineMethod (c$, "outputAnnotations",
-function (displayTextbox) {
-var annotation = new jalview.io.AnnotationFile ().printAnnotationsForView (this.viewport);
-if (displayTextbox) {
-var cap = new jalview.appletgui.CutAndPasteTransfer (false, this);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.annotations"), 600, 500);
-cap.setText (annotation);
-}return annotation;
-}, "~B");
-Clazz.defineMethod (c$, "getDisplayedFeatureCols",
-($fz = function () {
-if (this.alignPanel.getFeatureRenderer () != null && this.viewport.getFeaturesDisplayed () != null) {
-return this.alignPanel.getFeatureRenderer ().getDisplayedFeatureCols ();
-}return null;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "outputFeatures",
-function (displayTextbox, format) {
-var features;
-if (format.equalsIgnoreCase ("Jalview")) {
-features = new jalview.io.FeaturesFile ().printJalviewFormat (this.viewport.getAlignment ().getSequencesArray (), this.getDisplayedFeatureCols ());
-} else {
-features = new jalview.io.FeaturesFile ().printGFFFormat (this.viewport.getAlignment ().getSequencesArray (), this.getDisplayedFeatureCols ());
-}if (displayTextbox) {
-var frimport = false;
-if (features == null || features.equals ("No Features Visible")) {
-features = "# No features visible - paste some and import them here.";
-frimport = true;
-}var cap = new jalview.appletgui.CutAndPasteTransfer (frimport, this);
-if (frimport) {
-cap.setAnnotationImport ();
-}var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.features"), 600, 500);
-cap.setText (features);
-} else {
-if (features == null) {
-features = "";
-}}return features;
-}, "~B,~S");
-Clazz.defineMethod (c$, "launchFullApplication",
-function () {
-var url = new StringBuffer (this.jalviewServletURL);
-var firstSep = url.lastIndexOf ("?") > url.lastIndexOf ("/") ? "&" : "?";
-url.append (firstSep);
-var applet = this.viewport.applet;
-var s = applet.startupFile;
-url.append ("open=" + this.appendProtocol (s));
-if (this.viewport.applet.features != null) {
-url.append ("&features=");
-url.append (this.appendProtocol (applet.features));
-}if (applet.annotations != null) {
-url.append ("&annotations=");
-url.append (this.appendProtocol (applet.annotations));
-}if (applet.jnetFile != null) {
-url.append ("&annotations=");
-url.append (this.appendProtocol (applet.jnetFile));
-}if (applet.defaultColour != null) {
-url.append ("&colour=" + this.removeWhiteSpace (applet.defaultColour));
-}if (applet.userDefinedColour != null) {
-url.append ("&colour=" + this.removeWhiteSpace (applet.userDefinedColour));
-}if (applet.treeFile != null) {
-url.append ("&tree=" + this.appendProtocol (applet.treeFile));
-}this.showURL (url.toString (), "FULL_APP");
-});
-Clazz.defineMethod (c$, "removeWhiteSpace",
-function (colour) {
-var sb = new StringBuffer ();
-for (var i = 0; i < colour.length; i++) {
-if (Character.isWhitespace (colour.charAt (i))) {
-sb.append ("%20");
-} else {
-sb.append (colour.charAt (i));
-}}
-return sb.toString ();
-}, "~S");
-Clazz.defineMethod (c$, "appendProtocol",
-function (url) {
-try {
- new java.net.URL (url);
-url = java.net.URLEncoder.encode (url);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, java.net.MalformedURLException)) {
-url = this.viewport.applet.getCodeBase () + url;
-} else {
-throw ex;
-}
-}
-return url;
-}, "~S");
-Clazz.defineMethod (c$, "closeMenuItem_actionPerformed",
-function () {
-jalview.appletgui.PaintRefresher.RemoveComponent (this.alignPanel);
-if (this.alignPanel.seqPanel != null && this.alignPanel.seqPanel.seqCanvas != null) {
-jalview.appletgui.PaintRefresher.RemoveComponent (this.alignPanel.seqPanel.seqCanvas);
-}if (this.alignPanel.idPanel != null && this.alignPanel.idPanel.idCanvas != null) {
-jalview.appletgui.PaintRefresher.RemoveComponent (this.alignPanel.idPanel.idCanvas);
-}if (jalview.appletgui.PaintRefresher.components.size () == 0 && this.viewport.applet == null) {
-System.exit (0);
-} else {
-}this.viewport = null;
-this.alignPanel = null;
-this.dispose ();
-});
-Clazz.defineMethod (c$, "updateEditMenuBar",
-function () {
-if (this.viewport.getHistoryList ().size () > 0) {
-this.undoMenuItem.setEnabled (true);
-var command = this.viewport.getHistoryList ().peek ();
-this.undoMenuItem.setLabel (jalview.util.MessageManager.formatMessage ("label.undo_command", Clazz.newArray (-1, [command.getDescription ()])));
-} else {
-this.undoMenuItem.setEnabled (false);
-this.undoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.undo"));
-}if (this.viewport.getRedoList ().size () > 0) {
-this.redoMenuItem.setEnabled (true);
-var command = this.viewport.getRedoList ().peek ();
-this.redoMenuItem.setLabel (jalview.util.MessageManager.formatMessage ("label.redo_command", Clazz.newArray (-1, [command.getDescription ()])));
-} else {
-this.redoMenuItem.setEnabled (false);
-this.redoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.redo"));
-}});
-Clazz.overrideMethod (c$, "addHistoryItem",
-function (command) {
-if (command.getSize () > 0) {
-this.viewport.addToHistoryList (command);
-this.viewport.clearRedoList ();
-this.updateEditMenuBar ();
-this.viewport.updateHiddenColumns ();
-}}, "jalview.commands.CommandI");
-Clazz.defineMethod (c$, "undoMenuItem_actionPerformed",
-function () {
-if (this.viewport.getHistoryList ().isEmpty ()) {
-return;
-}var command = this.viewport.getHistoryList ().pop ();
-this.viewport.addToRedoList (command);
-command.undoCommand (null);
-var originalSource = this.getOriginatingSource (command);
-if (originalSource !== this.viewport) {
-System.err.println ("Warning: Viewport object mismatch whilst undoing");
-}originalSource.updateHiddenColumns ();
-this.updateEditMenuBar ();
-originalSource.firePropertyChange ("alignment", null, originalSource.getAlignment ().getSequences ());
-});
-Clazz.defineMethod (c$, "redoMenuItem_actionPerformed",
-function () {
-if (this.viewport.getRedoList ().isEmpty ()) {
-return;
-}var command = this.viewport.getRedoList ().pop ();
-this.viewport.addToHistoryList (command);
-command.doCommand (null);
-var originalSource = this.getOriginatingSource (command);
-if (originalSource !== this.viewport) {
-System.err.println ("Warning: Viewport object mismatch whilst re-doing");
-}originalSource.updateHiddenColumns ();
-this.updateEditMenuBar ();
-originalSource.firePropertyChange ("alignment", null, originalSource.getAlignment ().getSequences ());
-});
-Clazz.defineMethod (c$, "getOriginatingSource",
-function (command) {
-var originalSource = null;
-var al = null;
-if (Clazz.instanceOf (command, jalview.commands.EditCommand)) {
-var editCommand = command;
-al = editCommand.getAlignment ();
-var comps = jalview.appletgui.PaintRefresher.components.get (this.viewport.getSequenceSetId ());
-for (var i = 0; i < comps.size (); i++) {
-if (Clazz.instanceOf (comps.elementAt (i), jalview.appletgui.AlignmentPanel)) {
-if (al === (comps.elementAt (i)).av.getAlignment ()) {
-originalSource = (comps.elementAt (i)).av;
-break;
-}}}
-}if (originalSource == null) {
-if (al != null) {
-jalview.appletgui.PaintRefresher.validateSequences (al, this.viewport.getAlignment ());
-}originalSource = this.viewport;
-}return originalSource;
-}, "jalview.commands.CommandI");
-Clazz.defineMethod (c$, "moveSelectedSequences",
-function (up) {
-var sg = this.viewport.getSelectionGroup ();
-if (sg == null) {
-return;
-}this.viewport.getAlignment ().moveSelectedSequencesByOne (sg, up ? null : this.viewport.getHiddenRepSequences (), up);
-this.alignPanel.paintAlignment (true);
-var complement = this.viewport.getCodingComplement ();
-if (complement != null) {
-var mappedSelection = jalview.util.MappingUtils.mapSequenceGroup (sg, this.viewport, complement);
-complement.getAlignment ().moveSelectedSequencesByOne (mappedSelection, up ? null : complement.getHiddenRepSequences (), up);
-}}, "~B");
-Clazz.defineMethod (c$, "slideSequences",
-function (right, size) {
-var sg = new java.util.Vector ();
-if (this.viewport.cursorMode) {
-sg.add (this.viewport.getAlignment ().getSequenceAt (this.alignPanel.seqPanel.seqCanvas.cursorY));
-} else if (this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () != this.viewport.getAlignment ().getHeight ()) {
-sg = this.viewport.getSelectionGroup ().getSequences (this.viewport.getHiddenRepSequences ());
-}if (sg.size () < 1) {
-return;
-}var invertGroup = new java.util.Vector ();
-for (var i = 0; i < this.viewport.getAlignment ().getHeight (); i++) {
-if (!sg.contains (this.viewport.getAlignment ().getSequenceAt (i))) {
-invertGroup.addElement (this.viewport.getAlignment ().getSequenceAt (i));
-}}
-var seqs1 = sg.toArray ( new Array (sg.size ()));
-var seqs2 = invertGroup.toArray ( new Array (invertGroup.size ()));
-for (var i = 0; i < invertGroup.size (); i++) {
-seqs2[i] = invertGroup.elementAt (i);
-}
-var ssc;
-if (right) {
-ssc = new jalview.commands.SlideSequencesCommand ("Slide Sequences", seqs2, seqs1, size, this.viewport.getGapCharacter ());
-} else {
-ssc = new jalview.commands.SlideSequencesCommand ("Slide Sequences", seqs1, seqs2, size, this.viewport.getGapCharacter ());
-}var groupAdjustment = 0;
-if (ssc.getGapsInsertedBegin () && right) {
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.moveCursor (size, 0);
-} else {
-groupAdjustment = size;
-}} else if (!ssc.getGapsInsertedBegin () && !right) {
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.moveCursor (-size, 0);
-} else {
-groupAdjustment = -size;
-}}if (groupAdjustment != 0) {
-this.viewport.getSelectionGroup ().setStartRes (this.viewport.getSelectionGroup ().getStartRes () + groupAdjustment);
-this.viewport.getSelectionGroup ().setEndRes (this.viewport.getSelectionGroup ().getEndRes () + groupAdjustment);
-}var appendHistoryItem = false;
-var historyList = this.viewport.getHistoryList ();
-if (historyList != null && historyList.size () > 0 && Clazz.instanceOf (historyList.peek (), jalview.commands.SlideSequencesCommand)) {
-appendHistoryItem = ssc.appendSlideCommand (historyList.peek ());
-}if (!appendHistoryItem) {
-this.addHistoryItem (ssc);
-}this.repaint ();
-}, "~B,~N");
-Clazz.defineMethod (c$, "copy_actionPerformed",
-function () {
-if (this.viewport.getSelectionGroup () == null) {
-return;
-}var sg = this.viewport.getSelectionGroup ();
-jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer ();
-var orderedSeqs = new java.util.HashMap ();
-for (var i = 0; i < sg.getSize (); i++) {
-var seq = sg.getSequenceAt (i);
-var index = this.viewport.getAlignment ().findIndex (seq);
-orderedSeqs.put (new Integer (index), seq);
-}
-var index = 0;
-var startRes;
-var endRes;
-var ch;
-if (this.viewport.hasHiddenColumns () && this.viewport.getSelectionGroup () != null) {
-jalview.appletgui.AlignFrame.copiedHiddenColumns = new java.util.Vector ();
-var hiddenOffset = this.viewport.getSelectionGroup ().getStartRes ();
-for (var region, $region = this.viewport.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
-jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement ( Clazz.newIntArray (-1, [region[0] - hiddenOffset, region[1] - hiddenOffset]));
-}
-} else {
-jalview.appletgui.AlignFrame.copiedHiddenColumns = null;
-}for (var i = 0; i < sg.getSize (); i++) {
-var seq = null;
-while (seq == null) {
-if (orderedSeqs.containsKey (new Integer (index))) {
-seq = orderedSeqs.get (new Integer (index));
-index++;
-break;
-} else {
-index++;
-}}
-startRes = seq.findPosition (sg.getStartRes ());
-endRes = 0;
-for (var j = 0; j < sg.getEndRes () + 1 && j < seq.getLength (); j++) {
-ch = seq.getCharAt (j);
-if (!jalview.util.Comparison.isGap ((ch))) {
-endRes++;
-}}
-if (endRes > 0) {
-endRes += seq.getStart () - 1;
-}jalview.appletgui.AlignFrame.copiedSequences.append (seq.getName () + "\t" + startRes + "\t" + endRes + "\t" + seq.getSequenceAsString (sg.getStartRes (), sg.getEndRes () + 1) + "\n");
-}
-});
-Clazz.defineMethod (c$, "pasteNew_actionPerformed",
-function () {
-this.paste (true);
-});
-Clazz.defineMethod (c$, "pasteThis_actionPerformed",
-function () {
-this.paste (false);
-});
-Clazz.defineMethod (c$, "paste",
-function (newAlignment) {
-try {
-if (jalview.appletgui.AlignFrame.copiedSequences == null) {
-return;
-}var st = new java.util.StringTokenizer (jalview.appletgui.AlignFrame.copiedSequences.toString ());
-var seqs = new java.util.Vector ();
-while (st.hasMoreElements ()) {
-var name = st.nextToken ();
-var start = Integer.parseInt (st.nextToken ());
-var end = Integer.parseInt (st.nextToken ());
-seqs.addElement ( new jalview.datamodel.Sequence (name, st.nextToken (), start, end));
-}
-var newSeqs = new Array (seqs.size ());
-for (var i = 0; i < seqs.size (); i++) {
-newSeqs[i] = seqs.elementAt (i);
-}
-if (newAlignment) {
-var newtitle = jalview.util.MessageManager.getString ("label.copied_sequences");
-if (this.getTitle ().startsWith (jalview.util.MessageManager.getString ("label.copied_sequences"))) {
-newtitle = this.getTitle ();
-} else {
-newtitle = newtitle.concat (jalview.util.MessageManager.formatMessage ("label.from_msname", Clazz.newArray (-1, [this.getTitle ()])));
-}var af = new jalview.appletgui.AlignFrame ( new jalview.datamodel.Alignment (newSeqs), this.viewport.applet, newtitle, false);
-if (jalview.appletgui.AlignFrame.copiedHiddenColumns != null) {
-for (var i = 0; i < jalview.appletgui.AlignFrame.copiedHiddenColumns.size (); i++) {
-var region = jalview.appletgui.AlignFrame.copiedHiddenColumns.elementAt (i);
-af.viewport.hideColumns (region[0], region[1]);
-}
-}jalview.bin.JalviewLite.addFrame (af, newtitle, this.frameWidth, this.frameHeight);
-} else {
-this.addSequences (newSeqs);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-}, "~B");
-Clazz.defineMethod (c$, "addSequences",
-function (seqs) {
-for (var i = 0; i < seqs.length; i++) {
-this.viewport.getAlignment ().addSequence (seqs[i]);
-}
-this.addHistoryItem ( new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("label.add_sequences"), jalview.commands.EditCommand.Action.PASTE, seqs, 0, this.viewport.getAlignment ().getWidth (), this.viewport.getAlignment ()));
-this.viewport.setEndSeq (this.viewport.getAlignment ().getHeight ());
-this.viewport.getAlignment ().getWidth ();
-this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
-}, "~A");
-Clazz.defineMethod (c$, "cut_actionPerformed",
-function () {
-this.copy_actionPerformed ();
-this.delete_actionPerformed ();
-});
-Clazz.defineMethod (c$, "delete_actionPerformed",
-function () {
-var sg = this.viewport.getSelectionGroup ();
-if (sg == null) {
-return;
-}var seqs = new java.util.Vector ();
-var seq;
-for (var i = 0; i < sg.getSize (); i++) {
-seq = sg.getSequenceAt (i);
-seqs.addElement (seq);
-}
-if (sg.getSize () == this.viewport.getAlignment ().getHeight ()) {
-this.viewport.getColumnSelection ().removeElements (sg.getStartRes (), sg.getEndRes () + 1);
-}var cut = new Array (seqs.size ());
-for (var i = 0; i < seqs.size (); i++) {
-cut[i] = seqs.elementAt (i);
-}
-this.addHistoryItem ( new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("label.cut_sequences"), jalview.commands.EditCommand.Action.CUT, cut, sg.getStartRes (), sg.getEndRes () - sg.getStartRes () + 1, this.viewport.getAlignment ()));
-this.viewport.setSelectionGroup (null);
-this.viewport.getAlignment ().deleteGroup (sg);
-this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
-if (this.viewport.getAlignment ().getHeight () < 1) {
-this.setVisible (false);
-}this.viewport.sendSelection ();
-});
-Clazz.defineMethod (c$, "showGroupConsensus_actionPerformed",
-function () {
-this.viewport.setShowGroupConsensus (this.showGroupConsensus.getState ());
-this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
-});
-Clazz.defineMethod (c$, "showGroupConservation_actionPerformed",
-function () {
-this.viewport.setShowGroupConservation (this.showGroupConservation.getState ());
-this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
-});
-Clazz.defineMethod (c$, "showConsensusHistogram_actionPerformed",
-function () {
-this.viewport.setShowConsensusHistogram (this.showConsensusHistogram.getState ());
-this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
-});
-Clazz.defineMethod (c$, "showSequenceLogo_actionPerformed",
-function () {
-this.viewport.setShowSequenceLogo (this.showSequenceLogo.getState ());
-this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
-});
-Clazz.defineMethod (c$, "normSequenceLogo_actionPerformed",
-function () {
-this.showSequenceLogo.setState (true);
-this.viewport.setShowSequenceLogo (true);
-this.viewport.setNormaliseSequenceLogo (this.normSequenceLogo.getState ());
-this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
-});
-Clazz.defineMethod (c$, "applyAutoAnnotationSettings_actionPerformed",
-function () {
-this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
-});
-Clazz.defineMethod (c$, "makeGrpsFromSelection_actionPerformed",
-function () {
-if (this.avc.makeGroupsFromSelection ()) {
-jalview.appletgui.PaintRefresher.Refresh (this, this.viewport.getSequenceSetId ());
-this.alignPanel.updateAnnotation ();
-this.alignPanel.paintAlignment (true);
-}});
-Clazz.defineMethod (c$, "createGroup_actionPerformed",
-function () {
-this.avc.createGroup ();
-});
-Clazz.defineMethod (c$, "unGroup_actionPerformed",
-function () {
-if (this.avc.unGroup ()) {
-this.alignPanel.alignmentChanged ();
-}});
-Clazz.defineMethod (c$, "deleteGroups_actionPerformed",
-function () {
-if (this.avc.deleteGroups ()) {
-this.alignPanel.alignmentChanged ();
-}});
-Clazz.defineMethod (c$, "selectAllSequenceMenuItem_actionPerformed",
-function () {
-var sg = new jalview.datamodel.SequenceGroup ();
-for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
-sg.addSequence (this.viewport.getAlignment ().getSequenceAt (i), false);
-}
-sg.setEndRes (this.viewport.getAlignment ().getWidth () - 1);
-this.viewport.setSelectionGroup (sg);
-this.alignPanel.paintAlignment (true);
-jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
-this.viewport.sendSelection ();
-});
-Clazz.defineMethod (c$, "deselectAllSequenceMenuItem_actionPerformed",
-function () {
-if (this.viewport.cursorMode) {
-this.alignPanel.seqPanel.keyboardNo1 = null;
-this.alignPanel.seqPanel.keyboardNo2 = null;
-}this.viewport.setSelectionGroup (null);
-this.viewport.getColumnSelection ().clear ();
-this.viewport.setSelectionGroup (null);
-this.alignPanel.idPanel.idCanvas.searchResults = null;
-this.alignPanel.seqPanel.seqCanvas.highlightSearchResults (null);
-this.alignPanel.paintAlignment (true);
-jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
-this.viewport.sendSelection ();
-});
-Clazz.defineMethod (c$, "invertSequenceMenuItem_actionPerformed",
-function () {
-var sg = this.viewport.getSelectionGroup ();
-for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
-sg.addOrRemove (this.viewport.getAlignment ().getSequenceAt (i), false);
-}
-jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
-this.viewport.sendSelection ();
-});
-Clazz.defineMethod (c$, "invertColSel_actionPerformed",
-function () {
-this.viewport.invertColumnSelection ();
-this.alignPanel.paintAlignment (true);
-jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
-this.viewport.sendSelection ();
-});
-Clazz.defineMethod (c$, "trimAlignment",
-function (trimLeft) {
-var colSel = this.viewport.getColumnSelection ();
-var column;
-if (colSel.size () > 0) {
-if (trimLeft) {
-column = colSel.getMin ();
-} else {
-column = colSel.getMax ();
-}var seqs;
-if (this.viewport.getSelectionGroup () != null) {
-seqs = this.viewport.getSelectionGroup ().getSequencesAsArray (this.viewport.getHiddenRepSequences ());
-} else {
-seqs = this.viewport.getAlignment ().getSequencesArray ();
-}var trimRegion;
-if (trimLeft) {
-trimRegion = new jalview.commands.TrimRegionCommand ("Remove Left", jalview.commands.TrimRegionCommand.TRIM_LEFT, seqs, column, this.viewport.getAlignment (), this.viewport.getColumnSelection (), this.viewport.getSelectionGroup ());
-this.viewport.setStartRes (0);
-} else {
-trimRegion = new jalview.commands.TrimRegionCommand ("Remove Right", jalview.commands.TrimRegionCommand.TRIM_RIGHT, seqs, column, this.viewport.getAlignment (), this.viewport.getColumnSelection (), this.viewport.getSelectionGroup ());
-}this.setStatus (jalview.util.MessageManager.formatMessage ("label.removed_columns", Clazz.newArray (-1, [Integer.$valueOf (trimRegion.getSize ()).toString ()])));
-this.addHistoryItem (trimRegion);
-for (var sg, $sg = this.viewport.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if ((trimLeft && !sg.adjustForRemoveLeft (column)) || (!trimLeft && !sg.adjustForRemoveRight (column))) {
-this.viewport.getAlignment ().deleteGroup (sg);
-}}
-this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
-}}, "~B");
-Clazz.defineMethod (c$, "removeGappedColumnMenuItem_actionPerformed",
-function () {
-var start = 0;
-var end = this.viewport.getAlignment ().getWidth () - 1;
-var seqs;
-if (this.viewport.getSelectionGroup () != null) {
-seqs = this.viewport.getSelectionGroup ().getSequencesAsArray (this.viewport.getHiddenRepSequences ());
-start = this.viewport.getSelectionGroup ().getStartRes ();
-end = this.viewport.getSelectionGroup ().getEndRes ();
-} else {
-seqs = this.viewport.getAlignment ().getSequencesArray ();
-}var removeGapCols = new jalview.commands.RemoveGapColCommand ("Remove Gapped Columns", seqs, start, end, this.viewport.getAlignment ());
-this.addHistoryItem (removeGapCols);
-this.setStatus (jalview.util.MessageManager.formatMessage ("label.removed_empty_columns", Clazz.newArray (-1, [Integer.$valueOf (removeGapCols.getSize ()).toString ()])));
-var seq = this.viewport.getAlignment ().getSequenceAt (0);
-var startRes = seq.findPosition (this.viewport.startRes);
-this.viewport.setStartRes (seq.findIndex (startRes) - 1);
-this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
-});
-Clazz.defineMethod (c$, "removeAllGapsMenuItem_actionPerformed",
-function () {
-var start = 0;
-var end = this.viewport.getAlignment ().getWidth () - 1;
-var seqs;
-if (this.viewport.getSelectionGroup () != null) {
-seqs = this.viewport.getSelectionGroup ().getSequencesAsArray (this.viewport.getHiddenRepSequences ());
-start = this.viewport.getSelectionGroup ().getStartRes ();
-end = this.viewport.getSelectionGroup ().getEndRes ();
-} else {
-seqs = this.viewport.getAlignment ().getSequencesArray ();
-}var seq = this.viewport.getAlignment ().getSequenceAt (0);
-var startRes = seq.findPosition (this.viewport.startRes);
-this.addHistoryItem ( new jalview.commands.RemoveGapsCommand ("Remove Gaps", seqs, start, end, this.viewport.getAlignment ()));
-this.viewport.setStartRes (seq.findIndex (startRes) - 1);
-this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
-});
-Clazz.defineMethod (c$, "findMenuItem_actionPerformed",
-function () {
- new jalview.appletgui.Finder (this.alignPanel);
-});
-Clazz.defineMethod (c$, "newView",
-function (viewtitle) {
-var newal;
-if (this.viewport.hasHiddenRows ()) {
-newal = new jalview.datamodel.Alignment (this.viewport.getAlignment ().getHiddenSequences ().getFullAlignment ().getSequencesArray ());
-} else {
-newal = new jalview.datamodel.Alignment (this.viewport.getAlignment ().getSequencesArray ());
-}if (this.viewport.getAlignment ().getAlignmentAnnotation () != null) {
-for (var i = 0; i < this.viewport.getAlignment ().getAlignmentAnnotation ().length; i++) {
-if (!this.viewport.getAlignment ().getAlignmentAnnotation ()[i].autoCalculated) {
-newal.addAnnotation (this.viewport.getAlignment ().getAlignmentAnnotation ()[i]);
-}}
-}var newaf = new jalview.appletgui.AlignFrame (newal, this.viewport.applet, "", false);
-newaf.viewport.setSequenceSetId (this.alignPanel.av.getSequenceSetId ());
-jalview.appletgui.PaintRefresher.Register (this.alignPanel, this.alignPanel.av.getSequenceSetId ());
-jalview.appletgui.PaintRefresher.Register (newaf.alignPanel, newaf.alignPanel.av.getSequenceSetId ());
-jalview.appletgui.PaintRefresher.Register (newaf.alignPanel.idPanel.idCanvas, newaf.alignPanel.av.getSequenceSetId ());
-jalview.appletgui.PaintRefresher.Register (newaf.alignPanel.seqPanel.seqCanvas, newaf.alignPanel.av.getSequenceSetId ());
-var comps = jalview.appletgui.PaintRefresher.components.get (this.viewport.getSequenceSetId ());
-var viewSize = -1;
-for (var i = 0; i < comps.size (); i++) {
-if (Clazz.instanceOf (comps.elementAt (i), jalview.appletgui.AlignmentPanel)) {
-viewSize++;
-}}
-var title = String.instantialize (this.getTitle ());
-if (viewtitle != null) {
-title = viewtitle + " ( " + title + ")";
-} else {
-if (title.indexOf ("(View") > -1) {
-title = title.substring (0, title.indexOf ("(View"));
-}title += "(View " + viewSize + ")";
-}newaf.setTitle (title.toString ());
-newaf.viewport.setHistoryList (this.viewport.getHistoryList ());
-newaf.viewport.setRedoList (this.viewport.getRedoList ());
-return newaf;
-}, "~S");
-Clazz.defineMethod (c$, "getFeatureGroups",
-function () {
-var fr = null;
-if (this.alignPanel != null && (fr = this.alignPanel.getFeatureRenderer ()) != null) {
-var gps = fr.getFeatureGroups ();
-var _gps = gps.toArray ( new Array (gps.size ()));
-return _gps;
-}return null;
-});
-Clazz.defineMethod (c$, "getFeatureGroupsOfState",
-function (visible) {
-var fr = null;
-if (this.alignPanel != null && (fr = this.alignPanel.getFeatureRenderer ()) != null) {
-var gps = fr.getGroups (visible);
-var _gps = gps.toArray ( new Array (gps.size ()));
-return _gps;
-}return null;
-}, "~B");
-Clazz.defineMethod (c$, "setFeatureGroupState",
-function (groups, state) {
-var fr = null;
-this.sequenceFeatures.setState (true);
-this.viewport.setShowSequenceFeatures (true);
-if (this.alignPanel != null && (fr = this.alignPanel.getFeatureRenderer ()) != null) {
-fr.setGroupVisibility (java.util.Arrays.asList (groups), state);
-this.alignPanel.seqPanel.seqCanvas.repaint ();
-if (this.alignPanel.overviewPanel != null) {
-this.alignPanel.overviewPanel.updateOverviewImage ();
-}}}, "~A,~B");
-Clazz.defineMethod (c$, "seqLimits_itemStateChanged",
-function () {
-this.viewport.setShowJVSuffix (this.seqLimits.getState ());
-this.alignPanel.fontChanged ();
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "colourTextMenuItem_actionPerformed",
-function () {
-this.viewport.setColourText (this.colourTextMenuItem.getState ());
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "displayNonconservedMenuItem_actionPerformed",
-function () {
-this.viewport.setShowUnconserved (this.displayNonconservedMenuItem.getState ());
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "wrapMenuItem_actionPerformed",
-function () {
-this.viewport.setWrapAlignment (this.wrapMenuItem.getState ());
-this.alignPanel.setWrapAlignment (this.wrapMenuItem.getState ());
-this.scaleAbove.setEnabled (this.wrapMenuItem.getState ());
-this.scaleLeft.setEnabled (this.wrapMenuItem.getState ());
-this.scaleRight.setEnabled (this.wrapMenuItem.getState ());
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "overviewMenuItem_actionPerformed",
-function () {
-if (this.alignPanel.overviewPanel != null) {
-return;
-}var frame = new awt2swing.Frame ();
-var overview = new jalview.appletgui.OverviewPanel (this.alignPanel);
-frame.add (overview);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.overview_params", Clazz.newArray (-1, [this.getTitle ()])), overview.getPreferredSize ().width, overview.getPreferredSize ().height + 50);
-frame.pack ();
-var ap = this.alignPanel;
-frame.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$1") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$1, this, Clazz.cloneFinals ("ap", ap))));
-this.alignPanel.setOverviewPanel (overview);
-});
-Clazz.overrideMethod (c$, "changeColour",
-function (cs) {
-var threshold = 0;
-if (cs != null) {
-if (this.viewport.getAbovePIDThreshold ()) {
-this.viewport.setThreshold (jalview.appletgui.SliderPanel.setPIDSliderSource (this.alignPanel, cs, "Background"));
-}if (this.viewport.getConservationSelected ()) {
-cs.setConservationApplied (true);
-this.viewport.setIncrement (jalview.appletgui.SliderPanel.setConservationSlider (this.alignPanel, cs, "Background"));
-} else {
-cs.setConservationApplied (false);
-}}this.viewport.setGlobalColourScheme (cs);
-if (this.alignPanel.getOverviewPanel () != null) {
-this.alignPanel.getOverviewPanel ().updateOverviewImage ();
-}jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.viewport.applet).sequenceColoursChanged (this.alignPanel);
-this.alignPanel.paintAlignment (true);
-}, "jalview.schemes.ColourSchemeI");
-Clazz.defineMethod (c$, "modifyPID_actionPerformed",
-function () {
-if (this.viewport.getAbovePIDThreshold () && this.viewport.getGlobalColourScheme () != null) {
-jalview.appletgui.SliderPanel.setPIDSliderSource (this.alignPanel, this.viewport.getGlobalColourScheme (), "Background");
-jalview.appletgui.SliderPanel.showPIDSlider ();
-}});
-Clazz.defineMethod (c$, "modifyConservation_actionPerformed",
-function () {
-if (this.viewport.getConservationSelected () && this.viewport.getGlobalColourScheme () != null) {
-jalview.appletgui.SliderPanel.setConservationSlider (this.alignPanel, this.viewport.getGlobalColourScheme (), "Background");
-jalview.appletgui.SliderPanel.showConservationSlider ();
-}});
-Clazz.defineMethod (c$, "conservationMenuItem_actionPerformed",
-function () {
-this.viewport.setConservationSelected (this.conservationMenuItem.getState ());
-this.viewport.setAbovePIDThreshold (false);
-this.abovePIDThreshold.setState (false);
-this.changeColour (this.viewport.getGlobalColourScheme ());
-this.modifyConservation_actionPerformed ();
-});
-Clazz.defineMethod (c$, "abovePIDThreshold_actionPerformed",
-function () {
-this.viewport.setAbovePIDThreshold (this.abovePIDThreshold.getState ());
-this.conservationMenuItem.setState (false);
-this.viewport.setConservationSelected (false);
-this.changeColour (this.viewport.getGlobalColourScheme ());
-this.modifyPID_actionPerformed ();
-});
-Clazz.defineMethod (c$, "sortPairwiseMenuItem_actionPerformed",
-function () {
-var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
-jalview.analysis.AlignmentSorter.sortByPID (this.viewport.getAlignment (), this.viewport.getAlignment ().getSequenceAt (0), null);
-this.addHistoryItem ( new jalview.commands.OrderCommand ("Pairwise Sort", oldOrder, this.viewport.getAlignment ()));
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "sortIDMenuItem_actionPerformed",
-function () {
-var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
-jalview.analysis.AlignmentSorter.sortByID (this.viewport.getAlignment ());
-this.addHistoryItem ( new jalview.commands.OrderCommand ("ID Sort", oldOrder, this.viewport.getAlignment ()));
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "sortLengthMenuItem_actionPerformed",
-function () {
-var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
-jalview.analysis.AlignmentSorter.sortByLength (this.viewport.getAlignment ());
-this.addHistoryItem ( new jalview.commands.OrderCommand ("Length Sort", oldOrder, this.viewport.getAlignment ()));
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "sortGroupMenuItem_actionPerformed",
-function () {
-var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
-jalview.analysis.AlignmentSorter.sortByGroup (this.viewport.getAlignment ());
-this.addHistoryItem ( new jalview.commands.OrderCommand ("Group Sort", oldOrder, this.viewport.getAlignment ()));
-this.alignPanel.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "removeRedundancyMenuItem_actionPerformed",
-function () {
- new jalview.appletgui.RedundancyPanel (this.alignPanel);
-});
-Clazz.defineMethod (c$, "pairwiseAlignmentMenuItem_actionPerformed",
-function () {
-if (this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () > 1) {
-var frame = new awt2swing.Frame ();
-frame.add ( new jalview.appletgui.PairwiseAlignPanel (this.alignPanel));
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("action.pairwise_alignment"), 600, 500);
-}});
-Clazz.defineMethod (c$, "PCAMenuItem_actionPerformed",
-function () {
-if (!this.viewport.getAlignment ().isAligned (false)) {
-var current;
-var Width = this.viewport.getAlignment ().getWidth ();
-for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
-current = this.viewport.getAlignment ().getSequenceAt (i);
-if (current.getLength () < Width) {
-current.insertCharAt (Width - 1, this.viewport.getGapCharacter ());
-}}
-this.alignPanel.paintAlignment (true);
-}if ((this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () < 4 && this.viewport.getSelectionGroup ().getSize () > 0) || this.viewport.getAlignment ().getHeight () < 4) {
-return;
-}try {
- new jalview.appletgui.PCAPanel (this.viewport);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, OutOfMemoryError)) {
-} else {
-throw ex;
-}
-}
-});
-Clazz.defineMethod (c$, "averageDistanceTreeMenuItem_actionPerformed",
-function () {
-this.NewTreePanel ("AV", "PID", "Average distance tree using PID");
-});
-Clazz.defineMethod (c$, "neighbourTreeMenuItem_actionPerformed",
-function () {
-this.NewTreePanel ("NJ", "PID", "Neighbour joining tree using PID");
-});
-Clazz.defineMethod (c$, "njTreeBlosumMenuItem_actionPerformed",
-function () {
-this.NewTreePanel ("NJ", "BL", "Neighbour joining tree using BLOSUM62");
-});
-Clazz.defineMethod (c$, "avTreeBlosumMenuItem_actionPerformed",
-function () {
-this.NewTreePanel ("AV", "BL", "Average distance tree using BLOSUM62");
-});
-Clazz.defineMethod (c$, "NewTreePanel",
-function (type, pwType, title) {
-if (!this.viewport.getAlignment ().isAligned (false)) {
-var current;
-var Width = this.viewport.getAlignment ().getWidth ();
-for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
-current = this.viewport.getAlignment ().getSequenceAt (i);
-if (current.getLength () < Width) {
-current.insertCharAt (Width - 1, this.viewport.getGapCharacter ());
-}}
-this.alignPanel.paintAlignment (true);
-}if ((this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () > 1) || (this.viewport.getAlignment ().getHeight () > 1)) {
-var tp = new jalview.appletgui.TreePanel (this.alignPanel, type, pwType);
-this.addTreeMenuItem (tp, title);
-jalview.bin.JalviewLite.addFrame (tp, title, 600, 500);
-}}, "~S,~S,~S");
-Clazz.defineMethod (c$, "loadTree_actionPerformed",
-function () {
-var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
-cap.setText (jalview.util.MessageManager.getString ("label.paste_newick_tree_file"));
-cap.setTreeImport ();
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.paste_newick_file"), 400, 300);
-});
-Clazz.defineMethod (c$, "loadTree",
-function (tree, treeFile) {
-var tp = new jalview.appletgui.TreePanel (this.alignPanel, treeFile, jalview.util.MessageManager.getString ("label.load_tree_from_file"), tree);
-jalview.bin.JalviewLite.addFrame (tp, treeFile, 600, 500);
-this.addTreeMenuItem (tp, treeFile);
-}, "jalview.io.NewickFile,~S");
-Clazz.defineMethod (c$, "sortByTree",
-function (treePanel, title) {
-var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
-jalview.analysis.AlignmentSorter.sortByTree (this.viewport.getAlignment (), treePanel.getTree ());
-this.addHistoryItem ( new jalview.commands.OrderCommand (jalview.util.MessageManager.formatMessage ("label.order_by_params", Clazz.newArray (-1, [title])), oldOrder, this.viewport.getAlignment ()));
-this.alignPanel.paintAlignment (true);
-}, "jalview.appletgui.TreePanel,~S");
-Clazz.defineMethod (c$, "addTreeMenuItem",
-function (treePanel, title) {
-var item = new awt2swing.MenuItem (title);
-this.sortByTreeMenu.add (item);
-item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$2") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$2, this, Clazz.cloneFinals ("treePanel", treePanel, "title", title))));
-treePanel.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$3") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$3, this, Clazz.cloneFinals ("treePanel", treePanel, "title", title, "item", item))));
-}, "jalview.appletgui.TreePanel,~S");
-Clazz.defineMethod (c$, "sortBy",
-function (alorder, undoname) {
-var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
-if ((this.viewport.applet, jalview.bin.JalviewLite).debug) {
-System.err.println ("Sorting " + alorder.getOrder ().size () + " in alignment '" + this.getTitle () + "'");
-}jalview.analysis.AlignmentSorter.sortBy (this.viewport.getAlignment (), alorder);
-if (undoname != null) {
-this.addHistoryItem ( new jalview.commands.OrderCommand (undoname, oldOrder, this.viewport.getAlignment ()));
-}this.alignPanel.paintAlignment (true);
-return true;
-}, "jalview.datamodel.AlignmentOrder,~S");
-Clazz.defineMethod (c$, "documentation_actionPerformed",
-function () {
-this.alignPanel.av.applet.openJalviewHelpUrl ();
-});
-Clazz.defineMethod (c$, "about_actionPerformed",
-function () {
-if (!Clazz.isClassDefined ("jalview.appletgui.AlignFrame$1AboutPanel")) {
-jalview.appletgui.AlignFrame.$AlignFrame$1AboutPanel$ ();
-}
-var frame = new awt2swing.Frame ();
-frame.add (Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$1AboutPanel, this, null, jalview.bin.JalviewLite.getVersion (), jalview.bin.JalviewLite.getBuildDate ()));
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.jalview"), 580, 220);
-});
-Clazz.defineMethod (c$, "showURL",
-function (url, target) {
-if (this.viewport.applet == null) {
-System.out.println ("Not running as applet - no browser available.");
-} else {
-this.viewport.applet.showURL (url, target);
-}}, "~S,~S");
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setMenuBar (this.alignFrameMenuBar);
-this.inputText.setLabel (jalview.util.MessageManager.getString ("label.input_from_textbox"));
-this.inputText.addActionListener (this);
-var outputTextboxMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.out_to_textbox"));
-for (var i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++) {
-var item = new awt2swing.MenuItem (jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
-item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$4") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$4$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$4, this, null)));
-outputTextboxMenu.add (item);
-}
-this.closeMenuItem.addActionListener (this);
-this.loadApplication.addActionListener (this);
-this.$loadTree.addActionListener (this);
-this.$loadAnnotations.addActionListener (this);
-this.$outputFeatures.addActionListener (this);
-this.$outputAnnotations.addActionListener (this);
-this.undoMenuItem.setEnabled (false);
-this.undoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.undo"));
-this.undoMenuItem.addActionListener (this);
-this.redoMenuItem.setEnabled (false);
-this.redoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.redo"));
-this.redoMenuItem.addActionListener (this);
-this.copy.setLabel (jalview.util.MessageManager.getString ("action.copy"));
-this.copy.addActionListener (this);
-this.cut.setLabel (jalview.util.MessageManager.getString ("action.cut"));
-this.cut.addActionListener (this);
-this.$delete.setLabel (jalview.util.MessageManager.getString ("action.delete"));
-this.$delete.addActionListener (this);
-this.pasteMenu.setLabel (jalview.util.MessageManager.getString ("action.paste"));
-this.pasteNew.setLabel (jalview.util.MessageManager.getString ("label.to_new_alignment"));
-this.pasteNew.addActionListener (this);
-this.pasteThis.setLabel (jalview.util.MessageManager.getString ("label.to_this_alignment"));
-this.pasteThis.addActionListener (this);
-this.remove2LeftMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_left"));
-this.remove2LeftMenuItem.addActionListener (this);
-this.remove2RightMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_right"));
-this.remove2RightMenuItem.addActionListener (this);
-this.removeGappedColumnMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_empty_columns"));
-this.removeGappedColumnMenuItem.addActionListener (this);
-this.removeAllGapsMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_all_gaps"));
-this.removeAllGapsMenuItem.addActionListener (this);
-this.removeRedundancyMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_redundancy").concat ("..."));
-this.removeRedundancyMenuItem.addActionListener (this);
-this.findMenuItem.setLabel (jalview.util.MessageManager.getString ("action.find"));
-this.findMenuItem.addActionListener (this);
-this.selectAllSequenceMenuItem.addActionListener (this);
-this.deselectAllSequenceMenuItem.addActionListener (this);
-this.invertSequenceMenuItem.setLabel (jalview.util.MessageManager.getString ("action.invert_sequence_selection"));
-this.invertSequenceMenuItem.addActionListener (this);
-this.invertColSel.setLabel (jalview.util.MessageManager.getString ("action.invert_column_selection"));
-this.invertColSel.addActionListener (this);
-this.deleteGroups.setLabel (jalview.util.MessageManager.getString ("action.undefine_groups"));
-this.deleteGroups.addActionListener (this);
-this.grpsFromSelection.setLabel (jalview.util.MessageManager.getString ("action.make_groups_selection"));
-this.grpsFromSelection.addActionListener (this);
-this.createGroup.setLabel (jalview.util.MessageManager.getString ("action.create_group"));
-this.unGroup.setLabel (jalview.util.MessageManager.getString ("action.remove_group"));
-this.annotationColumnSelection.setLabel ("Select by Annotation");
-this.annotationColumnSelection.addActionListener (this);
-this.$newView.setLabel (jalview.util.MessageManager.getString ("action.new_view"));
-this.$newView.addActionListener (this);
-var showMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.show"));
-this.showColumns.setLabel (jalview.util.MessageManager.getString ("label.all_columns"));
-this.showSeqs.setLabel (jalview.util.MessageManager.getString ("label.all_sequences"));
-var hideMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.hide"));
-this.hideColumns.setLabel (jalview.util.MessageManager.getString ("label.selected_columns"));
-this.hideSequences.setLabel (jalview.util.MessageManager.getString ("label.selected_sequences"));
-this.hideAllButSelection.setLabel (jalview.util.MessageManager.getString ("label.all_but_selected_region"));
-this.hideAllSelection.setLabel (jalview.util.MessageManager.getString ("label.selected_region"));
-this.showAllHidden.setLabel (jalview.util.MessageManager.getString ("label.all_sequences_columns"));
-this.showColumns.addActionListener (this);
-this.showSeqs.addActionListener (this);
-this.hideColumns.addActionListener (this);
-this.hideSequences.addActionListener (this);
-this.hideAllButSelection.addActionListener (this);
-this.hideAllSelection.addActionListener (this);
-this.showAllHidden.addActionListener (this);
-this.featureSettings.setLabel (jalview.util.MessageManager.getString ("label.feature_settings"));
-this.featureSettings.addActionListener (this);
-this.sequenceFeatures.setLabel (jalview.util.MessageManager.getString ("label.show_sequence_features"));
-this.sequenceFeatures.addItemListener (this);
-this.sequenceFeatures.setState (false);
-this.followMouseOverFlag.setLabel (jalview.util.MessageManager.getString ("label.automatic_scrolling"));
-this.followMouseOverFlag.addItemListener (this);
-this.alProperties.addActionListener (this);
-this.overviewMenuItem.setLabel (jalview.util.MessageManager.getString ("label.overview_window"));
-this.overviewMenuItem.addActionListener (this);
-this.annotationPanelMenuItem.setLabel (jalview.util.MessageManager.getString ("label.show_annotations"));
-this.annotationPanelMenuItem.addItemListener (this);
-this.showGroupConsensus.setLabel (jalview.util.MessageManager.getString ("label.group_consensus"));
-this.showGroupConservation.setLabel (jalview.util.MessageManager.getString ("label.group_conservation"));
-this.showConsensusHistogram.setLabel (jalview.util.MessageManager.getString ("label.show_consensus_histogram"));
-this.showSequenceLogo.setLabel (jalview.util.MessageManager.getString ("label.show_consensus_logo"));
-this.normSequenceLogo.setLabel (jalview.util.MessageManager.getString ("label.norm_consensus_logo"));
-this.applyAutoAnnotationSettings.setLabel (jalview.util.MessageManager.getString ("label.apply_all_groups"));
-this.applyAutoAnnotationSettings.setState (true);
-var autoAnnMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.autocalculated_annotation"));
-this.showGroupConsensus.addItemListener (this);
-this.showGroupConservation.addItemListener (this);
-this.showConsensusHistogram.addItemListener (this);
-this.showSequenceLogo.addItemListener (this);
-this.normSequenceLogo.addItemListener (this);
-this.applyAutoAnnotationSettings.addItemListener (this);
-this.showAlignmentAnnotations = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_all_al_annotations"));
-this.showSequenceAnnotations = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_all_seq_annotations"));
-this.sortAnnBySequence = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.sort_annotations_by_sequence"));
-this.sortAnnByLabel = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.sort_annotations_by_label"));
-this.showAutoFirst = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_first"));
-this.showAutoLast = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_last"));
-this.showAlignmentAnnotations.addItemListener (this);
-this.showSequenceAnnotations.addItemListener (this);
-this.sortAnnBySequence.addItemListener (this);
-this.sortAnnByLabel.addItemListener (this);
-this.showAutoFirst.addItemListener (this);
-this.showAutoLast.addItemListener (this);
-this.$font.setLabel (jalview.util.MessageManager.getString ("action.font"));
-this.$font.addActionListener (this);
-this.scaleAbove.setLabel (jalview.util.MessageManager.getString ("action.scale_above"));
-this.scaleAbove.setState (true);
-this.scaleAbove.setEnabled (false);
-this.scaleAbove.addItemListener (this);
-this.scaleLeft.setEnabled (false);
-this.scaleLeft.setState (true);
-this.scaleLeft.setLabel (jalview.util.MessageManager.getString ("action.scale_left"));
-this.scaleLeft.addItemListener (this);
-this.scaleRight.setEnabled (false);
-this.scaleRight.setState (true);
-this.scaleRight.setLabel (jalview.util.MessageManager.getString ("action.scale_right"));
-this.scaleRight.addItemListener (this);
-this.viewBoxesMenuItem.setLabel (jalview.util.MessageManager.getString ("action.boxes"));
-this.viewBoxesMenuItem.setState (true);
-this.viewBoxesMenuItem.addItemListener (this);
-this.viewTextMenuItem.setLabel (jalview.util.MessageManager.getString ("action.text"));
-this.viewTextMenuItem.setState (true);
-this.viewTextMenuItem.addItemListener (this);
-this.colourTextMenuItem.setLabel (jalview.util.MessageManager.getString ("label.colour_text"));
-this.colourTextMenuItem.addItemListener (this);
-this.displayNonconservedMenuItem.setLabel (jalview.util.MessageManager.getString ("label.show_non_conversed"));
-this.displayNonconservedMenuItem.addItemListener (this);
-this.wrapMenuItem.setLabel (jalview.util.MessageManager.getString ("action.wrap"));
-this.wrapMenuItem.addItemListener (this);
-this.renderGapsMenuItem.setLabel (jalview.util.MessageManager.getString ("action.show_gaps"));
-this.renderGapsMenuItem.setState (true);
-this.renderGapsMenuItem.addItemListener (this);
-this.centreColumnLabelFlag.setLabel (jalview.util.MessageManager.getString ("label.centre_column_labels"));
-this.centreColumnLabelFlag.addItemListener (this);
-this.seqLimits.setState (true);
-this.seqLimits.setLabel (jalview.util.MessageManager.getString ("label.show_sequence_limits"));
-this.seqLimits.addItemListener (this);
-this.applyToAllGroups.setLabel (jalview.util.MessageManager.getString ("label.apply_colour_to_all_groups"));
-this.applyToAllGroups.setState (true);
-this.applyToAllGroups.addItemListener (this);
-this.clustalColour.setLabel (jalview.util.MessageManager.getString ("label.clustalx"));
-this.clustalColour.addActionListener (this);
-this.zappoColour.setLabel (jalview.util.MessageManager.getString ("label.zappo"));
-this.zappoColour.addActionListener (this);
-this.taylorColour.setLabel (jalview.util.MessageManager.getString ("label.taylor"));
-this.taylorColour.addActionListener (this);
-this.hydrophobicityColour.setLabel (jalview.util.MessageManager.getString ("label.hydrophobicity"));
-this.hydrophobicityColour.addActionListener (this);
-this.helixColour.setLabel (jalview.util.MessageManager.getString ("label.helix_propensity"));
-this.helixColour.addActionListener (this);
-this.strandColour.setLabel (jalview.util.MessageManager.getString ("label.strand_propensity"));
-this.strandColour.addActionListener (this);
-this.turnColour.setLabel (jalview.util.MessageManager.getString ("label.turn_propensity"));
-this.turnColour.addActionListener (this);
-this.buriedColour.setLabel (jalview.util.MessageManager.getString ("label.buried_index"));
-this.buriedColour.addActionListener (this);
-this.purinePyrimidineColour.setLabel (jalview.util.MessageManager.getString ("label.purine_pyrimidine"));
-this.purinePyrimidineColour.addActionListener (this);
-this.RNAInteractionColour.setLabel (jalview.util.MessageManager.getString ("label.rna_interaction"));
-this.RNAInteractionColour.addActionListener (this);
-this.RNAHelixColour.setLabel (jalview.util.MessageManager.getString ("action.by_rna_helixes"));
-this.RNAHelixColour.addActionListener (this);
-this.userDefinedColour.setLabel (jalview.util.MessageManager.getString ("action.user_defined"));
-this.userDefinedColour.addActionListener (this);
-this.PIDColour.setLabel (jalview.util.MessageManager.getString ("label.percentage_identity"));
-this.PIDColour.addActionListener (this);
-this.BLOSUM62Colour.setLabel (jalview.util.MessageManager.getString ("label.blosum62_score"));
-this.BLOSUM62Colour.addActionListener (this);
-this.tcoffeeColour.setLabel (jalview.util.MessageManager.getString ("label.tcoffee_scores"));
-this.tcoffeeColour.setEnabled (false);
-this.tcoffeeColour.addActionListener (this);
-this.conservationMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_conservation"));
-this.conservationMenuItem.addItemListener (this);
-this.noColourmenuItem.setLabel (jalview.util.MessageManager.getString ("label.none"));
-this.noColourmenuItem.addActionListener (this);
-this.abovePIDThreshold.setLabel (jalview.util.MessageManager.getString ("label.above_identity_threshold"));
-this.abovePIDThreshold.addItemListener (this);
-this.nucleotideColour.setLabel (jalview.util.MessageManager.getString ("label.nucleotide"));
-this.nucleotideColour.addActionListener (this);
-this.modifyPID.setLabel (jalview.util.MessageManager.getString ("label.modify_identity_thereshold"));
-this.modifyPID.addActionListener (this);
-this.modifyConservation.setLabel (jalview.util.MessageManager.getString ("label.modify_conservation_thereshold"));
-this.modifyConservation.addActionListener (this);
-this.annotationColour.setLabel (jalview.util.MessageManager.getString ("action.by_annotation"));
-this.annotationColour.addActionListener (this);
-this.sortPairwiseMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_pairwise_id"));
-this.sortPairwiseMenuItem.addActionListener (this);
-this.sortIDMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_id"));
-this.sortIDMenuItem.addActionListener (this);
-this.sortLengthMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_length"));
-this.sortLengthMenuItem.addActionListener (this);
-this.sortGroupMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_group"));
-this.sortGroupMenuItem.addActionListener (this);
-this.pairwiseAlignmentMenuItem.setLabel (jalview.util.MessageManager.getString ("action.pairwise_alignment"));
-this.pairwiseAlignmentMenuItem.addActionListener (this);
-this.PCAMenuItem.setLabel (jalview.util.MessageManager.getString ("label.principal_component_analysis"));
-this.PCAMenuItem.addActionListener (this);
-this.autoCalculate = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.autocalculate_consensus"), true);
-this.averageDistanceTreeMenuItem.setLabel (jalview.util.MessageManager.getString ("label.average_distance_identity"));
-this.averageDistanceTreeMenuItem.addActionListener (this);
-this.neighbourTreeMenuItem.setLabel (jalview.util.MessageManager.getString ("label.neighbour_joining_identity"));
-this.neighbourTreeMenuItem.addActionListener (this);
-this.avDistanceTreeBlosumMenuItem.setLabel (jalview.util.MessageManager.getString ("label.average_distance_bloslum62"));
-this.avDistanceTreeBlosumMenuItem.addActionListener (this);
-this.njTreeBlosumMenuItem.setLabel (jalview.util.MessageManager.getString ("label.neighbour_blosum62"));
-this.njTreeBlosumMenuItem.addActionListener (this);
-this.sortByTreeMenu.setLabel (jalview.util.MessageManager.getString ("action.by_tree_order"));
-var sortMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.sort"));
-var calculateTreeMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.calculate_tree"));
-this.autoCalculate.addItemListener (this);
-this.$sortByTree.addItemListener (this);
-var helpMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.help"));
-this.documentation.setLabel (jalview.util.MessageManager.getString ("label.documentation"));
-this.documentation.addActionListener (this);
-this.about.setLabel (jalview.util.MessageManager.getString ("label.about"));
-this.about.addActionListener (this);
-this.alignFrameMenuBar.add (this.fileMenu);
-var editMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.edit"));
-this.alignFrameMenuBar.add (editMenu);
-var selectMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.select"));
-this.alignFrameMenuBar.add (selectMenu);
-var viewMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.view"));
-this.alignFrameMenuBar.add (viewMenu);
-var annotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.annotations"));
-this.alignFrameMenuBar.add (annotationsMenu);
-var formatMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.format"));
-this.alignFrameMenuBar.add (formatMenu);
-var colourMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.colour"));
-this.alignFrameMenuBar.add (colourMenu);
-var calculateMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.calculate"));
-this.alignFrameMenuBar.add (calculateMenu);
-this.alignFrameMenuBar.add (helpMenu);
-this.fileMenu.add (this.inputText);
-this.fileMenu.add (this.$loadTree);
-this.fileMenu.add (this.$loadAnnotations);
-this.fileMenu.addSeparator ();
-this.fileMenu.add (outputTextboxMenu);
-this.fileMenu.add (this.$outputFeatures);
-this.fileMenu.add (this.$outputAnnotations);
-if (this.jalviewServletURL != null) {
-this.fileMenu.add (this.loadApplication);
-}this.fileMenu.addSeparator ();
-this.fileMenu.add (this.closeMenuItem);
-editMenu.add (this.undoMenuItem);
-editMenu.add (this.redoMenuItem);
-editMenu.add (this.cut);
-editMenu.add (this.copy);
-this.pasteMenu.add (this.pasteNew);
-this.pasteMenu.add (this.pasteThis);
-editMenu.add (this.pasteMenu);
-editMenu.add (this.$delete);
-editMenu.addSeparator ();
-editMenu.add (this.remove2LeftMenuItem);
-editMenu.add (this.remove2RightMenuItem);
-editMenu.add (this.removeGappedColumnMenuItem);
-editMenu.add (this.removeAllGapsMenuItem);
-editMenu.add (this.removeRedundancyMenuItem);
-selectMenu.add (this.findMenuItem);
-selectMenu.addSeparator ();
-selectMenu.add (this.selectAllSequenceMenuItem);
-selectMenu.add (this.deselectAllSequenceMenuItem);
-selectMenu.add (this.invertSequenceMenuItem);
-selectMenu.add (this.invertColSel);
-selectMenu.add (this.createGroup);
-selectMenu.add (this.unGroup);
-selectMenu.add (this.grpsFromSelection);
-selectMenu.add (this.deleteGroups);
-selectMenu.add (this.annotationColumnSelection);
-viewMenu.add (this.$newView);
-viewMenu.addSeparator ();
-showMenu.add (this.showColumns);
-showMenu.add (this.showSeqs);
-showMenu.add (this.showAllHidden);
-viewMenu.add (showMenu);
-hideMenu.add (this.hideColumns);
-hideMenu.add (this.hideSequences);
-hideMenu.add (this.hideAllSelection);
-hideMenu.add (this.hideAllButSelection);
-viewMenu.add (hideMenu);
-viewMenu.addSeparator ();
-viewMenu.add (this.followMouseOverFlag);
-viewMenu.addSeparator ();
-viewMenu.add (this.sequenceFeatures);
-viewMenu.add (this.featureSettings);
-viewMenu.addSeparator ();
-viewMenu.add (this.alProperties);
-viewMenu.addSeparator ();
-viewMenu.add (this.overviewMenuItem);
-annotationsMenu.add (this.annotationPanelMenuItem);
-annotationsMenu.addSeparator ();
-annotationsMenu.add (this.showAlignmentAnnotations);
-annotationsMenu.add (this.showSequenceAnnotations);
-annotationsMenu.add (this.sortAnnBySequence);
-annotationsMenu.add (this.sortAnnByLabel);
-annotationsMenu.addSeparator ();
-autoAnnMenu.add (this.showAutoFirst);
-autoAnnMenu.add (this.showAutoLast);
-autoAnnMenu.addSeparator ();
-autoAnnMenu.add (this.applyAutoAnnotationSettings);
-autoAnnMenu.add (this.showConsensusHistogram);
-autoAnnMenu.add (this.showSequenceLogo);
-autoAnnMenu.add (this.normSequenceLogo);
-autoAnnMenu.addSeparator ();
-autoAnnMenu.add (this.showGroupConservation);
-autoAnnMenu.add (this.showGroupConsensus);
-annotationsMenu.add (autoAnnMenu);
-formatMenu.add (this.$font);
-formatMenu.add (this.seqLimits);
-formatMenu.add (this.wrapMenuItem);
-formatMenu.add (this.scaleAbove);
-formatMenu.add (this.scaleLeft);
-formatMenu.add (this.scaleRight);
-formatMenu.add (this.viewBoxesMenuItem);
-formatMenu.add (this.viewTextMenuItem);
-formatMenu.add (this.colourTextMenuItem);
-formatMenu.add (this.displayNonconservedMenuItem);
-formatMenu.add (this.renderGapsMenuItem);
-formatMenu.add (this.centreColumnLabelFlag);
-colourMenu.add (this.applyToAllGroups);
-colourMenu.addSeparator ();
-colourMenu.add (this.noColourmenuItem);
-colourMenu.add (this.clustalColour);
-colourMenu.add (this.BLOSUM62Colour);
-colourMenu.add (this.PIDColour);
-colourMenu.add (this.zappoColour);
-colourMenu.add (this.taylorColour);
-colourMenu.add (this.hydrophobicityColour);
-colourMenu.add (this.helixColour);
-colourMenu.add (this.strandColour);
-colourMenu.add (this.turnColour);
-colourMenu.add (this.buriedColour);
-colourMenu.add (this.nucleotideColour);
-colourMenu.add (this.purinePyrimidineColour);
-colourMenu.add (this.tcoffeeColour);
-colourMenu.add (this.userDefinedColour);
-colourMenu.addSeparator ();
-colourMenu.add (this.conservationMenuItem);
-colourMenu.add (this.modifyConservation);
-colourMenu.add (this.abovePIDThreshold);
-colourMenu.add (this.modifyPID);
-colourMenu.add (this.annotationColour);
-colourMenu.add (this.RNAHelixColour);
-sortMenu.add (this.sortIDMenuItem);
-sortMenu.add (this.sortLengthMenuItem);
-sortMenu.add (this.sortByTreeMenu);
-sortMenu.add (this.sortGroupMenuItem);
-sortMenu.add (this.sortPairwiseMenuItem);
-calculateMenu.add (sortMenu);
-calculateTreeMenu.add (this.averageDistanceTreeMenuItem);
-calculateTreeMenu.add (this.neighbourTreeMenuItem);
-calculateTreeMenu.add (this.avDistanceTreeBlosumMenuItem);
-calculateTreeMenu.add (this.njTreeBlosumMenuItem);
-calculateMenu.add (calculateTreeMenu);
-calculateMenu.addSeparator ();
-calculateMenu.add (this.pairwiseAlignmentMenuItem);
-calculateMenu.add (this.PCAMenuItem);
-calculateMenu.add (this.autoCalculate);
-calculateMenu.add (this.$sortByTree);
-helpMenu.add (this.documentation);
-helpMenu.add (this.about);
-this.statusBar.setBackground (java.awt.Color.white);
-this.statusBar.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.setStatus (jalview.util.MessageManager.getString ("label.status_bar"));
-this.add (this.statusBar, "South");
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "setStatus",
-function (string) {
-this.statusBar.setText (string);
-}, "~S");
-Clazz.defineMethod (c$, "createAlignFrameWindow",
-function (reallyEmbedded) {
-if (reallyEmbedded) {
-this.embedAlignFrameInApplet (this.viewport.applet);
-} else {
-if (this.embedMenuIfNeeded (this.alignPanel)) {
-this.alignPanel.setSize (this.getSize ().width, this.getSize ().height - this.statusBar.getHeight ());
-}this.add (this.statusBar, "South");
-this.add (this.alignPanel, "Center");
-jalview.bin.JalviewLite.addFrame (this, this.getTitle (), this.frameWidth, this.frameHeight);
-}}, "~B");
-Clazz.defineMethod (c$, "embedAlignFrameInApplet",
-function (theApplet) {
-this.fileMenu.remove (this.closeMenuItem);
-this.fileMenu.remove (3);
-this.embeddedMenu = this.makeEmbeddedPopupMenu (this.alignFrameMenuBar, false, false);
-theApplet.setLayout ( new java.awt.BorderLayout ());
-theApplet.add (this.embeddedMenu, "North");
-theApplet.add (this.statusBar, "South");
-this.alignPanel.setSize (theApplet.getSize ().width, theApplet.getSize ().height - this.embeddedMenu.getHeight () - this.statusBar.getHeight ());
-theApplet.add (this.alignPanel, "Center");
-var me = this;
-theApplet.addFocusListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$5") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$5$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$5, this, Clazz.cloneFinals ("theApplet", theApplet, "me", me))));
-theApplet.validate ();
-}, "jalview.bin.JalviewLite");
-Clazz.defineMethod (c$, "addStructureViewInstance",
-function (jmolviewer, sequenceIds) {
-return null;
-}, "~O,~A");
-Clazz.defineMethod (c$, "addPdbFile",
-function (sequenceId, pdbEntryString, pdbFile) {
-var toaddpdb = this.viewport.getAlignment ().findName (sequenceId);
-var needtoadd = false;
-if (toaddpdb != null) {
-var pdbe = toaddpdb.getPDBId ();
-var pdbentry = null;
-if (pdbe != null && pdbe.size () > 0) {
-for (var pe = 0, peSize = pdbe.size (); pe < peSize; pe++) {
-pdbentry = pdbe.elementAt (pe);
-if (!pdbentry.getId ().equals (pdbEntryString) && !pdbentry.getFile ().equals (pdbFile)) {
-pdbentry = null;
-} else {
-continue;
-}}
-}if (pdbentry == null) {
-pdbentry = new jalview.datamodel.PDBEntry ();
-pdbentry.setId (pdbEntryString);
-pdbentry.setFile (pdbFile);
-needtoadd = true;
-}var protocol = jalview.io.AppletFormatAdapter.resolveProtocol (pdbFile, "PDB");
-if (protocol == null) {
-return false;
-}if (needtoadd) {
-if (pdbentry.getProperty () == null) {
-pdbentry.setProperty ( new java.util.Hashtable ());
-}pdbentry.getProperty ().put ("protocol", protocol);
-toaddpdb.addPDBId (pdbentry);
-this.alignPanel.getStructureSelectionManager ().registerPDBEntry (pdbentry);
-}}return true;
-}, "~S,~S,~S");
-Clazz.defineMethod (c$, "cleanSeqChainArrays",
-($fz = function (seqs, chains) {
-if (seqs != null) {
-var sequences = new java.util.Vector ();
-for (var i = 0; i < seqs.length; i++) {
-if (seqs[i] != null) {
-sequences.addElement ( Clazz.newArray (-1, [seqs[i], (chains != null) ? chains[i] : null]));
-}}
-seqs = new Array (sequences.size ());
-chains = new Array (sequences.size ());
-for (var i = 0, isize = sequences.size (); i < isize; i++) {
-var oj = sequences.elementAt (i);
-seqs[i] = oj[0];
-chains[i] = oj[1];
-}
-}return Clazz.newArray (-1, [seqs, chains]);
-}, $fz.isPrivate = true, $fz), "~A,~A");
-Clazz.defineMethod (c$, "newStructureView",
-function (applet, pdb, seqs, chains, protocol) {
-var sqch = this.cleanSeqChainArrays (seqs, chains);
-seqs = sqch[0];
-chains = sqch[1];
-if (seqs == null || seqs.length == 0) {
-System.err.println ("JalviewLite.AlignFrame:newStructureView: No sequence to bind structure to.");
-}if (protocol == null || protocol.trim ().length == 0 || protocol.equals ("null")) {
-protocol = pdb.getProperty ().get ("protocol");
-if (protocol == null) {
-System.err.println ("Couldn't work out protocol to open structure: " + pdb.getId ());
-return;
-}}if (applet.useXtrnalSviewer) {
-if (jalview.structure.StructureSelectionManager.getStructureSelectionManager (applet).setMapping (seqs, chains, pdb.getFile (), protocol) == null) {
-System.err.println ("Failed to map " + pdb.getFile () + " (" + protocol + ") to any sequences");
-}return;
-}if (applet.isAlignPdbStructures () && applet.jmolAvailable) {
-var ajm = null;
-var tajm;
-var jmols = applet.getAppletWindow (jalview.appletgui.AppletJmol);
-for (var i = 0, iSize = jmols.size (); i < iSize; i++) {
-tajm = jmols.elementAt (i);
-if (tajm.ap.alignFrame === this) {
-ajm = tajm;
-break;
-}}
-if (ajm != null) {
-System.err.println ("Incremental adding and aligning structure to existing Jmol view not yet implemented.");
-ajm = null;
-}} new jalview.appletgui.AppletJmol (pdb, seqs, chains, this.alignPanel, protocol);
-jalview.bin.JalviewLite.lastFrameX += 40;
-jalview.bin.JalviewLite.lastFrameY += 40;
-}, "jalview.bin.JalviewLite,jalview.datamodel.PDBEntry,~A,~A,~S");
-Clazz.defineMethod (c$, "alignedStructureView",
-function (applet, pdb, seqs, chains, protocols) {
-System.err.println ("Aligned Structure View: Not yet implemented.");
-}, "jalview.bin.JalviewLite,~A,~A,~A,~A");
-Clazz.defineMethod (c$, "select",
-function (sel, csel) {
-this.alignPanel.seqPanel.selection (sel, csel, null);
-}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection");
-Clazz.defineMethod (c$, "scrollTo",
-function (row, column) {
-this.alignPanel.seqPanel.scrollTo (row, column);
-}, "~N,~N");
-Clazz.defineMethod (c$, "scrollToRow",
-function (row) {
-this.alignPanel.seqPanel.scrollToRow (row);
-}, "~N");
-Clazz.defineMethod (c$, "scrollToColumn",
-function (column) {
-this.alignPanel.seqPanel.scrollToColumn (column);
-}, "~N");
-Clazz.defineMethod (c$, "getSequenceSetId",
-function () {
-return this.viewport.getSequenceSetId ();
-});
-Clazz.defineMethod (c$, "loadScoreFile",
-function (inFile) {
-var file = jalview.jsdev.GenericFileAdapter.getFile ("TCoffeeScoreFile", [inFile, jalview.io.AppletFormatAdapter.checkProtocol (inFile)]);
-if (!file.isValid ()) {
-System.err.println ("Problems parsing T-Coffee scores: " + file.getWarningMessage ());
-System.err.println ("Origin was:\n" + inFile);
-return false;
-}var aln;
-if ((aln = this.viewport.getAlignment ()) != null && (aln.getHeight () != file.getHeight () || aln.getWidth () != file.getWidth ())) {
-System.err.println ("The scores matrix does not match the alignment dimensions");
-}if (file.annotateAlignment (this.alignPanel.getAlignment (), false)) {
-this.alignPanel.fontChanged ();
-this.tcoffeeColour.setEnabled (true);
-this.changeColour ( new jalview.schemes.TCoffeeColourScheme (this.alignPanel.getAlignment ()));
-return true;
-} else {
-System.err.println ("Problems resolving T-Coffee scores:");
-if (file.getWarningMessage () != null) {
-System.err.println (file.getWarningMessage ());
-}}return false;
-}, "~S");
-Clazz.defineMethod (c$, "getSplitFrame",
-function () {
-return this.splitFrame;
-});
-Clazz.defineMethod (c$, "setSplitFrame",
-function (sf) {
-this.splitFrame = sf;
-}, "jalview.appletgui.SplitFrame");
-Clazz.overrideMethod (c$, "setShowSeqFeatures",
-function (b) {
-this.viewport.setShowSequenceFeatures (b);
-}, "~B");
-Clazz.overrideMethod (c$, "setMenusForViewport",
-function () {
-});
-Clazz.overrideMethod (c$, "refreshFeatureUI",
-function (enableIfNecessary) {
-if (enableIfNecessary) {
-this.sequenceFeatures.setState (true);
-this.alignPanel.av.setShowSequenceFeatures (true);
-}}, "~B");
-Clazz.overrideMethod (c$, "getFeatureSettingsUI",
-function () {
-return this.alignPanel.av.featureSettings;
-});
-c$.$AlignFrame$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$1", java.awt.event.WindowAdapter);
-Clazz.overrideMethod (c$, "windowClosing",
-function (e) {
-if (this.f$.ap != null) {
-this.f$.ap.setOverviewPanel (null);
-}}, "java.awt.event.WindowEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AlignFrame$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$2", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-this.b$["jalview.appletgui.AlignFrame"].sortByTree (this.f$.treePanel, this.f$.title);
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AlignFrame$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$3", java.awt.event.WindowAdapter);
-Clazz.defineMethod (c$, "windowOpened",
-function (e) {
-if (this.b$["jalview.appletgui.AlignFrame"].viewport.sortByTree) {
-this.b$["jalview.appletgui.AlignFrame"].sortByTree (this.f$.treePanel, this.f$.title);
-}Clazz.superCall (this, jalview.appletgui.AlignFrame$3, "windowOpened", [e]);
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowClosing",
-function (e) {
-this.b$["jalview.appletgui.AlignFrame"].sortByTreeMenu.remove (this.f$.item);
-}, "java.awt.event.WindowEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AlignFrame$1AboutPanel$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.version = null;
-this.builddate = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AlignFrame$1AboutPanel", awt2swing.Canvas);
-Clazz.makeConstructor (c$,
-function (a, b) {
-Clazz.superConstructor (this, jalview.appletgui.AlignFrame$1AboutPanel, []);
-this.version = a;
-this.builddate = b;
-}, "~S,~S");
-Clazz.overrideMethod (c$, "paintComponent",
-function (a) {
-a.setColor (java.awt.Color.white);
-a.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
-a.setFont ( new java.awt.Font ("Helvetica", 0, 12));
-var b = a.getFontMetrics ();
-var c = b.getHeight ();
-var d = 5;
-var e = 7;
-a.setColor (java.awt.Color.black);
-a.setFont ( new java.awt.Font ("Helvetica", 1, 14));
-a.drawString (jalview.util.MessageManager.formatMessage ("label.jalviewLite_release", Clazz.newArray (-1, [this.version])), e, d += c);
-a.setFont ( new java.awt.Font ("Helvetica", 1, 12));
-a.drawString (jalview.util.MessageManager.formatMessage ("label.jaview_build_date", Clazz.newArray (-1, [this.builddate])), e, d += c);
-a.setFont ( new java.awt.Font ("Helvetica", 0, 12));
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_authors_1"), e, d += c * 1.5);
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_authors_2"), e + 50, d += c + 8);
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_dev_managers"), e, d += c);
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_distribution_lists"), e, d += c);
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_please_cite"), e, d += c + 8);
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_cite_1_authors"), e, d += c);
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_cite_1_title"), e, d += c);
-a.drawString (jalview.util.MessageManager.getString ("label.jalview_cite_1_ref"), e, d += c);
-}, "java.awt.Graphics");
-c$ = Clazz.p0p ();
-};
-c$.$AlignFrame$4$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$4", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.AlignFrame"].outputText_actionPerformed (e);
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AlignFrame$5$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$5", null, java.awt.event.FocusListener);
-Clazz.overrideMethod (c$, "focusLost",
-function (e) {
-if (this.f$.theApplet.currentAlignFrame === this.f$.me) {
-this.f$.theApplet.currentAlignFrame = null;
-}}, "java.awt.event.FocusEvent");
-Clazz.overrideMethod (c$, "focusGained",
-function (e) {
-this.f$.theApplet.currentAlignFrame = this.f$.me;
-}, "java.awt.event.FocusEvent");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"copiedSequences", null,
-"copiedHiddenColumns", null);
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Canvas", "jalview.api.AlignViewControllerGuiI", "jalview.appletgui.EmbmenuFrame", "java.awt.event.ActionListener", "$.ItemListener", "$.KeyListener", "awt2swing.CheckboxMenuItem", "$.Label", "$.Menu", "$.MenuBar", "$.MenuItem", "jalview.util.MessageManager", "java.awt.BorderLayout"], "jalview.appletgui.AlignFrame", ["awt2swing.Frame", "jalview.analysis.AlignmentSorter", "$.AnnotationSorter", "jalview.appletgui.AlignViewport", "$.AlignmentPanel", "$.AnnotationColourChooser", "$.AnnotationColumnChooser", "$.AppletJmol", "$.CutAndPasteTransfer", "$.FeatureSettings", "$.Finder", "$.FontChooser", "$.OverviewPanel", "$.PCAPanel", "$.PaintRefresher", "$.PairwiseAlignPanel", "$.RedundancyPanel", "$.SliderPanel", "$.TreePanel", "$.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.commands.EditCommand", "$.OrderCommand", "$.RemoveGapColCommand", "$.RemoveGapsCommand", "$.SlideSequencesCommand", "$.TrimRegionCommand", "jalview.controller.AlignViewController", "jalview.datamodel.Alignment", "$.PDBEntry", "$.Sequence", "$.SequenceGroup", "jalview.io.AlignmentProperties", "$.AnnotationFile", "$.AppletFormatAdapter", "$.FeaturesFile", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.Blosum62ColourScheme", "$.BuriedColourScheme", "$.ClustalxColourScheme", "$.HelixColourScheme", "$.HydrophobicColourScheme", "$.NucleotideColourScheme", "$.PIDColourScheme", "$.PurinePyrimidineColourScheme", "$.RNAHelicesColourChooser", "$.RNAInteractionColourScheme", "$.StrandColourScheme", "$.TCoffeeColourScheme", "$.TaylorColourScheme", "$.TurnColourScheme", "$.ZappoColourScheme", "jalview.structure.StructureSelectionManager", "jalview.util.Comparison", "$.MappingUtils", "java.awt.Color", "$.Font", "java.awt.event.FocusListener", "$.WindowAdapter", "java.lang.Character", "$.StringBuffer", "java.net.URL", "$.URLEncoder", "java.util.Arrays", "$.HashMap", "$.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.avc = null;
+this.alignPanel = null;
+this.viewport = null;
+this.frameWidth = 700;
+this.frameHeight = 500;
+this.jalviewServletURL = null;
+this.showAutoCalculatedAbove = false;
+this.annotationSortOrder = null;
+this.alignFrameMenuBar = null;
+this.fileMenu = null;
+this.loadApplication = null;
+this.$loadTree = null;
+this.$loadAnnotations = null;
+this.$outputFeatures = null;
+this.$outputAnnotations = null;
+this.closeMenuItem = null;
+this.selectAllSequenceMenuItem = null;
+this.deselectAllSequenceMenuItem = null;
+this.invertSequenceMenuItem = null;
+this.remove2LeftMenuItem = null;
+this.remove2RightMenuItem = null;
+this.removeGappedColumnMenuItem = null;
+this.removeAllGapsMenuItem = null;
+this.viewBoxesMenuItem = null;
+this.viewTextMenuItem = null;
+this.sortPairwiseMenuItem = null;
+this.sortIDMenuItem = null;
+this.sortLengthMenuItem = null;
+this.sortGroupMenuItem = null;
+this.removeRedundancyMenuItem = null;
+this.pairwiseAlignmentMenuItem = null;
+this.PCAMenuItem = null;
+this.averageDistanceTreeMenuItem = null;
+this.neighbourTreeMenuItem = null;
+this.borderLayout1 = null;
+this.statusBar = null;
+this.clustalColour = null;
+this.zappoColour = null;
+this.taylorColour = null;
+this.hydrophobicityColour = null;
+this.helixColour = null;
+this.strandColour = null;
+this.turnColour = null;
+this.buriedColour = null;
+this.purinePyrimidineColour = null;
+this.RNAInteractionColour = null;
+this.RNAHelixColour = null;
+this.userDefinedColour = null;
+this.PIDColour = null;
+this.BLOSUM62Colour = null;
+this.tcoffeeColour = null;
+this.njTreeBlosumMenuItem = null;
+this.avDistanceTreeBlosumMenuItem = null;
+this.annotationPanelMenuItem = null;
+this.colourTextMenuItem = null;
+this.displayNonconservedMenuItem = null;
+this.alProperties = null;
+this.overviewMenuItem = null;
+this.undoMenuItem = null;
+this.redoMenuItem = null;
+this.conservationMenuItem = null;
+this.noColourmenuItem = null;
+this.wrapMenuItem = null;
+this.renderGapsMenuItem = null;
+this.findMenuItem = null;
+this.abovePIDThreshold = null;
+this.nucleotideColour = null;
+this.deleteGroups = null;
+this.grpsFromSelection = null;
+this.createGroup = null;
+this.unGroup = null;
+this.$delete = null;
+this.copy = null;
+this.cut = null;
+this.pasteMenu = null;
+this.pasteNew = null;
+this.pasteThis = null;
+this.applyToAllGroups = null;
+this.$font = null;
+this.scaleAbove = null;
+this.scaleLeft = null;
+this.scaleRight = null;
+this.modifyPID = null;
+this.modifyConservation = null;
+this.autoCalculate = null;
+this.$sortByTree = null;
+this.sortByTreeMenu = null;
+this.inputText = null;
+this.documentation = null;
+this.about = null;
+this.seqLimits = null;
+this.centreColumnLabelFlag = null;
+this.followMouseOverFlag = null;
+this.showSequenceLogo = null;
+this.applyAutoAnnotationSettings = null;
+this.showConsensusHistogram = null;
+this.showGroupConsensus = null;
+this.showGroupConservation = null;
+this.normSequenceLogo = null;
+this.featureSettings = null;
+this.sequenceFeatures = null;
+this.annotationColour = null;
+this.annotationColumnSelection = null;
+this.invertColSel = null;
+this.showColumns = null;
+this.showSeqs = null;
+this.hideColumns = null;
+this.hideSequences = null;
+this.hideAllButSelection = null;
+this.hideAllSelection = null;
+this.showAllHidden = null;
+this.$newView = null;
+this.showAlignmentAnnotations = null;
+this.showSequenceAnnotations = null;
+this.sortAnnBySequence = null;
+this.sortAnnByLabel = null;
+this.showAutoFirst = null;
+this.showAutoLast = null;
+this.splitFrame = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AlignFrame", jalview.appletgui.EmbmenuFrame, [java.awt.event.ActionListener, java.awt.event.ItemListener, java.awt.event.KeyListener, jalview.api.AlignViewControllerGuiI]);
+Clazz.prepareFields (c$, function () {
+this.alignFrameMenuBar = new awt2swing.MenuBar ();
+this.fileMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.file"));
+this.loadApplication = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.view_full_application"));
+this.$loadTree = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.load_associated_tree"));
+this.$loadAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.load_features_annotations"));
+this.$outputFeatures = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.export_features").concat ("..."));
+this.$outputAnnotations = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.export_annotations").concat ("..."));
+this.closeMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.close"));
+this.selectAllSequenceMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.select_all"));
+this.deselectAllSequenceMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.deselect_all"));
+this.invertSequenceMenuItem = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.invert_selection"));
+this.remove2LeftMenuItem = new awt2swing.MenuItem ();
+this.remove2RightMenuItem = new awt2swing.MenuItem ();
+this.removeGappedColumnMenuItem = new awt2swing.MenuItem ();
+this.removeAllGapsMenuItem = new awt2swing.MenuItem ();
+this.viewBoxesMenuItem = new awt2swing.CheckboxMenuItem ();
+this.viewTextMenuItem = new awt2swing.CheckboxMenuItem ();
+this.sortPairwiseMenuItem = new awt2swing.MenuItem ();
+this.sortIDMenuItem = new awt2swing.MenuItem ();
+this.sortLengthMenuItem = new awt2swing.MenuItem ();
+this.sortGroupMenuItem = new awt2swing.MenuItem ();
+this.removeRedundancyMenuItem = new awt2swing.MenuItem ();
+this.pairwiseAlignmentMenuItem = new awt2swing.MenuItem ();
+this.PCAMenuItem = new awt2swing.MenuItem ();
+this.averageDistanceTreeMenuItem = new awt2swing.MenuItem ();
+this.neighbourTreeMenuItem = new awt2swing.MenuItem ();
+this.borderLayout1 = new java.awt.BorderLayout ();
+this.statusBar = new awt2swing.Label ();
+this.clustalColour = new awt2swing.MenuItem ();
+this.zappoColour = new awt2swing.MenuItem ();
+this.taylorColour = new awt2swing.MenuItem ();
+this.hydrophobicityColour = new awt2swing.MenuItem ();
+this.helixColour = new awt2swing.MenuItem ();
+this.strandColour = new awt2swing.MenuItem ();
+this.turnColour = new awt2swing.MenuItem ();
+this.buriedColour = new awt2swing.MenuItem ();
+this.purinePyrimidineColour = new awt2swing.MenuItem ();
+this.RNAInteractionColour = new awt2swing.MenuItem ();
+this.RNAHelixColour = new awt2swing.MenuItem ();
+this.userDefinedColour = new awt2swing.MenuItem ();
+this.PIDColour = new awt2swing.MenuItem ();
+this.BLOSUM62Colour = new awt2swing.MenuItem ();
+this.tcoffeeColour = new awt2swing.MenuItem ();
+this.njTreeBlosumMenuItem = new awt2swing.MenuItem ();
+this.avDistanceTreeBlosumMenuItem = new awt2swing.MenuItem ();
+this.annotationPanelMenuItem = new awt2swing.CheckboxMenuItem ();
+this.colourTextMenuItem = new awt2swing.CheckboxMenuItem ();
+this.displayNonconservedMenuItem = new awt2swing.CheckboxMenuItem ();
+this.alProperties = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.alignment_props"));
+this.overviewMenuItem = new awt2swing.MenuItem ();
+this.undoMenuItem = new awt2swing.MenuItem ();
+this.redoMenuItem = new awt2swing.MenuItem ();
+this.conservationMenuItem = new awt2swing.CheckboxMenuItem ();
+this.noColourmenuItem = new awt2swing.MenuItem ();
+this.wrapMenuItem = new awt2swing.CheckboxMenuItem ();
+this.renderGapsMenuItem = new awt2swing.CheckboxMenuItem ();
+this.findMenuItem = new awt2swing.MenuItem ();
+this.abovePIDThreshold = new awt2swing.CheckboxMenuItem ();
+this.nucleotideColour = new awt2swing.MenuItem ();
+this.deleteGroups = new awt2swing.MenuItem ();
+this.grpsFromSelection = new awt2swing.MenuItem ();
+this.createGroup = new awt2swing.MenuItem ();
+this.unGroup = new awt2swing.MenuItem ();
+this.$delete = new awt2swing.MenuItem ();
+this.copy = new awt2swing.MenuItem ();
+this.cut = new awt2swing.MenuItem ();
+this.pasteMenu = new awt2swing.Menu ();
+this.pasteNew = new awt2swing.MenuItem ();
+this.pasteThis = new awt2swing.MenuItem ();
+this.applyToAllGroups = new awt2swing.CheckboxMenuItem ();
+this.$font = new awt2swing.MenuItem ();
+this.scaleAbove = new awt2swing.CheckboxMenuItem ();
+this.scaleLeft = new awt2swing.CheckboxMenuItem ();
+this.scaleRight = new awt2swing.CheckboxMenuItem ();
+this.modifyPID = new awt2swing.MenuItem ();
+this.modifyConservation = new awt2swing.MenuItem ();
+this.$sortByTree = new awt2swing.CheckboxMenuItem ("Sort Alignment With New Tree", true);
+this.sortByTreeMenu = new awt2swing.Menu ();
+this.inputText = new awt2swing.MenuItem ();
+this.documentation = new awt2swing.MenuItem ();
+this.about = new awt2swing.MenuItem ();
+this.seqLimits = new awt2swing.CheckboxMenuItem ();
+this.centreColumnLabelFlag = new awt2swing.CheckboxMenuItem ();
+this.followMouseOverFlag = new awt2swing.CheckboxMenuItem ();
+this.showSequenceLogo = new awt2swing.CheckboxMenuItem ();
+this.applyAutoAnnotationSettings = new awt2swing.CheckboxMenuItem ();
+this.showConsensusHistogram = new awt2swing.CheckboxMenuItem ();
+this.showGroupConsensus = new awt2swing.CheckboxMenuItem ();
+this.showGroupConservation = new awt2swing.CheckboxMenuItem ();
+this.normSequenceLogo = new awt2swing.CheckboxMenuItem ();
+this.featureSettings = new awt2swing.MenuItem ();
+this.sequenceFeatures = new awt2swing.CheckboxMenuItem ();
+this.annotationColour = new awt2swing.MenuItem ();
+this.annotationColumnSelection = new awt2swing.MenuItem ();
+this.invertColSel = new awt2swing.MenuItem ();
+this.showColumns = new awt2swing.MenuItem ();
+this.showSeqs = new awt2swing.MenuItem ();
+this.hideColumns = new awt2swing.MenuItem ();
+this.hideSequences = new awt2swing.MenuItem ();
+this.hideAllButSelection = new awt2swing.MenuItem ();
+this.hideAllSelection = new awt2swing.MenuItem ();
+this.showAllHidden = new awt2swing.MenuItem ();
+this.$newView = new awt2swing.MenuItem ();
+});
+Clazz.makeConstructor (c$,
+function (al, applet, title, embedded) {
+this.construct (al, applet, title, embedded, true);
+}, "jalview.datamodel.AlignmentI,jalview.bin.JalviewLite,~S,~B");
+Clazz.makeConstructor (c$,
+function (al, applet, title, embedded, addToDisplay) {
+this.construct (al, null, null, applet, title, embedded, addToDisplay);
+}, "jalview.datamodel.AlignmentI,jalview.bin.JalviewLite,~S,~B,~B");
+Clazz.makeConstructor (c$,
+function (al, hiddenSeqs, columnSelection, applet, title, embedded) {
+this.construct (al, hiddenSeqs, columnSelection, applet, title, embedded, true);
+}, "jalview.datamodel.AlignmentI,~A,jalview.datamodel.ColumnSelection,jalview.bin.JalviewLite,~S,~B");
+Clazz.makeConstructor (c$,
+function (al, hiddenSeqs, columnSelection, applet, title, embedded, addToDisplay) {
+Clazz.superConstructor (this, jalview.appletgui.AlignFrame, []);
+if (applet != null) {
+this.jalviewServletURL = applet.jalviewServletURL;
+}try {
+this.jbInit ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+if (applet != null) {
+var param;
+try {
+param = applet.windowWidth;
+if (param != null) {
+var width = Integer.parseInt (param);
+this.frameWidth = width;
+}param = applet.windowHeight;
+if (param != null) {
+var height = Integer.parseInt (param);
+this.frameHeight = height;
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}this.viewport = new jalview.appletgui.AlignViewport (al, applet);
+if (hiddenSeqs != null && hiddenSeqs.length > 0) {
+this.viewport.hideSequence (hiddenSeqs);
+}if (columnSelection != null) {
+this.viewport.setColumnSelection (columnSelection);
+}this.alignPanel = new jalview.appletgui.AlignmentPanel (this, this.viewport);
+this.avc = new jalview.controller.AlignViewController (this, this.viewport, this.alignPanel);
+this.viewport.updateConservation (this.alignPanel);
+this.viewport.updateConsensus (this.alignPanel);
+this.displayNonconservedMenuItem.setState (this.viewport.getShowUnconserved ());
+this.followMouseOverFlag.setState (this.viewport.isFollowHighlight ());
+this.showGroupConsensus.setState (this.viewport.isShowGroupConsensus ());
+this.showGroupConservation.setState (this.viewport.isShowGroupConservation ());
+this.showConsensusHistogram.setState (this.viewport.isShowConsensusHistogram ());
+this.showSequenceLogo.setState (this.viewport.isShowSequenceLogo ());
+this.normSequenceLogo.setState (this.viewport.isNormaliseSequenceLogo ());
+this.applyToAllGroups.setState (this.viewport.getColourAppliesToAllGroups ());
+this.annotationPanelMenuItem.setState (this.viewport.isShowAnnotation ());
+this.showAlignmentAnnotations.setState (this.viewport.isShowAnnotation ());
+this.showSequenceAnnotations.setState (this.viewport.isShowAnnotation ());
+this.seqLimits.setState (this.viewport.getShowJVSuffix ());
+if (applet != null) {
+var param = applet.sortBy;
+if (param != null) {
+if (param.equalsIgnoreCase ("Id")) {
+this.sortIDMenuItem_actionPerformed ();
+} else if (param.equalsIgnoreCase ("Pairwise Identity")) {
+this.sortPairwiseMenuItem_actionPerformed ();
+} else if (param.equalsIgnoreCase ("Length")) {
+this.sortLengthMenuItem_actionPerformed ();
+}}param = applet.wrap;
+if (param != null) {
+if (param.equalsIgnoreCase ("true")) {
+this.wrapMenuItem.setState (true);
+this.wrapMenuItem_actionPerformed ();
+}}param = applet.centrecolumnlabels;
+if (param != null) {
+this.centreColumnLabelFlag.setState (true);
+this.centreColumnLabelFlag_stateChanged ();
+}}if (this.viewport.getAlignment ().isNucleotide ()) {
+this.viewport.updateStrucConsensus (this.alignPanel);
+if (this.viewport.getAlignment ().hasRNAStructure ()) {
+this.RNAHelixColour.setEnabled (true);
+} else {
+this.RNAHelixColour.setEnabled (false);
+}} else {
+this.RNAHelixColour.setEnabled (false);
+this.purinePyrimidineColour.setEnabled (false);
+}this.addKeyListener (this);
+this.alignPanel.seqPanel.seqCanvas.addKeyListener (this);
+this.alignPanel.idPanel.idCanvas.addKeyListener (this);
+this.alignPanel.scalePanel.addKeyListener (this);
+this.alignPanel.annotationPanel.addKeyListener (this);
+this.alignPanel.annotationPanelHolder.addKeyListener (this);
+this.alignPanel.annotationSpaceFillerHolder.addKeyListener (this);
+this.alignPanel.alabels.addKeyListener (this);
+if (addToDisplay) {
+this.addToDisplay (embedded);
+}}, "jalview.datamodel.AlignmentI,~A,jalview.datamodel.ColumnSelection,jalview.bin.JalviewLite,~S,~B,~B");
+Clazz.defineMethod (c$, "addToDisplay",
+function (embedded) {
+this.createAlignFrameWindow (embedded);
+this.validate ();
+this.alignPanel.adjustAnnotationHeight ();
+this.alignPanel.paintAlignment (true);
+}, "~B");
+Clazz.defineMethod (c$, "getAlignViewport",
+function () {
+return this.viewport;
+});
+Clazz.defineMethod (c$, "getSeqcanvas",
+function () {
+return this.alignPanel.seqPanel.seqCanvas;
+});
+Clazz.defineMethod (c$, "parseFeaturesFile",
+function (file, type) {
+return this.parseFeaturesFile (file, type, true);
+}, "~S,~S");
+Clazz.defineMethod (c$, "parseFeaturesFile",
+function (file, type, autoenabledisplay) {
+var featureLinks = new java.util.Hashtable ();
+var featuresFile = false;
+try {
+featuresFile = new jalview.io.FeaturesFile (file, type).parse (this.viewport.getAlignment (), this.alignPanel.seqPanel.seqCanvas.getFeatureRenderer ().getFeatureColours (), featureLinks, true, this.viewport.applet.getDefaultParameter ("relaxedidmatch", false));
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+if (featuresFile) {
+if (featureLinks.size () > 0) {
+this.alignPanel.seqPanel.seqCanvas.getFeatureRenderer ().featureLinks = featureLinks;
+}if (autoenabledisplay) {
+this.viewport.setShowSequenceFeatures (true);
+this.sequenceFeatures.setState (true);
+}if (this.alignPanel.seqPanel.seqCanvas.fr != null) {
+this.alignPanel.seqPanel.seqCanvas.fr.findAllFeatures (true);
+}if (this.viewport.featureSettings != null) {
+this.viewport.featureSettings.refreshTable ();
+}this.alignPanel.paintAlignment (true);
+this.setStatus (jalview.util.MessageManager.getString ("label.successfully_added_features_alignment"));
+}return featuresFile;
+}, "~S,~S,~B");
+Clazz.overrideMethod (c$, "keyPressed",
+function (evt) {
+if (this.viewport.cursorMode && ((evt.getKeyCode () >= 48 && evt.getKeyCode () <= 57) || (evt.getKeyCode () >= 96 && evt.getKeyCode () <= 105)) && Character.isDigit (evt.getKeyChar ())) {
+this.alignPanel.seqPanel.numberPressed (evt.getKeyChar ());
+}switch (evt.getKeyCode ()) {
+case 27:
+this.deselectAllSequenceMenuItem_actionPerformed ();
+this.alignPanel.alabels.cancelDrag ();
+break;
+case 88:
+if (evt.isControlDown () || evt.isMetaDown ()) {
+this.cut_actionPerformed ();
+}break;
+case 67:
+if (this.viewport.cursorMode && !evt.isControlDown ()) {
+this.alignPanel.seqPanel.setCursorColumn ();
+}if (evt.isControlDown () || evt.isMetaDown ()) {
+this.copy_actionPerformed ();
+}break;
+case 86:
+if (evt.isControlDown ()) {
+this.paste (evt.isShiftDown ());
+}break;
+case 65:
+if (evt.isControlDown () || evt.isMetaDown ()) {
+this.selectAllSequenceMenuItem_actionPerformed ();
+}break;
+case 40:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.moveCursor (0, 1);
+} else {
+this.moveSelectedSequences (false);
+}break;
+case 38:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.moveCursor (0, -1);
+} else {
+this.moveSelectedSequences (true);
+}break;
+case 37:
+if (evt.isAltDown () || !this.viewport.cursorMode) {
+this.slideSequences (false, this.alignPanel.seqPanel.getKeyboardNo1 ());
+} else {
+this.alignPanel.seqPanel.moveCursor (-1, 0);
+}break;
+case 39:
+if (evt.isAltDown () || !this.viewport.cursorMode) {
+this.slideSequences (true, this.alignPanel.seqPanel.getKeyboardNo1 ());
+} else {
+this.alignPanel.seqPanel.moveCursor (1, 0);
+}break;
+case 32:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.insertGapAtCursor (evt.isControlDown () || evt.isShiftDown () || evt.isAltDown ());
+}break;
+case 127:
+case 8:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.deleteGapAtCursor (evt.isControlDown () || evt.isShiftDown () || evt.isAltDown ());
+} else {
+this.cut_actionPerformed ();
+this.alignPanel.seqPanel.seqCanvas.repaint ();
+}break;
+case 83:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.setCursorRow ();
+}break;
+case 80:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.setCursorPosition ();
+}break;
+case 10:
+case 44:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.setCursorRowAndColumn ();
+}break;
+case 81:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.setSelectionAreaAtCursor (true);
+}break;
+case 77:
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.setSelectionAreaAtCursor (false);
+}break;
+case 113:
+this.viewport.cursorMode = !this.viewport.cursorMode;
+this.setStatus (jalview.util.MessageManager.formatMessage ("label.keyboard_editing_mode", Clazz.newArray (-1, [(this.viewport.cursorMode ? "on" : "off")])));
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.seqCanvas.cursorX = this.viewport.startRes;
+this.alignPanel.seqPanel.seqCanvas.cursorY = this.viewport.startSeq;
+}break;
+case 70:
+if (evt.isControlDown ()) {
+this.findMenuItem_actionPerformed ();
+}break;
+case 72:
+{
+var toggleSeqs = !evt.isControlDown ();
+var toggleCols = !evt.isShiftDown ();
+this.toggleHiddenRegions (toggleSeqs, toggleCols);
+break;
+}case 33:
+if (this.viewport.getWrapAlignment ()) {
+this.alignPanel.scrollUp (true);
+} else {
+this.alignPanel.setScrollValues (this.viewport.startRes, this.viewport.startSeq - this.viewport.endSeq + this.viewport.startSeq);
+}break;
+case 34:
+if (this.viewport.getWrapAlignment ()) {
+this.alignPanel.scrollUp (false);
+} else {
+this.alignPanel.setScrollValues (this.viewport.startRes, this.viewport.startSeq + this.viewport.endSeq - this.viewport.startSeq);
+}break;
+case 90:
+if (evt.isControlDown ()) {
+this.undoMenuItem_actionPerformed ();
+}break;
+case 89:
+if (evt.isControlDown ()) {
+this.redoMenuItem_actionPerformed ();
+}break;
+case 76:
+if (evt.isControlDown ()) {
+this.trimAlignment (true);
+}break;
+case 82:
+if (evt.isControlDown ()) {
+this.trimAlignment (false);
+}break;
+case 69:
+if (evt.isControlDown ()) {
+if (evt.isShiftDown ()) {
+this.removeAllGapsMenuItem_actionPerformed ();
+} else {
+this.removeGappedColumnMenuItem_actionPerformed ();
+}}break;
+case 73:
+if (evt.isControlDown ()) {
+if (evt.isAltDown ()) {
+this.invertColSel_actionPerformed ();
+} else {
+this.invertSequenceMenuItem_actionPerformed ();
+}}break;
+case 71:
+if (evt.isControlDown ()) {
+if (evt.isShiftDown ()) {
+this.unGroup_actionPerformed ();
+} else {
+this.createGroup_actionPerformed ();
+}}break;
+case 85:
+if (evt.isControlDown ()) {
+this.deleteGroups_actionPerformed ();
+}break;
+case 84:
+if (evt.isControlDown ()) {
+this.newView (null);
+}break;
+}
+this.alignPanel.paintAlignment (true);
+}, "java.awt.event.KeyEvent");
+Clazz.defineMethod (c$, "toggleHiddenRegions",
+($fz = function (toggleSeqs, toggleCols) {
+var hide = false;
+var sg = this.viewport.getSelectionGroup ();
+if (!toggleSeqs && !toggleCols) {
+if ((this.viewport.getColumnSelection () != null && this.viewport.getColumnSelection ().getSelected () != null && this.viewport.getColumnSelection ().getSelected ().size () > 0) || (sg != null && sg.getSize () > 0 && sg.getStartRes () <= sg.getEndRes ())) {
+if (sg != null) {
+this.invertSequenceMenuItem_actionPerformed ();
+sg = this.viewport.getSelectionGroup ();
+toggleSeqs = true;
+}this.viewport.expandColSelection (sg, true);
+this.invertColSel_actionPerformed ();
+toggleCols = true;
+}}if (toggleSeqs) {
+if (sg != null && sg.getSize () != this.viewport.getAlignment ().getHeight ()) {
+hide = true;
+this.viewport.hideAllSelectedSeqs ();
+} else if (!(toggleCols && this.viewport.getColumnSelection ().getSelected ().size () > 0)) {
+this.viewport.showAllHiddenSeqs ();
+}}if (toggleCols) {
+if (this.viewport.getColumnSelection ().getSelected ().size () > 0) {
+this.viewport.hideSelectedColumns ();
+if (!toggleSeqs) {
+this.viewport.setSelectionGroup (sg);
+}} else if (!hide) {
+this.viewport.showAllHiddenColumns ();
+}}}, $fz.isPrivate = true, $fz), "~B,~B");
+Clazz.overrideMethod (c$, "keyReleased",
+function (evt) {
+}, "java.awt.event.KeyEvent");
+Clazz.overrideMethod (c$, "keyTyped",
+function (evt) {
+}, "java.awt.event.KeyEvent");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+var source = evt.getSource ();
+if (source === this.displayNonconservedMenuItem) {
+this.displayNonconservedMenuItem_actionPerformed ();
+} else if (source === this.colourTextMenuItem) {
+this.colourTextMenuItem_actionPerformed ();
+} else if (source === this.wrapMenuItem) {
+this.wrapMenuItem_actionPerformed ();
+} else if (source === this.scaleAbove) {
+this.viewport.setScaleAboveWrapped (this.scaleAbove.getState ());
+} else if (source === this.scaleLeft) {
+this.viewport.setScaleLeftWrapped (this.scaleLeft.getState ());
+} else if (source === this.scaleRight) {
+this.viewport.setScaleRightWrapped (this.scaleRight.getState ());
+} else if (source === this.seqLimits) {
+this.seqLimits_itemStateChanged ();
+} else if (source === this.viewBoxesMenuItem) {
+this.viewport.setShowBoxes (this.viewBoxesMenuItem.getState ());
+} else if (source === this.viewTextMenuItem) {
+this.viewport.setShowText (this.viewTextMenuItem.getState ());
+} else if (source === this.renderGapsMenuItem) {
+this.viewport.setRenderGaps (this.renderGapsMenuItem.getState ());
+} else if (source === this.annotationPanelMenuItem) {
+this.viewport.setShowAnnotation (this.annotationPanelMenuItem.getState ());
+this.alignPanel.setAnnotationVisible (this.annotationPanelMenuItem.getState ());
+} else if (source === this.sequenceFeatures) {
+this.viewport.setShowSequenceFeatures (this.sequenceFeatures.getState ());
+this.alignPanel.seqPanel.seqCanvas.repaint ();
+} else if (source === this.showAlignmentAnnotations) {
+this.setAnnotationsVisibility ();
+} else if (source === this.showSequenceAnnotations) {
+this.setAnnotationsVisibility ();
+} else if (source === this.sortAnnBySequence) {
+var newState = this.sortAnnBySequence.getState ();
+this.sortAnnByLabel.setState (false);
+this.setAnnotationSortOrder (newState ? jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.SEQUENCE_AND_LABEL : jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.NONE);
+this.setViewportAnnotationOrder ();
+} else if (source === this.sortAnnByLabel) {
+var newState = this.sortAnnByLabel.getState ();
+this.sortAnnBySequence.setState (false);
+this.setAnnotationSortOrder (newState ? jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.LABEL_AND_SEQUENCE : jalview.analysis.AnnotationSorter.SequenceAnnotationOrder.NONE);
+this.setViewportAnnotationOrder ();
+} else if (source === this.showAutoFirst) {
+this.showAutoLast.setState (!this.showAutoFirst.getState ());
+this.setShowAutoCalculatedAbove (this.showAutoFirst.getState ());
+this.setViewportAnnotationOrder ();
+} else if (source === this.showAutoLast) {
+this.showAutoFirst.setState (!this.showAutoLast.getState ());
+this.setShowAutoCalculatedAbove (this.showAutoFirst.getState ());
+this.setViewportAnnotationOrder ();
+} else if (source === this.conservationMenuItem) {
+this.conservationMenuItem_actionPerformed ();
+} else if (source === this.abovePIDThreshold) {
+this.abovePIDThreshold_actionPerformed ();
+} else if (source === this.applyToAllGroups) {
+this.viewport.setColourAppliesToAllGroups (this.applyToAllGroups.getState ());
+} else if (source === this.autoCalculate) {
+this.viewport.autoCalculateConsensus = this.autoCalculate.getState ();
+} else if (source === this.$sortByTree) {
+this.viewport.sortByTree = this.$sortByTree.getState ();
+} else if (source === this.centreColumnLabelFlag) {
+this.centreColumnLabelFlag_stateChanged ();
+} else if (source === this.followMouseOverFlag) {
+this.mouseOverFlag_stateChanged ();
+} else if (source === this.showGroupConsensus) {
+this.showGroupConsensus_actionPerformed ();
+} else if (source === this.showGroupConservation) {
+this.showGroupConservation_actionPerformed ();
+} else if (source === this.showSequenceLogo) {
+this.showSequenceLogo_actionPerformed ();
+} else if (source === this.normSequenceLogo) {
+this.normSequenceLogo_actionPerformed ();
+} else if (source === this.showConsensusHistogram) {
+this.showConsensusHistogram_actionPerformed ();
+} else if (source === this.applyAutoAnnotationSettings) {
+this.applyAutoAnnotationSettings_actionPerformed ();
+}this.alignPanel.paintAlignment (true);
+}, "java.awt.event.ItemEvent");
+Clazz.defineMethod (c$, "setAnnotationsVisibility",
+($fz = function () {
+var showForAlignment = this.showAlignmentAnnotations.getState ();
+var showForSequences = this.showSequenceAnnotations.getState ();
+for (var aa, $aa = 0, $$aa = this.alignPanel.getAlignment ().getAlignmentAnnotation (); $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
+var visible = (aa.sequenceRef == null ? showForAlignment : showForSequences);
+aa.visible = visible;
+}
+this.alignPanel.validateAnnotationDimensions (true);
+this.validate ();
+this.repaint ();
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "setAnnotationSortOrder",
+($fz = function (order) {
+this.annotationSortOrder = order;
+}, $fz.isPrivate = true, $fz), "jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
+Clazz.defineMethod (c$, "setViewportAnnotationOrder",
+($fz = function () {
+this.alignPanel.av.setSortAnnotationsBy (this.annotationSortOrder);
+this.alignPanel.av.setShowAutocalculatedAbove (this.showAutoCalculatedAbove);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "setShowAutoCalculatedAbove",
+($fz = function (showAbove) {
+this.showAutoCalculatedAbove = showAbove;
+}, $fz.isPrivate = true, $fz), "~B");
+Clazz.defineMethod (c$, "mouseOverFlag_stateChanged",
+($fz = function () {
+this.viewport.setFollowHighlight (this.followMouseOverFlag.getState ());
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "centreColumnLabelFlag_stateChanged",
+($fz = function () {
+this.viewport.centreColumnLabels = this.centreColumnLabelFlag.getState ();
+this.alignPanel.annotationPanel.repaint ();
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+var source = evt.getSource ();
+if (source === this.inputText) {
+this.inputText_actionPerformed ();
+} else if (source === this.$loadTree) {
+this.loadTree_actionPerformed ();
+} else if (source === this.loadApplication) {
+this.launchFullApplication ();
+} else if (source === this.$loadAnnotations) {
+this.loadAnnotations ();
+} else if (source === this.$outputAnnotations) {
+this.outputAnnotations (true);
+} else if (source === this.$outputFeatures) {
+this.outputFeatures (true, "Jalview");
+} else if (source === this.closeMenuItem) {
+this.closeMenuItem_actionPerformed ();
+} else if (source === this.copy) {
+this.copy_actionPerformed ();
+} else if (source === this.undoMenuItem) {
+this.undoMenuItem_actionPerformed ();
+} else if (source === this.redoMenuItem) {
+this.redoMenuItem_actionPerformed ();
+} else if (source === this.inputText) {
+this.inputText_actionPerformed ();
+} else if (source === this.closeMenuItem) {
+this.closeMenuItem_actionPerformed ();
+} else if (source === this.undoMenuItem) {
+this.undoMenuItem_actionPerformed ();
+} else if (source === this.redoMenuItem) {
+this.redoMenuItem_actionPerformed ();
+} else if (source === this.copy) {
+this.copy_actionPerformed ();
+} else if (source === this.pasteNew) {
+this.pasteNew_actionPerformed ();
+} else if (source === this.pasteThis) {
+this.pasteThis_actionPerformed ();
+} else if (source === this.cut) {
+this.cut_actionPerformed ();
+} else if (source === this.$delete) {
+this.delete_actionPerformed ();
+} else if (source === this.grpsFromSelection) {
+this.makeGrpsFromSelection_actionPerformed ();
+} else if (source === this.deleteGroups) {
+this.deleteGroups_actionPerformed ();
+} else if (source === this.selectAllSequenceMenuItem) {
+this.selectAllSequenceMenuItem_actionPerformed ();
+} else if (source === this.deselectAllSequenceMenuItem) {
+this.deselectAllSequenceMenuItem_actionPerformed ();
+} else if (source === this.invertSequenceMenuItem) {
+this.invertSequenceMenuItem_actionPerformed ();
+} else if (source === this.invertColSel) {
+this.viewport.invertColumnSelection ();
+this.alignPanel.paintAlignment (true);
+} else if (source === this.remove2LeftMenuItem) {
+this.trimAlignment (true);
+} else if (source === this.remove2RightMenuItem) {
+this.trimAlignment (false);
+} else if (source === this.removeGappedColumnMenuItem) {
+this.removeGappedColumnMenuItem_actionPerformed ();
+} else if (source === this.removeAllGapsMenuItem) {
+this.removeAllGapsMenuItem_actionPerformed ();
+} else if (source === this.findMenuItem) {
+this.findMenuItem_actionPerformed ();
+} else if (source === this.$font) {
+ new jalview.appletgui.FontChooser (this.alignPanel);
+} else if (source === this.$newView) {
+this.newView (null);
+} else if (source === this.showColumns) {
+this.viewport.showAllHiddenColumns ();
+this.alignPanel.paintAlignment (true);
+} else if (source === this.showSeqs) {
+this.viewport.showAllHiddenSeqs ();
+this.alignPanel.paintAlignment (true);
+} else if (source === this.hideColumns) {
+this.viewport.hideSelectedColumns ();
+this.alignPanel.paintAlignment (true);
+} else if (source === this.hideSequences && this.viewport.getSelectionGroup () != null) {
+this.viewport.hideAllSelectedSeqs ();
+this.alignPanel.paintAlignment (true);
+} else if (source === this.hideAllButSelection) {
+this.toggleHiddenRegions (false, false);
+this.alignPanel.paintAlignment (true);
+} else if (source === this.hideAllSelection) {
+var sg = this.viewport.getSelectionGroup ();
+this.viewport.expandColSelection (sg, false);
+this.viewport.hideAllSelectedSeqs ();
+this.viewport.hideSelectedColumns ();
+this.alignPanel.paintAlignment (true);
+} else if (source === this.showAllHidden) {
+this.viewport.showAllHiddenColumns ();
+this.viewport.showAllHiddenSeqs ();
+this.alignPanel.paintAlignment (true);
+} else if (source === this.showGroupConsensus) {
+this.showGroupConsensus_actionPerformed ();
+} else if (source === this.showGroupConservation) {
+this.showGroupConservation_actionPerformed ();
+} else if (source === this.showSequenceLogo) {
+this.showSequenceLogo_actionPerformed ();
+} else if (source === this.normSequenceLogo) {
+this.normSequenceLogo_actionPerformed ();
+} else if (source === this.showConsensusHistogram) {
+this.showConsensusHistogram_actionPerformed ();
+} else if (source === this.applyAutoAnnotationSettings) {
+this.applyAutoAnnotationSettings_actionPerformed ();
+} else if (source === this.featureSettings) {
+ new jalview.appletgui.FeatureSettings (this.alignPanel);
+} else if (source === this.alProperties) {
+var contents = new jalview.io.AlignmentProperties (this.viewport.getAlignment ()).formatAsString ();
+var cap = new jalview.appletgui.CutAndPasteTransfer (false, this);
+cap.setText (contents.toString ());
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.alignment_properties", Clazz.newArray (-1, [this.getTitle ()])), 400, 250);
+} else if (source === this.overviewMenuItem) {
+this.overviewMenuItem_actionPerformed ();
+} else if (source === this.noColourmenuItem) {
+this.changeColour (null);
+} else if (source === this.clustalColour) {
+this.abovePIDThreshold.setState (false);
+this.changeColour ( new jalview.schemes.ClustalxColourScheme (this.viewport.getAlignment (), null));
+} else if (source === this.zappoColour) {
+this.changeColour ( new jalview.schemes.ZappoColourScheme ());
+} else if (source === this.taylorColour) {
+this.changeColour ( new jalview.schemes.TaylorColourScheme ());
+} else if (source === this.hydrophobicityColour) {
+this.changeColour ( new jalview.schemes.HydrophobicColourScheme ());
+} else if (source === this.helixColour) {
+this.changeColour ( new jalview.schemes.HelixColourScheme ());
+} else if (source === this.strandColour) {
+this.changeColour ( new jalview.schemes.StrandColourScheme ());
+} else if (source === this.turnColour) {
+this.changeColour ( new jalview.schemes.TurnColourScheme ());
+} else if (source === this.buriedColour) {
+this.changeColour ( new jalview.schemes.BuriedColourScheme ());
+} else if (source === this.nucleotideColour) {
+this.changeColour ( new jalview.schemes.NucleotideColourScheme ());
+} else if (source === this.purinePyrimidineColour) {
+this.changeColour ( new jalview.schemes.PurinePyrimidineColourScheme ());
+} else if (source === this.RNAInteractionColour) {
+this.changeColour ( new jalview.schemes.RNAInteractionColourScheme ());
+} else if (source === this.RNAHelixColour) {
+ new jalview.schemes.RNAHelicesColourChooser (this.viewport, this.alignPanel);
+} else if (source === this.modifyPID) {
+this.modifyPID_actionPerformed ();
+} else if (source === this.modifyConservation) {
+this.modifyConservation_actionPerformed ();
+} else if (source === this.userDefinedColour) {
+ new jalview.appletgui.UserDefinedColours (this.alignPanel, null);
+} else if (source === this.PIDColour) {
+this.changeColour ( new jalview.schemes.PIDColourScheme ());
+} else if (source === this.BLOSUM62Colour) {
+this.changeColour ( new jalview.schemes.Blosum62ColourScheme ());
+} else if (source === this.tcoffeeColour) {
+this.changeColour ( new jalview.schemes.TCoffeeColourScheme (this.alignPanel.getAlignment ()));
+} else if (source === this.annotationColour) {
+ new jalview.appletgui.AnnotationColourChooser (this.viewport, this.alignPanel);
+} else if (source === this.annotationColumnSelection) {
+ new jalview.appletgui.AnnotationColumnChooser (this.viewport, this.alignPanel);
+} else if (source === this.sortPairwiseMenuItem) {
+this.sortPairwiseMenuItem_actionPerformed ();
+} else if (source === this.sortIDMenuItem) {
+this.sortIDMenuItem_actionPerformed ();
+} else if (source === this.sortLengthMenuItem) {
+this.sortLengthMenuItem_actionPerformed ();
+} else if (source === this.sortGroupMenuItem) {
+this.sortGroupMenuItem_actionPerformed ();
+} else if (source === this.removeRedundancyMenuItem) {
+this.removeRedundancyMenuItem_actionPerformed ();
+} else if (source === this.pairwiseAlignmentMenuItem) {
+this.pairwiseAlignmentMenuItem_actionPerformed ();
+} else if (source === this.PCAMenuItem) {
+this.PCAMenuItem_actionPerformed ();
+} else if (source === this.averageDistanceTreeMenuItem) {
+this.averageDistanceTreeMenuItem_actionPerformed ();
+} else if (source === this.neighbourTreeMenuItem) {
+this.neighbourTreeMenuItem_actionPerformed ();
+} else if (source === this.njTreeBlosumMenuItem) {
+this.njTreeBlosumMenuItem_actionPerformed ();
+} else if (source === this.avDistanceTreeBlosumMenuItem) {
+this.avTreeBlosumMenuItem_actionPerformed ();
+} else if (source === this.documentation) {
+this.documentation_actionPerformed ();
+} else if (source === this.about) {
+this.about_actionPerformed ();
+}}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "inputText_actionPerformed",
+function () {
+var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.input_cut_paste"), 500, 500);
+});
+Clazz.defineMethod (c$, "outputText_actionPerformed",
+function (e) {
+var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.alignment_output_command", Clazz.newArray (-1, [e.getActionCommand ()])), 600, 500);
+var fr = this.alignPanel.cloneFeatureRenderer ();
+cap.setText ( new jalview.io.AppletFormatAdapter (this.alignPanel).formatSequences (e.getActionCommand (), this.viewport.getAlignment (), this.viewport.getShowJVSuffix ()));
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "loadAnnotations",
+function () {
+var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
+cap.setText (jalview.util.MessageManager.getString ("label.paste_features_annotations_Tcoffee_here"));
+cap.setAnnotationImport ();
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("action.paste_annotations"), 400, 300);
+});
+Clazz.defineMethod (c$, "outputAnnotations",
+function (displayTextbox) {
+var annotation = new jalview.io.AnnotationFile ().printAnnotationsForView (this.viewport);
+if (displayTextbox) {
+var cap = new jalview.appletgui.CutAndPasteTransfer (false, this);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.annotations"), 600, 500);
+cap.setText (annotation);
+}return annotation;
+}, "~B");
+Clazz.defineMethod (c$, "getDisplayedFeatureCols",
+($fz = function () {
+if (this.alignPanel.getFeatureRenderer () != null && this.viewport.getFeaturesDisplayed () != null) {
+return this.alignPanel.getFeatureRenderer ().getDisplayedFeatureCols ();
+}return null;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "outputFeatures",
+function (displayTextbox, format) {
+var features;
+if (format.equalsIgnoreCase ("Jalview")) {
+features = new jalview.io.FeaturesFile ().printJalviewFormat (this.viewport.getAlignment ().getSequencesArray (), this.getDisplayedFeatureCols ());
+} else {
+features = new jalview.io.FeaturesFile ().printGFFFormat (this.viewport.getAlignment ().getSequencesArray (), this.getDisplayedFeatureCols ());
+}if (displayTextbox) {
+var frimport = false;
+if (features == null || features.equals ("No Features Visible")) {
+features = "# No features visible - paste some and import them here.";
+frimport = true;
+}var cap = new jalview.appletgui.CutAndPasteTransfer (frimport, this);
+if (frimport) {
+cap.setAnnotationImport ();
+}var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.features"), 600, 500);
+cap.setText (features);
+} else {
+if (features == null) {
+features = "";
+}}return features;
+}, "~B,~S");
+Clazz.defineMethod (c$, "launchFullApplication",
+function () {
+var url = new StringBuffer (this.jalviewServletURL);
+var firstSep = url.lastIndexOf ("?") > url.lastIndexOf ("/") ? "&" : "?";
+url.append (firstSep);
+var applet = this.viewport.applet;
+var s = applet.startupFile;
+url.append ("open=" + this.appendProtocol (s));
+if (this.viewport.applet.features != null) {
+url.append ("&features=");
+url.append (this.appendProtocol (applet.features));
+}if (applet.annotations != null) {
+url.append ("&annotations=");
+url.append (this.appendProtocol (applet.annotations));
+}if (applet.jnetFile != null) {
+url.append ("&annotations=");
+url.append (this.appendProtocol (applet.jnetFile));
+}if (applet.defaultColour != null) {
+url.append ("&colour=" + this.removeWhiteSpace (applet.defaultColour));
+}if (applet.userDefinedColour != null) {
+url.append ("&colour=" + this.removeWhiteSpace (applet.userDefinedColour));
+}if (applet.treeFile != null) {
+url.append ("&tree=" + this.appendProtocol (applet.treeFile));
+}this.showURL (url.toString (), "FULL_APP");
+});
+Clazz.defineMethod (c$, "removeWhiteSpace",
+function (colour) {
+var sb = new StringBuffer ();
+for (var i = 0; i < colour.length; i++) {
+if (Character.isWhitespace (colour.charAt (i))) {
+sb.append ("%20");
+} else {
+sb.append (colour.charAt (i));
+}}
+return sb.toString ();
+}, "~S");
+Clazz.defineMethod (c$, "appendProtocol",
+function (url) {
+try {
+ new java.net.URL (url);
+url = java.net.URLEncoder.encode (url);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, java.net.MalformedURLException)) {
+url = this.viewport.applet.getCodeBase () + url;
+} else {
+throw ex;
+}
+}
+return url;
+}, "~S");
+Clazz.defineMethod (c$, "closeMenuItem_actionPerformed",
+function () {
+jalview.appletgui.PaintRefresher.RemoveComponent (this.alignPanel);
+if (this.alignPanel.seqPanel != null && this.alignPanel.seqPanel.seqCanvas != null) {
+jalview.appletgui.PaintRefresher.RemoveComponent (this.alignPanel.seqPanel.seqCanvas);
+}if (this.alignPanel.idPanel != null && this.alignPanel.idPanel.idCanvas != null) {
+jalview.appletgui.PaintRefresher.RemoveComponent (this.alignPanel.idPanel.idCanvas);
+}if (jalview.appletgui.PaintRefresher.components.size () == 0 && this.viewport.applet == null) {
+System.exit (0);
+} else {
+}this.viewport = null;
+this.alignPanel = null;
+this.dispose ();
+});
+Clazz.defineMethod (c$, "updateEditMenuBar",
+function () {
+if (this.viewport.getHistoryList ().size () > 0) {
+this.undoMenuItem.setEnabled (true);
+var command = this.viewport.getHistoryList ().peek ();
+this.undoMenuItem.setLabel (jalview.util.MessageManager.formatMessage ("label.undo_command", Clazz.newArray (-1, [command.getDescription ()])));
+} else {
+this.undoMenuItem.setEnabled (false);
+this.undoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.undo"));
+}if (this.viewport.getRedoList ().size () > 0) {
+this.redoMenuItem.setEnabled (true);
+var command = this.viewport.getRedoList ().peek ();
+this.redoMenuItem.setLabel (jalview.util.MessageManager.formatMessage ("label.redo_command", Clazz.newArray (-1, [command.getDescription ()])));
+} else {
+this.redoMenuItem.setEnabled (false);
+this.redoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.redo"));
+}});
+Clazz.overrideMethod (c$, "addHistoryItem",
+function (command) {
+if (command.getSize () > 0) {
+this.viewport.addToHistoryList (command);
+this.viewport.clearRedoList ();
+this.updateEditMenuBar ();
+this.viewport.updateHiddenColumns ();
+}}, "jalview.commands.CommandI");
+Clazz.defineMethod (c$, "undoMenuItem_actionPerformed",
+function () {
+if (this.viewport.getHistoryList ().isEmpty ()) {
+return;
+}var command = this.viewport.getHistoryList ().pop ();
+this.viewport.addToRedoList (command);
+command.undoCommand (null);
+var originalSource = this.getOriginatingSource (command);
+if (originalSource !== this.viewport) {
+System.err.println ("Warning: Viewport object mismatch whilst undoing");
+}originalSource.updateHiddenColumns ();
+this.updateEditMenuBar ();
+originalSource.firePropertyChange ("alignment", null, originalSource.getAlignment ().getSequences ());
+});
+Clazz.defineMethod (c$, "redoMenuItem_actionPerformed",
+function () {
+if (this.viewport.getRedoList ().isEmpty ()) {
+return;
+}var command = this.viewport.getRedoList ().pop ();
+this.viewport.addToHistoryList (command);
+command.doCommand (null);
+var originalSource = this.getOriginatingSource (command);
+if (originalSource !== this.viewport) {
+System.err.println ("Warning: Viewport object mismatch whilst re-doing");
+}originalSource.updateHiddenColumns ();
+this.updateEditMenuBar ();
+originalSource.firePropertyChange ("alignment", null, originalSource.getAlignment ().getSequences ());
+});
+Clazz.defineMethod (c$, "getOriginatingSource",
+function (command) {
+var originalSource = null;
+var al = null;
+if (Clazz.instanceOf (command, jalview.commands.EditCommand)) {
+var editCommand = command;
+al = editCommand.getAlignment ();
+var comps = jalview.appletgui.PaintRefresher.components.get (this.viewport.getSequenceSetId ());
+for (var i = 0; i < comps.size (); i++) {
+if (Clazz.instanceOf (comps.elementAt (i), jalview.appletgui.AlignmentPanel)) {
+if (al === (comps.elementAt (i)).av.getAlignment ()) {
+originalSource = (comps.elementAt (i)).av;
+break;
+}}}
+}if (originalSource == null) {
+if (al != null) {
+jalview.appletgui.PaintRefresher.validateSequences (al, this.viewport.getAlignment ());
+}originalSource = this.viewport;
+}return originalSource;
+}, "jalview.commands.CommandI");
+Clazz.defineMethod (c$, "moveSelectedSequences",
+function (up) {
+var sg = this.viewport.getSelectionGroup ();
+if (sg == null) {
+return;
+}this.viewport.getAlignment ().moveSelectedSequencesByOne (sg, up ? null : this.viewport.getHiddenRepSequences (), up);
+this.alignPanel.paintAlignment (true);
+var complement = this.viewport.getCodingComplement ();
+if (complement != null) {
+var mappedSelection = jalview.util.MappingUtils.mapSequenceGroup (sg, this.viewport, complement);
+complement.getAlignment ().moveSelectedSequencesByOne (mappedSelection, up ? null : complement.getHiddenRepSequences (), up);
+}}, "~B");
+Clazz.defineMethod (c$, "slideSequences",
+function (right, size) {
+var sg = new java.util.Vector ();
+if (this.viewport.cursorMode) {
+sg.add (this.viewport.getAlignment ().getSequenceAt (this.alignPanel.seqPanel.seqCanvas.cursorY));
+} else if (this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () != this.viewport.getAlignment ().getHeight ()) {
+sg = this.viewport.getSelectionGroup ().getSequences (this.viewport.getHiddenRepSequences ());
+}if (sg.size () < 1) {
+return;
+}var invertGroup = new java.util.Vector ();
+for (var i = 0; i < this.viewport.getAlignment ().getHeight (); i++) {
+if (!sg.contains (this.viewport.getAlignment ().getSequenceAt (i))) {
+invertGroup.addElement (this.viewport.getAlignment ().getSequenceAt (i));
+}}
+var seqs1 = sg.toArray ( new Array (sg.size ()));
+var seqs2 = invertGroup.toArray ( new Array (invertGroup.size ()));
+for (var i = 0; i < invertGroup.size (); i++) {
+seqs2[i] = invertGroup.elementAt (i);
+}
+var ssc;
+if (right) {
+ssc = new jalview.commands.SlideSequencesCommand ("Slide Sequences", seqs2, seqs1, size, this.viewport.getGapCharacter ());
+} else {
+ssc = new jalview.commands.SlideSequencesCommand ("Slide Sequences", seqs1, seqs2, size, this.viewport.getGapCharacter ());
+}var groupAdjustment = 0;
+if (ssc.getGapsInsertedBegin () && right) {
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.moveCursor (size, 0);
+} else {
+groupAdjustment = size;
+}} else if (!ssc.getGapsInsertedBegin () && !right) {
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.moveCursor (-size, 0);
+} else {
+groupAdjustment = -size;
+}}if (groupAdjustment != 0) {
+this.viewport.getSelectionGroup ().setStartRes (this.viewport.getSelectionGroup ().getStartRes () + groupAdjustment);
+this.viewport.getSelectionGroup ().setEndRes (this.viewport.getSelectionGroup ().getEndRes () + groupAdjustment);
+}var appendHistoryItem = false;
+var historyList = this.viewport.getHistoryList ();
+if (historyList != null && historyList.size () > 0 && Clazz.instanceOf (historyList.peek (), jalview.commands.SlideSequencesCommand)) {
+appendHistoryItem = ssc.appendSlideCommand (historyList.peek ());
+}if (!appendHistoryItem) {
+this.addHistoryItem (ssc);
+}this.repaint ();
+}, "~B,~N");
+Clazz.defineMethod (c$, "copy_actionPerformed",
+function () {
+if (this.viewport.getSelectionGroup () == null) {
+return;
+}var sg = this.viewport.getSelectionGroup ();
+jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer ();
+var orderedSeqs = new java.util.HashMap ();
+for (var i = 0; i < sg.getSize (); i++) {
+var seq = sg.getSequenceAt (i);
+var index = this.viewport.getAlignment ().findIndex (seq);
+orderedSeqs.put (new Integer (index), seq);
+}
+var index = 0;
+var startRes;
+var endRes;
+var ch;
+if (this.viewport.hasHiddenColumns () && this.viewport.getSelectionGroup () != null) {
+jalview.appletgui.AlignFrame.copiedHiddenColumns = new java.util.Vector ();
+var hiddenOffset = this.viewport.getSelectionGroup ().getStartRes ();
+for (var region, $region = this.viewport.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
+jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement ( Clazz.newIntArray (-1, [region[0] - hiddenOffset, region[1] - hiddenOffset]));
+}
+} else {
+jalview.appletgui.AlignFrame.copiedHiddenColumns = null;
+}for (var i = 0; i < sg.getSize (); i++) {
+var seq = null;
+while (seq == null) {
+if (orderedSeqs.containsKey (new Integer (index))) {
+seq = orderedSeqs.get (new Integer (index));
+index++;
+break;
+} else {
+index++;
+}}
+startRes = seq.findPosition (sg.getStartRes ());
+endRes = 0;
+for (var j = 0; j < sg.getEndRes () + 1 && j < seq.getLength (); j++) {
+ch = seq.getCharAt (j);
+if (!jalview.util.Comparison.isGap ((ch))) {
+endRes++;
+}}
+if (endRes > 0) {
+endRes += seq.getStart () - 1;
+}jalview.appletgui.AlignFrame.copiedSequences.append (seq.getName () + "\t" + startRes + "\t" + endRes + "\t" + seq.getSequenceAsString (sg.getStartRes (), sg.getEndRes () + 1) + "\n");
+}
+});
+Clazz.defineMethod (c$, "pasteNew_actionPerformed",
+function () {
+this.paste (true);
+});
+Clazz.defineMethod (c$, "pasteThis_actionPerformed",
+function () {
+this.paste (false);
+});
+Clazz.defineMethod (c$, "paste",
+function (newAlignment) {
+try {
+if (jalview.appletgui.AlignFrame.copiedSequences == null) {
+return;
+}var st = new java.util.StringTokenizer (jalview.appletgui.AlignFrame.copiedSequences.toString ());
+var seqs = new java.util.Vector ();
+while (st.hasMoreElements ()) {
+var name = st.nextToken ();
+var start = Integer.parseInt (st.nextToken ());
+var end = Integer.parseInt (st.nextToken ());
+seqs.addElement ( new jalview.datamodel.Sequence (name, st.nextToken (), start, end));
+}
+var newSeqs = new Array (seqs.size ());
+for (var i = 0; i < seqs.size (); i++) {
+newSeqs[i] = seqs.elementAt (i);
+}
+if (newAlignment) {
+var newtitle = jalview.util.MessageManager.getString ("label.copied_sequences");
+if (this.getTitle ().startsWith (jalview.util.MessageManager.getString ("label.copied_sequences"))) {
+newtitle = this.getTitle ();
+} else {
+newtitle = newtitle.concat (jalview.util.MessageManager.formatMessage ("label.from_msname", Clazz.newArray (-1, [this.getTitle ()])));
+}var af = new jalview.appletgui.AlignFrame ( new jalview.datamodel.Alignment (newSeqs), this.viewport.applet, newtitle, false);
+if (jalview.appletgui.AlignFrame.copiedHiddenColumns != null) {
+for (var i = 0; i < jalview.appletgui.AlignFrame.copiedHiddenColumns.size (); i++) {
+var region = jalview.appletgui.AlignFrame.copiedHiddenColumns.elementAt (i);
+af.viewport.hideColumns (region[0], region[1]);
+}
+}jalview.bin.JalviewLite.addFrame (af, newtitle, this.frameWidth, this.frameHeight);
+} else {
+this.addSequences (newSeqs);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}, "~B");
+Clazz.defineMethod (c$, "addSequences",
+function (seqs) {
+for (var i = 0; i < seqs.length; i++) {
+this.viewport.getAlignment ().addSequence (seqs[i]);
+}
+this.addHistoryItem ( new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("label.add_sequences"), jalview.commands.EditCommand.Action.PASTE, seqs, 0, this.viewport.getAlignment ().getWidth (), this.viewport.getAlignment ()));
+this.viewport.setEndSeq (this.viewport.getAlignment ().getHeight ());
+this.viewport.getAlignment ().getWidth ();
+this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
+}, "~A");
+Clazz.defineMethod (c$, "cut_actionPerformed",
+function () {
+this.copy_actionPerformed ();
+this.delete_actionPerformed ();
+});
+Clazz.defineMethod (c$, "delete_actionPerformed",
+function () {
+var sg = this.viewport.getSelectionGroup ();
+if (sg == null) {
+return;
+}var seqs = new java.util.Vector ();
+var seq;
+for (var i = 0; i < sg.getSize (); i++) {
+seq = sg.getSequenceAt (i);
+seqs.addElement (seq);
+}
+if (sg.getSize () == this.viewport.getAlignment ().getHeight ()) {
+this.viewport.getColumnSelection ().removeElements (sg.getStartRes (), sg.getEndRes () + 1);
+}var cut = new Array (seqs.size ());
+for (var i = 0; i < seqs.size (); i++) {
+cut[i] = seqs.elementAt (i);
+}
+this.addHistoryItem ( new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("label.cut_sequences"), jalview.commands.EditCommand.Action.CUT, cut, sg.getStartRes (), sg.getEndRes () - sg.getStartRes () + 1, this.viewport.getAlignment ()));
+this.viewport.setSelectionGroup (null);
+this.viewport.getAlignment ().deleteGroup (sg);
+this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
+if (this.viewport.getAlignment ().getHeight () < 1) {
+this.setVisible (false);
+}this.viewport.sendSelection ();
+});
+Clazz.defineMethod (c$, "showGroupConsensus_actionPerformed",
+function () {
+this.viewport.setShowGroupConsensus (this.showGroupConsensus.getState ());
+this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
+});
+Clazz.defineMethod (c$, "showGroupConservation_actionPerformed",
+function () {
+this.viewport.setShowGroupConservation (this.showGroupConservation.getState ());
+this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
+});
+Clazz.defineMethod (c$, "showConsensusHistogram_actionPerformed",
+function () {
+this.viewport.setShowConsensusHistogram (this.showConsensusHistogram.getState ());
+this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
+});
+Clazz.defineMethod (c$, "showSequenceLogo_actionPerformed",
+function () {
+this.viewport.setShowSequenceLogo (this.showSequenceLogo.getState ());
+this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
+});
+Clazz.defineMethod (c$, "normSequenceLogo_actionPerformed",
+function () {
+this.showSequenceLogo.setState (true);
+this.viewport.setShowSequenceLogo (true);
+this.viewport.setNormaliseSequenceLogo (this.normSequenceLogo.getState ());
+this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
+});
+Clazz.defineMethod (c$, "applyAutoAnnotationSettings_actionPerformed",
+function () {
+this.alignPanel.updateAnnotation (this.applyAutoAnnotationSettings.getState ());
+});
+Clazz.defineMethod (c$, "makeGrpsFromSelection_actionPerformed",
+function () {
+if (this.avc.makeGroupsFromSelection ()) {
+jalview.appletgui.PaintRefresher.Refresh (this, this.viewport.getSequenceSetId ());
+this.alignPanel.updateAnnotation ();
+this.alignPanel.paintAlignment (true);
+}});
+Clazz.defineMethod (c$, "createGroup_actionPerformed",
+function () {
+this.avc.createGroup ();
+});
+Clazz.defineMethod (c$, "unGroup_actionPerformed",
+function () {
+if (this.avc.unGroup ()) {
+this.alignPanel.alignmentChanged ();
+}});
+Clazz.defineMethod (c$, "deleteGroups_actionPerformed",
+function () {
+if (this.avc.deleteGroups ()) {
+this.alignPanel.alignmentChanged ();
+}});
+Clazz.defineMethod (c$, "selectAllSequenceMenuItem_actionPerformed",
+function () {
+var sg = new jalview.datamodel.SequenceGroup ();
+for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
+sg.addSequence (this.viewport.getAlignment ().getSequenceAt (i), false);
+}
+sg.setEndRes (this.viewport.getAlignment ().getWidth () - 1);
+this.viewport.setSelectionGroup (sg);
+this.alignPanel.paintAlignment (true);
+jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
+this.viewport.sendSelection ();
+});
+Clazz.defineMethod (c$, "deselectAllSequenceMenuItem_actionPerformed",
+function () {
+if (this.viewport.cursorMode) {
+this.alignPanel.seqPanel.keyboardNo1 = null;
+this.alignPanel.seqPanel.keyboardNo2 = null;
+}this.viewport.setSelectionGroup (null);
+this.viewport.getColumnSelection ().clear ();
+this.viewport.setSelectionGroup (null);
+this.alignPanel.idPanel.idCanvas.searchResults = null;
+this.alignPanel.seqPanel.seqCanvas.highlightSearchResults (null);
+this.alignPanel.paintAlignment (true);
+jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
+this.viewport.sendSelection ();
+});
+Clazz.defineMethod (c$, "invertSequenceMenuItem_actionPerformed",
+function () {
+var sg = this.viewport.getSelectionGroup ();
+for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
+sg.addOrRemove (this.viewport.getAlignment ().getSequenceAt (i), false);
+}
+jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
+this.viewport.sendSelection ();
+});
+Clazz.defineMethod (c$, "invertColSel_actionPerformed",
+function () {
+this.viewport.invertColumnSelection ();
+this.alignPanel.paintAlignment (true);
+jalview.appletgui.PaintRefresher.Refresh (this.alignPanel, this.viewport.getSequenceSetId ());
+this.viewport.sendSelection ();
+});
+Clazz.defineMethod (c$, "trimAlignment",
+function (trimLeft) {
+var colSel = this.viewport.getColumnSelection ();
+var column;
+if (colSel.size () > 0) {
+if (trimLeft) {
+column = colSel.getMin ();
+} else {
+column = colSel.getMax ();
+}var seqs;
+if (this.viewport.getSelectionGroup () != null) {
+seqs = this.viewport.getSelectionGroup ().getSequencesAsArray (this.viewport.getHiddenRepSequences ());
+} else {
+seqs = this.viewport.getAlignment ().getSequencesArray ();
+}var trimRegion;
+if (trimLeft) {
+trimRegion = new jalview.commands.TrimRegionCommand ("Remove Left", jalview.commands.TrimRegionCommand.TRIM_LEFT, seqs, column, this.viewport.getAlignment (), this.viewport.getColumnSelection (), this.viewport.getSelectionGroup ());
+this.viewport.setStartRes (0);
+} else {
+trimRegion = new jalview.commands.TrimRegionCommand ("Remove Right", jalview.commands.TrimRegionCommand.TRIM_RIGHT, seqs, column, this.viewport.getAlignment (), this.viewport.getColumnSelection (), this.viewport.getSelectionGroup ());
+}this.setStatus (jalview.util.MessageManager.formatMessage ("label.removed_columns", Clazz.newArray (-1, [Integer.$valueOf (trimRegion.getSize ()).toString ()])));
+this.addHistoryItem (trimRegion);
+for (var sg, $sg = this.viewport.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if ((trimLeft && !sg.adjustForRemoveLeft (column)) || (!trimLeft && !sg.adjustForRemoveRight (column))) {
+this.viewport.getAlignment ().deleteGroup (sg);
+}}
+this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
+}}, "~B");
+Clazz.defineMethod (c$, "removeGappedColumnMenuItem_actionPerformed",
+function () {
+var start = 0;
+var end = this.viewport.getAlignment ().getWidth () - 1;
+var seqs;
+if (this.viewport.getSelectionGroup () != null) {
+seqs = this.viewport.getSelectionGroup ().getSequencesAsArray (this.viewport.getHiddenRepSequences ());
+start = this.viewport.getSelectionGroup ().getStartRes ();
+end = this.viewport.getSelectionGroup ().getEndRes ();
+} else {
+seqs = this.viewport.getAlignment ().getSequencesArray ();
+}var removeGapCols = new jalview.commands.RemoveGapColCommand ("Remove Gapped Columns", seqs, start, end, this.viewport.getAlignment ());
+this.addHistoryItem (removeGapCols);
+this.setStatus (jalview.util.MessageManager.formatMessage ("label.removed_empty_columns", Clazz.newArray (-1, [Integer.$valueOf (removeGapCols.getSize ()).toString ()])));
+var seq = this.viewport.getAlignment ().getSequenceAt (0);
+var startRes = seq.findPosition (this.viewport.startRes);
+this.viewport.setStartRes (seq.findIndex (startRes) - 1);
+this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
+});
+Clazz.defineMethod (c$, "removeAllGapsMenuItem_actionPerformed",
+function () {
+var start = 0;
+var end = this.viewport.getAlignment ().getWidth () - 1;
+var seqs;
+if (this.viewport.getSelectionGroup () != null) {
+seqs = this.viewport.getSelectionGroup ().getSequencesAsArray (this.viewport.getHiddenRepSequences ());
+start = this.viewport.getSelectionGroup ().getStartRes ();
+end = this.viewport.getSelectionGroup ().getEndRes ();
+} else {
+seqs = this.viewport.getAlignment ().getSequencesArray ();
+}var seq = this.viewport.getAlignment ().getSequenceAt (0);
+var startRes = seq.findPosition (this.viewport.startRes);
+this.addHistoryItem ( new jalview.commands.RemoveGapsCommand ("Remove Gaps", seqs, start, end, this.viewport.getAlignment ()));
+this.viewport.setStartRes (seq.findIndex (startRes) - 1);
+this.viewport.firePropertyChange ("alignment", null, this.viewport.getAlignment ().getSequences ());
+});
+Clazz.defineMethod (c$, "findMenuItem_actionPerformed",
+function () {
+ new jalview.appletgui.Finder (this.alignPanel);
+});
+Clazz.defineMethod (c$, "newView",
+function (viewtitle) {
+var newal;
+if (this.viewport.hasHiddenRows ()) {
+newal = new jalview.datamodel.Alignment (this.viewport.getAlignment ().getHiddenSequences ().getFullAlignment ().getSequencesArray ());
+} else {
+newal = new jalview.datamodel.Alignment (this.viewport.getAlignment ().getSequencesArray ());
+}if (this.viewport.getAlignment ().getAlignmentAnnotation () != null) {
+for (var i = 0; i < this.viewport.getAlignment ().getAlignmentAnnotation ().length; i++) {
+if (!this.viewport.getAlignment ().getAlignmentAnnotation ()[i].autoCalculated) {
+newal.addAnnotation (this.viewport.getAlignment ().getAlignmentAnnotation ()[i]);
+}}
+}var newaf = new jalview.appletgui.AlignFrame (newal, this.viewport.applet, "", false);
+newaf.viewport.setSequenceSetId (this.alignPanel.av.getSequenceSetId ());
+jalview.appletgui.PaintRefresher.Register (this.alignPanel, this.alignPanel.av.getSequenceSetId ());
+jalview.appletgui.PaintRefresher.Register (newaf.alignPanel, newaf.alignPanel.av.getSequenceSetId ());
+jalview.appletgui.PaintRefresher.Register (newaf.alignPanel.idPanel.idCanvas, newaf.alignPanel.av.getSequenceSetId ());
+jalview.appletgui.PaintRefresher.Register (newaf.alignPanel.seqPanel.seqCanvas, newaf.alignPanel.av.getSequenceSetId ());
+var comps = jalview.appletgui.PaintRefresher.components.get (this.viewport.getSequenceSetId ());
+var viewSize = -1;
+for (var i = 0; i < comps.size (); i++) {
+if (Clazz.instanceOf (comps.elementAt (i), jalview.appletgui.AlignmentPanel)) {
+viewSize++;
+}}
+var title = String.instantialize (this.getTitle ());
+if (viewtitle != null) {
+title = viewtitle + " ( " + title + ")";
+} else {
+if (title.indexOf ("(View") > -1) {
+title = title.substring (0, title.indexOf ("(View"));
+}title += "(View " + viewSize + ")";
+}newaf.setTitle (title.toString ());
+newaf.viewport.setHistoryList (this.viewport.getHistoryList ());
+newaf.viewport.setRedoList (this.viewport.getRedoList ());
+return newaf;
+}, "~S");
+Clazz.defineMethod (c$, "getFeatureGroups",
+function () {
+var fr = null;
+if (this.alignPanel != null && (fr = this.alignPanel.getFeatureRenderer ()) != null) {
+var gps = fr.getFeatureGroups ();
+var _gps = gps.toArray ( new Array (gps.size ()));
+return _gps;
+}return null;
+});
+Clazz.defineMethod (c$, "getFeatureGroupsOfState",
+function (visible) {
+var fr = null;
+if (this.alignPanel != null && (fr = this.alignPanel.getFeatureRenderer ()) != null) {
+var gps = fr.getGroups (visible);
+var _gps = gps.toArray ( new Array (gps.size ()));
+return _gps;
+}return null;
+}, "~B");
+Clazz.defineMethod (c$, "setFeatureGroupState",
+function (groups, state) {
+var fr = null;
+this.sequenceFeatures.setState (true);
+this.viewport.setShowSequenceFeatures (true);
+if (this.alignPanel != null && (fr = this.alignPanel.getFeatureRenderer ()) != null) {
+fr.setGroupVisibility (java.util.Arrays.asList (groups), state);
+this.alignPanel.seqPanel.seqCanvas.repaint ();
+if (this.alignPanel.overviewPanel != null) {
+this.alignPanel.overviewPanel.updateOverviewImage ();
+}}}, "~A,~B");
+Clazz.defineMethod (c$, "seqLimits_itemStateChanged",
+function () {
+this.viewport.setShowJVSuffix (this.seqLimits.getState ());
+this.alignPanel.fontChanged ();
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "colourTextMenuItem_actionPerformed",
+function () {
+this.viewport.setColourText (this.colourTextMenuItem.getState ());
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "displayNonconservedMenuItem_actionPerformed",
+function () {
+this.viewport.setShowUnconserved (this.displayNonconservedMenuItem.getState ());
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "wrapMenuItem_actionPerformed",
+function () {
+this.viewport.setWrapAlignment (this.wrapMenuItem.getState ());
+this.alignPanel.setWrapAlignment (this.wrapMenuItem.getState ());
+this.scaleAbove.setEnabled (this.wrapMenuItem.getState ());
+this.scaleLeft.setEnabled (this.wrapMenuItem.getState ());
+this.scaleRight.setEnabled (this.wrapMenuItem.getState ());
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "overviewMenuItem_actionPerformed",
+function () {
+if (this.alignPanel.overviewPanel != null) {
+return;
+}var frame = new awt2swing.Frame ();
+var overview = new jalview.appletgui.OverviewPanel (this.alignPanel);
+frame.add (overview);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.formatMessage ("label.overview_params", Clazz.newArray (-1, [this.getTitle ()])), overview.getPreferredSize ().width, overview.getPreferredSize ().height + 50);
+frame.pack ();
+var ap = this.alignPanel;
+frame.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$1") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$1, this, Clazz.cloneFinals ("ap", ap))));
+this.alignPanel.setOverviewPanel (overview);
+});
+Clazz.overrideMethod (c$, "changeColour",
+function (cs) {
+var threshold = 0;
+if (cs != null) {
+if (this.viewport.getAbovePIDThreshold ()) {
+this.viewport.setThreshold (jalview.appletgui.SliderPanel.setPIDSliderSource (this.alignPanel, cs, "Background"));
+}if (this.viewport.getConservationSelected ()) {
+cs.setConservationApplied (true);
+this.viewport.setIncrement (jalview.appletgui.SliderPanel.setConservationSlider (this.alignPanel, cs, "Background"));
+} else {
+cs.setConservationApplied (false);
+}}this.viewport.setGlobalColourScheme (cs);
+if (this.alignPanel.getOverviewPanel () != null) {
+this.alignPanel.getOverviewPanel ().updateOverviewImage ();
+}jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.viewport.applet).sequenceColoursChanged (this.alignPanel);
+this.alignPanel.paintAlignment (true);
+}, "jalview.schemes.ColourSchemeI");
+Clazz.defineMethod (c$, "modifyPID_actionPerformed",
+function () {
+if (this.viewport.getAbovePIDThreshold () && this.viewport.getGlobalColourScheme () != null) {
+jalview.appletgui.SliderPanel.setPIDSliderSource (this.alignPanel, this.viewport.getGlobalColourScheme (), "Background");
+jalview.appletgui.SliderPanel.showPIDSlider ();
+}});
+Clazz.defineMethod (c$, "modifyConservation_actionPerformed",
+function () {
+if (this.viewport.getConservationSelected () && this.viewport.getGlobalColourScheme () != null) {
+jalview.appletgui.SliderPanel.setConservationSlider (this.alignPanel, this.viewport.getGlobalColourScheme (), "Background");
+jalview.appletgui.SliderPanel.showConservationSlider ();
+}});
+Clazz.defineMethod (c$, "conservationMenuItem_actionPerformed",
+function () {
+this.viewport.setConservationSelected (this.conservationMenuItem.getState ());
+this.viewport.setAbovePIDThreshold (false);
+this.abovePIDThreshold.setState (false);
+this.changeColour (this.viewport.getGlobalColourScheme ());
+this.modifyConservation_actionPerformed ();
+});
+Clazz.defineMethod (c$, "abovePIDThreshold_actionPerformed",
+function () {
+this.viewport.setAbovePIDThreshold (this.abovePIDThreshold.getState ());
+this.conservationMenuItem.setState (false);
+this.viewport.setConservationSelected (false);
+this.changeColour (this.viewport.getGlobalColourScheme ());
+this.modifyPID_actionPerformed ();
+});
+Clazz.defineMethod (c$, "sortPairwiseMenuItem_actionPerformed",
+function () {
+var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortByPID (this.viewport.getAlignment (), this.viewport.getAlignment ().getSequenceAt (0), null);
+this.addHistoryItem ( new jalview.commands.OrderCommand ("Pairwise Sort", oldOrder, this.viewport.getAlignment ()));
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "sortIDMenuItem_actionPerformed",
+function () {
+var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortByID (this.viewport.getAlignment ());
+this.addHistoryItem ( new jalview.commands.OrderCommand ("ID Sort", oldOrder, this.viewport.getAlignment ()));
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "sortLengthMenuItem_actionPerformed",
+function () {
+var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortByLength (this.viewport.getAlignment ());
+this.addHistoryItem ( new jalview.commands.OrderCommand ("Length Sort", oldOrder, this.viewport.getAlignment ()));
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "sortGroupMenuItem_actionPerformed",
+function () {
+var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortByGroup (this.viewport.getAlignment ());
+this.addHistoryItem ( new jalview.commands.OrderCommand ("Group Sort", oldOrder, this.viewport.getAlignment ()));
+this.alignPanel.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "removeRedundancyMenuItem_actionPerformed",
+function () {
+ new jalview.appletgui.RedundancyPanel (this.alignPanel);
+});
+Clazz.defineMethod (c$, "pairwiseAlignmentMenuItem_actionPerformed",
+function () {
+if (this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () > 1) {
+var frame = new awt2swing.Frame ();
+frame.add ( new jalview.appletgui.PairwiseAlignPanel (this.alignPanel));
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("action.pairwise_alignment"), 600, 500);
+}});
+Clazz.defineMethod (c$, "PCAMenuItem_actionPerformed",
+function () {
+if (!this.viewport.getAlignment ().isAligned (false)) {
+var current;
+var Width = this.viewport.getAlignment ().getWidth ();
+for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
+current = this.viewport.getAlignment ().getSequenceAt (i);
+if (current.getLength () < Width) {
+current.insertCharAt (Width - 1, this.viewport.getGapCharacter ());
+}}
+this.alignPanel.paintAlignment (true);
+}if ((this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () < 4 && this.viewport.getSelectionGroup ().getSize () > 0) || this.viewport.getAlignment ().getHeight () < 4) {
+return;
+}try {
+ new jalview.appletgui.PCAPanel (this.viewport);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, OutOfMemoryError)) {
+} else {
+throw ex;
+}
+}
+});
+Clazz.defineMethod (c$, "averageDistanceTreeMenuItem_actionPerformed",
+function () {
+this.NewTreePanel ("AV", "PID", "Average distance tree using PID");
+});
+Clazz.defineMethod (c$, "neighbourTreeMenuItem_actionPerformed",
+function () {
+this.NewTreePanel ("NJ", "PID", "Neighbour joining tree using PID");
+});
+Clazz.defineMethod (c$, "njTreeBlosumMenuItem_actionPerformed",
+function () {
+this.NewTreePanel ("NJ", "BL", "Neighbour joining tree using BLOSUM62");
+});
+Clazz.defineMethod (c$, "avTreeBlosumMenuItem_actionPerformed",
+function () {
+this.NewTreePanel ("AV", "BL", "Average distance tree using BLOSUM62");
+});
+Clazz.defineMethod (c$, "NewTreePanel",
+function (type, pwType, title) {
+if (!this.viewport.getAlignment ().isAligned (false)) {
+var current;
+var Width = this.viewport.getAlignment ().getWidth ();
+for (var i = 0; i < this.viewport.getAlignment ().getSequences ().size (); i++) {
+current = this.viewport.getAlignment ().getSequenceAt (i);
+if (current.getLength () < Width) {
+current.insertCharAt (Width - 1, this.viewport.getGapCharacter ());
+}}
+this.alignPanel.paintAlignment (true);
+}if ((this.viewport.getSelectionGroup () != null && this.viewport.getSelectionGroup ().getSize () > 1) || (this.viewport.getAlignment ().getHeight () > 1)) {
+var tp = new jalview.appletgui.TreePanel (this.alignPanel, type, pwType);
+this.addTreeMenuItem (tp, title);
+jalview.bin.JalviewLite.addFrame (tp, title, 600, 500);
+}}, "~S,~S,~S");
+Clazz.defineMethod (c$, "loadTree_actionPerformed",
+function () {
+var cap = new jalview.appletgui.CutAndPasteTransfer (true, this);
+cap.setText (jalview.util.MessageManager.getString ("label.paste_newick_tree_file"));
+cap.setTreeImport ();
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.paste_newick_file"), 400, 300);
+});
+Clazz.defineMethod (c$, "loadTree",
+function (tree, treeFile) {
+var tp = new jalview.appletgui.TreePanel (this.alignPanel, treeFile, jalview.util.MessageManager.getString ("label.load_tree_from_file"), tree);
+jalview.bin.JalviewLite.addFrame (tp, treeFile, 600, 500);
+this.addTreeMenuItem (tp, treeFile);
+}, "jalview.io.NewickFile,~S");
+Clazz.defineMethod (c$, "sortByTree",
+function (treePanel, title) {
+var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortByTree (this.viewport.getAlignment (), treePanel.getTree ());
+this.addHistoryItem ( new jalview.commands.OrderCommand (jalview.util.MessageManager.formatMessage ("label.order_by_params", Clazz.newArray (-1, [title])), oldOrder, this.viewport.getAlignment ()));
+this.alignPanel.paintAlignment (true);
+}, "jalview.appletgui.TreePanel,~S");
+Clazz.defineMethod (c$, "addTreeMenuItem",
+function (treePanel, title) {
+var item = new awt2swing.MenuItem (title);
+this.sortByTreeMenu.add (item);
+item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$2") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$2, this, Clazz.cloneFinals ("treePanel", treePanel, "title", title))));
+treePanel.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$3") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$3, this, Clazz.cloneFinals ("treePanel", treePanel, "title", title, "item", item))));
+}, "jalview.appletgui.TreePanel,~S");
+Clazz.defineMethod (c$, "sortBy",
+function (alorder, undoname) {
+var oldOrder = this.viewport.getAlignment ().getSequencesArray ();
+if ((this.viewport.applet, jalview.bin.JalviewLite).debug) {
+System.err.println ("Sorting " + alorder.getOrder ().size () + " in alignment '" + this.getTitle () + "'");
+}jalview.analysis.AlignmentSorter.sortBy (this.viewport.getAlignment (), alorder);
+if (undoname != null) {
+this.addHistoryItem ( new jalview.commands.OrderCommand (undoname, oldOrder, this.viewport.getAlignment ()));
+}this.alignPanel.paintAlignment (true);
+return true;
+}, "jalview.datamodel.AlignmentOrder,~S");
+Clazz.defineMethod (c$, "documentation_actionPerformed",
+function () {
+this.alignPanel.av.applet.openJalviewHelpUrl ();
+});
+Clazz.defineMethod (c$, "about_actionPerformed",
+function () {
+if (!Clazz.isClassDefined ("jalview.appletgui.AlignFrame$1AboutPanel")) {
+jalview.appletgui.AlignFrame.$AlignFrame$1AboutPanel$ ();
+}
+var frame = new awt2swing.Frame ();
+frame.add (Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$1AboutPanel, this, null, jalview.bin.JalviewLite.getVersion (), jalview.bin.JalviewLite.getBuildDate ()));
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.jalview"), 580, 220);
+});
+Clazz.defineMethod (c$, "showURL",
+function (url, target) {
+if (this.viewport.applet == null) {
+System.out.println ("Not running as applet - no browser available.");
+} else {
+this.viewport.applet.showURL (url, target);
+}}, "~S,~S");
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setMenuBar (this.alignFrameMenuBar);
+this.inputText.setLabel (jalview.util.MessageManager.getString ("label.input_from_textbox"));
+this.inputText.addActionListener (this);
+var outputTextboxMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.out_to_textbox"));
+for (var i = 0; i < jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS.length; i++) {
+var item = new awt2swing.MenuItem (jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS[i]);
+item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$4") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$4$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$4, this, null)));
+outputTextboxMenu.add (item);
+}
+this.closeMenuItem.addActionListener (this);
+this.loadApplication.addActionListener (this);
+this.$loadTree.addActionListener (this);
+this.$loadAnnotations.addActionListener (this);
+this.$outputFeatures.addActionListener (this);
+this.$outputAnnotations.addActionListener (this);
+this.undoMenuItem.setEnabled (false);
+this.undoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.undo"));
+this.undoMenuItem.addActionListener (this);
+this.redoMenuItem.setEnabled (false);
+this.redoMenuItem.setLabel (jalview.util.MessageManager.getString ("action.redo"));
+this.redoMenuItem.addActionListener (this);
+this.copy.setLabel (jalview.util.MessageManager.getString ("action.copy"));
+this.copy.addActionListener (this);
+this.cut.setLabel (jalview.util.MessageManager.getString ("action.cut"));
+this.cut.addActionListener (this);
+this.$delete.setLabel (jalview.util.MessageManager.getString ("action.delete"));
+this.$delete.addActionListener (this);
+this.pasteMenu.setLabel (jalview.util.MessageManager.getString ("action.paste"));
+this.pasteNew.setLabel (jalview.util.MessageManager.getString ("label.to_new_alignment"));
+this.pasteNew.addActionListener (this);
+this.pasteThis.setLabel (jalview.util.MessageManager.getString ("label.to_this_alignment"));
+this.pasteThis.addActionListener (this);
+this.remove2LeftMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_left"));
+this.remove2LeftMenuItem.addActionListener (this);
+this.remove2RightMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_right"));
+this.remove2RightMenuItem.addActionListener (this);
+this.removeGappedColumnMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_empty_columns"));
+this.removeGappedColumnMenuItem.addActionListener (this);
+this.removeAllGapsMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_all_gaps"));
+this.removeAllGapsMenuItem.addActionListener (this);
+this.removeRedundancyMenuItem.setLabel (jalview.util.MessageManager.getString ("action.remove_redundancy").concat ("..."));
+this.removeRedundancyMenuItem.addActionListener (this);
+this.findMenuItem.setLabel (jalview.util.MessageManager.getString ("action.find"));
+this.findMenuItem.addActionListener (this);
+this.selectAllSequenceMenuItem.addActionListener (this);
+this.deselectAllSequenceMenuItem.addActionListener (this);
+this.invertSequenceMenuItem.setLabel (jalview.util.MessageManager.getString ("action.invert_sequence_selection"));
+this.invertSequenceMenuItem.addActionListener (this);
+this.invertColSel.setLabel (jalview.util.MessageManager.getString ("action.invert_column_selection"));
+this.invertColSel.addActionListener (this);
+this.deleteGroups.setLabel (jalview.util.MessageManager.getString ("action.undefine_groups"));
+this.deleteGroups.addActionListener (this);
+this.grpsFromSelection.setLabel (jalview.util.MessageManager.getString ("action.make_groups_selection"));
+this.grpsFromSelection.addActionListener (this);
+this.createGroup.setLabel (jalview.util.MessageManager.getString ("action.create_group"));
+this.unGroup.setLabel (jalview.util.MessageManager.getString ("action.remove_group"));
+this.annotationColumnSelection.setLabel ("Select by Annotation");
+this.annotationColumnSelection.addActionListener (this);
+this.$newView.setLabel (jalview.util.MessageManager.getString ("action.new_view"));
+this.$newView.addActionListener (this);
+var showMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.show"));
+this.showColumns.setLabel (jalview.util.MessageManager.getString ("label.all_columns"));
+this.showSeqs.setLabel (jalview.util.MessageManager.getString ("label.all_sequences"));
+var hideMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.hide"));
+this.hideColumns.setLabel (jalview.util.MessageManager.getString ("label.selected_columns"));
+this.hideSequences.setLabel (jalview.util.MessageManager.getString ("label.selected_sequences"));
+this.hideAllButSelection.setLabel (jalview.util.MessageManager.getString ("label.all_but_selected_region"));
+this.hideAllSelection.setLabel (jalview.util.MessageManager.getString ("label.selected_region"));
+this.showAllHidden.setLabel (jalview.util.MessageManager.getString ("label.all_sequences_columns"));
+this.showColumns.addActionListener (this);
+this.showSeqs.addActionListener (this);
+this.hideColumns.addActionListener (this);
+this.hideSequences.addActionListener (this);
+this.hideAllButSelection.addActionListener (this);
+this.hideAllSelection.addActionListener (this);
+this.showAllHidden.addActionListener (this);
+this.featureSettings.setLabel (jalview.util.MessageManager.getString ("label.feature_settings"));
+this.featureSettings.addActionListener (this);
+this.sequenceFeatures.setLabel (jalview.util.MessageManager.getString ("label.show_sequence_features"));
+this.sequenceFeatures.addItemListener (this);
+this.sequenceFeatures.setState (false);
+this.followMouseOverFlag.setLabel (jalview.util.MessageManager.getString ("label.automatic_scrolling"));
+this.followMouseOverFlag.addItemListener (this);
+this.alProperties.addActionListener (this);
+this.overviewMenuItem.setLabel (jalview.util.MessageManager.getString ("label.overview_window"));
+this.overviewMenuItem.addActionListener (this);
+this.annotationPanelMenuItem.setLabel (jalview.util.MessageManager.getString ("label.show_annotations"));
+this.annotationPanelMenuItem.addItemListener (this);
+this.showGroupConsensus.setLabel (jalview.util.MessageManager.getString ("label.group_consensus"));
+this.showGroupConservation.setLabel (jalview.util.MessageManager.getString ("label.group_conservation"));
+this.showConsensusHistogram.setLabel (jalview.util.MessageManager.getString ("label.show_consensus_histogram"));
+this.showSequenceLogo.setLabel (jalview.util.MessageManager.getString ("label.show_consensus_logo"));
+this.normSequenceLogo.setLabel (jalview.util.MessageManager.getString ("label.norm_consensus_logo"));
+this.applyAutoAnnotationSettings.setLabel (jalview.util.MessageManager.getString ("label.apply_all_groups"));
+this.applyAutoAnnotationSettings.setState (true);
+var autoAnnMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("label.autocalculated_annotation"));
+this.showGroupConsensus.addItemListener (this);
+this.showGroupConservation.addItemListener (this);
+this.showConsensusHistogram.addItemListener (this);
+this.showSequenceLogo.addItemListener (this);
+this.normSequenceLogo.addItemListener (this);
+this.applyAutoAnnotationSettings.addItemListener (this);
+this.showAlignmentAnnotations = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_all_al_annotations"));
+this.showSequenceAnnotations = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_all_seq_annotations"));
+this.sortAnnBySequence = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.sort_annotations_by_sequence"));
+this.sortAnnByLabel = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.sort_annotations_by_label"));
+this.showAutoFirst = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_first"));
+this.showAutoLast = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_last"));
+this.showAlignmentAnnotations.addItemListener (this);
+this.showSequenceAnnotations.addItemListener (this);
+this.sortAnnBySequence.addItemListener (this);
+this.sortAnnByLabel.addItemListener (this);
+this.showAutoFirst.addItemListener (this);
+this.showAutoLast.addItemListener (this);
+this.$font.setLabel (jalview.util.MessageManager.getString ("action.font"));
+this.$font.addActionListener (this);
+this.scaleAbove.setLabel (jalview.util.MessageManager.getString ("action.scale_above"));
+this.scaleAbove.setState (true);
+this.scaleAbove.setEnabled (false);
+this.scaleAbove.addItemListener (this);
+this.scaleLeft.setEnabled (false);
+this.scaleLeft.setState (true);
+this.scaleLeft.setLabel (jalview.util.MessageManager.getString ("action.scale_left"));
+this.scaleLeft.addItemListener (this);
+this.scaleRight.setEnabled (false);
+this.scaleRight.setState (true);
+this.scaleRight.setLabel (jalview.util.MessageManager.getString ("action.scale_right"));
+this.scaleRight.addItemListener (this);
+this.viewBoxesMenuItem.setLabel (jalview.util.MessageManager.getString ("action.boxes"));
+this.viewBoxesMenuItem.setState (true);
+this.viewBoxesMenuItem.addItemListener (this);
+this.viewTextMenuItem.setLabel (jalview.util.MessageManager.getString ("action.text"));
+this.viewTextMenuItem.setState (true);
+this.viewTextMenuItem.addItemListener (this);
+this.colourTextMenuItem.setLabel (jalview.util.MessageManager.getString ("label.colour_text"));
+this.colourTextMenuItem.addItemListener (this);
+this.displayNonconservedMenuItem.setLabel (jalview.util.MessageManager.getString ("label.show_non_conversed"));
+this.displayNonconservedMenuItem.addItemListener (this);
+this.wrapMenuItem.setLabel (jalview.util.MessageManager.getString ("action.wrap"));
+this.wrapMenuItem.addItemListener (this);
+this.renderGapsMenuItem.setLabel (jalview.util.MessageManager.getString ("action.show_gaps"));
+this.renderGapsMenuItem.setState (true);
+this.renderGapsMenuItem.addItemListener (this);
+this.centreColumnLabelFlag.setLabel (jalview.util.MessageManager.getString ("label.centre_column_labels"));
+this.centreColumnLabelFlag.addItemListener (this);
+this.seqLimits.setState (true);
+this.seqLimits.setLabel (jalview.util.MessageManager.getString ("label.show_sequence_limits"));
+this.seqLimits.addItemListener (this);
+this.applyToAllGroups.setLabel (jalview.util.MessageManager.getString ("label.apply_colour_to_all_groups"));
+this.applyToAllGroups.setState (true);
+this.applyToAllGroups.addItemListener (this);
+this.clustalColour.setLabel (jalview.util.MessageManager.getString ("label.clustalx"));
+this.clustalColour.addActionListener (this);
+this.zappoColour.setLabel (jalview.util.MessageManager.getString ("label.zappo"));
+this.zappoColour.addActionListener (this);
+this.taylorColour.setLabel (jalview.util.MessageManager.getString ("label.taylor"));
+this.taylorColour.addActionListener (this);
+this.hydrophobicityColour.setLabel (jalview.util.MessageManager.getString ("label.hydrophobicity"));
+this.hydrophobicityColour.addActionListener (this);
+this.helixColour.setLabel (jalview.util.MessageManager.getString ("label.helix_propensity"));
+this.helixColour.addActionListener (this);
+this.strandColour.setLabel (jalview.util.MessageManager.getString ("label.strand_propensity"));
+this.strandColour.addActionListener (this);
+this.turnColour.setLabel (jalview.util.MessageManager.getString ("label.turn_propensity"));
+this.turnColour.addActionListener (this);
+this.buriedColour.setLabel (jalview.util.MessageManager.getString ("label.buried_index"));
+this.buriedColour.addActionListener (this);
+this.purinePyrimidineColour.setLabel (jalview.util.MessageManager.getString ("label.purine_pyrimidine"));
+this.purinePyrimidineColour.addActionListener (this);
+this.RNAInteractionColour.setLabel (jalview.util.MessageManager.getString ("label.rna_interaction"));
+this.RNAInteractionColour.addActionListener (this);
+this.RNAHelixColour.setLabel (jalview.util.MessageManager.getString ("action.by_rna_helixes"));
+this.RNAHelixColour.addActionListener (this);
+this.userDefinedColour.setLabel (jalview.util.MessageManager.getString ("action.user_defined"));
+this.userDefinedColour.addActionListener (this);
+this.PIDColour.setLabel (jalview.util.MessageManager.getString ("label.percentage_identity"));
+this.PIDColour.addActionListener (this);
+this.BLOSUM62Colour.setLabel (jalview.util.MessageManager.getString ("label.blosum62_score"));
+this.BLOSUM62Colour.addActionListener (this);
+this.tcoffeeColour.setLabel (jalview.util.MessageManager.getString ("label.tcoffee_scores"));
+this.tcoffeeColour.setEnabled (false);
+this.tcoffeeColour.addActionListener (this);
+this.conservationMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_conservation"));
+this.conservationMenuItem.addItemListener (this);
+this.noColourmenuItem.setLabel (jalview.util.MessageManager.getString ("label.none"));
+this.noColourmenuItem.addActionListener (this);
+this.abovePIDThreshold.setLabel (jalview.util.MessageManager.getString ("label.above_identity_threshold"));
+this.abovePIDThreshold.addItemListener (this);
+this.nucleotideColour.setLabel (jalview.util.MessageManager.getString ("label.nucleotide"));
+this.nucleotideColour.addActionListener (this);
+this.modifyPID.setLabel (jalview.util.MessageManager.getString ("label.modify_identity_thereshold"));
+this.modifyPID.addActionListener (this);
+this.modifyConservation.setLabel (jalview.util.MessageManager.getString ("label.modify_conservation_thereshold"));
+this.modifyConservation.addActionListener (this);
+this.annotationColour.setLabel (jalview.util.MessageManager.getString ("action.by_annotation"));
+this.annotationColour.addActionListener (this);
+this.sortPairwiseMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_pairwise_id"));
+this.sortPairwiseMenuItem.addActionListener (this);
+this.sortIDMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_id"));
+this.sortIDMenuItem.addActionListener (this);
+this.sortLengthMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_length"));
+this.sortLengthMenuItem.addActionListener (this);
+this.sortGroupMenuItem.setLabel (jalview.util.MessageManager.getString ("action.by_group"));
+this.sortGroupMenuItem.addActionListener (this);
+this.pairwiseAlignmentMenuItem.setLabel (jalview.util.MessageManager.getString ("action.pairwise_alignment"));
+this.pairwiseAlignmentMenuItem.addActionListener (this);
+this.PCAMenuItem.setLabel (jalview.util.MessageManager.getString ("label.principal_component_analysis"));
+this.PCAMenuItem.addActionListener (this);
+this.autoCalculate = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.autocalculate_consensus"), true);
+this.averageDistanceTreeMenuItem.setLabel (jalview.util.MessageManager.getString ("label.average_distance_identity"));
+this.averageDistanceTreeMenuItem.addActionListener (this);
+this.neighbourTreeMenuItem.setLabel (jalview.util.MessageManager.getString ("label.neighbour_joining_identity"));
+this.neighbourTreeMenuItem.addActionListener (this);
+this.avDistanceTreeBlosumMenuItem.setLabel (jalview.util.MessageManager.getString ("label.average_distance_bloslum62"));
+this.avDistanceTreeBlosumMenuItem.addActionListener (this);
+this.njTreeBlosumMenuItem.setLabel (jalview.util.MessageManager.getString ("label.neighbour_blosum62"));
+this.njTreeBlosumMenuItem.addActionListener (this);
+this.sortByTreeMenu.setLabel (jalview.util.MessageManager.getString ("action.by_tree_order"));
+var sortMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.sort"));
+var calculateTreeMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.calculate_tree"));
+this.autoCalculate.addItemListener (this);
+this.$sortByTree.addItemListener (this);
+var helpMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.help"));
+this.documentation.setLabel (jalview.util.MessageManager.getString ("label.documentation"));
+this.documentation.addActionListener (this);
+this.about.setLabel (jalview.util.MessageManager.getString ("label.about"));
+this.about.addActionListener (this);
+this.alignFrameMenuBar.add (this.fileMenu);
+var editMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.edit"));
+this.alignFrameMenuBar.add (editMenu);
+var selectMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.select"));
+this.alignFrameMenuBar.add (selectMenu);
+var viewMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.view"));
+this.alignFrameMenuBar.add (viewMenu);
+var annotationsMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.annotations"));
+this.alignFrameMenuBar.add (annotationsMenu);
+var formatMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.format"));
+this.alignFrameMenuBar.add (formatMenu);
+var colourMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.colour"));
+this.alignFrameMenuBar.add (colourMenu);
+var calculateMenu = new awt2swing.Menu (jalview.util.MessageManager.getString ("action.calculate"));
+this.alignFrameMenuBar.add (calculateMenu);
+this.alignFrameMenuBar.add (helpMenu);
+this.fileMenu.add (this.inputText);
+this.fileMenu.add (this.$loadTree);
+this.fileMenu.add (this.$loadAnnotations);
+this.fileMenu.addSeparator ();
+this.fileMenu.add (outputTextboxMenu);
+this.fileMenu.add (this.$outputFeatures);
+this.fileMenu.add (this.$outputAnnotations);
+if (this.jalviewServletURL != null) {
+this.fileMenu.add (this.loadApplication);
+}this.fileMenu.addSeparator ();
+this.fileMenu.add (this.closeMenuItem);
+editMenu.add (this.undoMenuItem);
+editMenu.add (this.redoMenuItem);
+editMenu.add (this.cut);
+editMenu.add (this.copy);
+this.pasteMenu.add (this.pasteNew);
+this.pasteMenu.add (this.pasteThis);
+editMenu.add (this.pasteMenu);
+editMenu.add (this.$delete);
+editMenu.addSeparator ();
+editMenu.add (this.remove2LeftMenuItem);
+editMenu.add (this.remove2RightMenuItem);
+editMenu.add (this.removeGappedColumnMenuItem);
+editMenu.add (this.removeAllGapsMenuItem);
+editMenu.add (this.removeRedundancyMenuItem);
+selectMenu.add (this.findMenuItem);
+selectMenu.addSeparator ();
+selectMenu.add (this.selectAllSequenceMenuItem);
+selectMenu.add (this.deselectAllSequenceMenuItem);
+selectMenu.add (this.invertSequenceMenuItem);
+selectMenu.add (this.invertColSel);
+selectMenu.add (this.createGroup);
+selectMenu.add (this.unGroup);
+selectMenu.add (this.grpsFromSelection);
+selectMenu.add (this.deleteGroups);
+selectMenu.add (this.annotationColumnSelection);
+viewMenu.add (this.$newView);
+viewMenu.addSeparator ();
+showMenu.add (this.showColumns);
+showMenu.add (this.showSeqs);
+showMenu.add (this.showAllHidden);
+viewMenu.add (showMenu);
+hideMenu.add (this.hideColumns);
+hideMenu.add (this.hideSequences);
+hideMenu.add (this.hideAllSelection);
+hideMenu.add (this.hideAllButSelection);
+viewMenu.add (hideMenu);
+viewMenu.addSeparator ();
+viewMenu.add (this.followMouseOverFlag);
+viewMenu.addSeparator ();
+viewMenu.add (this.sequenceFeatures);
+viewMenu.add (this.featureSettings);
+viewMenu.addSeparator ();
+viewMenu.add (this.alProperties);
+viewMenu.addSeparator ();
+viewMenu.add (this.overviewMenuItem);
+annotationsMenu.add (this.annotationPanelMenuItem);
+annotationsMenu.addSeparator ();
+annotationsMenu.add (this.showAlignmentAnnotations);
+annotationsMenu.add (this.showSequenceAnnotations);
+annotationsMenu.add (this.sortAnnBySequence);
+annotationsMenu.add (this.sortAnnByLabel);
+annotationsMenu.addSeparator ();
+autoAnnMenu.add (this.showAutoFirst);
+autoAnnMenu.add (this.showAutoLast);
+autoAnnMenu.addSeparator ();
+autoAnnMenu.add (this.applyAutoAnnotationSettings);
+autoAnnMenu.add (this.showConsensusHistogram);
+autoAnnMenu.add (this.showSequenceLogo);
+autoAnnMenu.add (this.normSequenceLogo);
+autoAnnMenu.addSeparator ();
+autoAnnMenu.add (this.showGroupConservation);
+autoAnnMenu.add (this.showGroupConsensus);
+annotationsMenu.add (autoAnnMenu);
+formatMenu.add (this.$font);
+formatMenu.add (this.seqLimits);
+formatMenu.add (this.wrapMenuItem);
+formatMenu.add (this.scaleAbove);
+formatMenu.add (this.scaleLeft);
+formatMenu.add (this.scaleRight);
+formatMenu.add (this.viewBoxesMenuItem);
+formatMenu.add (this.viewTextMenuItem);
+formatMenu.add (this.colourTextMenuItem);
+formatMenu.add (this.displayNonconservedMenuItem);
+formatMenu.add (this.renderGapsMenuItem);
+formatMenu.add (this.centreColumnLabelFlag);
+colourMenu.add (this.applyToAllGroups);
+colourMenu.addSeparator ();
+colourMenu.add (this.noColourmenuItem);
+colourMenu.add (this.clustalColour);
+colourMenu.add (this.BLOSUM62Colour);
+colourMenu.add (this.PIDColour);
+colourMenu.add (this.zappoColour);
+colourMenu.add (this.taylorColour);
+colourMenu.add (this.hydrophobicityColour);
+colourMenu.add (this.helixColour);
+colourMenu.add (this.strandColour);
+colourMenu.add (this.turnColour);
+colourMenu.add (this.buriedColour);
+colourMenu.add (this.nucleotideColour);
+colourMenu.add (this.purinePyrimidineColour);
+colourMenu.add (this.tcoffeeColour);
+colourMenu.add (this.userDefinedColour);
+colourMenu.addSeparator ();
+colourMenu.add (this.conservationMenuItem);
+colourMenu.add (this.modifyConservation);
+colourMenu.add (this.abovePIDThreshold);
+colourMenu.add (this.modifyPID);
+colourMenu.add (this.annotationColour);
+colourMenu.add (this.RNAHelixColour);
+sortMenu.add (this.sortIDMenuItem);
+sortMenu.add (this.sortLengthMenuItem);
+sortMenu.add (this.sortByTreeMenu);
+sortMenu.add (this.sortGroupMenuItem);
+sortMenu.add (this.sortPairwiseMenuItem);
+calculateMenu.add (sortMenu);
+calculateTreeMenu.add (this.averageDistanceTreeMenuItem);
+calculateTreeMenu.add (this.neighbourTreeMenuItem);
+calculateTreeMenu.add (this.avDistanceTreeBlosumMenuItem);
+calculateTreeMenu.add (this.njTreeBlosumMenuItem);
+calculateMenu.add (calculateTreeMenu);
+calculateMenu.addSeparator ();
+calculateMenu.add (this.pairwiseAlignmentMenuItem);
+calculateMenu.add (this.PCAMenuItem);
+calculateMenu.add (this.autoCalculate);
+calculateMenu.add (this.$sortByTree);
+helpMenu.add (this.documentation);
+helpMenu.add (this.about);
+this.statusBar.setBackground (java.awt.Color.white);
+this.statusBar.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.setStatus (jalview.util.MessageManager.getString ("label.status_bar"));
+this.add (this.statusBar, "South");
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "setStatus",
+function (string) {
+this.statusBar.setText (string);
+}, "~S");
+Clazz.defineMethod (c$, "createAlignFrameWindow",
+function (reallyEmbedded) {
+if (reallyEmbedded) {
+this.embedAlignFrameInApplet (this.viewport.applet);
+} else {
+if (this.embedMenuIfNeeded (this.alignPanel)) {
+this.alignPanel.setSize (this.getSize ().width, this.getSize ().height - this.statusBar.getHeight ());
+}this.add (this.statusBar, "South");
+this.add (this.alignPanel, "Center");
+jalview.bin.JalviewLite.addFrame (this, this.getTitle (), this.frameWidth, this.frameHeight);
+}}, "~B");
+Clazz.defineMethod (c$, "embedAlignFrameInApplet",
+function (theApplet) {
+this.fileMenu.remove (this.closeMenuItem);
+this.fileMenu.remove (3);
+this.embeddedMenu = this.makeEmbeddedPopupMenu (this.alignFrameMenuBar, false, false);
+theApplet.setLayout ( new java.awt.BorderLayout ());
+theApplet.add (this.embeddedMenu, "North");
+theApplet.add (this.statusBar, "South");
+this.alignPanel.setSize (theApplet.getSize ().width, theApplet.getSize ().height - this.embeddedMenu.getHeight () - this.statusBar.getHeight ());
+theApplet.add (this.alignPanel, "Center");
+var me = this;
+theApplet.addFocusListener (((Clazz.isClassDefined ("jalview.appletgui.AlignFrame$5") ? 0 : jalview.appletgui.AlignFrame.$AlignFrame$5$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignFrame$5, this, Clazz.cloneFinals ("theApplet", theApplet, "me", me))));
+theApplet.validate ();
+}, "jalview.bin.JalviewLite");
+Clazz.defineMethod (c$, "addStructureViewInstance",
+function (jmolviewer, sequenceIds) {
+return null;
+}, "~O,~A");
+Clazz.defineMethod (c$, "addPdbFile",
+function (sequenceId, pdbEntryString, pdbFile) {
+var toaddpdb = this.viewport.getAlignment ().findName (sequenceId);
+var needtoadd = false;
+if (toaddpdb != null) {
+var pdbe = toaddpdb.getPDBId ();
+var pdbentry = null;
+if (pdbe != null && pdbe.size () > 0) {
+for (var pe = 0, peSize = pdbe.size (); pe < peSize; pe++) {
+pdbentry = pdbe.elementAt (pe);
+if (!pdbentry.getId ().equals (pdbEntryString) && !pdbentry.getFile ().equals (pdbFile)) {
+pdbentry = null;
+} else {
+continue;
+}}
+}if (pdbentry == null) {
+pdbentry = new jalview.datamodel.PDBEntry ();
+pdbentry.setId (pdbEntryString);
+pdbentry.setFile (pdbFile);
+needtoadd = true;
+}var protocol = jalview.io.AppletFormatAdapter.resolveProtocol (pdbFile, "PDB");
+if (protocol == null) {
+return false;
+}if (needtoadd) {
+if (pdbentry.getProperty () == null) {
+pdbentry.setProperty ( new java.util.Hashtable ());
+}pdbentry.getProperty ().put ("protocol", protocol);
+toaddpdb.addPDBId (pdbentry);
+this.alignPanel.getStructureSelectionManager ().registerPDBEntry (pdbentry);
+}}return true;
+}, "~S,~S,~S");
+Clazz.defineMethod (c$, "cleanSeqChainArrays",
+($fz = function (seqs, chains) {
+if (seqs != null) {
+var sequences = new java.util.Vector ();
+for (var i = 0; i < seqs.length; i++) {
+if (seqs[i] != null) {
+sequences.addElement ( Clazz.newArray (-1, [seqs[i], (chains != null) ? chains[i] : null]));
+}}
+seqs = new Array (sequences.size ());
+chains = new Array (sequences.size ());
+for (var i = 0, isize = sequences.size (); i < isize; i++) {
+var oj = sequences.elementAt (i);
+seqs[i] = oj[0];
+chains[i] = oj[1];
+}
+}return Clazz.newArray (-1, [seqs, chains]);
+}, $fz.isPrivate = true, $fz), "~A,~A");
+Clazz.defineMethod (c$, "newStructureView",
+function (applet, pdb, seqs, chains, protocol) {
+var sqch = this.cleanSeqChainArrays (seqs, chains);
+seqs = sqch[0];
+chains = sqch[1];
+if (seqs == null || seqs.length == 0) {
+System.err.println ("JalviewLite.AlignFrame:newStructureView: No sequence to bind structure to.");
+}if (protocol == null || protocol.trim ().length == 0 || protocol.equals ("null")) {
+protocol = pdb.getProperty ().get ("protocol");
+if (protocol == null) {
+System.err.println ("Couldn't work out protocol to open structure: " + pdb.getId ());
+return;
+}}if (applet.useXtrnalSviewer) {
+if (jalview.structure.StructureSelectionManager.getStructureSelectionManager (applet).setMapping (seqs, chains, pdb.getFile (), protocol) == null) {
+System.err.println ("Failed to map " + pdb.getFile () + " (" + protocol + ") to any sequences");
+}return;
+}if (applet.isAlignPdbStructures () && applet.jmolAvailable) {
+var ajm = null;
+var tajm;
+var jmols = applet.getAppletWindow (jalview.appletgui.AppletJmol);
+for (var i = 0, iSize = jmols.size (); i < iSize; i++) {
+tajm = jmols.elementAt (i);
+if (tajm.ap.alignFrame === this) {
+ajm = tajm;
+break;
+}}
+if (ajm != null) {
+System.err.println ("Incremental adding and aligning structure to existing Jmol view not yet implemented.");
+ajm = null;
+}} new jalview.appletgui.AppletJmol (pdb, seqs, chains, this.alignPanel, protocol);
+jalview.bin.JalviewLite.lastFrameX += 40;
+jalview.bin.JalviewLite.lastFrameY += 40;
+}, "jalview.bin.JalviewLite,jalview.datamodel.PDBEntry,~A,~A,~S");
+Clazz.defineMethod (c$, "alignedStructureView",
+function (applet, pdb, seqs, chains, protocols) {
+System.err.println ("Aligned Structure View: Not yet implemented.");
+}, "jalview.bin.JalviewLite,~A,~A,~A,~A");
+Clazz.defineMethod (c$, "select",
+function (sel, csel) {
+this.alignPanel.seqPanel.selection (sel, csel, null);
+}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection");
+Clazz.defineMethod (c$, "scrollTo",
+function (row, column) {
+this.alignPanel.seqPanel.scrollTo (row, column);
+}, "~N,~N");
+Clazz.defineMethod (c$, "scrollToRow",
+function (row) {
+this.alignPanel.seqPanel.scrollToRow (row);
+}, "~N");
+Clazz.defineMethod (c$, "scrollToColumn",
+function (column) {
+this.alignPanel.seqPanel.scrollToColumn (column);
+}, "~N");
+Clazz.defineMethod (c$, "getSequenceSetId",
+function () {
+return this.viewport.getSequenceSetId ();
+});
+Clazz.defineMethod (c$, "loadScoreFile",
+function (inFile) {
+var file = jalview.jsdev.GenericFileAdapter.getFile ("TCoffeeScoreFile", [inFile, jalview.io.AppletFormatAdapter.checkProtocol (inFile)]);
+if (!file.isValid ()) {
+System.err.println ("Problems parsing T-Coffee scores: " + file.getWarningMessage ());
+System.err.println ("Origin was:\n" + inFile);
+return false;
+}var aln;
+if ((aln = this.viewport.getAlignment ()) != null && (aln.getHeight () != file.getHeight () || aln.getWidth () != file.getWidth ())) {
+System.err.println ("The scores matrix does not match the alignment dimensions");
+}if (file.annotateAlignment (this.alignPanel.getAlignment (), false)) {
+this.alignPanel.fontChanged ();
+this.tcoffeeColour.setEnabled (true);
+this.changeColour ( new jalview.schemes.TCoffeeColourScheme (this.alignPanel.getAlignment ()));
+return true;
+} else {
+System.err.println ("Problems resolving T-Coffee scores:");
+if (file.getWarningMessage () != null) {
+System.err.println (file.getWarningMessage ());
+}}return false;
+}, "~S");
+Clazz.defineMethod (c$, "getSplitFrame",
+function () {
+return this.splitFrame;
+});
+Clazz.defineMethod (c$, "setSplitFrame",
+function (sf) {
+this.splitFrame = sf;
+}, "jalview.appletgui.SplitFrame");
+Clazz.overrideMethod (c$, "setShowSeqFeatures",
+function (b) {
+this.viewport.setShowSequenceFeatures (b);
+}, "~B");
+Clazz.overrideMethod (c$, "setMenusForViewport",
+function () {
+});
+Clazz.overrideMethod (c$, "refreshFeatureUI",
+function (enableIfNecessary) {
+if (enableIfNecessary) {
+this.sequenceFeatures.setState (true);
+this.alignPanel.av.setShowSequenceFeatures (true);
+}}, "~B");
+Clazz.overrideMethod (c$, "getFeatureSettingsUI",
+function () {
+return this.alignPanel.av.featureSettings;
+});
+c$.$AlignFrame$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$1", java.awt.event.WindowAdapter);
+Clazz.overrideMethod (c$, "windowClosing",
+function (e) {
+if (this.f$.ap != null) {
+this.f$.ap.setOverviewPanel (null);
+}}, "java.awt.event.WindowEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AlignFrame$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$2", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+this.b$["jalview.appletgui.AlignFrame"].sortByTree (this.f$.treePanel, this.f$.title);
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AlignFrame$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$3", java.awt.event.WindowAdapter);
+Clazz.defineMethod (c$, "windowOpened",
+function (e) {
+if (this.b$["jalview.appletgui.AlignFrame"].viewport.sortByTree) {
+this.b$["jalview.appletgui.AlignFrame"].sortByTree (this.f$.treePanel, this.f$.title);
+}Clazz.superCall (this, jalview.appletgui.AlignFrame$3, "windowOpened", [e]);
+}, "java.awt.event.WindowEvent");
+Clazz.overrideMethod (c$, "windowClosing",
+function (e) {
+this.b$["jalview.appletgui.AlignFrame"].sortByTreeMenu.remove (this.f$.item);
+}, "java.awt.event.WindowEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AlignFrame$1AboutPanel$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.version = null;
+this.builddate = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AlignFrame$1AboutPanel", awt2swing.Canvas);
+Clazz.makeConstructor (c$,
+function (a, b) {
+Clazz.superConstructor (this, jalview.appletgui.AlignFrame$1AboutPanel, []);
+this.version = a;
+this.builddate = b;
+}, "~S,~S");
+Clazz.overrideMethod (c$, "paintComponent",
+function (a) {
+a.setColor (java.awt.Color.white);
+a.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
+a.setFont ( new java.awt.Font ("Helvetica", 0, 12));
+var b = a.getFontMetrics ();
+var c = b.getHeight ();
+var d = 5;
+var e = 7;
+a.setColor (java.awt.Color.black);
+a.setFont ( new java.awt.Font ("Helvetica", 1, 14));
+a.drawString (jalview.util.MessageManager.formatMessage ("label.jalviewLite_release", Clazz.newArray (-1, [this.version])), e, d += c);
+a.setFont ( new java.awt.Font ("Helvetica", 1, 12));
+a.drawString (jalview.util.MessageManager.formatMessage ("label.jaview_build_date", Clazz.newArray (-1, [this.builddate])), e, d += c);
+a.setFont ( new java.awt.Font ("Helvetica", 0, 12));
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_authors_1"), e, d += c * 1.5);
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_authors_2"), e + 50, d += c + 8);
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_dev_managers"), e, d += c);
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_distribution_lists"), e, d += c);
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_please_cite"), e, d += c + 8);
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_cite_1_authors"), e, d += c);
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_cite_1_title"), e, d += c);
+a.drawString (jalview.util.MessageManager.getString ("label.jalview_cite_1_ref"), e, d += c);
+}, "java.awt.Graphics");
+c$ = Clazz.p0p ();
+};
+c$.$AlignFrame$4$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$4", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.AlignFrame"].outputText_actionPerformed (e);
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AlignFrame$5$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignFrame$5", null, java.awt.event.FocusListener);
+Clazz.overrideMethod (c$, "focusLost",
+function (e) {
+if (this.f$.theApplet.currentAlignFrame === this.f$.me) {
+this.f$.theApplet.currentAlignFrame = null;
+}}, "java.awt.event.FocusEvent");
+Clazz.overrideMethod (c$, "focusGained",
+function (e) {
+this.f$.theApplet.currentAlignFrame = this.f$.me;
+}, "java.awt.event.FocusEvent");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"copiedSequences", null,
+"copiedHiddenColumns", null);
+});
diff --git a/bin/jalview/appletgui/AlignViewport.js b/bin/jalview/appletgui/AlignViewport.js
index 8ea8971..1d890fc 100644
--- a/bin/jalview/appletgui/AlignViewport.js
+++ b/bin/jalview/appletgui/AlignViewport.js
@@ -1,229 +1,229 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.structure.CommandListener", "$.SelectionSource", "$.VamsasSource", "jalview.viewmodel.AlignmentViewport", "java.awt.Font"], "jalview.appletgui.AlignViewport", ["awt2swing.Frame", "jalview.api.AlignViewportI", "jalview.bin.JalviewLite", "jalview.datamodel.ColumnSelection", "$.SearchResults", "$.Sequence", "$.SequenceGroup", "jalview.schemes.ColourSchemeProperty", "jalview.structure.StructureSelectionManager", "jalview.util.Platform", "jalview.workers.AlignCalcManager", "java.lang.Float", "$.StringBuilder"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.cursorMode = false;
-this.font = null;
-this.validCharWidth = true;
-this.currentTree = null;
-this.applet = null;
-this.MAC = false;
-this.annotationColumnSelectionState = null;
-this.nullFrame = null;
-this.featureSettings = null;
-this.heightScale = 1;
-this.widthScale = 1;
-this.centreColumnLabels = false;
-this.followSelection = true;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AlignViewport", jalview.viewmodel.AlignmentViewport, [jalview.structure.SelectionSource, jalview.structure.VamsasSource, jalview.structure.CommandListener]);
-Clazz.prepareFields (c$, function () {
-this.font = new java.awt.Font ("SansSerif", 0, 10);
-});
-Clazz.overrideMethod (c$, "finalize",
-function () {
-this.applet = null;
-this.quality = null;
-this.alignment = null;
-this.colSel = null;
-});
-Clazz.makeConstructor (c$,
-function (al, applet) {
-Clazz.superConstructor (this, jalview.appletgui.AlignViewport);
-this.calculator = new jalview.workers.AlignCalcManager ();
-this.applet = applet;
-this.alignment = al;
-this.setPadGaps (true);
-this.startRes = 0;
-this.endRes = al.getWidth () - 1;
-this.startSeq = 0;
-this.endSeq = al.getHeight () - 1;
-if (applet != null) {
-var param = applet.widthScale;
-if (param != null) {
-try {
-this.widthScale = new Float (param).floatValue ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-if (this.widthScale <= 1.0) {
-System.err.println ("Invalid alignment character width scaling factor (" + this.widthScale + "). Ignoring.");
-this.widthScale = 1;
-}if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Alignment character width scaling factor is now " + this.widthScale);
-}}param = applet.heightScale;
-if (param != null) {
-try {
-this.heightScale = new Float (param).floatValue ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-if (this.heightScale <= 1.0) {
-System.err.println ("Invalid alignment character height scaling factor (" + this.heightScale + "). Ignoring.");
-this.heightScale = 1;
-}if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Alignment character height scaling factor is now " + this.heightScale);
-}}}this.setFont (this.font);
-this.MAC = jalview.util.Platform.isAMac ();
-if (applet != null) {
-this.setShowJVSuffix (applet.getDefaultParameter ("showFullId", this.getShowJVSuffix ()));
-this.setShowAnnotation (applet.getDefaultParameter ("showAnnotation", this.isShowAnnotation ()));
-this.showConservation = applet.getDefaultParameter ("showConservation", this.showConservation);
-this.showQuality = applet.getDefaultParameter ("showQuality", this.showQuality);
-this.showConsensus = applet.getDefaultParameter ("showConsensus", this.showConsensus);
-this.setShowUnconserved (applet.getDefaultParameter ("showUnconserved", this.getShowUnconserved ()));
-this.setScaleProteinAsCdna (applet.getDefaultParameter ("scaleProteinAsCdna", this.isScaleProteinAsCdna ()));
-var param = applet.upperCase;
-if (param != null) {
-if (param.equalsIgnoreCase ("bold")) {
-this.setUpperCasebold (true);
-}}this.sortByTree = applet.getDefaultParameter ("sortByTree", this.sortByTree);
-this.setFollowHighlight (applet.getDefaultParameter ("automaticScrolling", this.isFollowHighlight ()));
-this.followSelection = this.isFollowHighlight ();
-this.showSequenceLogo = applet.getDefaultParameter ("showSequenceLogo", this.showSequenceLogo);
-this.normaliseSequenceLogo = applet.getDefaultParameter ("normaliseSequenceLogo", applet.getDefaultParameter ("normaliseLogo", this.normaliseSequenceLogo));
-this.showGroupConsensus = applet.getDefaultParameter ("showGroupConsensus", this.showGroupConsensus);
-this.showGroupConservation = applet.getDefaultParameter ("showGroupConservation", this.showGroupConservation);
-this.showConsensusHistogram = applet.getDefaultParameter ("showConsensusHistogram", this.showConsensusHistogram);
-}if (applet != null) {
-var colour = applet.defaultColour;
-if (colour == null) {
-colour = applet.userDefinedColour;
-if (colour != null) {
-colour = "User Defined";
-}}if (colour != null) {
-this.globalColourScheme = jalview.schemes.ColourSchemeProperty.getColour (this.alignment, colour);
-if (this.globalColourScheme != null) {
-this.globalColourScheme.setConsensus (this.hconsensus);
-}}if (applet.userDefinedColour != null) {
-(this.globalColourScheme).parseAppletParameter (applet.userDefinedColour);
-}}this.initAutoAnnotation ();
-}, "jalview.datamodel.AlignmentI,jalview.bin.JalviewLite");
-Clazz.defineMethod (c$, "getConsensusSeq",
-function () {
-if (this.consensus == null) {
-this.updateConsensus (null);
-}if (this.consensus == null) {
-return null;
-}var seqs = new StringBuilder (this.consensus.annotations.length);
-for (var i = 0; i < this.consensus.annotations.length; i++) {
-if (this.consensus.annotations[i] != null) {
-if (this.consensus.annotations[i].description.charAt (0) == '[') {
-seqs.append (this.consensus.annotations[i].description.charAt (1));
-} else {
-seqs.append (this.consensus.annotations[i].displayCharacter);
-}}}
-var sq = new jalview.datamodel.Sequence ("Consensus", seqs.toString ());
-sq.setDescription ("Percentage Identity Consensus " + ((this.ignoreGapsInConsensusCalculation) ? " without gaps" : ""));
-return sq;
-});
-Clazz.defineMethod (c$, "setFont",
-function (f) {
-this.font = f;
-if (this.nullFrame == null) {
-this.nullFrame = new awt2swing.Frame ();
-this.nullFrame.addNotify ();
-this.nullFrame.setFont (this.font);
-}var fm = this.nullFrame.getGraphics ().getFontMetrics (this.font);
-this.setCharHeight (Clazz.floatToInt (this.heightScale * fm.getHeight ()));
-this.setCharWidth (Clazz.floatToInt (this.widthScale * fm.charWidth ('M')));
-if (this.isUpperCasebold ()) {
-var f2 = new java.awt.Font (f.getName (), 1, f.getSize ());
-fm = this.nullFrame.getGraphics ().getFontMetrics (f2);
-this.setCharWidth (Clazz.floatToInt (this.widthScale * (Clazz.doubleToInt (fm.stringWidth ("MMMMMMMMMMM") / 10))));
-}}, "java.awt.Font");
-Clazz.defineMethod (c$, "getFont",
-function () {
-return this.font;
-});
-Clazz.defineMethod (c$, "resetSeqLimits",
-function (height) {
-this.setEndSeq (Clazz.doubleToInt (height / this.getCharHeight ()));
-}, "~N");
-Clazz.defineMethod (c$, "setCurrentTree",
-function (tree) {
-this.currentTree = tree;
-}, "jalview.analysis.NJTree");
-Clazz.defineMethod (c$, "getCurrentTree",
-function () {
-return this.currentTree;
-});
-Clazz.defineMethod (c$, "getCentreColumnLabels",
-function () {
-return this.centreColumnLabels;
-});
-Clazz.defineMethod (c$, "getFollowSelection",
-function () {
-return this.followSelection;
-});
-Clazz.overrideMethod (c$, "sendSelection",
-function () {
-this.getStructureSelectionManager ().sendSelection ( new jalview.datamodel.SequenceGroup (this.getSelectionGroup ()), new jalview.datamodel.ColumnSelection (this.getColumnSelection ()), this);
-});
-Clazz.overrideMethod (c$, "getStructureSelectionManager",
-function () {
-return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.applet);
-});
-Clazz.defineMethod (c$, "expandColSelection",
-function (sg, wholewidth) {
-var sgs;
-var sge;
-if (sg != null && (sgs = sg.getStartRes ()) >= 0 && sg.getStartRes () <= (sge = sg.getEndRes ()) && (this.colSel == null || this.colSel.getSelected () == null || this.colSel.getSelected ().size () == 0)) {
-if (!wholewidth && this.alignment.getWidth () == (1 + sge - sgs)) {
-return;
-}if (this.colSel == null) {
-this.colSel = new jalview.datamodel.ColumnSelection ();
-}for (var cspos = sg.getStartRes (); cspos <= sg.getEndRes (); cspos++) {
-this.colSel.addElement (cspos);
-}
-}}, "jalview.datamodel.SequenceGroup,~B");
-Clazz.overrideMethod (c$, "isNormaliseSequenceLogo",
-function () {
-return this.normaliseSequenceLogo;
-});
-Clazz.defineMethod (c$, "setNormaliseSequenceLogo",
-function (state) {
-this.normaliseSequenceLogo = state;
-}, "~B");
-Clazz.overrideMethod (c$, "isValidCharWidth",
-function () {
-return this.validCharWidth;
-});
-Clazz.defineMethod (c$, "getAnnotationColumnSelectionState",
-function () {
-return this.annotationColumnSelectionState;
-});
-Clazz.defineMethod (c$, "setAnnotationColumnSelectionState",
-function (annotationColumnSelectionState) {
-this.annotationColumnSelectionState = annotationColumnSelectionState;
-}, "jalview.appletgui.AnnotationColumnChooser");
-Clazz.overrideMethod (c$, "mirrorCommand",
-function (command, undo, ssm, source) {
-if (Clazz.instanceOf (source, jalview.api.AlignViewportI) && (source).getCodingComplement () === this) {
-} else {
-return;
-}var mappedCommand = ssm.mapCommand (command, undo, this.getAlignment (), this.getGapCharacter ());
-if (mappedCommand != null) {
-mappedCommand.doCommand (null);
-this.firePropertyChange ("alignment", null, this.getAlignment ().getSequences ());
-}}, "jalview.commands.CommandI,~B,jalview.structure.StructureSelectionManager,jalview.structure.VamsasSource");
-Clazz.overrideMethod (c$, "getVamsasSource",
-function () {
-return this;
-});
-Clazz.defineMethod (c$, "scrollComplementaryAlignment",
-function (complementPanel) {
-if (complementPanel == null) {
-return;
-}var sr = new jalview.datamodel.SearchResults ();
-var seqOffset = this.findComplementScrollTarget (sr);
-if (!sr.isEmpty ()) {
-complementPanel.setFollowingComplementScroll (true);
-complementPanel.scrollToCentre (sr, seqOffset);
-}}, "jalview.appletgui.AlignmentPanel");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.structure.CommandListener", "$.SelectionSource", "$.VamsasSource", "jalview.viewmodel.AlignmentViewport", "java.awt.Font"], "jalview.appletgui.AlignViewport", ["awt2swing.Frame", "jalview.api.AlignViewportI", "jalview.bin.JalviewLite", "jalview.datamodel.ColumnSelection", "$.SearchResults", "$.Sequence", "$.SequenceGroup", "jalview.schemes.ColourSchemeProperty", "jalview.structure.StructureSelectionManager", "jalview.util.Platform", "jalview.workers.AlignCalcManager", "java.lang.Float", "$.StringBuilder"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.cursorMode = false;
+this.font = null;
+this.validCharWidth = true;
+this.currentTree = null;
+this.applet = null;
+this.MAC = false;
+this.annotationColumnSelectionState = null;
+this.nullFrame = null;
+this.featureSettings = null;
+this.heightScale = 1;
+this.widthScale = 1;
+this.centreColumnLabels = false;
+this.followSelection = true;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AlignViewport", jalview.viewmodel.AlignmentViewport, [jalview.structure.SelectionSource, jalview.structure.VamsasSource, jalview.structure.CommandListener]);
+Clazz.prepareFields (c$, function () {
+this.font = new java.awt.Font ("SansSerif", 0, 10);
+});
+Clazz.overrideMethod (c$, "finalize",
+function () {
+this.applet = null;
+this.quality = null;
+this.alignment = null;
+this.colSel = null;
+});
+Clazz.makeConstructor (c$,
+function (al, applet) {
+Clazz.superConstructor (this, jalview.appletgui.AlignViewport);
+this.calculator = new jalview.workers.AlignCalcManager ();
+this.applet = applet;
+this.alignment = al;
+this.setPadGaps (true);
+this.startRes = 0;
+this.endRes = al.getWidth () - 1;
+this.startSeq = 0;
+this.endSeq = al.getHeight () - 1;
+if (applet != null) {
+var param = applet.widthScale;
+if (param != null) {
+try {
+this.widthScale = new Float (param).floatValue ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+if (this.widthScale <= 1.0) {
+System.err.println ("Invalid alignment character width scaling factor (" + this.widthScale + "). Ignoring.");
+this.widthScale = 1;
+}if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Alignment character width scaling factor is now " + this.widthScale);
+}}param = applet.heightScale;
+if (param != null) {
+try {
+this.heightScale = new Float (param).floatValue ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+if (this.heightScale <= 1.0) {
+System.err.println ("Invalid alignment character height scaling factor (" + this.heightScale + "). Ignoring.");
+this.heightScale = 1;
+}if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Alignment character height scaling factor is now " + this.heightScale);
+}}}this.setFont (this.font);
+this.MAC = jalview.util.Platform.isAMac ();
+if (applet != null) {
+this.setShowJVSuffix (applet.getDefaultParameter ("showFullId", this.getShowJVSuffix ()));
+this.setShowAnnotation (applet.getDefaultParameter ("showAnnotation", this.isShowAnnotation ()));
+this.showConservation = applet.getDefaultParameter ("showConservation", this.showConservation);
+this.showQuality = applet.getDefaultParameter ("showQuality", this.showQuality);
+this.showConsensus = applet.getDefaultParameter ("showConsensus", this.showConsensus);
+this.setShowUnconserved (applet.getDefaultParameter ("showUnconserved", this.getShowUnconserved ()));
+this.setScaleProteinAsCdna (applet.getDefaultParameter ("scaleProteinAsCdna", this.isScaleProteinAsCdna ()));
+var param = applet.upperCase;
+if (param != null) {
+if (param.equalsIgnoreCase ("bold")) {
+this.setUpperCasebold (true);
+}}this.sortByTree = applet.getDefaultParameter ("sortByTree", this.sortByTree);
+this.setFollowHighlight (applet.getDefaultParameter ("automaticScrolling", this.isFollowHighlight ()));
+this.followSelection = this.isFollowHighlight ();
+this.showSequenceLogo = applet.getDefaultParameter ("showSequenceLogo", this.showSequenceLogo);
+this.normaliseSequenceLogo = applet.getDefaultParameter ("normaliseSequenceLogo", applet.getDefaultParameter ("normaliseLogo", this.normaliseSequenceLogo));
+this.showGroupConsensus = applet.getDefaultParameter ("showGroupConsensus", this.showGroupConsensus);
+this.showGroupConservation = applet.getDefaultParameter ("showGroupConservation", this.showGroupConservation);
+this.showConsensusHistogram = applet.getDefaultParameter ("showConsensusHistogram", this.showConsensusHistogram);
+}if (applet != null) {
+var colour = applet.defaultColour;
+if (colour == null) {
+colour = applet.userDefinedColour;
+if (colour != null) {
+colour = "User Defined";
+}}if (colour != null) {
+this.globalColourScheme = jalview.schemes.ColourSchemeProperty.getColour (this.alignment, colour);
+if (this.globalColourScheme != null) {
+this.globalColourScheme.setConsensus (this.hconsensus);
+}}if (applet.userDefinedColour != null) {
+(this.globalColourScheme).parseAppletParameter (applet.userDefinedColour);
+}}this.initAutoAnnotation ();
+}, "jalview.datamodel.AlignmentI,jalview.bin.JalviewLite");
+Clazz.defineMethod (c$, "getConsensusSeq",
+function () {
+if (this.consensus == null) {
+this.updateConsensus (null);
+}if (this.consensus == null) {
+return null;
+}var seqs = new StringBuilder (this.consensus.annotations.length);
+for (var i = 0; i < this.consensus.annotations.length; i++) {
+if (this.consensus.annotations[i] != null) {
+if (this.consensus.annotations[i].description.charAt (0) == '[') {
+seqs.append (this.consensus.annotations[i].description.charAt (1));
+} else {
+seqs.append (this.consensus.annotations[i].displayCharacter);
+}}}
+var sq = new jalview.datamodel.Sequence ("Consensus", seqs.toString ());
+sq.setDescription ("Percentage Identity Consensus " + ((this.ignoreGapsInConsensusCalculation) ? " without gaps" : ""));
+return sq;
+});
+Clazz.defineMethod (c$, "setFont",
+function (f) {
+this.font = f;
+if (this.nullFrame == null) {
+this.nullFrame = new awt2swing.Frame ();
+this.nullFrame.addNotify ();
+this.nullFrame.setFont (this.font);
+}var fm = this.nullFrame.getGraphics ().getFontMetrics (this.font);
+this.setCharHeight (Clazz.floatToInt (this.heightScale * fm.getHeight ()));
+this.setCharWidth (Clazz.floatToInt (this.widthScale * fm.charWidth ('M')));
+if (this.isUpperCasebold ()) {
+var f2 = new java.awt.Font (f.getName (), 1, f.getSize ());
+fm = this.nullFrame.getGraphics ().getFontMetrics (f2);
+this.setCharWidth (Clazz.floatToInt (this.widthScale * (Clazz.doubleToInt (fm.stringWidth ("MMMMMMMMMMM") / 10))));
+}}, "java.awt.Font");
+Clazz.defineMethod (c$, "getFont",
+function () {
+return this.font;
+});
+Clazz.defineMethod (c$, "resetSeqLimits",
+function (height) {
+this.setEndSeq (Clazz.doubleToInt (height / this.getCharHeight ()));
+}, "~N");
+Clazz.defineMethod (c$, "setCurrentTree",
+function (tree) {
+this.currentTree = tree;
+}, "jalview.analysis.NJTree");
+Clazz.defineMethod (c$, "getCurrentTree",
+function () {
+return this.currentTree;
+});
+Clazz.defineMethod (c$, "getCentreColumnLabels",
+function () {
+return this.centreColumnLabels;
+});
+Clazz.defineMethod (c$, "getFollowSelection",
+function () {
+return this.followSelection;
+});
+Clazz.overrideMethod (c$, "sendSelection",
+function () {
+this.getStructureSelectionManager ().sendSelection ( new jalview.datamodel.SequenceGroup (this.getSelectionGroup ()), new jalview.datamodel.ColumnSelection (this.getColumnSelection ()), this);
+});
+Clazz.overrideMethod (c$, "getStructureSelectionManager",
+function () {
+return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.applet);
+});
+Clazz.defineMethod (c$, "expandColSelection",
+function (sg, wholewidth) {
+var sgs;
+var sge;
+if (sg != null && (sgs = sg.getStartRes ()) >= 0 && sg.getStartRes () <= (sge = sg.getEndRes ()) && (this.colSel == null || this.colSel.getSelected () == null || this.colSel.getSelected ().size () == 0)) {
+if (!wholewidth && this.alignment.getWidth () == (1 + sge - sgs)) {
+return;
+}if (this.colSel == null) {
+this.colSel = new jalview.datamodel.ColumnSelection ();
+}for (var cspos = sg.getStartRes (); cspos <= sg.getEndRes (); cspos++) {
+this.colSel.addElement (cspos);
+}
+}}, "jalview.datamodel.SequenceGroup,~B");
+Clazz.overrideMethod (c$, "isNormaliseSequenceLogo",
+function () {
+return this.normaliseSequenceLogo;
+});
+Clazz.defineMethod (c$, "setNormaliseSequenceLogo",
+function (state) {
+this.normaliseSequenceLogo = state;
+}, "~B");
+Clazz.overrideMethod (c$, "isValidCharWidth",
+function () {
+return this.validCharWidth;
+});
+Clazz.defineMethod (c$, "getAnnotationColumnSelectionState",
+function () {
+return this.annotationColumnSelectionState;
+});
+Clazz.defineMethod (c$, "setAnnotationColumnSelectionState",
+function (annotationColumnSelectionState) {
+this.annotationColumnSelectionState = annotationColumnSelectionState;
+}, "jalview.appletgui.AnnotationColumnChooser");
+Clazz.overrideMethod (c$, "mirrorCommand",
+function (command, undo, ssm, source) {
+if (Clazz.instanceOf (source, jalview.api.AlignViewportI) && (source).getCodingComplement () === this) {
+} else {
+return;
+}var mappedCommand = ssm.mapCommand (command, undo, this.getAlignment (), this.getGapCharacter ());
+if (mappedCommand != null) {
+mappedCommand.doCommand (null);
+this.firePropertyChange ("alignment", null, this.getAlignment ().getSequences ());
+}}, "jalview.commands.CommandI,~B,jalview.structure.StructureSelectionManager,jalview.structure.VamsasSource");
+Clazz.overrideMethod (c$, "getVamsasSource",
+function () {
+return this;
+});
+Clazz.defineMethod (c$, "scrollComplementaryAlignment",
+function (complementPanel) {
+if (complementPanel == null) {
+return;
+}var sr = new jalview.datamodel.SearchResults ();
+var seqOffset = this.findComplementScrollTarget (sr);
+if (!sr.isEmpty ()) {
+complementPanel.setFollowingComplementScroll (true);
+complementPanel.scrollToCentre (sr, seqOffset);
+}}, "jalview.appletgui.AlignmentPanel");
+});
diff --git a/bin/jalview/appletgui/AlignmentPanel.class b/bin/jalview/appletgui/AlignmentPanel.class
index 49b001d..873616b 100644
Binary files a/bin/jalview/appletgui/AlignmentPanel.class and b/bin/jalview/appletgui/AlignmentPanel.class differ
diff --git a/bin/jalview/appletgui/AlignmentPanel.js b/bin/jalview/appletgui/AlignmentPanel.js
index 8989731..1d6069d 100644
--- a/bin/jalview/appletgui/AlignmentPanel.js
+++ b/bin/jalview/appletgui/AlignmentPanel.js
@@ -1,610 +1,610 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "jalview.api.AlignmentViewPanel", "java.awt.event.AdjustmentListener", "awt2swing.Scrollbar"], "jalview.appletgui.AlignmentPanel", ["awt2swing.Frame", "jalview.analysis.AnnotationSorter", "jalview.appletgui.AnnotationLabels", "$.AnnotationPanel", "$.FeatureRenderer", "$.IdPanel", "$.IdwidthAdjuster", "$.PaintRefresher", "$.ScalePanel", "$.SeqPanel", "jalview.bin.JalviewLite", "jalview.structure.StructureSelectionManager", "java.awt.BorderLayout", "$.Color", "$.Dimension", "java.awt.event.ComponentAdapter", "java.beans.PropertyChangeListener"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.av = null;
-this.overviewPanel = null;
-this.seqPanel = null;
-this.idPanel = null;
-this.idwidthAdjuster = null;
-this.alignFrame = null;
-this.scalePanel = null;
-this.annotationPanel = null;
-this.alabels = null;
-this.fastPaint = true;
-this.hextent = 0;
-this.vextent = 0;
-this.sequenceHolderPanel = null;
-this.vscroll = null;
-this.hscroll = null;
-this.seqPanelHolder = null;
-this.scalePanelHolder = null;
-this.idPanelHolder = null;
-this.idSpaceFillerPanel1 = null;
-this.annotationSpaceFillerHolder = null;
-this.hscrollFillerPanel = null;
-this.annotationPanelHolder = null;
-this.apvscroll = null;
-this.followingComplementScroll = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AlignmentPanel", awt2swing.Panel, [java.awt.event.AdjustmentListener, jalview.api.AlignmentViewPanel]);
-Clazz.prepareFields (c$, function () {
-this.sequenceHolderPanel = new awt2swing.Panel ();
-this.vscroll = new awt2swing.Scrollbar ();
-this.hscroll = new awt2swing.Scrollbar ();
-this.seqPanelHolder = new awt2swing.Panel ();
-this.scalePanelHolder = new awt2swing.Panel ();
-this.idPanelHolder = new awt2swing.Panel ();
-this.idSpaceFillerPanel1 = new awt2swing.Panel ();
-this.annotationSpaceFillerHolder = new awt2swing.Panel ();
-this.hscrollFillerPanel = new awt2swing.Panel ();
-this.annotationPanelHolder = new awt2swing.Panel ();
-this.apvscroll = new awt2swing.Scrollbar ();
-});
-Clazz.overrideMethod (c$, "finalize",
-function () {
-this.alignFrame = null;
-this.av = null;
-this.seqPanel = null;
-this.seqPanelHolder = null;
-this.sequenceHolderPanel = null;
-this.scalePanel = null;
-this.scalePanelHolder = null;
-this.annotationPanel = null;
-this.annotationPanelHolder = null;
-this.annotationSpaceFillerHolder = null;
-});
-Clazz.makeConstructor (c$,
-function (af, av) {
-Clazz.superConstructor (this, jalview.appletgui.AlignmentPanel, []);
-this.setName ("alignmentPanel");
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.alignFrame = af;
-this.av = av;
-this.seqPanel = new jalview.appletgui.SeqPanel (av, this);
-this.idPanel = new jalview.appletgui.IdPanel (av, this);
-this.scalePanel = new jalview.appletgui.ScalePanel (av, this);
-this.idwidthAdjuster = new jalview.appletgui.IdwidthAdjuster (this);
-this.annotationPanel = new jalview.appletgui.AnnotationPanel (this);
-this.annotationPanelHolder.add (this.annotationPanel, "Center");
-this.sequenceHolderPanel.add (this.annotationPanelHolder, "South");
-this.alabels = new jalview.appletgui.AnnotationLabels (this);
-this.setAnnotationVisible (av.isShowAnnotation ());
-this.idPanelHolder.add (this.idPanel, "Center");
-this.idSpaceFillerPanel1.add (this.idwidthAdjuster, "Center");
-this.annotationSpaceFillerHolder.add (this.alabels, "Center");
-this.scalePanelHolder.add (this.scalePanel, "Center");
-this.seqPanelHolder.add (this.seqPanel, "Center");
-this.fontChanged ();
-this.setScrollValues (0, 0);
-this.apvscroll.addAdjustmentListener (this);
-this.hscroll.addAdjustmentListener (this);
-this.vscroll.addAdjustmentListener (this);
-this.addComponentListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$1") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$1, this, Clazz.cloneFinals ("av", av))));
-var d = this.calculateIdWidth ();
-this.idPanel.idCanvas.setSize (d);
-this.hscrollFillerPanel.setSize (d.width, this.annotationPanel.getSize ().height);
-this.idPanel.idCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);
-this.annotationSpaceFillerHolder.setSize (d.width, this.annotationPanel.getSize ().height);
-this.alabels.setSize (d.width, this.annotationPanel.getSize ().height);
-var ap = this;
-av.addPropertyChangeListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$2") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$2, this, Clazz.cloneFinals ("ap", ap, "av", av))));
-}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignViewport");
-Clazz.overrideMethod (c$, "getAlignViewport",
-function () {
-return this.av;
-});
-Clazz.defineMethod (c$, "getSequenceRenderer",
-function () {
-return this.seqPanel.seqCanvas.sr;
-});
-Clazz.overrideMethod (c$, "getFeatureRenderer",
-function () {
-return this.seqPanel.seqCanvas.fr;
-});
-Clazz.overrideMethod (c$, "cloneFeatureRenderer",
-function () {
-var nfr = new jalview.appletgui.FeatureRenderer (this.av);
-nfr.transferSettings (this.seqPanel.seqCanvas.fr);
-return nfr;
-});
-Clazz.defineMethod (c$, "alignmentChanged",
-function () {
-this.av.alignmentChanged (this);
-if (this.overviewPanel != null) {
-this.overviewPanel.updateOverviewImage ();
-}this.alignFrame.updateEditMenuBar ();
-this.repaint ();
-});
-Clazz.defineMethod (c$, "fontChanged",
-function () {
-this.idPanel.idCanvas.image = null;
-var fm = this.getFontMetrics (this.av.getFont ());
-this.scalePanel.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));
-this.idwidthAdjuster.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));
-this.av.updateSequenceIdColours ();
-this.annotationPanel.image = null;
-var ap = this.annotationPanel.adjustPanelHeight (false);
-var d = this.calculateIdWidth ();
-d.setSize (d.width + 4, this.seqPanel.seqCanvas.getSize ().height);
-this.alabels.setSize (d.width + 4, ap);
-this.idPanel.idCanvas.setSize (d);
-this.hscrollFillerPanel.setSize (d);
-this.validateAnnotationDimensions (false);
-this.annotationPanel.repaint ();
-this.validate ();
-this.repaint ();
-if (this.overviewPanel != null) {
-this.overviewPanel.updateOverviewImage ();
-}});
-Clazz.defineMethod (c$, "setIdWidth",
-function (w, h) {
-this.idPanel.idCanvas.setSize (w, h);
-this.idPanelHolder.setSize (w, this.idPanelHolder.getSize ().height);
-this.annotationSpaceFillerHolder.setSize (w, this.annotationSpaceFillerHolder.getSize ().height);
-this.alabels.setSize (w, this.alabels.getSize ().height);
-this.validate ();
-}, "~N,~N");
-Clazz.defineMethod (c$, "calculateIdWidth",
-function () {
-if (this.av.nullFrame == null) {
-this.av.nullFrame = new awt2swing.Frame ();
-this.av.nullFrame.addNotify ();
-this.av.nullFrame.setFont (this.av.font);
-}var g = this.av.nullFrame.getGraphics ();
-var fm = g.getFontMetrics (this.av.font);
-var al = this.av.getAlignment ();
-var i = 0;
-var idWidth = 0;
-var id;
-while (i < al.getHeight () && al.getSequenceAt (i) != null) {
-var s = al.getSequenceAt (i);
-id = s.getDisplayId (this.av.getShowJVSuffix ());
-if (fm.stringWidth (id) > idWidth) {
-idWidth = fm.stringWidth (id);
-}i++;
-}
-i = 0;
-if (al.getAlignmentAnnotation () != null) {
-fm = g.getFontMetrics (this.av.nullFrame.getFont ());
-while (i < al.getAlignmentAnnotation ().length) {
-var label = al.getAlignmentAnnotation ()[i].label;
-if (fm.stringWidth (label) > idWidth) {
-idWidth = fm.stringWidth (label);
-}i++;
-}
-}return new java.awt.Dimension (idWidth, this.idPanel.idCanvas.getSize ().height);
-});
-Clazz.defineMethod (c$, "highlightSearchResults",
-function (results) {
-this.scrollToPosition (results);
-this.seqPanel.seqCanvas.highlightSearchResults (results);
-}, "jalview.datamodel.SearchResults");
-Clazz.defineMethod (c$, "scrollToPosition",
-function (results) {
-return this.scrollToPosition (results, true);
-}, "jalview.datamodel.SearchResults");
-Clazz.defineMethod (c$, "scrollToPosition",
-function (results, redrawOverview) {
-return this.scrollToPosition (results, redrawOverview, false);
-}, "jalview.datamodel.SearchResults,~B");
-Clazz.defineMethod (c$, "scrollToPosition",
-function (results, redrawOverview, centre) {
-if (results != null && results.getSize () > 0) {
-var alignment = this.av.getAlignment ();
-var seqIndex = alignment.findIndex (results);
-if (seqIndex == -1) {
-return false;
-}var seq = alignment.getSequenceAt (seqIndex);
-var r = results.getResults (seq, 0, alignment.getWidth ());
-if (r == null) {
-if (jalview.bin.JalviewLite.debug) {
-System.out.println ("DEBUG: scroll didn't happen - results not within alignment : " + seq.getStart () + "," + seq.getEnd ());
-}return false;
-}if (jalview.bin.JalviewLite.debug) {
-}var start = r[0];
-var end = r[1];
-if (centre) {
-var offset = Clazz.doubleToInt ((this.av.getEndRes () - this.av.getStartRes () + 1) / 2) - 1;
-start = Math.max (start - offset, 0);
-end = Math.min (end + offset, seq.getEnd () - 1);
-}if (start < 0) {
-return false;
-}if (end == seq.getEnd ()) {
-return false;
-}return this.scrollTo (start, end, seqIndex, false, redrawOverview);
-}return true;
-}, "jalview.datamodel.SearchResults,~B,~B");
-Clazz.defineMethod (c$, "scrollTo",
-function (ostart, end, seqIndex, scrollToNearest, redrawOverview) {
-var startv;
-var endv;
-var starts;
-var ends;
-var width;
-var start = -1;
-if (this.av.hasHiddenColumns ()) {
-start = this.av.getColumnSelection ().findColumnPosition (ostart);
-end = this.av.getColumnSelection ().findColumnPosition (end);
-if (start == end) {
-if (!scrollToNearest && !this.av.getColumnSelection ().isVisible (ostart)) {
-return false;
-}}} else {
-start = ostart;
-}if (!this.av.getWrapAlignment ()) {
-if ((startv = this.av.getStartRes ()) >= start) {
-this.setScrollValues (start - 1, seqIndex);
-} else if ((endv = this.av.getEndRes ()) <= end) {
-this.setScrollValues (startv + 1 + end - endv, seqIndex);
-} else if ((starts = this.av.getStartSeq ()) > seqIndex) {
-this.setScrollValues (this.av.getStartRes (), seqIndex);
-} else if ((ends = this.av.getEndSeq ()) <= seqIndex) {
-this.setScrollValues (this.av.getStartRes (), starts + seqIndex - ends + 1);
-}} else {
-this.scrollToWrappedVisible (start);
-}if (redrawOverview && this.overviewPanel != null) {
-this.overviewPanel.setBoxPosition ();
-}this.paintAlignment (redrawOverview);
-return true;
-}, "~N,~N,~N,~B,~B");
-Clazz.defineMethod (c$, "scrollToWrappedVisible",
-function (res) {
-var cwidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
-if (res <= this.av.getStartRes () || res >= (this.av.getStartRes () + cwidth)) {
-this.vscroll.setValue (Clazz.doubleToInt (res / cwidth));
-this.av.startRes = this.vscroll.getValue () * cwidth;
-}}, "~N");
-Clazz.defineMethod (c$, "getOverviewPanel",
-function () {
-return this.overviewPanel;
-});
-Clazz.defineMethod (c$, "setOverviewPanel",
-function (op) {
-this.overviewPanel = op;
-}, "jalview.appletgui.OverviewPanel");
-Clazz.defineMethod (c$, "setAnnotationVisible",
-function (b) {
-if (!this.av.getWrapAlignment ()) {
-this.annotationSpaceFillerHolder.setVisible (b);
-this.annotationPanelHolder.setVisible (b);
-} else {
-this.annotationSpaceFillerHolder.setVisible (false);
-this.annotationPanelHolder.setVisible (false);
-}this.validate ();
-this.repaint ();
-}, "~B");
-Clazz.overrideMethod (c$, "adjustAnnotationHeight",
-function () {
-if (this.alignFrame.getSize ().height == 0) {
-System.out.println ("adjustAnnotationHeight frame size zero NEEDS FIXING");
-}this.fontChanged ();
-this.validateAnnotationDimensions (true);
-this.apvscroll.addNotify ();
-this.hscroll.addNotify ();
-this.validate ();
-this.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "validateAnnotationDimensions",
-function (adjustPanelHeight) {
-var rowHeight = this.av.getCharHeight ();
-var alignmentHeight = rowHeight * this.av.getAlignment ().getHeight ();
-var annotationHeight = this.av.calcPanelHeight ();
-var mheight = annotationHeight;
-var d = this.sequenceHolderPanel.getSize ();
-var availableHeight = d.height - this.scalePanelHolder.getHeight ();
-if (adjustPanelHeight) {
-if (annotationHeight + alignmentHeight > availableHeight) {
-annotationHeight = Math.min (annotationHeight, availableHeight - 2 * rowHeight);
-}} else {
-annotationHeight = this.annotationPanelHolder.getSize ().height;
-}if (availableHeight - annotationHeight < 5) {
-annotationHeight = availableHeight;
-}this.annotationPanel.setSize ( new java.awt.Dimension (d.width, annotationHeight));
-this.annotationPanelHolder.setSize ( new java.awt.Dimension (d.width, annotationHeight));
-this.seqPanel.seqCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);
-var e = this.idPanel.getSize ();
-this.alabels.setSize ( new java.awt.Dimension (e.width, annotationHeight));
-this.annotationSpaceFillerHolder.setSize ( new java.awt.Dimension (e.width, annotationHeight));
-var s = this.apvscroll.getValue ();
-if (s > mheight - annotationHeight) {
-s = 0;
-}this.apvscroll.setValues (s, annotationHeight, 0, mheight);
-this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);
-this.alabels.setScrollOffset (this.apvscroll.getValue (), false);
-}, "~B");
-Clazz.defineMethod (c$, "setWrapAlignment",
-function (wrap) {
-this.av.startSeq = 0;
-this.av.startRes = 0;
-this.scalePanelHolder.setVisible (!wrap);
-this.hscroll.setVisible (!wrap);
-this.idwidthAdjuster.setVisible (!wrap);
-if (wrap) {
-this.annotationPanelHolder.setVisible (false);
-this.annotationSpaceFillerHolder.setVisible (false);
-} else if (this.av.isShowAnnotation ()) {
-this.annotationPanelHolder.setVisible (true);
-this.annotationSpaceFillerHolder.setVisible (true);
-}this.idSpaceFillerPanel1.setVisible (!wrap);
-this.fontChanged ();
-this.validate ();
-this.sequenceHolderPanel.validate ();
-this.repaint ();
-}, "~B");
-Clazz.defineMethod (c$, "scrollUp",
-function (up) {
-if (up) {
-if (this.vscroll.getValue () < 1) {
-return false;
-}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () - 1);
-} else {
-if (this.vextent + this.vscroll.getValue () >= this.av.getAlignment ().getHeight ()) {
-return false;
-}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () + 1);
-}this.repaint ();
-return true;
-}, "~B");
-Clazz.defineMethod (c$, "scrollRight",
-function (right) {
-if (!right) {
-if (this.hscroll.getValue () < 1) {
-return false;
-}this.setScrollValues (this.hscroll.getValue () - 1, this.vscroll.getValue ());
-} else {
-if (this.hextent + this.hscroll.getValue () >= this.av.getAlignment ().getWidth ()) {
-return false;
-}this.setScrollValues (this.hscroll.getValue () + 1, this.vscroll.getValue ());
-}this.repaint ();
-return true;
-}, "~B");
-Clazz.defineMethod (c$, "setScrollValues",
-function (x, y) {
-var width = this.av.getAlignment ().getWidth ();
-var height = this.av.getAlignment ().getHeight ();
-if (this.av.hasHiddenColumns ()) {
-width = this.av.getColumnSelection ().findColumnPosition (width);
-}if (x < 0) {
-x = 0;
-};this.hextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ());
-this.vextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ());
-if (this.hextent > width) {
-this.hextent = width;
-}if (this.vextent > height) {
-this.vextent = height;
-}if ((this.hextent + x) > width) {
-System.err.println ("hextent was " + this.hextent + " and x was " + x);
-x = width - this.hextent;
-}if ((this.vextent + y) > height) {
-y = height - this.vextent;
-}if (y < 0) {
-y = 0;
-}if (x < 0) {
-System.err.println ("x was " + x);
-x = 0;
-}this.av.setStartSeq (y);
-var endSeq = y + this.vextent;
-if (endSeq > this.av.getAlignment ().getHeight ()) {
-endSeq = this.av.getAlignment ().getHeight ();
-}this.av.setEndSeq (endSeq);
-this.av.setStartRes (x);
-this.av.setEndRes ((x + (Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()))) - 1);
-this.hscroll.setValues (x, this.hextent, 0, width);
-this.vscroll.setValues (y, this.vextent, 0, height);
-if (this.overviewPanel != null) {
-this.overviewPanel.setBoxPosition ();
-}this.sendViewPosition ();
-}, "~N,~N");
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-if (this.annotationPanel == null) return;
-var oldX = this.av.getStartRes ();
-var oldY = this.av.getStartSeq ();
-if (evt == null || evt.getSource () === this.apvscroll) {
-this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);
-this.alabels.setScrollOffset (this.apvscroll.getValue (), false);
-}if (evt == null || evt.getSource () === this.hscroll) {
-var x = this.hscroll.getValue ();
-this.av.setStartRes (x);
-this.av.setEndRes (x + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()) - 1);
-}if (evt == null || evt.getSource () === this.vscroll) {
-var offy = this.vscroll.getValue ();
-if (this.av.getWrapAlignment ()) {
-var rowSize = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
-this.av.setStartRes (this.vscroll.getValue () * rowSize);
-this.av.setEndRes ((this.vscroll.getValue () + 1) * rowSize);
-} else {
-this.av.setStartSeq (offy);
-this.av.setEndSeq (offy + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ()));
-}}if (this.overviewPanel != null) {
-this.overviewPanel.setBoxPosition ();
-}var scrollX = this.av.startRes - oldX;
-var scrollY = this.av.startSeq - oldY;
-if (this.av.getWrapAlignment () || !this.fastPaint || this.av.MAC) {
-this.repaint ();
-} else {
-if (scrollX > this.av.endRes - this.av.startRes) {
-scrollX = this.av.endRes - this.av.startRes;
-} else if (scrollX < this.av.startRes - this.av.endRes) {
-scrollX = this.av.startRes - this.av.endRes;
-}this.idPanel.idCanvas.fastPaint (scrollY);
-this.seqPanel.seqCanvas.fastPaint (scrollX, scrollY);
-this.scalePanel.repaint ();
-if (this.av.isShowAnnotation ()) {
-this.annotationPanel.fastPaint (this.av.getStartRes () - oldX);
-}}this.sendViewPosition ();
-if (this.isFollowingComplementScroll ()) {
-this.setFollowingComplementScroll (false);
-} else {
-var ap = this.getComplementPanel ();
-this.av.scrollComplementaryAlignment (ap);
-}}, "java.awt.event.AdjustmentEvent");
-Clazz.defineMethod (c$, "getComplementPanel",
-($fz = function () {
-var ap = null;
-if (this.alignFrame != null) {
-var sf = this.alignFrame.getSplitFrame ();
-if (sf != null) {
-var other = sf.getComplement (this.alignFrame);
-if (other != null) {
-ap = other.alignPanel;
-}}}return ap;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "scrollToCentre",
-function (sr, seqOffset) {
-var mappedTo = sr.getResultSequence (0);
-var seqs = this.av.getAlignment ().getSequences ();
-var sequenceIndex = 0;
-var matched = false;
-for (var seq, $seq = seqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-if (mappedTo === seq.getDatasetSequence ()) {
-matched = true;
-break;
-}sequenceIndex++;
-}
-if (!matched) {
-return;
-}sequenceIndex = Math.max (0, sequenceIndex - seqOffset);
-sr.getResults ().get (0).setSequence (this.av.getAlignment ().getSequenceAt (sequenceIndex));
-this.setFollowingComplementScroll (true);
-this.scrollToPosition (sr, true, true);
-}, "jalview.datamodel.SearchResults,~N");
-Clazz.defineMethod (c$, "sendViewPosition",
-($fz = function () {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sendViewPosition (this, this.av.startRes, this.av.endRes, this.av.startSeq, this.av.endSeq);
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "paintAlignment",
-function (updateOverview) {
-var sorter = new jalview.analysis.AnnotationSorter (this.getAlignment (), this.av.isShowAutocalculatedAbove ());
-sorter.sort (this.getAlignment ().getAlignmentAnnotation (), this.av.getSortAnnotationsBy ());
-this.repaint ();
-if (updateOverview) {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sequenceColoursChanged (this);
-if (this.overviewPanel != null) {
-this.overviewPanel.updateOverviewImage ();
-}}}, "~B");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-System.out.println ("alignframe paintcomp");
-this.invalidate ();
-var d = this.idPanel.idCanvas.getSize ();
-var canvasHeight = this.seqPanel.seqCanvas.getSize ().height;
-if (canvasHeight != d.height) {
-this.idPanel.idCanvas.setSize (d.width, canvasHeight);
-}if (this.av.getWrapAlignment ()) {
-var maxwidth = this.av.getAlignment ().getWidth ();
-if (this.av.hasHiddenColumns ()) {
-maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
-}var canvasWidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
-if (canvasWidth > 0) {
-var max = Clazz.doubleToInt (maxwidth / canvasWidth);
-this.vscroll.setMaximum (1 + max);
-this.vscroll.setUnitIncrement (1);
-this.vscroll.setVisibleAmount (1);
-}} else {
-this.setScrollValues (this.av.getStartRes (), this.av.getStartSeq ());
-}}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setLayout ( new java.awt.BorderLayout ());
-this.sequenceHolderPanel.setLayout ( new java.awt.BorderLayout ());
-this.seqPanelHolder.setLayout ( new java.awt.BorderLayout ());
-this.scalePanelHolder.setBackground (java.awt.Color.white);
-this.scalePanelHolder.setLayout ( new java.awt.BorderLayout ());
-this.idPanelHolder.setLayout ( new java.awt.BorderLayout ());
-this.idSpaceFillerPanel1.setBackground (java.awt.Color.white);
-this.idSpaceFillerPanel1.setLayout ( new java.awt.BorderLayout ());
-this.annotationSpaceFillerHolder.setBackground (java.awt.Color.white);
-this.annotationSpaceFillerHolder.setLayout ( new java.awt.BorderLayout ());
-this.hscroll.setOrientation (0);
-var hscrollHolder = new awt2swing.Panel ();
-hscrollHolder.setLayout ( new java.awt.BorderLayout ());
-this.hscrollFillerPanel.setBackground (java.awt.Color.white);
-this.apvscroll.setOrientation (1);
-this.apvscroll.setVisible (true);
-this.apvscroll.addAdjustmentListener (this);
-this.annotationPanelHolder.setBackground (java.awt.Color.white);
-this.annotationPanelHolder.setLayout ( new java.awt.BorderLayout ());
-this.annotationPanelHolder.add (this.apvscroll, "East");
-hscrollHolder.setBackground (java.awt.Color.white);
-this.seqPanelHolder.setBackground (java.awt.Color.white);
-this.idPanelHolder.setBackground (java.awt.Color.white);
-this.sequenceHolderPanel.add (this.scalePanelHolder, "North");
-this.sequenceHolderPanel.add (this.seqPanelHolder, "Center");
-this.seqPanelHolder.add (this.vscroll, "East");
-this.add (this.idPanelHolder, "West");
-this.idPanelHolder.add (this.idSpaceFillerPanel1, "North");
-this.idPanelHolder.add (this.annotationSpaceFillerHolder, "South");
-this.add (hscrollHolder, "South");
-hscrollHolder.add (this.hscroll, "Center");
-hscrollHolder.add (this.hscrollFillerPanel, "West");
-this.add (this.sequenceHolderPanel, "Center");
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "updateAnnotation",
-function () {
-this.updateAnnotation (false);
-});
-Clazz.defineMethod (c$, "updateAnnotation",
-function (applyGlobalSettings) {
-this.updateAnnotation (applyGlobalSettings, false);
-}, "~B");
-Clazz.defineMethod (c$, "updateAnnotation",
-function (applyGlobalSettings, preserveNewGroupSettings) {
-this.av.updateGroupAnnotationSettings (applyGlobalSettings, preserveNewGroupSettings);
-this.adjustAnnotationHeight ();
-}, "~B,~B");
-Clazz.overrideMethod (c$, "getAlignment",
-function () {
-return this.av.getAlignment ();
-});
-Clazz.overrideMethod (c$, "getViewName",
-function () {
-return this.getName ();
-});
-Clazz.overrideMethod (c$, "getStructureSelectionManager",
-function () {
-return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);
-});
-Clazz.overrideMethod (c$, "raiseOOMWarning",
-function (string, error) {
-System.err.println ("Out of memory whilst '" + string + "'");
-error.printStackTrace ();
-}, "~S,OutOfMemoryError");
-Clazz.defineMethod (c$, "setFollowingComplementScroll",
-function (b) {
-this.followingComplementScroll = b;
-}, "~B");
-Clazz.defineMethod (c$, "isFollowingComplementScroll",
-function () {
-return this.followingComplementScroll;
-});
-c$.$AlignmentPanel$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$1", java.awt.event.ComponentAdapter);
-Clazz.overrideMethod (c$, "componentResized",
-function (evt) {
-this.b$["jalview.appletgui.AlignmentPanel"].setScrollValues (this.f$.av.getStartRes (), this.f$.av.getStartSeq ());
-if (this.b$["jalview.appletgui.AlignmentPanel"].getSize ().height > 0 && this.b$["jalview.appletgui.AlignmentPanel"].annotationPanelHolder.getSize ().height > 0) {
-this.b$["jalview.appletgui.AlignmentPanel"].validateAnnotationDimensions (false);
-}this.b$["jalview.appletgui.AlignmentPanel"].repaint ();
-}, "java.awt.event.ComponentEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AlignmentPanel$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$2", null, java.beans.PropertyChangeListener);
-Clazz.overrideMethod (c$, "propertyChange",
-function (evt) {
-if (evt.getPropertyName ().equals ("alignment")) {
-jalview.appletgui.PaintRefresher.Refresh (this.f$.ap, this.f$.av.getSequenceSetId (), true, true);
-this.b$["jalview.appletgui.AlignmentPanel"].alignmentChanged ();
-}}, "java.beans.PropertyChangeEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.api.AlignmentViewPanel", "java.awt.event.AdjustmentListener", "awt2swing.Scrollbar"], "jalview.appletgui.AlignmentPanel", ["awt2swing.Frame", "jalview.analysis.AnnotationSorter", "jalview.appletgui.AnnotationLabels", "$.AnnotationPanel", "$.FeatureRenderer", "$.IdPanel", "$.IdwidthAdjuster", "$.PaintRefresher", "$.ScalePanel", "$.SeqPanel", "jalview.bin.JalviewLite", "jalview.structure.StructureSelectionManager", "java.awt.BorderLayout", "$.Color", "$.Dimension", "java.awt.event.ComponentAdapter", "java.beans.PropertyChangeListener"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.overviewPanel = null;
+this.seqPanel = null;
+this.idPanel = null;
+this.idwidthAdjuster = null;
+this.alignFrame = null;
+this.scalePanel = null;
+this.annotationPanel = null;
+this.alabels = null;
+this.fastPaint = true;
+this.hextent = 0;
+this.vextent = 0;
+this.sequenceHolderPanel = null;
+this.vscroll = null;
+this.hscroll = null;
+this.seqPanelHolder = null;
+this.scalePanelHolder = null;
+this.idPanelHolder = null;
+this.idSpaceFillerPanel1 = null;
+this.annotationSpaceFillerHolder = null;
+this.hscrollFillerPanel = null;
+this.annotationPanelHolder = null;
+this.apvscroll = null;
+this.followingComplementScroll = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AlignmentPanel", awt2swing.Panel, [java.awt.event.AdjustmentListener, jalview.api.AlignmentViewPanel]);
+Clazz.prepareFields (c$, function () {
+this.sequenceHolderPanel = new awt2swing.Panel ();
+this.vscroll = new awt2swing.Scrollbar ();
+this.hscroll = new awt2swing.Scrollbar ();
+this.seqPanelHolder = new awt2swing.Panel ();
+this.scalePanelHolder = new awt2swing.Panel ();
+this.idPanelHolder = new awt2swing.Panel ();
+this.idSpaceFillerPanel1 = new awt2swing.Panel ();
+this.annotationSpaceFillerHolder = new awt2swing.Panel ();
+this.hscrollFillerPanel = new awt2swing.Panel ();
+this.annotationPanelHolder = new awt2swing.Panel ();
+this.apvscroll = new awt2swing.Scrollbar ();
+});
+Clazz.overrideMethod (c$, "finalize",
+function () {
+this.alignFrame = null;
+this.av = null;
+this.seqPanel = null;
+this.seqPanelHolder = null;
+this.sequenceHolderPanel = null;
+this.scalePanel = null;
+this.scalePanelHolder = null;
+this.annotationPanel = null;
+this.annotationPanelHolder = null;
+this.annotationSpaceFillerHolder = null;
+});
+Clazz.makeConstructor (c$,
+function (af, av) {
+Clazz.superConstructor (this, jalview.appletgui.AlignmentPanel, []);
+this.setName ("alignmentPanel");
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.alignFrame = af;
+this.av = av;
+this.seqPanel = new jalview.appletgui.SeqPanel (av, this);
+this.idPanel = new jalview.appletgui.IdPanel (av, this);
+this.scalePanel = new jalview.appletgui.ScalePanel (av, this);
+this.idwidthAdjuster = new jalview.appletgui.IdwidthAdjuster (this);
+this.annotationPanel = new jalview.appletgui.AnnotationPanel (this);
+this.annotationPanelHolder.add (this.annotationPanel, "Center");
+this.sequenceHolderPanel.add (this.annotationPanelHolder, "South");
+this.alabels = new jalview.appletgui.AnnotationLabels (this);
+this.setAnnotationVisible (av.isShowAnnotation ());
+this.idPanelHolder.add (this.idPanel, "Center");
+this.idSpaceFillerPanel1.add (this.idwidthAdjuster, "Center");
+this.annotationSpaceFillerHolder.add (this.alabels, "Center");
+this.scalePanelHolder.add (this.scalePanel, "Center");
+this.seqPanelHolder.add (this.seqPanel, "Center");
+this.fontChanged ();
+this.setScrollValues (0, 0);
+this.apvscroll.addAdjustmentListener (this);
+this.hscroll.addAdjustmentListener (this);
+this.vscroll.addAdjustmentListener (this);
+this.addComponentListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$1") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$1, this, Clazz.cloneFinals ("av", av))));
+var d = this.calculateIdWidth ();
+this.idPanel.idCanvas.setSize (d);
+this.hscrollFillerPanel.setSize (d.width, this.annotationPanel.getSize ().height);
+this.idPanel.idCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);
+this.annotationSpaceFillerHolder.setSize (d.width, this.annotationPanel.getSize ().height);
+this.alabels.setSize (d.width, this.annotationPanel.getSize ().height);
+var ap = this;
+av.addPropertyChangeListener (((Clazz.isClassDefined ("jalview.appletgui.AlignmentPanel$2") ? 0 : jalview.appletgui.AlignmentPanel.$AlignmentPanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AlignmentPanel$2, this, Clazz.cloneFinals ("ap", ap, "av", av))));
+}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignViewport");
+Clazz.overrideMethod (c$, "getAlignViewport",
+function () {
+return this.av;
+});
+Clazz.defineMethod (c$, "getSequenceRenderer",
+function () {
+return this.seqPanel.seqCanvas.sr;
+});
+Clazz.overrideMethod (c$, "getFeatureRenderer",
+function () {
+return this.seqPanel.seqCanvas.fr;
+});
+Clazz.overrideMethod (c$, "cloneFeatureRenderer",
+function () {
+var nfr = new jalview.appletgui.FeatureRenderer (this.av);
+nfr.transferSettings (this.seqPanel.seqCanvas.fr);
+return nfr;
+});
+Clazz.defineMethod (c$, "alignmentChanged",
+function () {
+this.av.alignmentChanged (this);
+if (this.overviewPanel != null) {
+this.overviewPanel.updateOverviewImage ();
+}this.alignFrame.updateEditMenuBar ();
+this.repaint ();
+});
+Clazz.defineMethod (c$, "fontChanged",
+function () {
+this.idPanel.idCanvas.image = null;
+var fm = this.getFontMetrics (this.av.getFont ());
+this.scalePanel.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));
+this.idwidthAdjuster.setSize ( new java.awt.Dimension (10, this.av.getCharHeight () + fm.getDescent ()));
+this.av.updateSequenceIdColours ();
+this.annotationPanel.image = null;
+var ap = this.annotationPanel.adjustPanelHeight (false);
+var d = this.calculateIdWidth ();
+d.setSize (d.width + 4, this.seqPanel.seqCanvas.getSize ().height);
+this.alabels.setSize (d.width + 4, ap);
+this.idPanel.idCanvas.setSize (d);
+this.hscrollFillerPanel.setSize (d);
+this.validateAnnotationDimensions (false);
+this.annotationPanel.repaint ();
+this.validate ();
+this.repaint ();
+if (this.overviewPanel != null) {
+this.overviewPanel.updateOverviewImage ();
+}});
+Clazz.defineMethod (c$, "setIdWidth",
+function (w, h) {
+this.idPanel.idCanvas.setSize (w, h);
+this.idPanelHolder.setSize (w, this.idPanelHolder.getSize ().height);
+this.annotationSpaceFillerHolder.setSize (w, this.annotationSpaceFillerHolder.getSize ().height);
+this.alabels.setSize (w, this.alabels.getSize ().height);
+this.validate ();
+}, "~N,~N");
+Clazz.defineMethod (c$, "calculateIdWidth",
+function () {
+if (this.av.nullFrame == null) {
+this.av.nullFrame = new awt2swing.Frame ();
+this.av.nullFrame.addNotify ();
+this.av.nullFrame.setFont (this.av.font);
+}var g = this.av.nullFrame.getGraphics ();
+var fm = g.getFontMetrics (this.av.font);
+var al = this.av.getAlignment ();
+var i = 0;
+var idWidth = 0;
+var id;
+while (i < al.getHeight () && al.getSequenceAt (i) != null) {
+var s = al.getSequenceAt (i);
+id = s.getDisplayId (this.av.getShowJVSuffix ());
+if (fm.stringWidth (id) > idWidth) {
+idWidth = fm.stringWidth (id);
+}i++;
+}
+i = 0;
+if (al.getAlignmentAnnotation () != null) {
+fm = g.getFontMetrics (this.av.nullFrame.getFont ());
+while (i < al.getAlignmentAnnotation ().length) {
+var label = al.getAlignmentAnnotation ()[i].label;
+if (fm.stringWidth (label) > idWidth) {
+idWidth = fm.stringWidth (label);
+}i++;
+}
+}return new java.awt.Dimension (idWidth, this.idPanel.idCanvas.getSize ().height);
+});
+Clazz.defineMethod (c$, "highlightSearchResults",
+function (results) {
+this.scrollToPosition (results);
+this.seqPanel.seqCanvas.highlightSearchResults (results);
+}, "jalview.datamodel.SearchResults");
+Clazz.defineMethod (c$, "scrollToPosition",
+function (results) {
+return this.scrollToPosition (results, true);
+}, "jalview.datamodel.SearchResults");
+Clazz.defineMethod (c$, "scrollToPosition",
+function (results, redrawOverview) {
+return this.scrollToPosition (results, redrawOverview, false);
+}, "jalview.datamodel.SearchResults,~B");
+Clazz.defineMethod (c$, "scrollToPosition",
+function (results, redrawOverview, centre) {
+if (results != null && results.getSize () > 0) {
+var alignment = this.av.getAlignment ();
+var seqIndex = alignment.findIndex (results);
+if (seqIndex == -1) {
+return false;
+}var seq = alignment.getSequenceAt (seqIndex);
+var r = results.getResults (seq, 0, alignment.getWidth ());
+if (r == null) {
+if (jalview.bin.JalviewLite.debug) {
+System.out.println ("DEBUG: scroll didn't happen - results not within alignment : " + seq.getStart () + "," + seq.getEnd ());
+}return false;
+}if (jalview.bin.JalviewLite.debug) {
+}var start = r[0];
+var end = r[1];
+if (centre) {
+var offset = Clazz.doubleToInt ((this.av.getEndRes () - this.av.getStartRes () + 1) / 2) - 1;
+start = Math.max (start - offset, 0);
+end = Math.min (end + offset, seq.getEnd () - 1);
+}if (start < 0) {
+return false;
+}if (end == seq.getEnd ()) {
+return false;
+}return this.scrollTo (start, end, seqIndex, false, redrawOverview);
+}return true;
+}, "jalview.datamodel.SearchResults,~B,~B");
+Clazz.defineMethod (c$, "scrollTo",
+function (ostart, end, seqIndex, scrollToNearest, redrawOverview) {
+var startv;
+var endv;
+var starts;
+var ends;
+var width;
+var start = -1;
+if (this.av.hasHiddenColumns ()) {
+start = this.av.getColumnSelection ().findColumnPosition (ostart);
+end = this.av.getColumnSelection ().findColumnPosition (end);
+if (start == end) {
+if (!scrollToNearest && !this.av.getColumnSelection ().isVisible (ostart)) {
+return false;
+}}} else {
+start = ostart;
+}if (!this.av.getWrapAlignment ()) {
+if ((startv = this.av.getStartRes ()) >= start) {
+this.setScrollValues (start - 1, seqIndex);
+} else if ((endv = this.av.getEndRes ()) <= end) {
+this.setScrollValues (startv + 1 + end - endv, seqIndex);
+} else if ((starts = this.av.getStartSeq ()) > seqIndex) {
+this.setScrollValues (this.av.getStartRes (), seqIndex);
+} else if ((ends = this.av.getEndSeq ()) <= seqIndex) {
+this.setScrollValues (this.av.getStartRes (), starts + seqIndex - ends + 1);
+}} else {
+this.scrollToWrappedVisible (start);
+}if (redrawOverview && this.overviewPanel != null) {
+this.overviewPanel.setBoxPosition ();
+}this.paintAlignment (redrawOverview);
+return true;
+}, "~N,~N,~N,~B,~B");
+Clazz.defineMethod (c$, "scrollToWrappedVisible",
+function (res) {
+var cwidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
+if (res <= this.av.getStartRes () || res >= (this.av.getStartRes () + cwidth)) {
+this.vscroll.setValue (Clazz.doubleToInt (res / cwidth));
+this.av.startRes = this.vscroll.getValue () * cwidth;
+}}, "~N");
+Clazz.defineMethod (c$, "getOverviewPanel",
+function () {
+return this.overviewPanel;
+});
+Clazz.defineMethod (c$, "setOverviewPanel",
+function (op) {
+this.overviewPanel = op;
+}, "jalview.appletgui.OverviewPanel");
+Clazz.defineMethod (c$, "setAnnotationVisible",
+function (b) {
+if (!this.av.getWrapAlignment ()) {
+this.annotationSpaceFillerHolder.setVisible (b);
+this.annotationPanelHolder.setVisible (b);
+} else {
+this.annotationSpaceFillerHolder.setVisible (false);
+this.annotationPanelHolder.setVisible (false);
+}this.validate ();
+this.repaint ();
+}, "~B");
+Clazz.overrideMethod (c$, "adjustAnnotationHeight",
+function () {
+if (this.alignFrame.getSize ().height == 0) {
+System.out.println ("adjustAnnotationHeight frame size zero NEEDS FIXING");
+}this.fontChanged ();
+this.validateAnnotationDimensions (true);
+this.apvscroll.addNotify ();
+this.hscroll.addNotify ();
+this.validate ();
+this.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "validateAnnotationDimensions",
+function (adjustPanelHeight) {
+var rowHeight = this.av.getCharHeight ();
+var alignmentHeight = rowHeight * this.av.getAlignment ().getHeight ();
+var annotationHeight = this.av.calcPanelHeight ();
+var mheight = annotationHeight;
+var d = this.sequenceHolderPanel.getSize ();
+var availableHeight = d.height - this.scalePanelHolder.getHeight ();
+if (adjustPanelHeight) {
+if (annotationHeight + alignmentHeight > availableHeight) {
+annotationHeight = Math.min (annotationHeight, availableHeight - 2 * rowHeight);
+}} else {
+annotationHeight = this.annotationPanelHolder.getSize ().height;
+}if (availableHeight - annotationHeight < 5) {
+annotationHeight = availableHeight;
+}this.annotationPanel.setSize ( new java.awt.Dimension (d.width, annotationHeight));
+this.annotationPanelHolder.setSize ( new java.awt.Dimension (d.width, annotationHeight));
+this.seqPanel.seqCanvas.setSize (d.width, this.seqPanel.seqCanvas.getSize ().height);
+var e = this.idPanel.getSize ();
+this.alabels.setSize ( new java.awt.Dimension (e.width, annotationHeight));
+this.annotationSpaceFillerHolder.setSize ( new java.awt.Dimension (e.width, annotationHeight));
+var s = this.apvscroll.getValue ();
+if (s > mheight - annotationHeight) {
+s = 0;
+}this.apvscroll.setValues (s, annotationHeight, 0, mheight);
+this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);
+this.alabels.setScrollOffset (this.apvscroll.getValue (), false);
+}, "~B");
+Clazz.defineMethod (c$, "setWrapAlignment",
+function (wrap) {
+this.av.startSeq = 0;
+this.av.startRes = 0;
+this.scalePanelHolder.setVisible (!wrap);
+this.hscroll.setVisible (!wrap);
+this.idwidthAdjuster.setVisible (!wrap);
+if (wrap) {
+this.annotationPanelHolder.setVisible (false);
+this.annotationSpaceFillerHolder.setVisible (false);
+} else if (this.av.isShowAnnotation ()) {
+this.annotationPanelHolder.setVisible (true);
+this.annotationSpaceFillerHolder.setVisible (true);
+}this.idSpaceFillerPanel1.setVisible (!wrap);
+this.fontChanged ();
+this.validate ();
+this.sequenceHolderPanel.validate ();
+this.repaint ();
+}, "~B");
+Clazz.defineMethod (c$, "scrollUp",
+function (up) {
+if (up) {
+if (this.vscroll.getValue () < 1) {
+return false;
+}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () - 1);
+} else {
+if (this.vextent + this.vscroll.getValue () >= this.av.getAlignment ().getHeight ()) {
+return false;
+}this.setScrollValues (this.hscroll.getValue (), this.vscroll.getValue () + 1);
+}this.repaint ();
+return true;
+}, "~B");
+Clazz.defineMethod (c$, "scrollRight",
+function (right) {
+if (!right) {
+if (this.hscroll.getValue () < 1) {
+return false;
+}this.setScrollValues (this.hscroll.getValue () - 1, this.vscroll.getValue ());
+} else {
+if (this.hextent + this.hscroll.getValue () >= this.av.getAlignment ().getWidth ()) {
+return false;
+}this.setScrollValues (this.hscroll.getValue () + 1, this.vscroll.getValue ());
+}this.repaint ();
+return true;
+}, "~B");
+Clazz.defineMethod (c$, "setScrollValues",
+function (x, y) {
+var width = this.av.getAlignment ().getWidth ();
+var height = this.av.getAlignment ().getHeight ();
+if (this.av.hasHiddenColumns ()) {
+width = this.av.getColumnSelection ().findColumnPosition (width);
+}if (x < 0) {
+x = 0;
+};this.hextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ());
+this.vextent = Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ());
+if (this.hextent > width) {
+this.hextent = width;
+}if (this.vextent > height) {
+this.vextent = height;
+}if ((this.hextent + x) > width) {
+System.err.println ("hextent was " + this.hextent + " and x was " + x);
+x = width - this.hextent;
+}if ((this.vextent + y) > height) {
+y = height - this.vextent;
+}if (y < 0) {
+y = 0;
+}if (x < 0) {
+System.err.println ("x was " + x);
+x = 0;
+}this.av.setStartSeq (y);
+var endSeq = y + this.vextent;
+if (endSeq > this.av.getAlignment ().getHeight ()) {
+endSeq = this.av.getAlignment ().getHeight ();
+}this.av.setEndSeq (endSeq);
+this.av.setStartRes (x);
+this.av.setEndRes ((x + (Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()))) - 1);
+this.hscroll.setValues (x, this.hextent, 0, width);
+this.vscroll.setValues (y, this.vextent, 0, height);
+if (this.overviewPanel != null) {
+this.overviewPanel.setBoxPosition ();
+}this.sendViewPosition ();
+}, "~N,~N");
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+if (this.annotationPanel == null) return;
+var oldX = this.av.getStartRes ();
+var oldY = this.av.getStartSeq ();
+if (evt == null || evt.getSource () === this.apvscroll) {
+this.annotationPanel.setScrollOffset (this.apvscroll.getValue (), false);
+this.alabels.setScrollOffset (this.apvscroll.getValue (), false);
+}if (evt == null || evt.getSource () === this.hscroll) {
+var x = this.hscroll.getValue ();
+this.av.setStartRes (x);
+this.av.setEndRes (x + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().width / this.av.getCharWidth ()) - 1);
+}if (evt == null || evt.getSource () === this.vscroll) {
+var offy = this.vscroll.getValue ();
+if (this.av.getWrapAlignment ()) {
+var rowSize = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
+this.av.setStartRes (this.vscroll.getValue () * rowSize);
+this.av.setEndRes ((this.vscroll.getValue () + 1) * rowSize);
+} else {
+this.av.setStartSeq (offy);
+this.av.setEndSeq (offy + Clazz.doubleToInt (this.seqPanel.seqCanvas.getSize ().height / this.av.getCharHeight ()));
+}}if (this.overviewPanel != null) {
+this.overviewPanel.setBoxPosition ();
+}var scrollX = this.av.startRes - oldX;
+var scrollY = this.av.startSeq - oldY;
+if (this.av.getWrapAlignment () || !this.fastPaint || this.av.MAC) {
+this.repaint ();
+} else {
+if (scrollX > this.av.endRes - this.av.startRes) {
+scrollX = this.av.endRes - this.av.startRes;
+} else if (scrollX < this.av.startRes - this.av.endRes) {
+scrollX = this.av.startRes - this.av.endRes;
+}this.idPanel.idCanvas.fastPaint (scrollY);
+this.seqPanel.seqCanvas.fastPaint (scrollX, scrollY);
+this.scalePanel.repaint ();
+if (this.av.isShowAnnotation ()) {
+this.annotationPanel.fastPaint (this.av.getStartRes () - oldX);
+}}this.sendViewPosition ();
+if (this.isFollowingComplementScroll ()) {
+this.setFollowingComplementScroll (false);
+} else {
+var ap = this.getComplementPanel ();
+this.av.scrollComplementaryAlignment (ap);
+}}, "java.awt.event.AdjustmentEvent");
+Clazz.defineMethod (c$, "getComplementPanel",
+($fz = function () {
+var ap = null;
+if (this.alignFrame != null) {
+var sf = this.alignFrame.getSplitFrame ();
+if (sf != null) {
+var other = sf.getComplement (this.alignFrame);
+if (other != null) {
+ap = other.alignPanel;
+}}}return ap;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "scrollToCentre",
+function (sr, seqOffset) {
+var mappedTo = sr.getResultSequence (0);
+var seqs = this.av.getAlignment ().getSequences ();
+var sequenceIndex = 0;
+var matched = false;
+for (var seq, $seq = seqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+if (mappedTo === seq.getDatasetSequence ()) {
+matched = true;
+break;
+}sequenceIndex++;
+}
+if (!matched) {
+return;
+}sequenceIndex = Math.max (0, sequenceIndex - seqOffset);
+sr.getResults ().get (0).setSequence (this.av.getAlignment ().getSequenceAt (sequenceIndex));
+this.setFollowingComplementScroll (true);
+this.scrollToPosition (sr, true, true);
+}, "jalview.datamodel.SearchResults,~N");
+Clazz.defineMethod (c$, "sendViewPosition",
+($fz = function () {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sendViewPosition (this, this.av.startRes, this.av.endRes, this.av.startSeq, this.av.endSeq);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "paintAlignment",
+function (updateOverview) {
+var sorter = new jalview.analysis.AnnotationSorter (this.getAlignment (), this.av.isShowAutocalculatedAbove ());
+sorter.sort (this.getAlignment ().getAlignmentAnnotation (), this.av.getSortAnnotationsBy ());
+this.repaint ();
+if (updateOverview) {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet).sequenceColoursChanged (this);
+if (this.overviewPanel != null) {
+this.overviewPanel.updateOverviewImage ();
+}}}, "~B");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+System.out.println ("alignframe paintcomp");
+this.invalidate ();
+var d = this.idPanel.idCanvas.getSize ();
+var canvasHeight = this.seqPanel.seqCanvas.getSize ().height;
+if (canvasHeight != d.height) {
+this.idPanel.idCanvas.setSize (d.width, canvasHeight);
+}if (this.av.getWrapAlignment ()) {
+var maxwidth = this.av.getAlignment ().getWidth ();
+if (this.av.hasHiddenColumns ()) {
+maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
+}var canvasWidth = this.seqPanel.seqCanvas.getWrappedCanvasWidth (this.seqPanel.seqCanvas.getSize ().width);
+if (canvasWidth > 0) {
+var max = Clazz.doubleToInt (maxwidth / canvasWidth);
+this.vscroll.setMaximum (1 + max);
+this.vscroll.setUnitIncrement (1);
+this.vscroll.setVisibleAmount (1);
+}} else {
+this.setScrollValues (this.av.getStartRes (), this.av.getStartSeq ());
+}}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setLayout ( new java.awt.BorderLayout ());
+this.sequenceHolderPanel.setLayout ( new java.awt.BorderLayout ());
+this.seqPanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.scalePanelHolder.setBackground (java.awt.Color.white);
+this.scalePanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.idPanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.idSpaceFillerPanel1.setBackground (java.awt.Color.white);
+this.idSpaceFillerPanel1.setLayout ( new java.awt.BorderLayout ());
+this.annotationSpaceFillerHolder.setBackground (java.awt.Color.white);
+this.annotationSpaceFillerHolder.setLayout ( new java.awt.BorderLayout ());
+this.hscroll.setOrientation (0);
+var hscrollHolder = new awt2swing.Panel ();
+hscrollHolder.setLayout ( new java.awt.BorderLayout ());
+this.hscrollFillerPanel.setBackground (java.awt.Color.white);
+this.apvscroll.setOrientation (1);
+this.apvscroll.setVisible (true);
+this.apvscroll.addAdjustmentListener (this);
+this.annotationPanelHolder.setBackground (java.awt.Color.white);
+this.annotationPanelHolder.setLayout ( new java.awt.BorderLayout ());
+this.annotationPanelHolder.add (this.apvscroll, "East");
+hscrollHolder.setBackground (java.awt.Color.white);
+this.seqPanelHolder.setBackground (java.awt.Color.white);
+this.idPanelHolder.setBackground (java.awt.Color.white);
+this.sequenceHolderPanel.add (this.scalePanelHolder, "North");
+this.sequenceHolderPanel.add (this.seqPanelHolder, "Center");
+this.seqPanelHolder.add (this.vscroll, "East");
+this.add (this.idPanelHolder, "West");
+this.idPanelHolder.add (this.idSpaceFillerPanel1, "North");
+this.idPanelHolder.add (this.annotationSpaceFillerHolder, "South");
+this.add (hscrollHolder, "South");
+hscrollHolder.add (this.hscroll, "Center");
+hscrollHolder.add (this.hscrollFillerPanel, "West");
+this.add (this.sequenceHolderPanel, "Center");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "updateAnnotation",
+function () {
+this.updateAnnotation (false);
+});
+Clazz.defineMethod (c$, "updateAnnotation",
+function (applyGlobalSettings) {
+this.updateAnnotation (applyGlobalSettings, false);
+}, "~B");
+Clazz.defineMethod (c$, "updateAnnotation",
+function (applyGlobalSettings, preserveNewGroupSettings) {
+this.av.updateGroupAnnotationSettings (applyGlobalSettings, preserveNewGroupSettings);
+this.adjustAnnotationHeight ();
+}, "~B,~B");
+Clazz.overrideMethod (c$, "getAlignment",
+function () {
+return this.av.getAlignment ();
+});
+Clazz.overrideMethod (c$, "getViewName",
+function () {
+return this.getName ();
+});
+Clazz.overrideMethod (c$, "getStructureSelectionManager",
+function () {
+return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);
+});
+Clazz.overrideMethod (c$, "raiseOOMWarning",
+function (string, error) {
+System.err.println ("Out of memory whilst '" + string + "'");
+error.printStackTrace ();
+}, "~S,OutOfMemoryError");
+Clazz.defineMethod (c$, "setFollowingComplementScroll",
+function (b) {
+this.followingComplementScroll = b;
+}, "~B");
+Clazz.defineMethod (c$, "isFollowingComplementScroll",
+function () {
+return this.followingComplementScroll;
+});
+c$.$AlignmentPanel$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$1", java.awt.event.ComponentAdapter);
+Clazz.overrideMethod (c$, "componentResized",
+function (evt) {
+this.b$["jalview.appletgui.AlignmentPanel"].setScrollValues (this.f$.av.getStartRes (), this.f$.av.getStartSeq ());
+if (this.b$["jalview.appletgui.AlignmentPanel"].getSize ().height > 0 && this.b$["jalview.appletgui.AlignmentPanel"].annotationPanelHolder.getSize ().height > 0) {
+this.b$["jalview.appletgui.AlignmentPanel"].validateAnnotationDimensions (false);
+}this.b$["jalview.appletgui.AlignmentPanel"].repaint ();
+}, "java.awt.event.ComponentEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AlignmentPanel$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AlignmentPanel$2", null, java.beans.PropertyChangeListener);
+Clazz.overrideMethod (c$, "propertyChange",
+function (evt) {
+if (evt.getPropertyName ().equals ("alignment")) {
+jalview.appletgui.PaintRefresher.Refresh (this.f$.ap, this.f$.av.getSequenceSetId (), true, true);
+this.b$["jalview.appletgui.AlignmentPanel"].alignmentChanged ();
+}}, "java.beans.PropertyChangeEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/AnnotationColourChooser.class b/bin/jalview/appletgui/AnnotationColourChooser.class
index 15ef662..e2ee296 100644
Binary files a/bin/jalview/appletgui/AnnotationColourChooser.class and b/bin/jalview/appletgui/AnnotationColourChooser.class differ
diff --git a/bin/jalview/appletgui/AnnotationColourChooser.js b/bin/jalview/appletgui/AnnotationColourChooser.js
index fce2267..668d9cd 100644
--- a/bin/jalview/appletgui/AnnotationColourChooser.js
+++ b/bin/jalview/appletgui/AnnotationColourChooser.js
@@ -1,348 +1,348 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "awt2swing.Button", "$.Checkbox", "$.Choice", "$.Scrollbar", "$.TextField", "java.awt.BorderLayout", "$.FlowLayout"], "jalview.appletgui.AnnotationColourChooser", ["awt2swing.Frame", "jalview.appletgui.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.datamodel.GraphLine", "jalview.schemes.AnnotationColourGradient", "$.ColourSchemeI", "jalview.util.MessageManager", "java.awt.Color", "$.Dimension", "$.Font", "java.lang.Error", "$.Float", "java.util.Hashtable", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.frame = null;
-this.av = null;
-this.ap = null;
-this.oldcs = null;
-this.oldgroupColours = null;
-this.currentAnnotation = null;
-this.adjusting = false;
-this.annotations = null;
-this.minColour = null;
-this.maxColour = null;
-this.ok = null;
-this.cancel = null;
-this.defColours = null;
-this.jPanel1 = null;
-this.jPanel2 = null;
-this.threshold = null;
-this.flowLayout1 = null;
-this.jPanel3 = null;
-this.slider = null;
-this.thresholdValue = null;
-this.currentColours = null;
-this.borderLayout1 = null;
-this.thresholdIsMin = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AnnotationColourChooser", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.ItemListener, java.awt.event.MouseListener]);
-Clazz.prepareFields (c$, function () {
-this.annotations = new awt2swing.Choice ();
-this.minColour = new awt2swing.Button ();
-this.maxColour = new awt2swing.Button ();
-this.ok = new awt2swing.Button ();
-this.cancel = new awt2swing.Button ();
-this.defColours = new awt2swing.Button ();
-this.jPanel1 = new awt2swing.Panel ();
-this.jPanel2 = new awt2swing.Panel ();
-this.threshold = new awt2swing.Choice ();
-this.flowLayout1 = new java.awt.FlowLayout ();
-this.jPanel3 = new awt2swing.Panel ();
-this.slider = new awt2swing.Scrollbar (0);
-this.thresholdValue = new awt2swing.TextField (20);
-this.currentColours = new awt2swing.Checkbox ();
-this.borderLayout1 = new java.awt.BorderLayout ();
-this.thresholdIsMin = new awt2swing.Checkbox ();
-});
-Clazz.makeConstructor (c$,
-function (av, ap) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationColourChooser, []);
-try {
-this.jbInit ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-this.oldcs = av.getGlobalColourScheme ();
-if (av.getAlignment ().getGroups () != null) {
-this.oldgroupColours = new java.util.Hashtable ();
-for (var sg, $sg = ap.av.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (sg.cs != null) {
-this.oldgroupColours.put (sg, sg.cs);
-} else {
-this.oldgroupColours.put (sg, "null");
-}}
-}this.av = av;
-this.ap = ap;
-this.slider.addAdjustmentListener (this);
-this.slider.addMouseListener (this);
-if (av.getAlignment ().getAlignmentAnnotation () == null) {
-return;
-}this.setDefaultMinMax ();
-this.adjusting = true;
-if (Clazz.instanceOf (this.oldcs, jalview.schemes.AnnotationColourGradient)) {
-var acg = this.oldcs;
-this.currentColours.setState (acg.isPredefinedColours () || acg.getBaseColour () != null);
-if (!acg.isPredefinedColours () && acg.getBaseColour () == null) {
-this.minColour.setBackground (acg.getMinColour ());
-this.maxColour.setBackground (acg.getMaxColour ());
-}}var list = new java.util.Vector ();
-var index = 1;
-for (var i = 0; i < av.getAlignment ().getAlignmentAnnotation ().length; i++) {
-var label = av.getAlignment ().getAlignmentAnnotation ()[i].label;
-if (!list.contains (label)) {
-list.addElement (label);
-} else {
-list.addElement (label + "_" + (index++));
-}}
-for (var i = 0; i < list.size (); i++) {
-this.annotations.addItem (list.elementAt (i).toString ());
-}
-this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_no_thereshold"));
-this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_above_thereshold"));
-this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_below_thereshold"));
-if (Clazz.instanceOf (this.oldcs, jalview.schemes.AnnotationColourGradient)) {
-var acg = this.oldcs;
-this.annotations.select (acg.getAnnotation ());
-switch (acg.getAboveThreshold ()) {
-case -1:
-this.threshold.select (new Integer (0));
-break;
-case 1:
-this.threshold.select (new Integer (1));
-break;
-case 0:
-this.threshold.select (new Integer (1));
-break;
-default:
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_dont_know_thereshold_annotationcolourgradient"));
-}
-this.thresholdIsMin.setState (acg.thresholdIsMinMax);
-this.thresholdValue.setText ("" + acg.getAnnotationThreshold ());
-}this.adjusting = false;
-this.changeColour ();
-this.frame = new awt2swing.Frame ();
-this.frame.add (this);
-jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.colour_by_annotation"), 560, 175);
-this.validate ();
-}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
-Clazz.defineMethod (c$, "setDefaultMinMax",
-($fz = function () {
-this.minColour.setBackground (this.av.applet.getDefaultColourParameter ("ANNOTATIONCOLOUR_MIN", java.awt.Color.orange));
-this.maxColour.setBackground (this.av.applet.getDefaultColourParameter ("ANNOTATIONCOLOUR_MAX", java.awt.Color.red));
-}, $fz.isPrivate = true, $fz));
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationColourChooser, []);
-try {
-this.jbInit ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.minColour.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.minColour.setLabel (jalview.util.MessageManager.getString ("label.min_colour"));
-this.minColour.addActionListener (this);
-this.maxColour.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.maxColour.setLabel (jalview.util.MessageManager.getString ("label.max_colour"));
-this.maxColour.addActionListener (this);
-this.thresholdIsMin.addItemListener (this);
-this.ok.setLabel (jalview.util.MessageManager.getString ("action.ok"));
-this.ok.addActionListener (this);
-this.cancel.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
-this.cancel.addActionListener (this);
-this.defColours.setLabel (jalview.util.MessageManager.getString ("action.set_defaults"));
-this.defColours.addActionListener (this);
-this.annotations.addItemListener (this);
-this.thresholdValue.addActionListener (this);
-this.slider.setBackground (java.awt.Color.white);
-this.slider.setPreferredSize ( new java.awt.Dimension (193, 21));
-this.slider.setEnabled (false);
-this.thresholdValue.setPreferredSize ( new java.awt.Dimension (79, 22));
-this.thresholdValue.setEnabled (false);
-this.thresholdValue.setColumns (5);
-this.currentColours.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.currentColours.setLabel (jalview.util.MessageManager.getString ("label.use_original_colours"));
-this.currentColours.addItemListener (this);
-this.thresholdIsMin.setBackground (java.awt.Color.white);
-this.thresholdIsMin.setLabel (jalview.util.MessageManager.getString ("label.threshold_minmax"));
-this.setLayout (this.borderLayout1);
-this.jPanel1.setBackground (java.awt.Color.white);
-this.jPanel2.setLayout ( new java.awt.FlowLayout ());
-this.jPanel2.setBackground (java.awt.Color.white);
-this.threshold.addItemListener (this);
-this.jPanel3.setLayout ( new java.awt.FlowLayout ());
-this.jPanel3.setBackground (java.awt.Color.white);
-var jPanel4 = new awt2swing.Panel ();
-jPanel4.setLayout ( new java.awt.BorderLayout ());
-jPanel4.setBackground (java.awt.Color.white);
-this.jPanel1.add (this.ok);
-this.jPanel1.add (this.cancel);
-this.jPanel2.add (this.annotations);
-this.jPanel2.add (this.currentColours);
-this.jPanel2.add (this.minColour);
-this.jPanel2.add (this.maxColour);
-jPanel4.add (this.thresholdIsMin, "West");
-jPanel4.add (this.slider, "Center");
-jPanel4.add (this.thresholdValue, "East");
-var jPanel34 = new awt2swing.Panel ();
-jPanel34.setLayout ( new java.awt.BorderLayout ());
-jPanel34.setBackground (java.awt.Color.white);
-jPanel34.add (this.jPanel2, "North");
-jPanel34.add (this.threshold, "West");
-this.jPanel3.add (this.defColours);
-jPanel34.add (this.jPanel3, "East");
-jPanel34.add (jPanel4, "South");
-this.add (jPanel34, "Center");
-this.add (this.jPanel1, "South");
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.thresholdValue) {
-try {
-var f = new Float (this.thresholdValue.getText ()).floatValue ();
-this.slider.setValue (Clazz.floatToInt (f * 1000));
-this.adjustmentValueChanged (null);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-} else if (evt.getSource () === this.minColour) {
-this.minColour_actionPerformed (null);
-} else if (evt.getSource () === this.maxColour) {
-this.maxColour_actionPerformed (null);
-} else if (evt.getSource () === this.defColours) {
-this.defColour_actionPerformed ();
-} else if (evt.getSource () === this.ok) {
-this.changeColour ();
-this.frame.setVisible (false);
-} else if (evt.getSource () === this.cancel) {
-this.reset ();
-this.ap.paintAlignment (true);
-this.frame.setVisible (false);
-} else {
-this.changeColour ();
-}}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-if (evt.getSource () === this.currentColours) {
-if (this.currentColours.getState ()) {
-this.reset ();
-}this.maxColour.setEnabled (!this.currentColours.getState ());
-this.minColour.setEnabled (!this.currentColours.getState ());
-}this.changeColour ();
-}, "java.awt.event.ItemEvent");
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-if (!this.adjusting) {
-this.thresholdValue.setText ((this.slider.getValue () / 1000) + "");
-if (this.currentColours.getState () && !(Clazz.instanceOf (this.av.getGlobalColourScheme (), jalview.schemes.AnnotationColourGradient))) {
-this.changeColour ();
-}this.currentAnnotation.threshold.value = this.slider.getValue () / 1000;
-this.ap.paintAlignment (false);
-}}, "java.awt.event.AdjustmentEvent");
-Clazz.defineMethod (c$, "minColour_actionPerformed",
-function (newCol) {
-if (newCol != null) {
-this.minColour.setBackground (newCol);
-this.minColour.repaint ();
-this.changeColour ();
-} else {
- new jalview.appletgui.UserDefinedColours (this, "Min Colour", this.minColour.getBackground ());
-}}, "java.awt.Color");
-Clazz.defineMethod (c$, "maxColour_actionPerformed",
-function (newCol) {
-if (newCol != null) {
-this.maxColour.setBackground (newCol);
-this.maxColour.repaint ();
-this.changeColour ();
-} else {
- new jalview.appletgui.UserDefinedColours (this, "Max Colour", this.maxColour.getBackground ());
-}}, "java.awt.Color");
-Clazz.defineMethod (c$, "defColour_actionPerformed",
-function () {
-this.setDefaultMinMax ();
-this.minColour.repaint ();
-this.maxColour.repaint ();
-this.changeColour ();
-});
-Clazz.defineMethod (c$, "changeColour",
-function () {
-if (this.adjusting) {
-return;
-}this.currentAnnotation = this.av.getAlignment ().getAlignmentAnnotation ()[this.annotations.getSelectedIndex ()];
-var aboveThreshold = -1;
-if (this.threshold.getSelectedIndex () == 1) {
-aboveThreshold = 1;
-} else if (this.threshold.getSelectedIndex () == 2) {
-aboveThreshold = 0;
-}this.slider.setEnabled (true);
-this.thresholdValue.setEnabled (true);
-this.thresholdIsMin.setEnabled (true);
-if (aboveThreshold == -1) {
-this.slider.setEnabled (false);
-this.thresholdValue.setEnabled (false);
-this.thresholdIsMin.setEnabled (false);
-this.thresholdValue.setText ("");
-} else if (aboveThreshold != -1 && this.currentAnnotation.threshold == null) {
-this.currentAnnotation.setThreshold ( new jalview.datamodel.GraphLine ((this.currentAnnotation.graphMax - this.currentAnnotation.graphMin) / 2, "Threshold", java.awt.Color.black));
-}if (aboveThreshold != -1) {
-this.adjusting = true;
-this.slider.setMinimum (Clazz.floatToInt (this.currentAnnotation.graphMin * 1000));
-this.slider.setMaximum (Clazz.floatToInt (this.currentAnnotation.graphMax * 1000));
-this.slider.setValue (Clazz.floatToInt (this.currentAnnotation.threshold.value * 1000));
-this.thresholdValue.setText (this.currentAnnotation.threshold.value + "");
-this.slider.setEnabled (true);
-this.thresholdValue.setEnabled (true);
-this.adjusting = false;
-}var acg = null;
-if (this.currentColours.getState ()) {
-acg = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, this.av.getGlobalColourScheme (), aboveThreshold);
-} else {
-acg = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, this.minColour.getBackground (), this.maxColour.getBackground (), aboveThreshold);
-}if (this.currentAnnotation.graphMin == 0 && this.currentAnnotation.graphMax == 0) {
-acg.setPredefinedColours (true);
-}acg.thresholdIsMinMax = this.thresholdIsMin.getState ();
-this.av.setGlobalColourScheme (acg);
-if (this.av.getAlignment ().getGroups () != null) {
-for (var sg, $sg = this.ap.av.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (sg.cs == null) {
-continue;
-}if (this.currentColours.getState ()) {
-sg.cs = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, sg.cs, aboveThreshold);
-} else {
-sg.cs = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, this.minColour.getBackground (), this.maxColour.getBackground (), aboveThreshold);
-}}
-}this.ap.alignmentChanged ();
-this.ap.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "reset",
-function () {
-this.av.setGlobalColourScheme (this.oldcs);
-if (this.av.getAlignment ().getGroups () != null) {
-for (var sg, $sg = this.ap.av.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-var cs = this.oldgroupColours.get (sg);
-if (Clazz.instanceOf (cs, jalview.schemes.ColourSchemeI)) {
-sg.cs = cs;
-} else {
-sg.cs = null;
-}}
-}this.ap.paintAlignment (true);
-});
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-this.ap.paintAlignment (true);
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "awt2swing.Button", "$.Checkbox", "$.Choice", "$.Scrollbar", "$.TextField", "java.awt.BorderLayout", "$.FlowLayout"], "jalview.appletgui.AnnotationColourChooser", ["awt2swing.Frame", "jalview.appletgui.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.datamodel.GraphLine", "jalview.schemes.AnnotationColourGradient", "$.ColourSchemeI", "jalview.util.MessageManager", "java.awt.Color", "$.Dimension", "$.Font", "java.lang.Error", "$.Float", "java.util.Hashtable", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.frame = null;
+this.av = null;
+this.ap = null;
+this.oldcs = null;
+this.oldgroupColours = null;
+this.currentAnnotation = null;
+this.adjusting = false;
+this.annotations = null;
+this.minColour = null;
+this.maxColour = null;
+this.ok = null;
+this.cancel = null;
+this.defColours = null;
+this.jPanel1 = null;
+this.jPanel2 = null;
+this.threshold = null;
+this.flowLayout1 = null;
+this.jPanel3 = null;
+this.slider = null;
+this.thresholdValue = null;
+this.currentColours = null;
+this.borderLayout1 = null;
+this.thresholdIsMin = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AnnotationColourChooser", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.ItemListener, java.awt.event.MouseListener]);
+Clazz.prepareFields (c$, function () {
+this.annotations = new awt2swing.Choice ();
+this.minColour = new awt2swing.Button ();
+this.maxColour = new awt2swing.Button ();
+this.ok = new awt2swing.Button ();
+this.cancel = new awt2swing.Button ();
+this.defColours = new awt2swing.Button ();
+this.jPanel1 = new awt2swing.Panel ();
+this.jPanel2 = new awt2swing.Panel ();
+this.threshold = new awt2swing.Choice ();
+this.flowLayout1 = new java.awt.FlowLayout ();
+this.jPanel3 = new awt2swing.Panel ();
+this.slider = new awt2swing.Scrollbar (0);
+this.thresholdValue = new awt2swing.TextField (20);
+this.currentColours = new awt2swing.Checkbox ();
+this.borderLayout1 = new java.awt.BorderLayout ();
+this.thresholdIsMin = new awt2swing.Checkbox ();
+});
+Clazz.makeConstructor (c$,
+function (av, ap) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationColourChooser, []);
+try {
+this.jbInit ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+this.oldcs = av.getGlobalColourScheme ();
+if (av.getAlignment ().getGroups () != null) {
+this.oldgroupColours = new java.util.Hashtable ();
+for (var sg, $sg = ap.av.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (sg.cs != null) {
+this.oldgroupColours.put (sg, sg.cs);
+} else {
+this.oldgroupColours.put (sg, "null");
+}}
+}this.av = av;
+this.ap = ap;
+this.slider.addAdjustmentListener (this);
+this.slider.addMouseListener (this);
+if (av.getAlignment ().getAlignmentAnnotation () == null) {
+return;
+}this.setDefaultMinMax ();
+this.adjusting = true;
+if (Clazz.instanceOf (this.oldcs, jalview.schemes.AnnotationColourGradient)) {
+var acg = this.oldcs;
+this.currentColours.setState (acg.isPredefinedColours () || acg.getBaseColour () != null);
+if (!acg.isPredefinedColours () && acg.getBaseColour () == null) {
+this.minColour.setBackground (acg.getMinColour ());
+this.maxColour.setBackground (acg.getMaxColour ());
+}}var list = new java.util.Vector ();
+var index = 1;
+for (var i = 0; i < av.getAlignment ().getAlignmentAnnotation ().length; i++) {
+var label = av.getAlignment ().getAlignmentAnnotation ()[i].label;
+if (!list.contains (label)) {
+list.addElement (label);
+} else {
+list.addElement (label + "_" + (index++));
+}}
+for (var i = 0; i < list.size (); i++) {
+this.annotations.addItem (list.elementAt (i).toString ());
+}
+this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_no_thereshold"));
+this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_above_thereshold"));
+this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_below_thereshold"));
+if (Clazz.instanceOf (this.oldcs, jalview.schemes.AnnotationColourGradient)) {
+var acg = this.oldcs;
+this.annotations.select (acg.getAnnotation ());
+switch (acg.getAboveThreshold ()) {
+case -1:
+this.threshold.select (new Integer (0));
+break;
+case 1:
+this.threshold.select (new Integer (1));
+break;
+case 0:
+this.threshold.select (new Integer (1));
+break;
+default:
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_dont_know_thereshold_annotationcolourgradient"));
+}
+this.thresholdIsMin.setState (acg.thresholdIsMinMax);
+this.thresholdValue.setText ("" + acg.getAnnotationThreshold ());
+}this.adjusting = false;
+this.changeColour ();
+this.frame = new awt2swing.Frame ();
+this.frame.add (this);
+jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.colour_by_annotation"), 560, 175);
+this.validate ();
+}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
+Clazz.defineMethod (c$, "setDefaultMinMax",
+($fz = function () {
+this.minColour.setBackground (this.av.applet.getDefaultColourParameter ("ANNOTATIONCOLOUR_MIN", java.awt.Color.orange));
+this.maxColour.setBackground (this.av.applet.getDefaultColourParameter ("ANNOTATIONCOLOUR_MAX", java.awt.Color.red));
+}, $fz.isPrivate = true, $fz));
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationColourChooser, []);
+try {
+this.jbInit ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.minColour.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.minColour.setLabel (jalview.util.MessageManager.getString ("label.min_colour"));
+this.minColour.addActionListener (this);
+this.maxColour.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.maxColour.setLabel (jalview.util.MessageManager.getString ("label.max_colour"));
+this.maxColour.addActionListener (this);
+this.thresholdIsMin.addItemListener (this);
+this.ok.setLabel (jalview.util.MessageManager.getString ("action.ok"));
+this.ok.addActionListener (this);
+this.cancel.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
+this.cancel.addActionListener (this);
+this.defColours.setLabel (jalview.util.MessageManager.getString ("action.set_defaults"));
+this.defColours.addActionListener (this);
+this.annotations.addItemListener (this);
+this.thresholdValue.addActionListener (this);
+this.slider.setBackground (java.awt.Color.white);
+this.slider.setPreferredSize ( new java.awt.Dimension (193, 21));
+this.slider.setEnabled (false);
+this.thresholdValue.setPreferredSize ( new java.awt.Dimension (79, 22));
+this.thresholdValue.setEnabled (false);
+this.thresholdValue.setColumns (5);
+this.currentColours.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.currentColours.setLabel (jalview.util.MessageManager.getString ("label.use_original_colours"));
+this.currentColours.addItemListener (this);
+this.thresholdIsMin.setBackground (java.awt.Color.white);
+this.thresholdIsMin.setLabel (jalview.util.MessageManager.getString ("label.threshold_minmax"));
+this.setLayout (this.borderLayout1);
+this.jPanel1.setBackground (java.awt.Color.white);
+this.jPanel2.setLayout ( new java.awt.FlowLayout ());
+this.jPanel2.setBackground (java.awt.Color.white);
+this.threshold.addItemListener (this);
+this.jPanel3.setLayout ( new java.awt.FlowLayout ());
+this.jPanel3.setBackground (java.awt.Color.white);
+var jPanel4 = new awt2swing.Panel ();
+jPanel4.setLayout ( new java.awt.BorderLayout ());
+jPanel4.setBackground (java.awt.Color.white);
+this.jPanel1.add (this.ok);
+this.jPanel1.add (this.cancel);
+this.jPanel2.add (this.annotations);
+this.jPanel2.add (this.currentColours);
+this.jPanel2.add (this.minColour);
+this.jPanel2.add (this.maxColour);
+jPanel4.add (this.thresholdIsMin, "West");
+jPanel4.add (this.slider, "Center");
+jPanel4.add (this.thresholdValue, "East");
+var jPanel34 = new awt2swing.Panel ();
+jPanel34.setLayout ( new java.awt.BorderLayout ());
+jPanel34.setBackground (java.awt.Color.white);
+jPanel34.add (this.jPanel2, "North");
+jPanel34.add (this.threshold, "West");
+this.jPanel3.add (this.defColours);
+jPanel34.add (this.jPanel3, "East");
+jPanel34.add (jPanel4, "South");
+this.add (jPanel34, "Center");
+this.add (this.jPanel1, "South");
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.thresholdValue) {
+try {
+var f = new Float (this.thresholdValue.getText ()).floatValue ();
+this.slider.setValue (Clazz.floatToInt (f * 1000));
+this.adjustmentValueChanged (null);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+} else if (evt.getSource () === this.minColour) {
+this.minColour_actionPerformed (null);
+} else if (evt.getSource () === this.maxColour) {
+this.maxColour_actionPerformed (null);
+} else if (evt.getSource () === this.defColours) {
+this.defColour_actionPerformed ();
+} else if (evt.getSource () === this.ok) {
+this.changeColour ();
+this.frame.setVisible (false);
+} else if (evt.getSource () === this.cancel) {
+this.reset ();
+this.ap.paintAlignment (true);
+this.frame.setVisible (false);
+} else {
+this.changeColour ();
+}}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+if (evt.getSource () === this.currentColours) {
+if (this.currentColours.getState ()) {
+this.reset ();
+}this.maxColour.setEnabled (!this.currentColours.getState ());
+this.minColour.setEnabled (!this.currentColours.getState ());
+}this.changeColour ();
+}, "java.awt.event.ItemEvent");
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+if (!this.adjusting) {
+this.thresholdValue.setText ((this.slider.getValue () / 1000) + "");
+if (this.currentColours.getState () && !(Clazz.instanceOf (this.av.getGlobalColourScheme (), jalview.schemes.AnnotationColourGradient))) {
+this.changeColour ();
+}this.currentAnnotation.threshold.value = this.slider.getValue () / 1000;
+this.ap.paintAlignment (false);
+}}, "java.awt.event.AdjustmentEvent");
+Clazz.defineMethod (c$, "minColour_actionPerformed",
+function (newCol) {
+if (newCol != null) {
+this.minColour.setBackground (newCol);
+this.minColour.repaint ();
+this.changeColour ();
+} else {
+ new jalview.appletgui.UserDefinedColours (this, "Min Colour", this.minColour.getBackground ());
+}}, "java.awt.Color");
+Clazz.defineMethod (c$, "maxColour_actionPerformed",
+function (newCol) {
+if (newCol != null) {
+this.maxColour.setBackground (newCol);
+this.maxColour.repaint ();
+this.changeColour ();
+} else {
+ new jalview.appletgui.UserDefinedColours (this, "Max Colour", this.maxColour.getBackground ());
+}}, "java.awt.Color");
+Clazz.defineMethod (c$, "defColour_actionPerformed",
+function () {
+this.setDefaultMinMax ();
+this.minColour.repaint ();
+this.maxColour.repaint ();
+this.changeColour ();
+});
+Clazz.defineMethod (c$, "changeColour",
+function () {
+if (this.adjusting) {
+return;
+}this.currentAnnotation = this.av.getAlignment ().getAlignmentAnnotation ()[this.annotations.getSelectedIndex ()];
+var aboveThreshold = -1;
+if (this.threshold.getSelectedIndex () == 1) {
+aboveThreshold = 1;
+} else if (this.threshold.getSelectedIndex () == 2) {
+aboveThreshold = 0;
+}this.slider.setEnabled (true);
+this.thresholdValue.setEnabled (true);
+this.thresholdIsMin.setEnabled (true);
+if (aboveThreshold == -1) {
+this.slider.setEnabled (false);
+this.thresholdValue.setEnabled (false);
+this.thresholdIsMin.setEnabled (false);
+this.thresholdValue.setText ("");
+} else if (aboveThreshold != -1 && this.currentAnnotation.threshold == null) {
+this.currentAnnotation.setThreshold ( new jalview.datamodel.GraphLine ((this.currentAnnotation.graphMax - this.currentAnnotation.graphMin) / 2, "Threshold", java.awt.Color.black));
+}if (aboveThreshold != -1) {
+this.adjusting = true;
+this.slider.setMinimum (Clazz.floatToInt (this.currentAnnotation.graphMin * 1000));
+this.slider.setMaximum (Clazz.floatToInt (this.currentAnnotation.graphMax * 1000));
+this.slider.setValue (Clazz.floatToInt (this.currentAnnotation.threshold.value * 1000));
+this.thresholdValue.setText (this.currentAnnotation.threshold.value + "");
+this.slider.setEnabled (true);
+this.thresholdValue.setEnabled (true);
+this.adjusting = false;
+}var acg = null;
+if (this.currentColours.getState ()) {
+acg = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, this.av.getGlobalColourScheme (), aboveThreshold);
+} else {
+acg = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, this.minColour.getBackground (), this.maxColour.getBackground (), aboveThreshold);
+}if (this.currentAnnotation.graphMin == 0 && this.currentAnnotation.graphMax == 0) {
+acg.setPredefinedColours (true);
+}acg.thresholdIsMinMax = this.thresholdIsMin.getState ();
+this.av.setGlobalColourScheme (acg);
+if (this.av.getAlignment ().getGroups () != null) {
+for (var sg, $sg = this.ap.av.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (sg.cs == null) {
+continue;
+}if (this.currentColours.getState ()) {
+sg.cs = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, sg.cs, aboveThreshold);
+} else {
+sg.cs = new jalview.schemes.AnnotationColourGradient (this.currentAnnotation, this.minColour.getBackground (), this.maxColour.getBackground (), aboveThreshold);
+}}
+}this.ap.alignmentChanged ();
+this.ap.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "reset",
+function () {
+this.av.setGlobalColourScheme (this.oldcs);
+if (this.av.getAlignment ().getGroups () != null) {
+for (var sg, $sg = this.ap.av.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+var cs = this.oldgroupColours.get (sg);
+if (Clazz.instanceOf (cs, jalview.schemes.ColourSchemeI)) {
+sg.cs = cs;
+} else {
+sg.cs = null;
+}}
+}this.ap.paintAlignment (true);
+});
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+this.ap.paintAlignment (true);
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+});
diff --git a/bin/jalview/appletgui/AnnotationColumnChooser.class b/bin/jalview/appletgui/AnnotationColumnChooser.class
index 4cce256..27e6c60 100644
Binary files a/bin/jalview/appletgui/AnnotationColumnChooser.class and b/bin/jalview/appletgui/AnnotationColumnChooser.class differ
diff --git a/bin/jalview/appletgui/AnnotationColumnChooser.js b/bin/jalview/appletgui/AnnotationColumnChooser.js
index f50bb0c..340a161 100644
--- a/bin/jalview/appletgui/AnnotationColumnChooser.js
+++ b/bin/jalview/appletgui/AnnotationColumnChooser.js
@@ -1,622 +1,622 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "jalview.appletgui.AnnotationRowFilter", "$.TitledPanel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "awt2swing.Checkbox", "$.Choice", "$.TextField", "java.awt.BorderLayout", "$.CardLayout"], "jalview.appletgui.AnnotationColumnChooser", ["awt2swing.Frame", "jalview.bin.JalviewLite", "jalview.datamodel.ColumnSelection", "$.GraphLine", "jalview.util.MessageManager", "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", "java.awt.Color", "$.Dimension", "java.awt.event.MouseAdapter", "$.TextListener", "java.lang.Float", "java.util.Vector", "javax.swing.JPanel"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.annotations = null;
-this.actionPanel = null;
-this.thresholdPanel = null;
-this.switchableViewsPanel = null;
-this.switchableViewsLayout = null;
-this.noGraphFilterView = null;
-this.graphFilterView = null;
-this.annotationComboBoxPanel = null;
-this.borderLayout1 = null;
-this.gBorderLayout = null;
-this.ngBorderLayout = null;
-this.threshold = null;
-this.gStructureFilterPanel = null;
-this.ngStructureFilterPanel = null;
-this.currentStructureFilterPanel = null;
-this.currentSearchPanel = null;
-this.gSearchPanel = null;
-this.ngSearchPanel = null;
-this.currentFurtherActionPanel = null;
-this.gFurtherActionPanel = null;
-this.ngFurtherActionPanel = null;
-this.actionOption = 1;
-this.oldColumnSelection = null;
-if (!Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel")) {
-jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$FurtherActionPanel$ ();
-}
-if (!Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel")) {
-jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$StructureFilterPanel$ ();
-}
-if (!Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser.SearchPanel")) {
-jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$SearchPanel$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AnnotationColumnChooser", jalview.appletgui.AnnotationRowFilter, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.ItemListener, java.awt.event.MouseListener]);
-Clazz.prepareFields (c$, function () {
-this.annotations = new awt2swing.Choice ();
-this.actionPanel = new awt2swing.Panel ();
-this.thresholdPanel = new jalview.appletgui.TitledPanel ();
-this.switchableViewsPanel = new awt2swing.Panel ( new java.awt.CardLayout ());
-this.switchableViewsLayout = (this.switchableViewsPanel.getLayout ());
-this.noGraphFilterView = new awt2swing.Panel ();
-this.graphFilterView = new awt2swing.Panel ();
-this.annotationComboBoxPanel = new awt2swing.Panel ();
-this.borderLayout1 = new java.awt.BorderLayout ();
-this.gBorderLayout = new java.awt.BorderLayout ();
-this.ngBorderLayout = new java.awt.BorderLayout ();
-this.threshold = new awt2swing.Choice ();
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser, []);
-try {
-this.jbInit ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-});
-Clazz.makeConstructor (c$,
-function (av, ap) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser, [av, ap]);
-this.frame = new awt2swing.Frame ();
-this.frame.add (this);
-jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.select_by_annotation"), 520, 215);
-this.slider.addAdjustmentListener (this);
-this.slider.addMouseListener (this);
-if (av.getAlignment ().getAlignmentAnnotation () == null) {
-return;
-}this.setOldColumnSelection (av.getColumnSelection ());
-this.adjusting = true;
-var list = new java.util.Vector ();
-var index = 1;
-for (var i = 0; i < av.getAlignment ().getAlignmentAnnotation ().length; i++) {
-var label = av.getAlignment ().getAlignmentAnnotation ()[i].label;
-if (!list.contains (label)) {
-list.addElement (label);
-} else {
-list.addElement (label + "_" + (index++));
-}}
-for (var i = 0; i < list.size (); i++) {
-this.annotations.addItem (list.elementAt (i).toString ());
-}
-this.populateThresholdComboBox (this.threshold);
-if (av.getAnnotationColumnSelectionState () != null) {
-this.currentSearchPanel = av.getAnnotationColumnSelectionState ().getCurrentSearchPanel ();
-this.currentStructureFilterPanel = av.getAnnotationColumnSelectionState ().getCurrentStructureFilterPanel ();
-this.annotations.select (new Integer (av.getAnnotationColumnSelectionState ().getAnnotations ().getSelectedIndex ()));
-this.threshold.select (new Integer (av.getAnnotationColumnSelectionState ().getThreshold ().getSelectedIndex ()));
-this.actionOption = av.getAnnotationColumnSelectionState ().getActionOption ();
-}try {
-this.jbInit ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-this.adjusting = false;
-this.updateView ();
-this.frame.invalidate ();
-this.frame.pack ();
-}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.ok.setLabel (jalview.util.MessageManager.getString ("action.ok"));
-this.cancel.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
-this.thresholdValue.setEnabled (false);
-this.thresholdValue.setColumns (7);
-this.ok.addActionListener (this);
-this.cancel.addActionListener (this);
-this.annotations.addItemListener (this);
-this.thresholdValue.addActionListener (this);
-this.threshold.addItemListener (this);
-this.slider.setBackground (java.awt.Color.white);
-this.slider.setEnabled (false);
-this.slider.setPreferredSize ( new java.awt.Dimension (100, 32));
-this.thresholdPanel.setBackground (java.awt.Color.white);
-this.actionPanel.setBackground (java.awt.Color.white);
-this.graphFilterView.setLayout (this.gBorderLayout);
-this.graphFilterView.setBackground (java.awt.Color.white);
-this.noGraphFilterView.setLayout (this.ngBorderLayout);
-this.noGraphFilterView.setBackground (java.awt.Color.white);
-this.annotationComboBoxPanel.setBackground (java.awt.Color.white);
-this.gSearchPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.SearchPanel, this, null, this);
-this.ngSearchPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.SearchPanel, this, null, this);
-this.gFurtherActionPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel, this, null, this);
-this.ngFurtherActionPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel, this, null, this);
-this.gStructureFilterPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel, this, null, this);
-this.ngStructureFilterPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel, this, null, this);
-this.thresholdPanel.setTitle ("Threshold Filter");
-this.thresholdPanel.add (this.getThreshold ());
-this.thresholdPanel.add (this.slider);
-this.thresholdPanel.add (this.thresholdValue);
-this.actionPanel.add (this.ok);
-this.actionPanel.add (this.cancel);
-var staticPanel = new javax.swing.JPanel ();
-staticPanel.setLayout ( new java.awt.BorderLayout ());
-staticPanel.setBackground (java.awt.Color.white);
-staticPanel.add (this.gSearchPanel, "North");
-staticPanel.add (this.gStructureFilterPanel, "South");
-this.graphFilterView.add (staticPanel, "North");
-this.graphFilterView.add (this.thresholdPanel, "Center");
-this.graphFilterView.add (this.gFurtherActionPanel, "South");
-this.noGraphFilterView.add (this.ngSearchPanel, "First");
-this.noGraphFilterView.add (this.ngStructureFilterPanel, "Center");
-this.noGraphFilterView.add (this.ngFurtherActionPanel, "Center");
-this.annotationComboBoxPanel.add (this.getAnnotations ());
-this.switchableViewsPanel.add (this.noGraphFilterView, jalview.appletgui.AnnotationColumnChooser.NO_GRAPH_VIEW);
-this.switchableViewsPanel.add (this.graphFilterView, jalview.appletgui.AnnotationColumnChooser.GRAPH_VIEW);
-this.setLayout (this.borderLayout1);
-this.add (this.annotationComboBoxPanel, "First");
-this.add (this.switchableViewsPanel, "Center");
-this.add (this.actionPanel, "South");
-this.selectedAnnotationChanged ();
-this.validate ();
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "reset",
-function () {
-if (this.getOldColumnSelection () != null) {
-this.av.getColumnSelection ().clear ();
-if (this.av.getAnnotationColumnSelectionState () != null) {
-var oldSelection = this.av.getAnnotationColumnSelectionState ().getOldColumnSelection ();
-if (oldSelection != null && oldSelection.getHiddenColumns () != null && !oldSelection.getHiddenColumns ().isEmpty ()) {
-for (var itr = oldSelection.getHiddenColumns ().iterator (); itr.hasNext (); ) {
-var positions = itr.next ();
-this.av.hideColumns (positions[0], positions[1]);
-}
-}this.av.setColumnSelection (oldSelection);
-}this.ap.paintAlignment (true);
-}});
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-if (!this.adjusting) {
-this.thresholdValue.setText ((this.slider.getValue () / 1000) + "");
-this.valueChanged (!this.sliderDragging);
-}}, "java.awt.event.AdjustmentEvent");
-Clazz.defineMethod (c$, "addSliderMouseListeners",
-function () {
-this.slider.addMouseListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser$1") ? 0 : jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser$1, this, null)));
-});
-Clazz.overrideMethod (c$, "valueChanged",
-function (updateAllAnnotation) {
-if (this.slider.isEnabled ()) {
-this.getCurrentAnnotation ().threshold.value = this.slider.getValue () / 1000;
-this.updateView ();
-this.ap.paintAlignment (false);
-}}, "~B");
-Clazz.defineMethod (c$, "getThreshold",
-function () {
-return this.threshold;
-});
-Clazz.defineMethod (c$, "setThreshold",
-function (threshold) {
-this.threshold = threshold;
-}, "awt2swing.Choice");
-Clazz.defineMethod (c$, "getAnnotations",
-function () {
-return this.annotations;
-});
-Clazz.defineMethod (c$, "setAnnotations",
-function (annotations) {
-this.annotations = annotations;
-}, "awt2swing.Choice");
-Clazz.overrideMethod (c$, "updateView",
-function () {
-if (this.adjusting) {
-return;
-}var filterParams = new jalview.viewmodel.annotationfilter.AnnotationFilterParameter ();
-this.setCurrentAnnotation (this.av.getAlignment ().getAlignmentAnnotation ()[this.getAnnotations ().getSelectedIndex ()]);
-var selectedThresholdItem = this.getSelectedThresholdItem (this.getThreshold ().getSelectedIndex ());
-this.slider.setEnabled (true);
-this.thresholdValue.setEnabled (true);
-if (selectedThresholdItem == -1) {
-this.slider.setEnabled (false);
-this.thresholdValue.setEnabled (false);
-this.thresholdValue.setText ("");
-} else if (selectedThresholdItem != -1) {
-if (this.getCurrentAnnotation ().threshold == null) {
-this.getCurrentAnnotation ().setThreshold ( new jalview.datamodel.GraphLine ((this.getCurrentAnnotation ().graphMax - this.getCurrentAnnotation ().graphMin) / 2, "Threshold", java.awt.Color.black));
-}this.adjusting = true;
-var range = this.getCurrentAnnotation ().graphMax * 1000 - this.getCurrentAnnotation ().graphMin * 1000;
-this.slider.setMinimum (Clazz.floatToInt (this.getCurrentAnnotation ().graphMin * 1000));
-this.slider.setMaximum (Clazz.floatToInt (this.getCurrentAnnotation ().graphMax * 1000));
-this.slider.setValue (Clazz.floatToInt (this.getCurrentAnnotation ().threshold.value * 1000));
-this.thresholdValue.setText (this.getCurrentAnnotation ().threshold.value + "");
-this.slider.setEnabled (true);
-this.thresholdValue.setEnabled (true);
-this.adjusting = false;
-filterParams.setThresholdType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.NO_THRESHOLD);
-if (this.getCurrentAnnotation ().graph != 0) {
-filterParams.setThresholdValue (this.getCurrentAnnotation ().threshold.value);
-if (selectedThresholdItem == 1) {
-filterParams.setThresholdType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD);
-} else if (selectedThresholdItem == 0) {
-filterParams.setThresholdType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD);
-}}}if (this.currentStructureFilterPanel != null) {
-if (this.currentStructureFilterPanel.alphaHelix.getState ()) {
-filterParams.setFilterAlphaHelix (true);
-}if (this.currentStructureFilterPanel.betaStrand.getState ()) {
-filterParams.setFilterBetaSheet (true);
-}if (this.currentStructureFilterPanel.turn.getState ()) {
-filterParams.setFilterTurn (true);
-}}if (this.currentSearchPanel != null) {
-if (!this.currentSearchPanel.searchBox.getText ().isEmpty ()) {
-this.currentSearchPanel.description.setEnabled (true);
-this.currentSearchPanel.displayName.setEnabled (true);
-filterParams.setRegexString (this.currentSearchPanel.searchBox.getText ());
-if (this.currentSearchPanel.displayName.getState ()) {
-filterParams.addRegexSearchField (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING);
-}if (this.currentSearchPanel.description.getState ()) {
-filterParams.addRegexSearchField (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION);
-}} else {
-this.currentSearchPanel.description.setEnabled (false);
-this.currentSearchPanel.displayName.setEnabled (false);
-}}this.av.getColumnSelection ().filterAnnotations (this.getCurrentAnnotation ().annotations, filterParams);
-this.av.showAllHiddenColumns ();
-if (this.getActionOption () == jalview.appletgui.AnnotationColumnChooser.ACTION_OPTION_HIDE) {
-this.av.hideSelectedColumns ();
-}filterParams = null;
-this.av.setAnnotationColumnSelectionState (this);
-this.ap.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "getOldColumnSelection",
-function () {
-return this.oldColumnSelection;
-});
-Clazz.defineMethod (c$, "setOldColumnSelection",
-function (currentColumnSelection) {
-if (currentColumnSelection != null) {
-this.oldColumnSelection = new jalview.datamodel.ColumnSelection (currentColumnSelection);
-}}, "jalview.datamodel.ColumnSelection");
-Clazz.defineMethod (c$, "getCurrentFutherActionPanel",
-function () {
-return this.currentFurtherActionPanel;
-});
-Clazz.defineMethod (c$, "setCurrentFutherActionPanel",
-function (currentFutherActionPanel) {
-this.currentFurtherActionPanel = currentFutherActionPanel;
-}, "jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel");
-Clazz.defineMethod (c$, "getCurrentSearchPanel",
-function () {
-return this.currentSearchPanel;
-});
-Clazz.defineMethod (c$, "setCurrentSearchPanel",
-function (currentSearchPanel) {
-this.currentSearchPanel = currentSearchPanel;
-}, "jalview.appletgui.AnnotationColumnChooser.SearchPanel");
-Clazz.defineMethod (c$, "getActionOption",
-function () {
-return this.actionOption;
-});
-Clazz.defineMethod (c$, "setActionOption",
-function (actionOption) {
-this.actionOption = actionOption;
-}, "~N");
-Clazz.defineMethod (c$, "getCurrentStructureFilterPanel",
-function () {
-return this.currentStructureFilterPanel;
-});
-Clazz.defineMethod (c$, "setCurrentStructureFilterPanel",
-function (currentStructureFilterPanel) {
-this.currentStructureFilterPanel = currentStructureFilterPanel;
-}, "jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-if (e.getSource () === this.annotations) {
-this.selectedAnnotationChanged ();
-} else if (e.getSource () === this.threshold) {
-this.threshold_actionPerformed (null);
-}}, "java.awt.event.ItemEvent");
-Clazz.defineMethod (c$, "selectedAnnotationChanged",
-function () {
-var currentView = jalview.appletgui.AnnotationColumnChooser.NO_GRAPH_VIEW;
-if (this.av.getAlignment ().getAlignmentAnnotation ()[this.getAnnotations ().getSelectedIndex ()].graph != 0) {
-currentView = jalview.appletgui.AnnotationColumnChooser.GRAPH_VIEW;
-}this.gSearchPanel.syncState ();
-this.gFurtherActionPanel.syncState ();
-this.gStructureFilterPanel.syncState ();
-this.ngSearchPanel.syncState ();
-this.ngFurtherActionPanel.syncState ();
-this.ngStructureFilterPanel.syncState ();
-this.switchableViewsLayout.show (this.switchableViewsPanel, currentView);
-this.updateView ();
-});
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.thresholdValue) {
-try {
-var f = new Float (this.thresholdValue.getText ()).floatValue ();
-this.slider.setValue (Clazz.floatToInt (f * 1000));
-this.adjustmentValueChanged (null);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-} else if (evt.getSource () === this.ok) {
-this.ok_actionPerformed (null);
-} else if (evt.getSource () === this.cancel) {
-this.cancel_actionPerformed (null);
-} else if (evt.getSource () === this.thresholdValue) {
-this.thresholdValue_actionPerformed (null);
-} else {
-this.updateView ();
-}}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (e) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (e) {
-if (e.getSource () === this.slider) {
-this.updateView ();
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (e) {
-if (e.getSource () === this.slider) {
-this.updateView ();
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (e) {
-if (e.getSource () === this.slider) {
-this.updateView ();
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (e) {
-if (e.getSource () === this.slider) {
-this.updateView ();
-}}, "java.awt.event.MouseEvent");
-c$.$AnnotationColumnChooser$FurtherActionPanel$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.aColChooser = null;
-this.furtherAction = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.AnnotationColumnChooser, "FurtherActionPanel", awt2swing.Panel, java.awt.event.ItemListener);
-Clazz.prepareFields (c$, function () {
-this.furtherAction = new awt2swing.Choice ();
-});
-Clazz.makeConstructor (c$,
-function (a) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel, []);
-this.aColChooser = a;
-this.furtherAction.addItem ("Select");
-this.furtherAction.addItem ("Hide");
-this.furtherAction.addItemListener (this);
-this.syncState ();
-this.add (this.furtherAction);
-}, "jalview.appletgui.AnnotationColumnChooser");
-Clazz.defineMethod (c$, "syncState",
-function () {
-if (this.aColChooser.getActionOption () == jalview.appletgui.AnnotationColumnChooser.ACTION_OPTION_HIDE) {
-this.furtherAction.select ("Hide");
-} else {
-this.furtherAction.select ("Select");
-}});
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (a) {
-this.aColChooser.setCurrentFutherActionPanel (this);
-if (this.furtherAction.getSelectedItem ().toString ().equalsIgnoreCase ("Select")) {
-this.b$["jalview.appletgui.AnnotationColumnChooser"].setActionOption (1);
-this.b$["jalview.appletgui.AnnotationColumnChooser"].updateView ();
-} else {
-this.b$["jalview.appletgui.AnnotationColumnChooser"].setActionOption (jalview.appletgui.AnnotationColumnChooser.ACTION_OPTION_HIDE);
-this.b$["jalview.appletgui.AnnotationColumnChooser"].updateView ();
-}}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationColumnChooser$StructureFilterPanel$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.aColChooser = null;
-this.alphaHelix = null;
-this.betaStrand = null;
-this.turn = null;
-this.all = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.AnnotationColumnChooser, "StructureFilterPanel", jalview.appletgui.TitledPanel, java.awt.event.ItemListener);
-Clazz.prepareFields (c$, function () {
-this.alphaHelix = new awt2swing.Checkbox ();
-this.betaStrand = new awt2swing.Checkbox ();
-this.turn = new awt2swing.Checkbox ();
-this.all = new awt2swing.Checkbox ();
-});
-Clazz.makeConstructor (c$,
-function (a) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel, []);
-this.aColChooser = a;
-this.alphaHelix.setLabel (jalview.util.MessageManager.getString ("label.alpha_helix"));
-this.alphaHelix.setBackground (java.awt.Color.white);
-this.alphaHelix.addItemListener (this);
-this.betaStrand.setLabel (jalview.util.MessageManager.getString ("label.beta_strand"));
-this.betaStrand.setBackground (java.awt.Color.white);
-this.betaStrand.addItemListener (this);
-this.turn.setLabel (jalview.util.MessageManager.getString ("label.turn"));
-this.turn.setBackground (java.awt.Color.white);
-this.turn.addItemListener (this);
-this.all.setLabel (jalview.util.MessageManager.getString ("label.select_all"));
-this.all.setBackground (java.awt.Color.white);
-this.all.addItemListener (this);
-this.setBackground (java.awt.Color.white);
-this.setTitle ("Structure Filter");
-this.add (this.all);
-this.add (this.alphaHelix);
-this.add (this.betaStrand);
-this.add (this.turn);
-}, "jalview.appletgui.AnnotationColumnChooser");
-Clazz.defineMethod (c$, "alphaHelix_actionPerformed",
-function () {
-this.updateSelectAllState ();
-this.aColChooser.setCurrentStructureFilterPanel (this);
-this.aColChooser.updateView ();
-});
-Clazz.defineMethod (c$, "betaStrand_actionPerformed",
-function () {
-this.updateSelectAllState ();
-this.aColChooser.setCurrentStructureFilterPanel (this);
-this.aColChooser.updateView ();
-});
-Clazz.defineMethod (c$, "turn_actionPerformed",
-function () {
-this.updateSelectAllState ();
-this.aColChooser.setCurrentStructureFilterPanel (this);
-this.aColChooser.updateView ();
-});
-Clazz.defineMethod (c$, "all_actionPerformed",
-function () {
-if (this.all.getState ()) {
-this.alphaHelix.setState (true);
-this.betaStrand.setState (true);
-this.turn.setState (true);
-} else {
-this.alphaHelix.setState (false);
-this.betaStrand.setState (false);
-this.turn.setState (false);
-}this.aColChooser.setCurrentStructureFilterPanel (this);
-this.aColChooser.updateView ();
-});
-Clazz.defineMethod (c$, "updateSelectAllState",
-function () {
-if (this.alphaHelix.getState () && this.betaStrand.getState () && this.turn.getState ()) {
-this.all.setState (true);
-} else {
-this.all.setState (false);
-}});
-Clazz.defineMethod (c$, "syncState",
-function () {
-var a = this.aColChooser.getCurrentStructureFilterPanel ();
-if (a != null) {
-this.alphaHelix.setState (a.alphaHelix.getState ());
-this.betaStrand.setState (a.betaStrand.getState ());
-this.turn.setState (a.turn.getState ());
-if (a.all.getState ()) {
-this.all.setState (true);
-this.alphaHelix.setState (true);
-this.betaStrand.setState (true);
-this.turn.setState (true);
-}}});
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (a) {
-if (a.getSource () === this.alphaHelix) {
-this.alphaHelix_actionPerformed ();
-} else if (a.getSource () === this.betaStrand) {
-this.betaStrand_actionPerformed ();
-} else if (a.getSource () === this.turn) {
-this.turn_actionPerformed ();
-} else if (a.getSource () === this.all) {
-this.all_actionPerformed ();
-}}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationColumnChooser$SearchPanel$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.aColChooser = null;
-this.displayName = null;
-this.description = null;
-this.searchBox = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.AnnotationColumnChooser, "SearchPanel", jalview.appletgui.TitledPanel, java.awt.event.ItemListener);
-Clazz.prepareFields (c$, function () {
-this.displayName = new awt2swing.Checkbox ();
-this.description = new awt2swing.Checkbox ();
-this.searchBox = new awt2swing.TextField (10);
-});
-Clazz.makeConstructor (c$,
-function (a) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser.SearchPanel, []);
-this.aColChooser = a;
-this.searchBox.addTextListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser$SearchPanel$1") ? 0 : jalview.appletgui.AnnotationColumnChooser.SearchPanel.$AnnotationColumnChooser$SearchPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser$SearchPanel$1, this, null)));
-this.displayName.setLabel (jalview.util.MessageManager.getString ("label.display_name"));
-this.displayName.setEnabled (false);
-this.displayName.addItemListener (this);
-this.description.setLabel (jalview.util.MessageManager.getString ("label.description"));
-this.description.setEnabled (false);
-this.description.addItemListener (this);
-this.setTitle ("Search Filter");
-this.syncState ();
-this.add (this.searchBox);
-this.add (this.displayName);
-this.add (this.description);
-}, "jalview.appletgui.AnnotationColumnChooser");
-Clazz.defineMethod (c$, "displayNameCheckboxAction",
-function () {
-this.aColChooser.setCurrentSearchPanel (this);
-this.aColChooser.updateView ();
-});
-Clazz.defineMethod (c$, "discriptionCheckboxAction",
-function () {
-this.aColChooser.setCurrentSearchPanel (this);
-this.aColChooser.updateView ();
-});
-Clazz.defineMethod (c$, "searchStringAction",
-function () {
-this.aColChooser.setCurrentSearchPanel (this);
-this.aColChooser.updateView ();
-});
-Clazz.defineMethod (c$, "syncState",
-function () {
-var a = this.aColChooser.getCurrentSearchPanel ();
-if (a != null) {
-this.description.setEnabled (a.description.isEnabled ());
-this.description.setState (a.description.getState ());
-this.displayName.setEnabled (a.displayName.isEnabled ());
-this.displayName.setState (a.displayName.getState ());
-this.searchBox.setText (a.searchBox.getText ());
-}});
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (a) {
-if (a.getSource () === this.displayName) {
-this.displayNameCheckboxAction ();
-} else if (a.getSource () === this.description) {
-this.discriptionCheckboxAction ();
-}}, "java.awt.event.ItemEvent");
-c$.$AnnotationColumnChooser$SearchPanel$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationColumnChooser$SearchPanel$1", null, java.awt.event.TextListener);
-Clazz.overrideMethod (c$, "textValueChanged",
-function (a) {
-this.b$["jalview.appletgui.AnnotationColumnChooser.SearchPanel"].searchStringAction ();
-}, "java.awt.event.TextEvent");
-c$ = Clazz.p0p ();
-};
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationColumnChooser$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationColumnChooser$1", java.awt.event.MouseAdapter);
-Clazz.defineMethod (c$, "mousePressed",
-function (e) {
-this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging = true;
-Clazz.superCall (this, jalview.appletgui.AnnotationColumnChooser$1, "mousePressed", [e]);
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "mouseDragged",
-function (e) {
-this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging = true;
-Clazz.superCall (this, jalview.appletgui.AnnotationColumnChooser$1, "mouseDragged", [e]);
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-if (this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging) {
-this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging = false;
-this.b$["jalview.appletgui.AnnotationColumnChooser"].valueChanged (true);
-}this.b$["jalview.appletgui.AnnotationColumnChooser"].ap.paintAlignment (true);
-}, "java.awt.event.MouseEvent");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"ACTION_OPTION_SELECT", 1,
-"ACTION_OPTION_HIDE", 2,
-"NO_GRAPH_VIEW", "0",
-"GRAPH_VIEW", "1");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.appletgui.AnnotationRowFilter", "$.TitledPanel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "awt2swing.Checkbox", "$.Choice", "$.TextField", "java.awt.BorderLayout", "$.CardLayout"], "jalview.appletgui.AnnotationColumnChooser", ["awt2swing.Frame", "jalview.bin.JalviewLite", "jalview.datamodel.ColumnSelection", "$.GraphLine", "jalview.util.MessageManager", "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", "java.awt.Color", "$.Dimension", "java.awt.event.MouseAdapter", "$.TextListener", "java.lang.Float", "java.util.Vector", "javax.swing.JPanel"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.annotations = null;
+this.actionPanel = null;
+this.thresholdPanel = null;
+this.switchableViewsPanel = null;
+this.switchableViewsLayout = null;
+this.noGraphFilterView = null;
+this.graphFilterView = null;
+this.annotationComboBoxPanel = null;
+this.borderLayout1 = null;
+this.gBorderLayout = null;
+this.ngBorderLayout = null;
+this.threshold = null;
+this.gStructureFilterPanel = null;
+this.ngStructureFilterPanel = null;
+this.currentStructureFilterPanel = null;
+this.currentSearchPanel = null;
+this.gSearchPanel = null;
+this.ngSearchPanel = null;
+this.currentFurtherActionPanel = null;
+this.gFurtherActionPanel = null;
+this.ngFurtherActionPanel = null;
+this.actionOption = 1;
+this.oldColumnSelection = null;
+if (!Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel")) {
+jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$FurtherActionPanel$ ();
+}
+if (!Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel")) {
+jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$StructureFilterPanel$ ();
+}
+if (!Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser.SearchPanel")) {
+jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$SearchPanel$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AnnotationColumnChooser", jalview.appletgui.AnnotationRowFilter, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.ItemListener, java.awt.event.MouseListener]);
+Clazz.prepareFields (c$, function () {
+this.annotations = new awt2swing.Choice ();
+this.actionPanel = new awt2swing.Panel ();
+this.thresholdPanel = new jalview.appletgui.TitledPanel ();
+this.switchableViewsPanel = new awt2swing.Panel ( new java.awt.CardLayout ());
+this.switchableViewsLayout = (this.switchableViewsPanel.getLayout ());
+this.noGraphFilterView = new awt2swing.Panel ();
+this.graphFilterView = new awt2swing.Panel ();
+this.annotationComboBoxPanel = new awt2swing.Panel ();
+this.borderLayout1 = new java.awt.BorderLayout ();
+this.gBorderLayout = new java.awt.BorderLayout ();
+this.ngBorderLayout = new java.awt.BorderLayout ();
+this.threshold = new awt2swing.Choice ();
+});
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser, []);
+try {
+this.jbInit ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+});
+Clazz.makeConstructor (c$,
+function (av, ap) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser, [av, ap]);
+this.frame = new awt2swing.Frame ();
+this.frame.add (this);
+jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.select_by_annotation"), 520, 215);
+this.slider.addAdjustmentListener (this);
+this.slider.addMouseListener (this);
+if (av.getAlignment ().getAlignmentAnnotation () == null) {
+return;
+}this.setOldColumnSelection (av.getColumnSelection ());
+this.adjusting = true;
+var list = new java.util.Vector ();
+var index = 1;
+for (var i = 0; i < av.getAlignment ().getAlignmentAnnotation ().length; i++) {
+var label = av.getAlignment ().getAlignmentAnnotation ()[i].label;
+if (!list.contains (label)) {
+list.addElement (label);
+} else {
+list.addElement (label + "_" + (index++));
+}}
+for (var i = 0; i < list.size (); i++) {
+this.annotations.addItem (list.elementAt (i).toString ());
+}
+this.populateThresholdComboBox (this.threshold);
+if (av.getAnnotationColumnSelectionState () != null) {
+this.currentSearchPanel = av.getAnnotationColumnSelectionState ().getCurrentSearchPanel ();
+this.currentStructureFilterPanel = av.getAnnotationColumnSelectionState ().getCurrentStructureFilterPanel ();
+this.annotations.select (new Integer (av.getAnnotationColumnSelectionState ().getAnnotations ().getSelectedIndex ()));
+this.threshold.select (new Integer (av.getAnnotationColumnSelectionState ().getThreshold ().getSelectedIndex ()));
+this.actionOption = av.getAnnotationColumnSelectionState ().getActionOption ();
+}try {
+this.jbInit ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+this.adjusting = false;
+this.updateView ();
+this.frame.invalidate ();
+this.frame.pack ();
+}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.ok.setLabel (jalview.util.MessageManager.getString ("action.ok"));
+this.cancel.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
+this.thresholdValue.setEnabled (false);
+this.thresholdValue.setColumns (7);
+this.ok.addActionListener (this);
+this.cancel.addActionListener (this);
+this.annotations.addItemListener (this);
+this.thresholdValue.addActionListener (this);
+this.threshold.addItemListener (this);
+this.slider.setBackground (java.awt.Color.white);
+this.slider.setEnabled (false);
+this.slider.setPreferredSize ( new java.awt.Dimension (100, 32));
+this.thresholdPanel.setBackground (java.awt.Color.white);
+this.actionPanel.setBackground (java.awt.Color.white);
+this.graphFilterView.setLayout (this.gBorderLayout);
+this.graphFilterView.setBackground (java.awt.Color.white);
+this.noGraphFilterView.setLayout (this.ngBorderLayout);
+this.noGraphFilterView.setBackground (java.awt.Color.white);
+this.annotationComboBoxPanel.setBackground (java.awt.Color.white);
+this.gSearchPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.SearchPanel, this, null, this);
+this.ngSearchPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.SearchPanel, this, null, this);
+this.gFurtherActionPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel, this, null, this);
+this.ngFurtherActionPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel, this, null, this);
+this.gStructureFilterPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel, this, null, this);
+this.ngStructureFilterPanel = Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel, this, null, this);
+this.thresholdPanel.setTitle ("Threshold Filter");
+this.thresholdPanel.add (this.getThreshold ());
+this.thresholdPanel.add (this.slider);
+this.thresholdPanel.add (this.thresholdValue);
+this.actionPanel.add (this.ok);
+this.actionPanel.add (this.cancel);
+var staticPanel = new javax.swing.JPanel ();
+staticPanel.setLayout ( new java.awt.BorderLayout ());
+staticPanel.setBackground (java.awt.Color.white);
+staticPanel.add (this.gSearchPanel, "North");
+staticPanel.add (this.gStructureFilterPanel, "South");
+this.graphFilterView.add (staticPanel, "North");
+this.graphFilterView.add (this.thresholdPanel, "Center");
+this.graphFilterView.add (this.gFurtherActionPanel, "South");
+this.noGraphFilterView.add (this.ngSearchPanel, "First");
+this.noGraphFilterView.add (this.ngStructureFilterPanel, "Center");
+this.noGraphFilterView.add (this.ngFurtherActionPanel, "Center");
+this.annotationComboBoxPanel.add (this.getAnnotations ());
+this.switchableViewsPanel.add (this.noGraphFilterView, jalview.appletgui.AnnotationColumnChooser.NO_GRAPH_VIEW);
+this.switchableViewsPanel.add (this.graphFilterView, jalview.appletgui.AnnotationColumnChooser.GRAPH_VIEW);
+this.setLayout (this.borderLayout1);
+this.add (this.annotationComboBoxPanel, "First");
+this.add (this.switchableViewsPanel, "Center");
+this.add (this.actionPanel, "South");
+this.selectedAnnotationChanged ();
+this.validate ();
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "reset",
+function () {
+if (this.getOldColumnSelection () != null) {
+this.av.getColumnSelection ().clear ();
+if (this.av.getAnnotationColumnSelectionState () != null) {
+var oldSelection = this.av.getAnnotationColumnSelectionState ().getOldColumnSelection ();
+if (oldSelection != null && oldSelection.getHiddenColumns () != null && !oldSelection.getHiddenColumns ().isEmpty ()) {
+for (var itr = oldSelection.getHiddenColumns ().iterator (); itr.hasNext (); ) {
+var positions = itr.next ();
+this.av.hideColumns (positions[0], positions[1]);
+}
+}this.av.setColumnSelection (oldSelection);
+}this.ap.paintAlignment (true);
+}});
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+if (!this.adjusting) {
+this.thresholdValue.setText ((this.slider.getValue () / 1000) + "");
+this.valueChanged (!this.sliderDragging);
+}}, "java.awt.event.AdjustmentEvent");
+Clazz.defineMethod (c$, "addSliderMouseListeners",
+function () {
+this.slider.addMouseListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser$1") ? 0 : jalview.appletgui.AnnotationColumnChooser.$AnnotationColumnChooser$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser$1, this, null)));
+});
+Clazz.overrideMethod (c$, "valueChanged",
+function (updateAllAnnotation) {
+if (this.slider.isEnabled ()) {
+this.getCurrentAnnotation ().threshold.value = this.slider.getValue () / 1000;
+this.updateView ();
+this.ap.paintAlignment (false);
+}}, "~B");
+Clazz.defineMethod (c$, "getThreshold",
+function () {
+return this.threshold;
+});
+Clazz.defineMethod (c$, "setThreshold",
+function (threshold) {
+this.threshold = threshold;
+}, "awt2swing.Choice");
+Clazz.defineMethod (c$, "getAnnotations",
+function () {
+return this.annotations;
+});
+Clazz.defineMethod (c$, "setAnnotations",
+function (annotations) {
+this.annotations = annotations;
+}, "awt2swing.Choice");
+Clazz.overrideMethod (c$, "updateView",
+function () {
+if (this.adjusting) {
+return;
+}var filterParams = new jalview.viewmodel.annotationfilter.AnnotationFilterParameter ();
+this.setCurrentAnnotation (this.av.getAlignment ().getAlignmentAnnotation ()[this.getAnnotations ().getSelectedIndex ()]);
+var selectedThresholdItem = this.getSelectedThresholdItem (this.getThreshold ().getSelectedIndex ());
+this.slider.setEnabled (true);
+this.thresholdValue.setEnabled (true);
+if (selectedThresholdItem == -1) {
+this.slider.setEnabled (false);
+this.thresholdValue.setEnabled (false);
+this.thresholdValue.setText ("");
+} else if (selectedThresholdItem != -1) {
+if (this.getCurrentAnnotation ().threshold == null) {
+this.getCurrentAnnotation ().setThreshold ( new jalview.datamodel.GraphLine ((this.getCurrentAnnotation ().graphMax - this.getCurrentAnnotation ().graphMin) / 2, "Threshold", java.awt.Color.black));
+}this.adjusting = true;
+var range = this.getCurrentAnnotation ().graphMax * 1000 - this.getCurrentAnnotation ().graphMin * 1000;
+this.slider.setMinimum (Clazz.floatToInt (this.getCurrentAnnotation ().graphMin * 1000));
+this.slider.setMaximum (Clazz.floatToInt (this.getCurrentAnnotation ().graphMax * 1000));
+this.slider.setValue (Clazz.floatToInt (this.getCurrentAnnotation ().threshold.value * 1000));
+this.thresholdValue.setText (this.getCurrentAnnotation ().threshold.value + "");
+this.slider.setEnabled (true);
+this.thresholdValue.setEnabled (true);
+this.adjusting = false;
+filterParams.setThresholdType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.NO_THRESHOLD);
+if (this.getCurrentAnnotation ().graph != 0) {
+filterParams.setThresholdValue (this.getCurrentAnnotation ().threshold.value);
+if (selectedThresholdItem == 1) {
+filterParams.setThresholdType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD);
+} else if (selectedThresholdItem == 0) {
+filterParams.setThresholdType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD);
+}}}if (this.currentStructureFilterPanel != null) {
+if (this.currentStructureFilterPanel.alphaHelix.getState ()) {
+filterParams.setFilterAlphaHelix (true);
+}if (this.currentStructureFilterPanel.betaStrand.getState ()) {
+filterParams.setFilterBetaSheet (true);
+}if (this.currentStructureFilterPanel.turn.getState ()) {
+filterParams.setFilterTurn (true);
+}}if (this.currentSearchPanel != null) {
+if (!this.currentSearchPanel.searchBox.getText ().isEmpty ()) {
+this.currentSearchPanel.description.setEnabled (true);
+this.currentSearchPanel.displayName.setEnabled (true);
+filterParams.setRegexString (this.currentSearchPanel.searchBox.getText ());
+if (this.currentSearchPanel.displayName.getState ()) {
+filterParams.addRegexSearchField (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING);
+}if (this.currentSearchPanel.description.getState ()) {
+filterParams.addRegexSearchField (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION);
+}} else {
+this.currentSearchPanel.description.setEnabled (false);
+this.currentSearchPanel.displayName.setEnabled (false);
+}}this.av.getColumnSelection ().filterAnnotations (this.getCurrentAnnotation ().annotations, filterParams);
+this.av.showAllHiddenColumns ();
+if (this.getActionOption () == jalview.appletgui.AnnotationColumnChooser.ACTION_OPTION_HIDE) {
+this.av.hideSelectedColumns ();
+}filterParams = null;
+this.av.setAnnotationColumnSelectionState (this);
+this.ap.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "getOldColumnSelection",
+function () {
+return this.oldColumnSelection;
+});
+Clazz.defineMethod (c$, "setOldColumnSelection",
+function (currentColumnSelection) {
+if (currentColumnSelection != null) {
+this.oldColumnSelection = new jalview.datamodel.ColumnSelection (currentColumnSelection);
+}}, "jalview.datamodel.ColumnSelection");
+Clazz.defineMethod (c$, "getCurrentFutherActionPanel",
+function () {
+return this.currentFurtherActionPanel;
+});
+Clazz.defineMethod (c$, "setCurrentFutherActionPanel",
+function (currentFutherActionPanel) {
+this.currentFurtherActionPanel = currentFutherActionPanel;
+}, "jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel");
+Clazz.defineMethod (c$, "getCurrentSearchPanel",
+function () {
+return this.currentSearchPanel;
+});
+Clazz.defineMethod (c$, "setCurrentSearchPanel",
+function (currentSearchPanel) {
+this.currentSearchPanel = currentSearchPanel;
+}, "jalview.appletgui.AnnotationColumnChooser.SearchPanel");
+Clazz.defineMethod (c$, "getActionOption",
+function () {
+return this.actionOption;
+});
+Clazz.defineMethod (c$, "setActionOption",
+function (actionOption) {
+this.actionOption = actionOption;
+}, "~N");
+Clazz.defineMethod (c$, "getCurrentStructureFilterPanel",
+function () {
+return this.currentStructureFilterPanel;
+});
+Clazz.defineMethod (c$, "setCurrentStructureFilterPanel",
+function (currentStructureFilterPanel) {
+this.currentStructureFilterPanel = currentStructureFilterPanel;
+}, "jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+if (e.getSource () === this.annotations) {
+this.selectedAnnotationChanged ();
+} else if (e.getSource () === this.threshold) {
+this.threshold_actionPerformed (null);
+}}, "java.awt.event.ItemEvent");
+Clazz.defineMethod (c$, "selectedAnnotationChanged",
+function () {
+var currentView = jalview.appletgui.AnnotationColumnChooser.NO_GRAPH_VIEW;
+if (this.av.getAlignment ().getAlignmentAnnotation ()[this.getAnnotations ().getSelectedIndex ()].graph != 0) {
+currentView = jalview.appletgui.AnnotationColumnChooser.GRAPH_VIEW;
+}this.gSearchPanel.syncState ();
+this.gFurtherActionPanel.syncState ();
+this.gStructureFilterPanel.syncState ();
+this.ngSearchPanel.syncState ();
+this.ngFurtherActionPanel.syncState ();
+this.ngStructureFilterPanel.syncState ();
+this.switchableViewsLayout.show (this.switchableViewsPanel, currentView);
+this.updateView ();
+});
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.thresholdValue) {
+try {
+var f = new Float (this.thresholdValue.getText ()).floatValue ();
+this.slider.setValue (Clazz.floatToInt (f * 1000));
+this.adjustmentValueChanged (null);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+} else if (evt.getSource () === this.ok) {
+this.ok_actionPerformed (null);
+} else if (evt.getSource () === this.cancel) {
+this.cancel_actionPerformed (null);
+} else if (evt.getSource () === this.thresholdValue) {
+this.thresholdValue_actionPerformed (null);
+} else {
+this.updateView ();
+}}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (e) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (e) {
+if (e.getSource () === this.slider) {
+this.updateView ();
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (e) {
+if (e.getSource () === this.slider) {
+this.updateView ();
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (e) {
+if (e.getSource () === this.slider) {
+this.updateView ();
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (e) {
+if (e.getSource () === this.slider) {
+this.updateView ();
+}}, "java.awt.event.MouseEvent");
+c$.$AnnotationColumnChooser$FurtherActionPanel$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.aColChooser = null;
+this.furtherAction = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.AnnotationColumnChooser, "FurtherActionPanel", awt2swing.Panel, java.awt.event.ItemListener);
+Clazz.prepareFields (c$, function () {
+this.furtherAction = new awt2swing.Choice ();
+});
+Clazz.makeConstructor (c$,
+function (a) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser.FurtherActionPanel, []);
+this.aColChooser = a;
+this.furtherAction.addItem ("Select");
+this.furtherAction.addItem ("Hide");
+this.furtherAction.addItemListener (this);
+this.syncState ();
+this.add (this.furtherAction);
+}, "jalview.appletgui.AnnotationColumnChooser");
+Clazz.defineMethod (c$, "syncState",
+function () {
+if (this.aColChooser.getActionOption () == jalview.appletgui.AnnotationColumnChooser.ACTION_OPTION_HIDE) {
+this.furtherAction.select ("Hide");
+} else {
+this.furtherAction.select ("Select");
+}});
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (a) {
+this.aColChooser.setCurrentFutherActionPanel (this);
+if (this.furtherAction.getSelectedItem ().toString ().equalsIgnoreCase ("Select")) {
+this.b$["jalview.appletgui.AnnotationColumnChooser"].setActionOption (1);
+this.b$["jalview.appletgui.AnnotationColumnChooser"].updateView ();
+} else {
+this.b$["jalview.appletgui.AnnotationColumnChooser"].setActionOption (jalview.appletgui.AnnotationColumnChooser.ACTION_OPTION_HIDE);
+this.b$["jalview.appletgui.AnnotationColumnChooser"].updateView ();
+}}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationColumnChooser$StructureFilterPanel$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.aColChooser = null;
+this.alphaHelix = null;
+this.betaStrand = null;
+this.turn = null;
+this.all = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.AnnotationColumnChooser, "StructureFilterPanel", jalview.appletgui.TitledPanel, java.awt.event.ItemListener);
+Clazz.prepareFields (c$, function () {
+this.alphaHelix = new awt2swing.Checkbox ();
+this.betaStrand = new awt2swing.Checkbox ();
+this.turn = new awt2swing.Checkbox ();
+this.all = new awt2swing.Checkbox ();
+});
+Clazz.makeConstructor (c$,
+function (a) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser.StructureFilterPanel, []);
+this.aColChooser = a;
+this.alphaHelix.setLabel (jalview.util.MessageManager.getString ("label.alpha_helix"));
+this.alphaHelix.setBackground (java.awt.Color.white);
+this.alphaHelix.addItemListener (this);
+this.betaStrand.setLabel (jalview.util.MessageManager.getString ("label.beta_strand"));
+this.betaStrand.setBackground (java.awt.Color.white);
+this.betaStrand.addItemListener (this);
+this.turn.setLabel (jalview.util.MessageManager.getString ("label.turn"));
+this.turn.setBackground (java.awt.Color.white);
+this.turn.addItemListener (this);
+this.all.setLabel (jalview.util.MessageManager.getString ("label.select_all"));
+this.all.setBackground (java.awt.Color.white);
+this.all.addItemListener (this);
+this.setBackground (java.awt.Color.white);
+this.setTitle ("Structure Filter");
+this.add (this.all);
+this.add (this.alphaHelix);
+this.add (this.betaStrand);
+this.add (this.turn);
+}, "jalview.appletgui.AnnotationColumnChooser");
+Clazz.defineMethod (c$, "alphaHelix_actionPerformed",
+function () {
+this.updateSelectAllState ();
+this.aColChooser.setCurrentStructureFilterPanel (this);
+this.aColChooser.updateView ();
+});
+Clazz.defineMethod (c$, "betaStrand_actionPerformed",
+function () {
+this.updateSelectAllState ();
+this.aColChooser.setCurrentStructureFilterPanel (this);
+this.aColChooser.updateView ();
+});
+Clazz.defineMethod (c$, "turn_actionPerformed",
+function () {
+this.updateSelectAllState ();
+this.aColChooser.setCurrentStructureFilterPanel (this);
+this.aColChooser.updateView ();
+});
+Clazz.defineMethod (c$, "all_actionPerformed",
+function () {
+if (this.all.getState ()) {
+this.alphaHelix.setState (true);
+this.betaStrand.setState (true);
+this.turn.setState (true);
+} else {
+this.alphaHelix.setState (false);
+this.betaStrand.setState (false);
+this.turn.setState (false);
+}this.aColChooser.setCurrentStructureFilterPanel (this);
+this.aColChooser.updateView ();
+});
+Clazz.defineMethod (c$, "updateSelectAllState",
+function () {
+if (this.alphaHelix.getState () && this.betaStrand.getState () && this.turn.getState ()) {
+this.all.setState (true);
+} else {
+this.all.setState (false);
+}});
+Clazz.defineMethod (c$, "syncState",
+function () {
+var a = this.aColChooser.getCurrentStructureFilterPanel ();
+if (a != null) {
+this.alphaHelix.setState (a.alphaHelix.getState ());
+this.betaStrand.setState (a.betaStrand.getState ());
+this.turn.setState (a.turn.getState ());
+if (a.all.getState ()) {
+this.all.setState (true);
+this.alphaHelix.setState (true);
+this.betaStrand.setState (true);
+this.turn.setState (true);
+}}});
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (a) {
+if (a.getSource () === this.alphaHelix) {
+this.alphaHelix_actionPerformed ();
+} else if (a.getSource () === this.betaStrand) {
+this.betaStrand_actionPerformed ();
+} else if (a.getSource () === this.turn) {
+this.turn_actionPerformed ();
+} else if (a.getSource () === this.all) {
+this.all_actionPerformed ();
+}}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationColumnChooser$SearchPanel$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.aColChooser = null;
+this.displayName = null;
+this.description = null;
+this.searchBox = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.AnnotationColumnChooser, "SearchPanel", jalview.appletgui.TitledPanel, java.awt.event.ItemListener);
+Clazz.prepareFields (c$, function () {
+this.displayName = new awt2swing.Checkbox ();
+this.description = new awt2swing.Checkbox ();
+this.searchBox = new awt2swing.TextField (10);
+});
+Clazz.makeConstructor (c$,
+function (a) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationColumnChooser.SearchPanel, []);
+this.aColChooser = a;
+this.searchBox.addTextListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationColumnChooser$SearchPanel$1") ? 0 : jalview.appletgui.AnnotationColumnChooser.SearchPanel.$AnnotationColumnChooser$SearchPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationColumnChooser$SearchPanel$1, this, null)));
+this.displayName.setLabel (jalview.util.MessageManager.getString ("label.display_name"));
+this.displayName.setEnabled (false);
+this.displayName.addItemListener (this);
+this.description.setLabel (jalview.util.MessageManager.getString ("label.description"));
+this.description.setEnabled (false);
+this.description.addItemListener (this);
+this.setTitle ("Search Filter");
+this.syncState ();
+this.add (this.searchBox);
+this.add (this.displayName);
+this.add (this.description);
+}, "jalview.appletgui.AnnotationColumnChooser");
+Clazz.defineMethod (c$, "displayNameCheckboxAction",
+function () {
+this.aColChooser.setCurrentSearchPanel (this);
+this.aColChooser.updateView ();
+});
+Clazz.defineMethod (c$, "discriptionCheckboxAction",
+function () {
+this.aColChooser.setCurrentSearchPanel (this);
+this.aColChooser.updateView ();
+});
+Clazz.defineMethod (c$, "searchStringAction",
+function () {
+this.aColChooser.setCurrentSearchPanel (this);
+this.aColChooser.updateView ();
+});
+Clazz.defineMethod (c$, "syncState",
+function () {
+var a = this.aColChooser.getCurrentSearchPanel ();
+if (a != null) {
+this.description.setEnabled (a.description.isEnabled ());
+this.description.setState (a.description.getState ());
+this.displayName.setEnabled (a.displayName.isEnabled ());
+this.displayName.setState (a.displayName.getState ());
+this.searchBox.setText (a.searchBox.getText ());
+}});
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (a) {
+if (a.getSource () === this.displayName) {
+this.displayNameCheckboxAction ();
+} else if (a.getSource () === this.description) {
+this.discriptionCheckboxAction ();
+}}, "java.awt.event.ItemEvent");
+c$.$AnnotationColumnChooser$SearchPanel$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationColumnChooser$SearchPanel$1", null, java.awt.event.TextListener);
+Clazz.overrideMethod (c$, "textValueChanged",
+function (a) {
+this.b$["jalview.appletgui.AnnotationColumnChooser.SearchPanel"].searchStringAction ();
+}, "java.awt.event.TextEvent");
+c$ = Clazz.p0p ();
+};
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationColumnChooser$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationColumnChooser$1", java.awt.event.MouseAdapter);
+Clazz.defineMethod (c$, "mousePressed",
+function (e) {
+this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging = true;
+Clazz.superCall (this, jalview.appletgui.AnnotationColumnChooser$1, "mousePressed", [e]);
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "mouseDragged",
+function (e) {
+this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging = true;
+Clazz.superCall (this, jalview.appletgui.AnnotationColumnChooser$1, "mouseDragged", [e]);
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+if (this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging) {
+this.b$["jalview.appletgui.AnnotationColumnChooser"].sliderDragging = false;
+this.b$["jalview.appletgui.AnnotationColumnChooser"].valueChanged (true);
+}this.b$["jalview.appletgui.AnnotationColumnChooser"].ap.paintAlignment (true);
+}, "java.awt.event.MouseEvent");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"ACTION_OPTION_SELECT", 1,
+"ACTION_OPTION_HIDE", 2,
+"NO_GRAPH_VIEW", "0",
+"GRAPH_VIEW", "1");
+});
diff --git a/bin/jalview/appletgui/AnnotationLabels.class b/bin/jalview/appletgui/AnnotationLabels.class
index 89f6aaa..e82534c 100644
Binary files a/bin/jalview/appletgui/AnnotationLabels.class and b/bin/jalview/appletgui/AnnotationLabels.class differ
diff --git a/bin/jalview/appletgui/AnnotationLabels.js b/bin/jalview/appletgui/AnnotationLabels.js
index 195bfa5..27cabd2 100644
--- a/bin/jalview/appletgui/AnnotationLabels.js
+++ b/bin/jalview/appletgui/AnnotationLabels.js
@@ -1,466 +1,466 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.AnnotationLabels", ["awt2swing.Checkbox", "$.CheckboxMenuItem", "$.Frame", "$.MenuItem", "$.PopupMenu", "jalview.analysis.AlignmentUtils", "jalview.appletgui.AlignFrame", "$.CutAndPasteTransfer", "$.EditNameDialog", "$.PaintRefresher", "$.Tooltip", "jalview.bin.JalviewLite", "jalview.datamodel.AlignmentAnnotation", "$.SequenceGroup", "jalview.util.MessageManager", "$.ParseHtmlBodyAndLinks", "java.awt.Color", "$.Dimension", "$.FlowLayout", "java.awt.event.ItemListener", "java.lang.StringBuffer", "java.util.Arrays", "$.Collections", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.image = null;
-this.active = false;
-this.ap = null;
-this.av = null;
-this.resizing = false;
-this.oldY = 0;
-this.mouseX = 0;
-this.scrollOffset = 0;
-this.selectedRow = -1;
-this.tooltip = null;
-this.hasHiddenRows = false;
-this.resizePanel = false;
-this.dragEvent = null;
-this.dragCancelled = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AnnotationLabels", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationLabels, []);
-this.ap = ap;
-this.av = ap.av;
-this.setLayout (null);
-this.addMouseListener (this);
-this.addMouseMotionListener (this);
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.makeConstructor (c$,
-function (av) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationLabels, []);
-this.av = av;
-}, "jalview.appletgui.AlignViewport");
-Clazz.defineMethod (c$, "setScrollOffset",
-function (y, repaint) {
-this.scrollOffset = y;
-if (repaint) {
-this.repaint ();
-}}, "~N,~B");
-Clazz.defineMethod (c$, "getSelectedRow",
-function (y) {
-var row = -2;
-var aa = this.ap.av.getAlignment ().getAlignmentAnnotation ();
-if (aa == null) {
-return row;
-}var height = 0;
-for (var i = 0; i < aa.length; i++) {
-row = -1;
-if (!aa[i].visible) {
-continue;
-}height += aa[i].height;
-if (y < height) {
-row = i;
-break;
-}}
-return row;
-}, "~N");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-var aa = this.av.getAlignment ().getAlignmentAnnotation ();
-if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.ADDNEW)) {
-var newAnnotation = new jalview.datamodel.AlignmentAnnotation ("", null, new Array (this.ap.av.getAlignment ().getWidth ()));
-if (!this.editLabelDescription (newAnnotation)) {
-return;
-}this.ap.av.getAlignment ().addAnnotation (newAnnotation);
-this.ap.av.getAlignment ().setAnnotationIndex (newAnnotation, 0);
-} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.EDITNAME)) {
-this.editLabelDescription (aa[this.selectedRow]);
-} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.HIDE)) {
-aa[this.selectedRow].visible = false;
-} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.SHOWALL)) {
-for (var i = 0; i < aa.length; i++) {
-aa[i].visible = (aa[i].annotations == null) ? false : true;
-}
-} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.OUTPUT_TEXT)) {
-var cap = new jalview.appletgui.CutAndPasteTransfer (false, this.ap.alignFrame);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, this.ap.alignFrame.getTitle () + " - " + aa[this.selectedRow].label, 500, 100);
-cap.setText (aa[this.selectedRow].toString ());
-} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.COPYCONS_SEQ)) {
-var cons = this.av.getConsensusSeq ();
-if (cons != null) {
-this.copy_annotseqtoclipboard (cons);
-}}this.refresh ();
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "refresh",
-function () {
-this.ap.annotationPanel.adjustPanelHeight ();
-this.setSize (this.getSize ().width, this.ap.annotationPanel.getSize ().height);
-this.ap.validate ();
-this.ap.paintAlignment (true);
-});
-Clazz.defineMethod (c$, "editLabelDescription",
-function (annotation) {
-var padGaps = new awt2swing.Checkbox ("Fill Empty Gaps With \"" + this.ap.av.getGapCharacter () + "\"", annotation.padGaps);
-var dialog = new jalview.appletgui.EditNameDialog (annotation.label, annotation.description, " Annotation Label", "Annotation Description", this.ap.alignFrame, "Edit Annotation Name / Description", 500, 180, false);
-var empty = new awt2swing.Panel ( new java.awt.FlowLayout ());
-empty.add (padGaps);
-dialog.add (empty);
-dialog.pack ();
-dialog.setVisible (true);
-if (dialog.accept) {
-annotation.label = dialog.getName ();
-annotation.description = dialog.getDescription ();
-annotation.setPadGaps (padGaps.getState (), this.av.getGapCharacter ());
-this.repaint ();
-return true;
-} else {
-return false;
-}}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-this.resizePanel = evt.getY () < 10 && evt.getX () < 14;
-var row = this.getSelectedRow (evt.getY () + this.scrollOffset);
-if (row > -1) {
-var phb = new jalview.util.ParseHtmlBodyAndLinks (this.av.getAlignment ().getAlignmentAnnotation ()[row].getDescription (true), true, "\n");
-if (this.tooltip == null) {
-this.tooltip = new jalview.appletgui.Tooltip (phb.getNonHtmlContent (), this);
-} else {
-this.tooltip.setTip (phb.getNonHtmlContent ());
-}} else if (this.tooltip != null) {
-this.tooltip.setTip ("");
-}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "cancelDrag",
-function () {
-this.dragEvent = null;
-this.dragCancelled = true;
-});
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-if (this.dragCancelled) {
-return;
-};this.dragEvent = evt;
-if (this.resizePanel) {
-var d = this.ap.annotationPanelHolder.getSize ();
-var e = this.ap.annotationSpaceFillerHolder.getSize ();
-var f = this.ap.seqPanelHolder.getSize ();
-var dif = evt.getY () - this.oldY;
-dif /= this.ap.av.getCharHeight ();
-dif *= this.ap.av.getCharHeight ();
-if ((d.height - dif) > 20 && (f.height + dif) > 20) {
-this.ap.annotationPanel.setSize (d.width, d.height - dif);
-this.setSize ( new java.awt.Dimension (e.width, d.height - dif));
-this.ap.annotationSpaceFillerHolder.setSize ( new java.awt.Dimension (e.width, d.height - dif));
-this.ap.annotationPanelHolder.setSize ( new java.awt.Dimension (d.width, d.height - dif));
-this.ap.apvscroll.setValues (this.ap.apvscroll.getValue (), d.height - dif, 0, this.av.calcPanelHeight ());
-f.height += dif;
-this.ap.seqPanelHolder.setPreferredSize (f);
-this.ap.setScrollValues (this.av.getStartRes (), this.av.getStartSeq ());
-this.ap.validate ();
-this.ap.addNotify ();
-}} else {
-var diff;
-if ((diff = 6 - evt.getY ()) > 0) {
-this.ap.apvscroll.setValue (this.ap.apvscroll.getValue () - diff);
-this.ap.adjustmentValueChanged (null);
-} else if ((0 < (diff = 6 - this.ap.annotationSpaceFillerHolder.getSize ().height + evt.getY ()))) {
-this.ap.apvscroll.setValue (this.ap.apvscroll.getValue () + diff);
-this.ap.adjustmentValueChanged (null);
-}this.repaint ();
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-if (!this.resizePanel && !this.dragCancelled) {
-var start = this.selectedRow;
-var end = this.getSelectedRow (evt.getY () + this.scrollOffset);
-if (start > -1 && start != end) {
-var startAA = this.ap.av.getAlignment ().getAlignmentAnnotation ()[start];
-if (end == -1) {
-end = this.ap.av.getAlignment ().getAlignmentAnnotation ().length - 1;
-}var endAA = this.ap.av.getAlignment ().getAlignmentAnnotation ()[end];
-this.ap.av.getAlignment ().getAlignmentAnnotation ()[end] = startAA;
-this.ap.av.getAlignment ().getAlignmentAnnotation ()[start] = endAA;
-}}this.resizePanel = false;
-this.dragEvent = null;
-this.dragCancelled = false;
-this.repaint ();
-this.ap.annotationPanel.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-if (evt.getY () < 10 && evt.getX () < 14) {
-this.resizePanel = true;
-this.repaint ();
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-this.dragCancelled = false;
-if (this.dragEvent == null) {
-this.resizePanel = false;
-} else {
-if (!this.resizePanel) {
-this.dragEvent = null;
-}}this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-this.oldY = evt.getY ();
-if (this.resizePanel) {
-return;
-}this.dragCancelled = false;
-this.selectedRow = this.getSelectedRow (evt.getY () + this.scrollOffset);
-var aa = this.ap.av.getAlignment ().getAlignmentAnnotation ();
-if ((evt.getModifiers () & 4) == 4) {
-var popup = new awt2swing.PopupMenu (jalview.util.MessageManager.getString ("label.annotations"));
-var item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.ADDNEW);
-item.addActionListener (this);
-popup.add (item);
-if (this.selectedRow < 0) {
-if (this.hasHiddenRows) {
-item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.SHOWALL);
-item.addActionListener (this);
-popup.add (item);
-}this.add (popup);
-popup.show (this, evt.getX (), evt.getY ());
-return;
-}item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.EDITNAME);
-item.addActionListener (this);
-popup.add (item);
-item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.HIDE);
-item.addActionListener (this);
-popup.add (item);
-if (this.selectedRow < aa.length) {
-if (aa[this.selectedRow].sequenceRef != null) {
-var label = aa[this.selectedRow].label;
-var hideType = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.hide_all") + " " + label);
-hideType.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$1") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$1, this, Clazz.cloneFinals ("label", label))));
-popup.add (hideType);
-}}if (this.hasHiddenRows) {
-item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.SHOWALL);
-item.addActionListener (this);
-popup.add (item);
-}this.add (popup);
-item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.OUTPUT_TEXT);
-item.addActionListener (this);
-popup.add (item);
-if (this.selectedRow < aa.length) {
-if (aa[this.selectedRow].autoCalculated) {
-if (aa[this.selectedRow].label.indexOf ("Consensus") > -1) {
-popup.addSeparator ();
-var cbmi = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.ignore_gaps_consensus"), (aa[this.selectedRow].groupRef != null) ? aa[this.selectedRow].groupRef.getIgnoreGapsConsensus () : this.ap.av.isIgnoreGapsConsensus ());
-var aaa = aa[this.selectedRow];
-cbmi.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$2") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$2, this, Clazz.cloneFinals ("aaa", aaa, "cbmi", cbmi))));
-popup.add (cbmi);
-if (aaa.groupRef != null) {
-var chist = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_group_histogram"), aa[this.selectedRow].groupRef.isShowConsensusHistogram ());
-chist.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$3") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$3, this, Clazz.cloneFinals ("aaa", aaa, "chist", chist))));
-popup.add (chist);
-var cprofl = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_group_logo"), aa[this.selectedRow].groupRef.isShowSequenceLogo ());
-cprofl.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$4") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$4$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$4, this, Clazz.cloneFinals ("aaa", aaa, "cprofl", cprofl))));
-popup.add (cprofl);
-var cprofn = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.normalise_group_logo"), aa[this.selectedRow].groupRef.isNormaliseSequenceLogo ());
-cprofn.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$5") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$5$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$5, this, Clazz.cloneFinals ("aaa", aaa, "cprofn", cprofn))));
-popup.add (cprofn);
-} else {
-var chist = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_histogram"), this.av.isShowConsensusHistogram ());
-chist.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$6") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$6$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$6, this, Clazz.cloneFinals ("chist", chist))));
-popup.add (chist);
-var cprof = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_logo"), this.av.isShowSequenceLogo ());
-cprof.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$7") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$7$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$7, this, Clazz.cloneFinals ("cprof", cprof))));
-popup.add (cprof);
-var cprofn = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.normalise_logo"), this.av.isNormaliseSequenceLogo ());
-cprofn.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$8") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$8$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$8, this, Clazz.cloneFinals ("cprofn", cprofn))));
-popup.add (cprofn);
-}item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.COPYCONS_SEQ);
-item.addActionListener (this);
-popup.add (item);
-}}}popup.show (this, evt.getX (), evt.getY ());
-} else {
-if (this.selectedRow > -1 && this.selectedRow < aa.length) {
-if (aa[this.selectedRow].groupRef != null) {
-if (evt.getClickCount () >= 2) {
-this.ap.seqPanel.ap.idPanel.highlightSearchResults (null);
-this.ap.av.setSelectionGroup (aa[this.selectedRow].groupRef);
-this.ap.av.sendSelection ();
-this.ap.paintAlignment (false);
-jalview.appletgui.PaintRefresher.Refresh (this.ap, this.ap.av.getSequenceSetId ());
-} else {
-this.ap.seqPanel.ap.idPanel.highlightSearchResults (aa[this.selectedRow].groupRef.getSequences (null));
-}return;
-} else if (aa[this.selectedRow].sequenceRef != null) {
-if (evt.getClickCount () == 1) {
-this.ap.seqPanel.ap.idPanel.highlightSearchResults (java.util.Arrays.asList ( Clazz.newArray (-1, [aa[this.selectedRow].sequenceRef])));
-} else if (evt.getClickCount () >= 2) {
-this.ap.seqPanel.ap.idPanel.highlightSearchResults (null);
-var sg = this.ap.av.getSelectionGroup ();
-if (sg != null) {
-if (!(evt.isControlDown () || evt.isShiftDown ())) {
-sg = new jalview.datamodel.SequenceGroup (sg);
-sg.clear ();
-sg.addSequence (aa[this.selectedRow].sequenceRef, false);
-} else {
-if (evt.isControlDown ()) {
-sg.addOrRemove (aa[this.selectedRow].sequenceRef, true);
-} else {
-sg.addSequence (aa[this.selectedRow].sequenceRef, true);
-}}} else {
-sg = new jalview.datamodel.SequenceGroup ();
-sg.setStartRes (0);
-sg.setEndRes (this.ap.av.getAlignment ().getWidth () - 1);
-sg.addSequence (aa[this.selectedRow].sequenceRef, false);
-}this.ap.av.setSelectionGroup (sg);
-this.ap.paintAlignment (false);
-jalview.appletgui.PaintRefresher.Refresh (this.ap, this.ap.av.getSequenceSetId ());
-this.ap.av.sendSelection ();
-}}}}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "copy_annotseqtoclipboard",
-function (sq) {
-if (sq == null || sq.getLength () < 1) {
-return;
-}jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer ();
-jalview.appletgui.AlignFrame.copiedSequences.append (sq.getName () + "\t" + sq.getStart () + "\t" + sq.getEnd () + "\t" + sq.getSequenceAsString () + "\n");
-if (this.av.hasHiddenColumns ()) {
-jalview.appletgui.AlignFrame.copiedHiddenColumns = new java.util.Vector ();
-for (var region, $region = this.av.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
-jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement ( Clazz.newIntArray (-1, [region[0], region[1]]));
-}
-}}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-if (this.av.getWrapAlignment () || !this.av.isShowAnnotation ()) return;
-var w = this.getSize ().width;
-var h = this.getSize ().height;
-if (this.image == null || w != this.image.getWidth (this) || h != this.image.getHeight (this)) {
-this.image = this.createImage (w, this.ap.annotationPanel.getSize ().height);
-}this.drawComponent (this.image.getGraphics (), w);
-g.drawImage (this.image, 0, 0, this);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "drawComponent",
-function (g, width) {
-g.setFont (this.av.getFont ());
-var fm = g.getFontMetrics (this.av.getFont ());
-g.setColor (java.awt.Color.white);
-g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
-g.translate (0, -this.scrollOffset);
-g.setColor (java.awt.Color.black);
-var aa = this.av.getAlignment ().getAlignmentAnnotation ();
-var y = 0;
-var fy = g.getFont ().getSize ();
-var x = 0;
-var offset;
-if (aa != null) {
-this.hasHiddenRows = false;
-for (var i = 0; i < aa.length; i++) {
-if (!aa[i].visible) {
-this.hasHiddenRows = true;
-continue;
-}x = width - fm.stringWidth (aa[i].label) - 3;
-y += aa[i].height;
-offset = Clazz.doubleToInt (-(aa[i].height - fy) / 2);
-g.drawString (aa[i].label, x, y + offset);
-}
-}g.translate (0, +this.scrollOffset);
-if (this.resizePanel) {
-g.setColor (java.awt.Color.red);
-g.setPaintMode ();
-g.drawLine (2, 8, 5, 2);
-g.drawLine (5, 2, 8, 8);
-} else if (!this.dragCancelled && this.dragEvent != null && aa != null) {
-g.setColor (java.awt.Color.lightGray);
-g.drawString (aa[this.selectedRow].label, this.dragEvent.getX (), this.dragEvent.getY ());
-}if (!this.av.getWrapAlignment () && ((aa == null) || (aa.length < 1))) {
-g.setColor (java.awt.Color.black);
-g.drawString (jalview.util.MessageManager.getString ("label.right_click"), 2, 8);
-g.drawString (jalview.util.MessageManager.getString ("label.to_add_annotation"), 2, 18);
-}}, "java.awt.Graphics,~N");
-c$.$AnnotationLabels$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$1", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-jalview.analysis.AlignmentUtils.showOrHideSequenceAnnotations (this.b$["jalview.appletgui.AnnotationLabels"].ap.av.getAlignment (), java.util.Collections.singleton (this.f$.label), null, false, false);
-this.b$["jalview.appletgui.AnnotationLabels"].refresh ();
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationLabels$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$2", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-if (this.f$.aaa.groupRef != null) {
-this.f$.aaa.groupRef.setIgnoreGapsConsensus (this.f$.cbmi.getState ());
-} else {
-this.b$["jalview.appletgui.AnnotationLabels"].ap.av.setIgnoreGapsConsensus (this.f$.cbmi.getState (), this.b$["jalview.appletgui.AnnotationLabels"].ap);
-}this.b$["jalview.appletgui.AnnotationLabels"].ap.paintAlignment (true);
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationLabels$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$3", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-this.f$.aaa.groupRef.setShowConsensusHistogram (this.f$.chist.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationLabels$4$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$4", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-this.f$.aaa.groupRef.setshowSequenceLogo (this.f$.cprofl.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationLabels$5$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$5", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-this.f$.aaa.groupRef.setshowSequenceLogo (true);
-this.f$.aaa.groupRef.setNormaliseSequenceLogo (this.f$.cprofn.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationLabels$6$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$6", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-this.b$["jalview.appletgui.AnnotationLabels"].av.setShowConsensusHistogram (this.f$.chist.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.alignFrame.showConsensusHistogram.setState (this.f$.chist.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationLabels$7$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$7", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-this.b$["jalview.appletgui.AnnotationLabels"].av.setShowSequenceLogo (this.f$.cprof.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.alignFrame.showSequenceLogo.setState (this.f$.cprof.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$AnnotationLabels$8$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$8", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-this.b$["jalview.appletgui.AnnotationLabels"].av.setShowSequenceLogo (true);
-this.b$["jalview.appletgui.AnnotationLabels"].ap.alignFrame.normSequenceLogo.setState (this.f$.cprofn.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].av.setNormaliseSequenceLogo (this.f$.cprofn.getState ());
-this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"ADDNEW", "Add New Row",
-"EDITNAME", "Edit Label/Description",
-"HIDE", "Hide This Row",
-"SHOWALL", "Show All Hidden Rows",
-"OUTPUT_TEXT", "Show Values In Textbox",
-"COPYCONS_SEQ", "Copy Consensus Sequence");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.AnnotationLabels", ["awt2swing.Checkbox", "$.CheckboxMenuItem", "$.Frame", "$.MenuItem", "$.PopupMenu", "jalview.analysis.AlignmentUtils", "jalview.appletgui.AlignFrame", "$.CutAndPasteTransfer", "$.EditNameDialog", "$.PaintRefresher", "$.Tooltip", "jalview.bin.JalviewLite", "jalview.datamodel.AlignmentAnnotation", "$.SequenceGroup", "jalview.util.MessageManager", "$.ParseHtmlBodyAndLinks", "java.awt.Color", "$.Dimension", "$.FlowLayout", "java.awt.event.ItemListener", "java.lang.StringBuffer", "java.util.Arrays", "$.Collections", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.image = null;
+this.active = false;
+this.ap = null;
+this.av = null;
+this.resizing = false;
+this.oldY = 0;
+this.mouseX = 0;
+this.scrollOffset = 0;
+this.selectedRow = -1;
+this.tooltip = null;
+this.hasHiddenRows = false;
+this.resizePanel = false;
+this.dragEvent = null;
+this.dragCancelled = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AnnotationLabels", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationLabels, []);
+this.ap = ap;
+this.av = ap.av;
+this.setLayout (null);
+this.addMouseListener (this);
+this.addMouseMotionListener (this);
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.makeConstructor (c$,
+function (av) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationLabels, []);
+this.av = av;
+}, "jalview.appletgui.AlignViewport");
+Clazz.defineMethod (c$, "setScrollOffset",
+function (y, repaint) {
+this.scrollOffset = y;
+if (repaint) {
+this.repaint ();
+}}, "~N,~B");
+Clazz.defineMethod (c$, "getSelectedRow",
+function (y) {
+var row = -2;
+var aa = this.ap.av.getAlignment ().getAlignmentAnnotation ();
+if (aa == null) {
+return row;
+}var height = 0;
+for (var i = 0; i < aa.length; i++) {
+row = -1;
+if (!aa[i].visible) {
+continue;
+}height += aa[i].height;
+if (y < height) {
+row = i;
+break;
+}}
+return row;
+}, "~N");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+var aa = this.av.getAlignment ().getAlignmentAnnotation ();
+if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.ADDNEW)) {
+var newAnnotation = new jalview.datamodel.AlignmentAnnotation ("", null, new Array (this.ap.av.getAlignment ().getWidth ()));
+if (!this.editLabelDescription (newAnnotation)) {
+return;
+}this.ap.av.getAlignment ().addAnnotation (newAnnotation);
+this.ap.av.getAlignment ().setAnnotationIndex (newAnnotation, 0);
+} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.EDITNAME)) {
+this.editLabelDescription (aa[this.selectedRow]);
+} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.HIDE)) {
+aa[this.selectedRow].visible = false;
+} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.SHOWALL)) {
+for (var i = 0; i < aa.length; i++) {
+aa[i].visible = (aa[i].annotations == null) ? false : true;
+}
+} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.OUTPUT_TEXT)) {
+var cap = new jalview.appletgui.CutAndPasteTransfer (false, this.ap.alignFrame);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, this.ap.alignFrame.getTitle () + " - " + aa[this.selectedRow].label, 500, 100);
+cap.setText (aa[this.selectedRow].toString ());
+} else if (evt.getActionCommand ().equals (jalview.appletgui.AnnotationLabels.COPYCONS_SEQ)) {
+var cons = this.av.getConsensusSeq ();
+if (cons != null) {
+this.copy_annotseqtoclipboard (cons);
+}}this.refresh ();
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "refresh",
+function () {
+this.ap.annotationPanel.adjustPanelHeight ();
+this.setSize (this.getSize ().width, this.ap.annotationPanel.getSize ().height);
+this.ap.validate ();
+this.ap.paintAlignment (true);
+});
+Clazz.defineMethod (c$, "editLabelDescription",
+function (annotation) {
+var padGaps = new awt2swing.Checkbox ("Fill Empty Gaps With \"" + this.ap.av.getGapCharacter () + "\"", annotation.padGaps);
+var dialog = new jalview.appletgui.EditNameDialog (annotation.label, annotation.description, " Annotation Label", "Annotation Description", this.ap.alignFrame, "Edit Annotation Name / Description", 500, 180, false);
+var empty = new awt2swing.Panel ( new java.awt.FlowLayout ());
+empty.add (padGaps);
+dialog.add (empty);
+dialog.pack ();
+dialog.setVisible (true);
+if (dialog.accept) {
+annotation.label = dialog.getName ();
+annotation.description = dialog.getDescription ();
+annotation.setPadGaps (padGaps.getState (), this.av.getGapCharacter ());
+this.repaint ();
+return true;
+} else {
+return false;
+}}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+this.resizePanel = evt.getY () < 10 && evt.getX () < 14;
+var row = this.getSelectedRow (evt.getY () + this.scrollOffset);
+if (row > -1) {
+var phb = new jalview.util.ParseHtmlBodyAndLinks (this.av.getAlignment ().getAlignmentAnnotation ()[row].getDescription (true), true, "\n");
+if (this.tooltip == null) {
+this.tooltip = new jalview.appletgui.Tooltip (phb.getNonHtmlContent (), this);
+} else {
+this.tooltip.setTip (phb.getNonHtmlContent ());
+}} else if (this.tooltip != null) {
+this.tooltip.setTip ("");
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "cancelDrag",
+function () {
+this.dragEvent = null;
+this.dragCancelled = true;
+});
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+if (this.dragCancelled) {
+return;
+};this.dragEvent = evt;
+if (this.resizePanel) {
+var d = this.ap.annotationPanelHolder.getSize ();
+var e = this.ap.annotationSpaceFillerHolder.getSize ();
+var f = this.ap.seqPanelHolder.getSize ();
+var dif = evt.getY () - this.oldY;
+dif /= this.ap.av.getCharHeight ();
+dif *= this.ap.av.getCharHeight ();
+if ((d.height - dif) > 20 && (f.height + dif) > 20) {
+this.ap.annotationPanel.setSize (d.width, d.height - dif);
+this.setSize ( new java.awt.Dimension (e.width, d.height - dif));
+this.ap.annotationSpaceFillerHolder.setSize ( new java.awt.Dimension (e.width, d.height - dif));
+this.ap.annotationPanelHolder.setSize ( new java.awt.Dimension (d.width, d.height - dif));
+this.ap.apvscroll.setValues (this.ap.apvscroll.getValue (), d.height - dif, 0, this.av.calcPanelHeight ());
+f.height += dif;
+this.ap.seqPanelHolder.setPreferredSize (f);
+this.ap.setScrollValues (this.av.getStartRes (), this.av.getStartSeq ());
+this.ap.validate ();
+this.ap.addNotify ();
+}} else {
+var diff;
+if ((diff = 6 - evt.getY ()) > 0) {
+this.ap.apvscroll.setValue (this.ap.apvscroll.getValue () - diff);
+this.ap.adjustmentValueChanged (null);
+} else if ((0 < (diff = 6 - this.ap.annotationSpaceFillerHolder.getSize ().height + evt.getY ()))) {
+this.ap.apvscroll.setValue (this.ap.apvscroll.getValue () + diff);
+this.ap.adjustmentValueChanged (null);
+}this.repaint ();
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+if (!this.resizePanel && !this.dragCancelled) {
+var start = this.selectedRow;
+var end = this.getSelectedRow (evt.getY () + this.scrollOffset);
+if (start > -1 && start != end) {
+var startAA = this.ap.av.getAlignment ().getAlignmentAnnotation ()[start];
+if (end == -1) {
+end = this.ap.av.getAlignment ().getAlignmentAnnotation ().length - 1;
+}var endAA = this.ap.av.getAlignment ().getAlignmentAnnotation ()[end];
+this.ap.av.getAlignment ().getAlignmentAnnotation ()[end] = startAA;
+this.ap.av.getAlignment ().getAlignmentAnnotation ()[start] = endAA;
+}}this.resizePanel = false;
+this.dragEvent = null;
+this.dragCancelled = false;
+this.repaint ();
+this.ap.annotationPanel.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+if (evt.getY () < 10 && evt.getX () < 14) {
+this.resizePanel = true;
+this.repaint ();
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+this.dragCancelled = false;
+if (this.dragEvent == null) {
+this.resizePanel = false;
+} else {
+if (!this.resizePanel) {
+this.dragEvent = null;
+}}this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+this.oldY = evt.getY ();
+if (this.resizePanel) {
+return;
+}this.dragCancelled = false;
+this.selectedRow = this.getSelectedRow (evt.getY () + this.scrollOffset);
+var aa = this.ap.av.getAlignment ().getAlignmentAnnotation ();
+if ((evt.getModifiers () & 4) == 4) {
+var popup = new awt2swing.PopupMenu (jalview.util.MessageManager.getString ("label.annotations"));
+var item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.ADDNEW);
+item.addActionListener (this);
+popup.add (item);
+if (this.selectedRow < 0) {
+if (this.hasHiddenRows) {
+item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.SHOWALL);
+item.addActionListener (this);
+popup.add (item);
+}this.add (popup);
+popup.show (this, evt.getX (), evt.getY ());
+return;
+}item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.EDITNAME);
+item.addActionListener (this);
+popup.add (item);
+item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.HIDE);
+item.addActionListener (this);
+popup.add (item);
+if (this.selectedRow < aa.length) {
+if (aa[this.selectedRow].sequenceRef != null) {
+var label = aa[this.selectedRow].label;
+var hideType = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.hide_all") + " " + label);
+hideType.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$1") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$1, this, Clazz.cloneFinals ("label", label))));
+popup.add (hideType);
+}}if (this.hasHiddenRows) {
+item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.SHOWALL);
+item.addActionListener (this);
+popup.add (item);
+}this.add (popup);
+item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.OUTPUT_TEXT);
+item.addActionListener (this);
+popup.add (item);
+if (this.selectedRow < aa.length) {
+if (aa[this.selectedRow].autoCalculated) {
+if (aa[this.selectedRow].label.indexOf ("Consensus") > -1) {
+popup.addSeparator ();
+var cbmi = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.ignore_gaps_consensus"), (aa[this.selectedRow].groupRef != null) ? aa[this.selectedRow].groupRef.getIgnoreGapsConsensus () : this.ap.av.isIgnoreGapsConsensus ());
+var aaa = aa[this.selectedRow];
+cbmi.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$2") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$2, this, Clazz.cloneFinals ("aaa", aaa, "cbmi", cbmi))));
+popup.add (cbmi);
+if (aaa.groupRef != null) {
+var chist = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_group_histogram"), aa[this.selectedRow].groupRef.isShowConsensusHistogram ());
+chist.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$3") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$3, this, Clazz.cloneFinals ("aaa", aaa, "chist", chist))));
+popup.add (chist);
+var cprofl = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_group_logo"), aa[this.selectedRow].groupRef.isShowSequenceLogo ());
+cprofl.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$4") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$4$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$4, this, Clazz.cloneFinals ("aaa", aaa, "cprofl", cprofl))));
+popup.add (cprofl);
+var cprofn = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.normalise_group_logo"), aa[this.selectedRow].groupRef.isNormaliseSequenceLogo ());
+cprofn.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$5") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$5$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$5, this, Clazz.cloneFinals ("aaa", aaa, "cprofn", cprofn))));
+popup.add (cprofn);
+} else {
+var chist = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_histogram"), this.av.isShowConsensusHistogram ());
+chist.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$6") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$6$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$6, this, Clazz.cloneFinals ("chist", chist))));
+popup.add (chist);
+var cprof = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.show_logo"), this.av.isShowSequenceLogo ());
+cprof.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$7") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$7$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$7, this, Clazz.cloneFinals ("cprof", cprof))));
+popup.add (cprof);
+var cprofn = new awt2swing.CheckboxMenuItem (jalview.util.MessageManager.getString ("label.normalise_logo"), this.av.isNormaliseSequenceLogo ());
+cprofn.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.AnnotationLabels$8") ? 0 : jalview.appletgui.AnnotationLabels.$AnnotationLabels$8$ ()), Clazz.innerTypeInstance (jalview.appletgui.AnnotationLabels$8, this, Clazz.cloneFinals ("cprofn", cprofn))));
+popup.add (cprofn);
+}item = new awt2swing.MenuItem (jalview.appletgui.AnnotationLabels.COPYCONS_SEQ);
+item.addActionListener (this);
+popup.add (item);
+}}}popup.show (this, evt.getX (), evt.getY ());
+} else {
+if (this.selectedRow > -1 && this.selectedRow < aa.length) {
+if (aa[this.selectedRow].groupRef != null) {
+if (evt.getClickCount () >= 2) {
+this.ap.seqPanel.ap.idPanel.highlightSearchResults (null);
+this.ap.av.setSelectionGroup (aa[this.selectedRow].groupRef);
+this.ap.av.sendSelection ();
+this.ap.paintAlignment (false);
+jalview.appletgui.PaintRefresher.Refresh (this.ap, this.ap.av.getSequenceSetId ());
+} else {
+this.ap.seqPanel.ap.idPanel.highlightSearchResults (aa[this.selectedRow].groupRef.getSequences (null));
+}return;
+} else if (aa[this.selectedRow].sequenceRef != null) {
+if (evt.getClickCount () == 1) {
+this.ap.seqPanel.ap.idPanel.highlightSearchResults (java.util.Arrays.asList ( Clazz.newArray (-1, [aa[this.selectedRow].sequenceRef])));
+} else if (evt.getClickCount () >= 2) {
+this.ap.seqPanel.ap.idPanel.highlightSearchResults (null);
+var sg = this.ap.av.getSelectionGroup ();
+if (sg != null) {
+if (!(evt.isControlDown () || evt.isShiftDown ())) {
+sg = new jalview.datamodel.SequenceGroup (sg);
+sg.clear ();
+sg.addSequence (aa[this.selectedRow].sequenceRef, false);
+} else {
+if (evt.isControlDown ()) {
+sg.addOrRemove (aa[this.selectedRow].sequenceRef, true);
+} else {
+sg.addSequence (aa[this.selectedRow].sequenceRef, true);
+}}} else {
+sg = new jalview.datamodel.SequenceGroup ();
+sg.setStartRes (0);
+sg.setEndRes (this.ap.av.getAlignment ().getWidth () - 1);
+sg.addSequence (aa[this.selectedRow].sequenceRef, false);
+}this.ap.av.setSelectionGroup (sg);
+this.ap.paintAlignment (false);
+jalview.appletgui.PaintRefresher.Refresh (this.ap, this.ap.av.getSequenceSetId ());
+this.ap.av.sendSelection ();
+}}}}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "copy_annotseqtoclipboard",
+function (sq) {
+if (sq == null || sq.getLength () < 1) {
+return;
+}jalview.appletgui.AlignFrame.copiedSequences = new StringBuffer ();
+jalview.appletgui.AlignFrame.copiedSequences.append (sq.getName () + "\t" + sq.getStart () + "\t" + sq.getEnd () + "\t" + sq.getSequenceAsString () + "\n");
+if (this.av.hasHiddenColumns ()) {
+jalview.appletgui.AlignFrame.copiedHiddenColumns = new java.util.Vector ();
+for (var region, $region = this.av.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
+jalview.appletgui.AlignFrame.copiedHiddenColumns.addElement ( Clazz.newIntArray (-1, [region[0], region[1]]));
+}
+}}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+if (this.av.getWrapAlignment () || !this.av.isShowAnnotation ()) return;
+var w = this.getSize ().width;
+var h = this.getSize ().height;
+if (this.image == null || w != this.image.getWidth (this) || h != this.image.getHeight (this)) {
+this.image = this.createImage (w, this.ap.annotationPanel.getSize ().height);
+}this.drawComponent (this.image.getGraphics (), w);
+g.drawImage (this.image, 0, 0, this);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "drawComponent",
+function (g, width) {
+g.setFont (this.av.getFont ());
+var fm = g.getFontMetrics (this.av.getFont ());
+g.setColor (java.awt.Color.white);
+g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
+g.translate (0, -this.scrollOffset);
+g.setColor (java.awt.Color.black);
+var aa = this.av.getAlignment ().getAlignmentAnnotation ();
+var y = 0;
+var fy = g.getFont ().getSize ();
+var x = 0;
+var offset;
+if (aa != null) {
+this.hasHiddenRows = false;
+for (var i = 0; i < aa.length; i++) {
+if (!aa[i].visible) {
+this.hasHiddenRows = true;
+continue;
+}x = width - fm.stringWidth (aa[i].label) - 3;
+y += aa[i].height;
+offset = Clazz.doubleToInt (-(aa[i].height - fy) / 2);
+g.drawString (aa[i].label, x, y + offset);
+}
+}g.translate (0, +this.scrollOffset);
+if (this.resizePanel) {
+g.setColor (java.awt.Color.red);
+g.setPaintMode ();
+g.drawLine (2, 8, 5, 2);
+g.drawLine (5, 2, 8, 8);
+} else if (!this.dragCancelled && this.dragEvent != null && aa != null) {
+g.setColor (java.awt.Color.lightGray);
+g.drawString (aa[this.selectedRow].label, this.dragEvent.getX (), this.dragEvent.getY ());
+}if (!this.av.getWrapAlignment () && ((aa == null) || (aa.length < 1))) {
+g.setColor (java.awt.Color.black);
+g.drawString (jalview.util.MessageManager.getString ("label.right_click"), 2, 8);
+g.drawString (jalview.util.MessageManager.getString ("label.to_add_annotation"), 2, 18);
+}}, "java.awt.Graphics,~N");
+c$.$AnnotationLabels$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$1", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+jalview.analysis.AlignmentUtils.showOrHideSequenceAnnotations (this.b$["jalview.appletgui.AnnotationLabels"].ap.av.getAlignment (), java.util.Collections.singleton (this.f$.label), null, false, false);
+this.b$["jalview.appletgui.AnnotationLabels"].refresh ();
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationLabels$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$2", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+if (this.f$.aaa.groupRef != null) {
+this.f$.aaa.groupRef.setIgnoreGapsConsensus (this.f$.cbmi.getState ());
+} else {
+this.b$["jalview.appletgui.AnnotationLabels"].ap.av.setIgnoreGapsConsensus (this.f$.cbmi.getState (), this.b$["jalview.appletgui.AnnotationLabels"].ap);
+}this.b$["jalview.appletgui.AnnotationLabels"].ap.paintAlignment (true);
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationLabels$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$3", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+this.f$.aaa.groupRef.setShowConsensusHistogram (this.f$.chist.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationLabels$4$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$4", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+this.f$.aaa.groupRef.setshowSequenceLogo (this.f$.cprofl.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationLabels$5$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$5", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+this.f$.aaa.groupRef.setshowSequenceLogo (true);
+this.f$.aaa.groupRef.setNormaliseSequenceLogo (this.f$.cprofn.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationLabels$6$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$6", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+this.b$["jalview.appletgui.AnnotationLabels"].av.setShowConsensusHistogram (this.f$.chist.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.alignFrame.showConsensusHistogram.setState (this.f$.chist.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationLabels$7$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$7", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+this.b$["jalview.appletgui.AnnotationLabels"].av.setShowSequenceLogo (this.f$.cprof.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.alignFrame.showSequenceLogo.setState (this.f$.cprof.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$AnnotationLabels$8$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "AnnotationLabels$8", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+this.b$["jalview.appletgui.AnnotationLabels"].av.setShowSequenceLogo (true);
+this.b$["jalview.appletgui.AnnotationLabels"].ap.alignFrame.normSequenceLogo.setState (this.f$.cprofn.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].av.setNormaliseSequenceLogo (this.f$.cprofn.getState ());
+this.b$["jalview.appletgui.AnnotationLabels"].ap.repaint ();
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"ADDNEW", "Add New Row",
+"EDITNAME", "Edit Label/Description",
+"HIDE", "Hide This Row",
+"SHOWALL", "Show All Hidden Rows",
+"OUTPUT_TEXT", "Show Values In Textbox",
+"COPYCONS_SEQ", "Copy Consensus Sequence");
+});
diff --git a/bin/jalview/appletgui/AnnotationPanel.class b/bin/jalview/appletgui/AnnotationPanel.class
index ec1d4ce..8d48e90 100644
Binary files a/bin/jalview/appletgui/AnnotationPanel.class and b/bin/jalview/appletgui/AnnotationPanel.class differ
diff --git a/bin/jalview/appletgui/AnnotationPanel.js b/bin/jalview/appletgui/AnnotationPanel.js
index 33f7259..6234bd3 100644
--- a/bin/jalview/appletgui/AnnotationPanel.js
+++ b/bin/jalview/appletgui/AnnotationPanel.js
@@ -1,364 +1,364 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "jalview.renderer.AwtRenderPanelI", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.MouseListener", "$.MouseMotionListener", "java.awt.Color"], "jalview.appletgui.AnnotationPanel", ["awt2swing.MenuItem", "$.PopupMenu", "jalview.appletgui.EditNameDialog", "$.UserDefinedColours", "jalview.datamodel.Annotation", "jalview.renderer.AnnotationRenderer", "jalview.util.MessageManager", "$.Platform", "java.awt.Dimension", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.av = null;
-this.ap = null;
-this.activeRow = -1;
-this.HELIX = "Helix";
-this.SHEET = "Sheet";
-this.STEM = "RNA Helix";
-this.LABEL = "Label";
-this.REMOVE = "Remove Annotation";
-this.COLOUR = "Colour";
-this.HELIX_COLOUR = null;
-this.SHEET_COLOUR = null;
-this.image = null;
-this.gg = null;
-this.fm = null;
-this.imgWidth = 0;
-this.$fastPaint = false;
-this.graphStretch = -1;
-this.graphStretchY = -1;
-this.mouseDragging = false;
-this.MAC = false;
-this.renderer = null;
-this.needValidating = false;
-this.scrollOffset = 0;
-this.$bounds = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AnnotationPanel", awt2swing.Panel, [jalview.renderer.AwtRenderPanelI, java.awt.event.AdjustmentListener, java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
-Clazz.prepareFields (c$, function () {
-this.HELIX_COLOUR = java.awt.Color.red.darker ();
-this.SHEET_COLOUR = java.awt.Color.green.darker ().darker ();
-this.$bounds = Clazz.newIntArray (2, 0);
-});
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationPanel, []);
-this.MAC = jalview.util.Platform.isAMac ();
-this.ap = ap;
-this.av = ap.av;
-this.setLayout (null);
-var height = this.adjustPanelHeight ();
-ap.apvscroll.setValues (0, this.getSize ().height, 0, height);
-this.addMouseMotionListener (this);
-this.addMouseListener (this);
-this.renderer = new jalview.renderer.AnnotationRenderer ();
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.makeConstructor (c$,
-function (av) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationPanel, []);
-this.av = av;
-this.renderer = new jalview.renderer.AnnotationRenderer ();
-}, "jalview.appletgui.AlignViewport");
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-}, "java.awt.event.AdjustmentEvent");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-var aa = this.av.getAlignment ().getAlignmentAnnotation ();
-if (aa == null) {
-return;
-}var anot = aa[this.activeRow].annotations;
-if (anot.length < this.av.getColumnSelection ().getMax ()) {
-var temp = new Array (this.av.getColumnSelection ().getMax () + 2);
-System.arraycopy (anot, 0, temp, 0, anot.length);
-anot = temp;
-aa[this.activeRow].annotations = anot;
-}var label = "";
-if (this.av.getColumnSelection () != null && this.av.getColumnSelection ().size () > 0 && anot[this.av.getColumnSelection ().getMin ()] != null) {
-label = anot[this.av.getColumnSelection ().getMin ()].displayCharacter;
-}if (evt.getActionCommand ().equals ("Remove Annotation")) {
-for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
-anot[this.av.getColumnSelection ().columnAt (i)] = null;
-}
-} else if (evt.getActionCommand ().equals ("Label")) {
-label = this.enterLabel (label, "Enter Label");
-if (label == null) {
-return;
-}if ((label.length > 0) && !aa[this.activeRow].hasText) {
-aa[this.activeRow].hasText = true;
-}for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
-var index = this.av.getColumnSelection ().columnAt (i);
-if (!this.av.getColumnSelection ().isVisible (index)) {
-continue;
-}if (anot[index] == null) {
-anot[index] = new jalview.datamodel.Annotation (label, "", ' ', 0);
-}anot[index].displayCharacter = label;
-}
-} else if (evt.getActionCommand ().equals ("Colour")) {
-var udc = new jalview.appletgui.UserDefinedColours (this, java.awt.Color.black, this.ap.alignFrame);
-var col = udc.getColor ();
-for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
-var index = this.av.getColumnSelection ().columnAt (i);
-if (!this.av.getColumnSelection ().isVisible (index)) {
-continue;
-}if (anot[index] == null) {
-anot[index] = new jalview.datamodel.Annotation ("", "", ' ', 0);
-}anot[index].colour = col;
-}
-} else {
-var type = String.fromCharCode (0);
-var symbol = "\u03B1";
-if (evt.getActionCommand ().equals ("Helix")) {
-type = 'H';
-} else if (evt.getActionCommand ().equals ("Sheet")) {
-type = 'E';
-symbol = "\u03B2";
-} else if (evt.getActionCommand ().equals ("RNA Helix")) {
-type = 'S';
-symbol = "\u03C3";
-}if (!aa[this.activeRow].hasIcons) {
-aa[this.activeRow].hasIcons = true;
-}label = this.enterLabel (symbol, "Enter Label");
-if (label == null) {
-return;
-}if ((label.length > 0) && !aa[this.activeRow].hasText) {
-aa[this.activeRow].hasText = true;
-if (evt.getActionCommand ().equals ("RNA Helix")) {
-aa[this.activeRow].showAllColLabels = true;
-}}for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
-var index = this.av.getColumnSelection ().columnAt (i);
-if (!this.av.getColumnSelection ().isVisible (index)) {
-continue;
-}if (anot[index] == null) {
-anot[index] = new jalview.datamodel.Annotation (label, "", type, 0);
-}anot[index].secondaryStructure = type != 'S' ? type : label.length == 0 ? ' ' : label.charAt (0);
-anot[index].displayCharacter = label;
-}
-}this.av.getAlignment ().validateAnnotation (aa[this.activeRow]);
-this.ap.alignmentChanged ();
-this.adjustPanelHeight ();
-this.repaint ();
-return;
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "enterLabel",
-function (text, label) {
-var dialog = new jalview.appletgui.EditNameDialog (text, null, label, null, this.ap.alignFrame, "Enter Label", 400, 200, true);
-if (dialog.accept) {
-return dialog.getName ();
-} else {
-return null;
-}}, "~S,~S");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-var aa = this.av.getAlignment ().getAlignmentAnnotation ();
-if (aa == null) {
-return;
-}var height = -this.scrollOffset;
-this.activeRow = -1;
-for (var i = 0; i < aa.length; i++) {
-if (aa[i].visible) {
-height += aa[i].height;
-}if (evt.getY () < height) {
-if (aa[i].editable) {
-this.activeRow = i;
-} else if (aa[i].graph > 0) {
-this.graphStretch = i;
-this.graphStretchY = evt.getY ();
-}break;
-}}
-if ((evt.getModifiers () & 4) == 4 && this.activeRow != -1) {
-if (this.av.getColumnSelection () == null) {
-return;
-}var pop = new awt2swing.PopupMenu (jalview.util.MessageManager.getString ("label.structure_type"));
-var item;
-if (this.av.getAlignment ().isNucleotide () == true) {
-item = new awt2swing.MenuItem ("RNA Helix");
-item.addActionListener (this);
-pop.add (item);
-} else {
-item = new awt2swing.MenuItem ("Helix");
-item.addActionListener (this);
-pop.add (item);
-item = new awt2swing.MenuItem ("Sheet");
-item.addActionListener (this);
-pop.add (item);
-}item = new awt2swing.MenuItem ("Label");
-item.addActionListener (this);
-pop.add (item);
-item = new awt2swing.MenuItem ("Colour");
-item.addActionListener (this);
-pop.add (item);
-item = new awt2swing.MenuItem ("Remove Annotation");
-item.addActionListener (this);
-pop.add (item);
-this.ap.alignFrame.add (pop);
-pop.show (this, evt.getX (), evt.getY ());
-return;
-}this.ap.scalePanel.mousePressed (evt);
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-this.graphStretch = -1;
-this.graphStretchY = -1;
-this.mouseDragging = false;
-if (this.needValidating) {
-this.ap.validate ();
-this.needValidating = false;
-}this.ap.scalePanel.mouseReleased (evt);
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-if (this.graphStretch > -1) {
-this.av.getAlignment ().getAlignmentAnnotation ()[this.graphStretch].graphHeight += this.graphStretchY - evt.getY ();
-if (this.av.getAlignment ().getAlignmentAnnotation ()[this.graphStretch].graphHeight < 0) {
-this.av.getAlignment ().getAlignmentAnnotation ()[this.graphStretch].graphHeight = 0;
-}this.graphStretchY = evt.getY ();
-this.av.calcPanelHeight ();
-this.needValidating = true;
-this.ap.paintAlignment (true);
-} else {
-this.ap.scalePanel.mouseDragged (evt);
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-var aa = this.av.getAlignment ().getAlignmentAnnotation ();
-if (aa == null) {
-return;
-}var row = -1;
-var height = -this.scrollOffset;
-for (var i = 0; i < aa.length; i++) {
-if (aa[i].visible) {
-height += aa[i].height;
-}if (evt.getY () < height) {
-row = i;
-break;
-}}
-var res = Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ()) + this.av.getStartRes ();
-if (this.av.hasHiddenColumns ()) {
-res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
-}if (row > -1 && res < aa[row].annotations.length && aa[row].annotations[res] != null) {
-var text = new StringBuffer ("Sequence position " + (res + 1));
-if (aa[row].annotations[res].description != null) {
-text.append (" " + aa[row].annotations[res].description);
-}this.ap.alignFrame.setStatus (text.toString ());
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-this.ap.scalePanel.mouseEntered (evt);
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-this.ap.scalePanel.mouseExited (evt);
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "adjustPanelHeight",
-function () {
-return this.adjustPanelHeight (true);
-});
-Clazz.defineMethod (c$, "adjustPanelHeight",
-function (repaint) {
-var height = this.av.calcPanelHeight ();
-this.setSize ( new java.awt.Dimension (this.getSize ().width, height));
-if (repaint) {
-this.repaint ();
-}return height;
-}, "~B");
-Clazz.defineMethod (c$, "addEditableColumn",
-function (i) {
-if (this.activeRow == -1) {
-var aa = this.av.getAlignment ().getAlignmentAnnotation ();
-if (aa == null) {
-return;
-}for (var j = 0; j < aa.length; j++) {
-if (aa[j].editable) {
-this.activeRow = j;
-break;
-}}
-}}, "~N");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-if (this.av.getWrapAlignment () || !this.av.isShowAnnotation ()) return;
-var d = this.getSize ();
-this.imgWidth = d.width;
-if (this.imgWidth < 1 || d.height < 1) {
-return;
-}if (this.image == null || this.imgWidth != this.image.getWidth (this) || d.height != this.image.getHeight (this)) {
-this.image = this.createImage (this.imgWidth, d.height);
-this.gg = this.image.getGraphics ();
-this.gg.setFont (this.av.getFont ());
-this.fm = this.gg.getFontMetrics ();
-this.$fastPaint = false;
-}if (this.$fastPaint) {
-g.drawImage (this.image, 0, 0, this);
-this.$fastPaint = false;
-return;
-}this.gg.setColor (java.awt.Color.white);
-this.gg.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
-this.drawComponent (this.gg, this.av.startRes, this.av.endRes + 1);
-g.drawImage (this.image, 0, 0, this);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "fastPaint",
-function (horizontal) {
-if (horizontal == 0 || this.av.getAlignment ().getAlignmentAnnotation () == null || this.av.getAlignment ().getAlignmentAnnotation ().length < 1) {
-this.repaint ();
-return;
-}this.gg.copyArea (0, 0, this.imgWidth, this.getSize ().height, -horizontal * this.av.getCharWidth (), 0);
-var sr = this.av.startRes;
-var er = this.av.endRes + 1;
-var transX = 0;
-if (horizontal > 0) {
-transX = (er - sr - horizontal) * this.av.getCharWidth ();
-sr = er - horizontal;
-} else if (horizontal < 0) {
-er = sr - horizontal;
-}this.gg.translate (transX, 0);
-this.drawComponent (this.gg, sr, er);
-this.gg.translate (-transX, 0);
-this.$fastPaint = true;
-this.repaint ();
-}, "~N");
-Clazz.defineMethod (c$, "drawComponent",
-function (g, startRes, endRes) {
-var ofont = this.av.getFont ();
-g.setFont (ofont);
-g.setColor (java.awt.Color.white);
-g.fillRect (0, 0, (endRes - startRes) * this.av.getCharWidth (), this.getSize ().height);
-if (this.fm == null) {
-this.fm = g.getFontMetrics ();
-}if ((this.av.getAlignment ().getAlignmentAnnotation () == null) || (this.av.getAlignment ().getAlignmentAnnotation ().length < 1)) {
-g.setColor (java.awt.Color.white);
-g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
-g.setColor (java.awt.Color.black);
-if (this.av.validCharWidth) {
-g.drawString (jalview.util.MessageManager.getString ("label.alignment_has_no_annotations"), 20, 15);
-}return;
-}g.translate (0, -this.scrollOffset);
-this.renderer.drawComponent (this, this.av, g, this.activeRow, startRes, endRes);
-g.translate (0, +this.scrollOffset);
-}, "java.awt.Graphics,~N,~N");
-Clazz.defineMethod (c$, "setScrollOffset",
-function (value, repaint) {
-this.scrollOffset = value;
-if (repaint) {
-this.repaint ();
-}}, "~N,~B");
-Clazz.defineMethod (c$, "getFontMetrics",
-function () {
-return this.fm;
-});
-Clazz.overrideMethod (c$, "getFadedImage",
-function () {
-return this.image;
-});
-Clazz.overrideMethod (c$, "getFadedImageWidth",
-function () {
-return this.imgWidth;
-});
-Clazz.overrideMethod (c$, "getVisibleVRange",
-function () {
-if (this.ap != null && this.ap.alabels != null) {
-var sOffset = -this.ap.alabels.scrollOffset;
-var visHeight = sOffset + this.ap.annotationPanelHolder.getHeight ();
-this.$bounds[0] = sOffset;
-this.$bounds[1] = visHeight;
-return this.$bounds;
-} else {
-return null;
-}});
-Clazz.defineStatics (c$,
-"GRAPH_HEIGHT", 40);
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.renderer.AwtRenderPanelI", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.MouseListener", "$.MouseMotionListener", "java.awt.Color"], "jalview.appletgui.AnnotationPanel", ["awt2swing.MenuItem", "$.PopupMenu", "jalview.appletgui.EditNameDialog", "$.UserDefinedColours", "jalview.datamodel.Annotation", "jalview.renderer.AnnotationRenderer", "jalview.util.MessageManager", "$.Platform", "java.awt.Dimension", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.ap = null;
+this.activeRow = -1;
+this.HELIX = "Helix";
+this.SHEET = "Sheet";
+this.STEM = "RNA Helix";
+this.LABEL = "Label";
+this.REMOVE = "Remove Annotation";
+this.COLOUR = "Colour";
+this.HELIX_COLOUR = null;
+this.SHEET_COLOUR = null;
+this.image = null;
+this.gg = null;
+this.fm = null;
+this.imgWidth = 0;
+this.$fastPaint = false;
+this.graphStretch = -1;
+this.graphStretchY = -1;
+this.mouseDragging = false;
+this.MAC = false;
+this.renderer = null;
+this.needValidating = false;
+this.scrollOffset = 0;
+this.$bounds = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AnnotationPanel", awt2swing.Panel, [jalview.renderer.AwtRenderPanelI, java.awt.event.AdjustmentListener, java.awt.event.ActionListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
+Clazz.prepareFields (c$, function () {
+this.HELIX_COLOUR = java.awt.Color.red.darker ();
+this.SHEET_COLOUR = java.awt.Color.green.darker ().darker ();
+this.$bounds = Clazz.newIntArray (2, 0);
+});
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationPanel, []);
+this.MAC = jalview.util.Platform.isAMac ();
+this.ap = ap;
+this.av = ap.av;
+this.setLayout (null);
+var height = this.adjustPanelHeight ();
+ap.apvscroll.setValues (0, this.getSize ().height, 0, height);
+this.addMouseMotionListener (this);
+this.addMouseListener (this);
+this.renderer = new jalview.renderer.AnnotationRenderer ();
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.makeConstructor (c$,
+function (av) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationPanel, []);
+this.av = av;
+this.renderer = new jalview.renderer.AnnotationRenderer ();
+}, "jalview.appletgui.AlignViewport");
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+}, "java.awt.event.AdjustmentEvent");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+var aa = this.av.getAlignment ().getAlignmentAnnotation ();
+if (aa == null) {
+return;
+}var anot = aa[this.activeRow].annotations;
+if (anot.length < this.av.getColumnSelection ().getMax ()) {
+var temp = new Array (this.av.getColumnSelection ().getMax () + 2);
+System.arraycopy (anot, 0, temp, 0, anot.length);
+anot = temp;
+aa[this.activeRow].annotations = anot;
+}var label = "";
+if (this.av.getColumnSelection () != null && this.av.getColumnSelection ().size () > 0 && anot[this.av.getColumnSelection ().getMin ()] != null) {
+label = anot[this.av.getColumnSelection ().getMin ()].displayCharacter;
+}if (evt.getActionCommand ().equals ("Remove Annotation")) {
+for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
+anot[this.av.getColumnSelection ().columnAt (i)] = null;
+}
+} else if (evt.getActionCommand ().equals ("Label")) {
+label = this.enterLabel (label, "Enter Label");
+if (label == null) {
+return;
+}if ((label.length > 0) && !aa[this.activeRow].hasText) {
+aa[this.activeRow].hasText = true;
+}for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
+var index = this.av.getColumnSelection ().columnAt (i);
+if (!this.av.getColumnSelection ().isVisible (index)) {
+continue;
+}if (anot[index] == null) {
+anot[index] = new jalview.datamodel.Annotation (label, "", ' ', 0);
+}anot[index].displayCharacter = label;
+}
+} else if (evt.getActionCommand ().equals ("Colour")) {
+var udc = new jalview.appletgui.UserDefinedColours (this, java.awt.Color.black, this.ap.alignFrame);
+var col = udc.getColor ();
+for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
+var index = this.av.getColumnSelection ().columnAt (i);
+if (!this.av.getColumnSelection ().isVisible (index)) {
+continue;
+}if (anot[index] == null) {
+anot[index] = new jalview.datamodel.Annotation ("", "", ' ', 0);
+}anot[index].colour = col;
+}
+} else {
+var type = String.fromCharCode (0);
+var symbol = "\u03B1";
+if (evt.getActionCommand ().equals ("Helix")) {
+type = 'H';
+} else if (evt.getActionCommand ().equals ("Sheet")) {
+type = 'E';
+symbol = "\u03B2";
+} else if (evt.getActionCommand ().equals ("RNA Helix")) {
+type = 'S';
+symbol = "\u03C3";
+}if (!aa[this.activeRow].hasIcons) {
+aa[this.activeRow].hasIcons = true;
+}label = this.enterLabel (symbol, "Enter Label");
+if (label == null) {
+return;
+}if ((label.length > 0) && !aa[this.activeRow].hasText) {
+aa[this.activeRow].hasText = true;
+if (evt.getActionCommand ().equals ("RNA Helix")) {
+aa[this.activeRow].showAllColLabels = true;
+}}for (var i = 0; i < this.av.getColumnSelection ().size (); i++) {
+var index = this.av.getColumnSelection ().columnAt (i);
+if (!this.av.getColumnSelection ().isVisible (index)) {
+continue;
+}if (anot[index] == null) {
+anot[index] = new jalview.datamodel.Annotation (label, "", type, 0);
+}anot[index].secondaryStructure = type != 'S' ? type : label.length == 0 ? ' ' : label.charAt (0);
+anot[index].displayCharacter = label;
+}
+}this.av.getAlignment ().validateAnnotation (aa[this.activeRow]);
+this.ap.alignmentChanged ();
+this.adjustPanelHeight ();
+this.repaint ();
+return;
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "enterLabel",
+function (text, label) {
+var dialog = new jalview.appletgui.EditNameDialog (text, null, label, null, this.ap.alignFrame, "Enter Label", 400, 200, true);
+if (dialog.accept) {
+return dialog.getName ();
+} else {
+return null;
+}}, "~S,~S");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+var aa = this.av.getAlignment ().getAlignmentAnnotation ();
+if (aa == null) {
+return;
+}var height = -this.scrollOffset;
+this.activeRow = -1;
+for (var i = 0; i < aa.length; i++) {
+if (aa[i].visible) {
+height += aa[i].height;
+}if (evt.getY () < height) {
+if (aa[i].editable) {
+this.activeRow = i;
+} else if (aa[i].graph > 0) {
+this.graphStretch = i;
+this.graphStretchY = evt.getY ();
+}break;
+}}
+if ((evt.getModifiers () & 4) == 4 && this.activeRow != -1) {
+if (this.av.getColumnSelection () == null) {
+return;
+}var pop = new awt2swing.PopupMenu (jalview.util.MessageManager.getString ("label.structure_type"));
+var item;
+if (this.av.getAlignment ().isNucleotide () == true) {
+item = new awt2swing.MenuItem ("RNA Helix");
+item.addActionListener (this);
+pop.add (item);
+} else {
+item = new awt2swing.MenuItem ("Helix");
+item.addActionListener (this);
+pop.add (item);
+item = new awt2swing.MenuItem ("Sheet");
+item.addActionListener (this);
+pop.add (item);
+}item = new awt2swing.MenuItem ("Label");
+item.addActionListener (this);
+pop.add (item);
+item = new awt2swing.MenuItem ("Colour");
+item.addActionListener (this);
+pop.add (item);
+item = new awt2swing.MenuItem ("Remove Annotation");
+item.addActionListener (this);
+pop.add (item);
+this.ap.alignFrame.add (pop);
+pop.show (this, evt.getX (), evt.getY ());
+return;
+}this.ap.scalePanel.mousePressed (evt);
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+this.graphStretch = -1;
+this.graphStretchY = -1;
+this.mouseDragging = false;
+if (this.needValidating) {
+this.ap.validate ();
+this.needValidating = false;
+}this.ap.scalePanel.mouseReleased (evt);
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+if (this.graphStretch > -1) {
+this.av.getAlignment ().getAlignmentAnnotation ()[this.graphStretch].graphHeight += this.graphStretchY - evt.getY ();
+if (this.av.getAlignment ().getAlignmentAnnotation ()[this.graphStretch].graphHeight < 0) {
+this.av.getAlignment ().getAlignmentAnnotation ()[this.graphStretch].graphHeight = 0;
+}this.graphStretchY = evt.getY ();
+this.av.calcPanelHeight ();
+this.needValidating = true;
+this.ap.paintAlignment (true);
+} else {
+this.ap.scalePanel.mouseDragged (evt);
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+var aa = this.av.getAlignment ().getAlignmentAnnotation ();
+if (aa == null) {
+return;
+}var row = -1;
+var height = -this.scrollOffset;
+for (var i = 0; i < aa.length; i++) {
+if (aa[i].visible) {
+height += aa[i].height;
+}if (evt.getY () < height) {
+row = i;
+break;
+}}
+var res = Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ()) + this.av.getStartRes ();
+if (this.av.hasHiddenColumns ()) {
+res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
+}if (row > -1 && res < aa[row].annotations.length && aa[row].annotations[res] != null) {
+var text = new StringBuffer ("Sequence position " + (res + 1));
+if (aa[row].annotations[res].description != null) {
+text.append (" " + aa[row].annotations[res].description);
+}this.ap.alignFrame.setStatus (text.toString ());
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+this.ap.scalePanel.mouseEntered (evt);
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+this.ap.scalePanel.mouseExited (evt);
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "adjustPanelHeight",
+function () {
+return this.adjustPanelHeight (true);
+});
+Clazz.defineMethod (c$, "adjustPanelHeight",
+function (repaint) {
+var height = this.av.calcPanelHeight ();
+this.setSize ( new java.awt.Dimension (this.getSize ().width, height));
+if (repaint) {
+this.repaint ();
+}return height;
+}, "~B");
+Clazz.defineMethod (c$, "addEditableColumn",
+function (i) {
+if (this.activeRow == -1) {
+var aa = this.av.getAlignment ().getAlignmentAnnotation ();
+if (aa == null) {
+return;
+}for (var j = 0; j < aa.length; j++) {
+if (aa[j].editable) {
+this.activeRow = j;
+break;
+}}
+}}, "~N");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+if (this.av.getWrapAlignment () || !this.av.isShowAnnotation ()) return;
+var d = this.getSize ();
+this.imgWidth = d.width;
+if (this.imgWidth < 1 || d.height < 1) {
+return;
+}if (this.image == null || this.imgWidth != this.image.getWidth (this) || d.height != this.image.getHeight (this)) {
+this.image = this.createImage (this.imgWidth, d.height);
+this.gg = this.image.getGraphics ();
+this.gg.setFont (this.av.getFont ());
+this.fm = this.gg.getFontMetrics ();
+this.$fastPaint = false;
+}if (this.$fastPaint) {
+g.drawImage (this.image, 0, 0, this);
+this.$fastPaint = false;
+return;
+}this.gg.setColor (java.awt.Color.white);
+this.gg.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
+this.drawComponent (this.gg, this.av.startRes, this.av.endRes + 1);
+g.drawImage (this.image, 0, 0, this);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "fastPaint",
+function (horizontal) {
+if (horizontal == 0 || this.av.getAlignment ().getAlignmentAnnotation () == null || this.av.getAlignment ().getAlignmentAnnotation ().length < 1) {
+this.repaint ();
+return;
+}this.gg.copyArea (0, 0, this.imgWidth, this.getSize ().height, -horizontal * this.av.getCharWidth (), 0);
+var sr = this.av.startRes;
+var er = this.av.endRes + 1;
+var transX = 0;
+if (horizontal > 0) {
+transX = (er - sr - horizontal) * this.av.getCharWidth ();
+sr = er - horizontal;
+} else if (horizontal < 0) {
+er = sr - horizontal;
+}this.gg.translate (transX, 0);
+this.drawComponent (this.gg, sr, er);
+this.gg.translate (-transX, 0);
+this.$fastPaint = true;
+this.repaint ();
+}, "~N");
+Clazz.defineMethod (c$, "drawComponent",
+function (g, startRes, endRes) {
+var ofont = this.av.getFont ();
+g.setFont (ofont);
+g.setColor (java.awt.Color.white);
+g.fillRect (0, 0, (endRes - startRes) * this.av.getCharWidth (), this.getSize ().height);
+if (this.fm == null) {
+this.fm = g.getFontMetrics ();
+}if ((this.av.getAlignment ().getAlignmentAnnotation () == null) || (this.av.getAlignment ().getAlignmentAnnotation ().length < 1)) {
+g.setColor (java.awt.Color.white);
+g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
+g.setColor (java.awt.Color.black);
+if (this.av.validCharWidth) {
+g.drawString (jalview.util.MessageManager.getString ("label.alignment_has_no_annotations"), 20, 15);
+}return;
+}g.translate (0, -this.scrollOffset);
+this.renderer.drawComponent (this, this.av, g, this.activeRow, startRes, endRes);
+g.translate (0, +this.scrollOffset);
+}, "java.awt.Graphics,~N,~N");
+Clazz.defineMethod (c$, "setScrollOffset",
+function (value, repaint) {
+this.scrollOffset = value;
+if (repaint) {
+this.repaint ();
+}}, "~N,~B");
+Clazz.defineMethod (c$, "getFontMetrics",
+function () {
+return this.fm;
+});
+Clazz.overrideMethod (c$, "getFadedImage",
+function () {
+return this.image;
+});
+Clazz.overrideMethod (c$, "getFadedImageWidth",
+function () {
+return this.imgWidth;
+});
+Clazz.overrideMethod (c$, "getVisibleVRange",
+function () {
+if (this.ap != null && this.ap.alabels != null) {
+var sOffset = -this.ap.alabels.scrollOffset;
+var visHeight = sOffset + this.ap.annotationPanelHolder.getHeight ();
+this.$bounds[0] = sOffset;
+this.$bounds[1] = visHeight;
+return this.$bounds;
+} else {
+return null;
+}});
+Clazz.defineStatics (c$,
+"GRAPH_HEIGHT", 40);
+});
diff --git a/bin/jalview/appletgui/AnnotationRowFilter.js b/bin/jalview/appletgui/AnnotationRowFilter.js
index 8b9fe70..aafbcad 100644
--- a/bin/jalview/appletgui/AnnotationRowFilter.js
+++ b/bin/jalview/appletgui/AnnotationRowFilter.js
@@ -1,131 +1,131 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "$.Button", "$.Checkbox", "$.Scrollbar", "$.TextField"], "jalview.appletgui.AnnotationRowFilter", ["jalview.util.MessageManager", "java.lang.Float", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.av = null;
-this.ap = null;
-this.annmap = null;
-this.enableSeqAss = false;
-this.currentAnnotation = null;
-this.adjusting = false;
-this.currentColours = null;
-this.minColour = null;
-this.maxColour = null;
-this.seqAssociated = null;
-this.thresholdIsMin = null;
-this.slider = null;
-this.thresholdValue = null;
-this.frame = null;
-this.ok = null;
-this.cancel = null;
-this.sliderDragging = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AnnotationRowFilter", awt2swing.Panel);
-Clazz.prepareFields (c$, function () {
-this.currentColours = new awt2swing.Checkbox ();
-this.minColour = new awt2swing.Panel ();
-this.maxColour = new awt2swing.Panel ();
-this.seqAssociated = new awt2swing.Checkbox ();
-this.thresholdIsMin = new awt2swing.Checkbox ();
-this.slider = new awt2swing.Scrollbar (0);
-this.thresholdValue = new awt2swing.TextField (20);
-this.ok = new awt2swing.Button ();
-this.cancel = new awt2swing.Button ();
-});
-Clazz.makeConstructor (c$,
-function (av, ap) {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationRowFilter, []);
-this.av = av;
-this.ap = ap;
-}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.appletgui.AnnotationRowFilter, []);
-});
-Clazz.defineMethod (c$, "getAnnotationItems",
-function (isSeqAssociated) {
-var list = new java.util.Vector ();
-var index = 1;
-var anmap = Clazz.newIntArray (this.av.getAlignment ().getAlignmentAnnotation ().length, 0);
-for (var i = 0; i < this.av.getAlignment ().getAlignmentAnnotation ().length; i++) {
-if (this.av.getAlignment ().getAlignmentAnnotation ()[i].sequenceRef == null) {
-if (isSeqAssociated) {
-continue;
-}} else {
-this.enableSeqAss = true;
-}var label = this.av.getAlignment ().getAlignmentAnnotation ()[i].label;
-if (!list.contains (label)) {
-anmap[list.size ()] = i;
-list.add (label);
-} else {
-if (!isSeqAssociated) {
-anmap[list.size ()] = i;
-list.add (label + "_" + (index++));
-}}}
-this.annmap = Clazz.newIntArray (list.size (), 0);
-System.arraycopy (anmap, 0, this.annmap, 0, this.annmap.length);
-return list;
-}, "~B");
-Clazz.defineMethod (c$, "getSelectedThresholdItem",
-function (indexValue) {
-var selectedThresholdItem = -1;
-if (indexValue == 1) {
-selectedThresholdItem = 1;
-} else if (indexValue == 2) {
-selectedThresholdItem = 0;
-}return selectedThresholdItem;
-}, "~N");
-Clazz.defineMethod (c$, "modelChanged",
-function () {
-this.seqAssociated.setEnabled (this.enableSeqAss);
-});
-Clazz.defineMethod (c$, "ok_actionPerformed",
-function (e) {
-this.updateView ();
-this.frame.setVisible (false);
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "cancel_actionPerformed",
-function (e) {
-this.reset ();
-this.ap.paintAlignment (true);
-this.frame.setVisible (false);
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "thresholdCheck_actionPerformed",
-function (e) {
-this.updateView ();
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "annotations_actionPerformed",
-function (e) {
-this.updateView ();
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "threshold_actionPerformed",
-function (e) {
-this.updateView ();
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "thresholdValue_actionPerformed",
-function (e) {
-try {
-var f = Float.parseFloat (this.thresholdValue.getText ());
-this.slider.setValue (Clazz.floatToInt (f * 1000));
-this.updateView ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "populateThresholdComboBox",
-function (threshold) {
-threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_no_thereshold"));
-threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_above_thereshold"));
-threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_below_thereshold"));
-}, "awt2swing.Choice");
-Clazz.defineMethod (c$, "getCurrentAnnotation",
-function () {
-return this.currentAnnotation;
-});
-Clazz.defineMethod (c$, "setCurrentAnnotation",
-function (currentAnnotation) {
-this.currentAnnotation = currentAnnotation;
-}, "jalview.datamodel.AlignmentAnnotation");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "$.Button", "$.Checkbox", "$.Scrollbar", "$.TextField"], "jalview.appletgui.AnnotationRowFilter", ["jalview.util.MessageManager", "java.lang.Float", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.ap = null;
+this.annmap = null;
+this.enableSeqAss = false;
+this.currentAnnotation = null;
+this.adjusting = false;
+this.currentColours = null;
+this.minColour = null;
+this.maxColour = null;
+this.seqAssociated = null;
+this.thresholdIsMin = null;
+this.slider = null;
+this.thresholdValue = null;
+this.frame = null;
+this.ok = null;
+this.cancel = null;
+this.sliderDragging = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AnnotationRowFilter", awt2swing.Panel);
+Clazz.prepareFields (c$, function () {
+this.currentColours = new awt2swing.Checkbox ();
+this.minColour = new awt2swing.Panel ();
+this.maxColour = new awt2swing.Panel ();
+this.seqAssociated = new awt2swing.Checkbox ();
+this.thresholdIsMin = new awt2swing.Checkbox ();
+this.slider = new awt2swing.Scrollbar (0);
+this.thresholdValue = new awt2swing.TextField (20);
+this.ok = new awt2swing.Button ();
+this.cancel = new awt2swing.Button ();
+});
+Clazz.makeConstructor (c$,
+function (av, ap) {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationRowFilter, []);
+this.av = av;
+this.ap = ap;
+}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.appletgui.AnnotationRowFilter, []);
+});
+Clazz.defineMethod (c$, "getAnnotationItems",
+function (isSeqAssociated) {
+var list = new java.util.Vector ();
+var index = 1;
+var anmap = Clazz.newIntArray (this.av.getAlignment ().getAlignmentAnnotation ().length, 0);
+for (var i = 0; i < this.av.getAlignment ().getAlignmentAnnotation ().length; i++) {
+if (this.av.getAlignment ().getAlignmentAnnotation ()[i].sequenceRef == null) {
+if (isSeqAssociated) {
+continue;
+}} else {
+this.enableSeqAss = true;
+}var label = this.av.getAlignment ().getAlignmentAnnotation ()[i].label;
+if (!list.contains (label)) {
+anmap[list.size ()] = i;
+list.add (label);
+} else {
+if (!isSeqAssociated) {
+anmap[list.size ()] = i;
+list.add (label + "_" + (index++));
+}}}
+this.annmap = Clazz.newIntArray (list.size (), 0);
+System.arraycopy (anmap, 0, this.annmap, 0, this.annmap.length);
+return list;
+}, "~B");
+Clazz.defineMethod (c$, "getSelectedThresholdItem",
+function (indexValue) {
+var selectedThresholdItem = -1;
+if (indexValue == 1) {
+selectedThresholdItem = 1;
+} else if (indexValue == 2) {
+selectedThresholdItem = 0;
+}return selectedThresholdItem;
+}, "~N");
+Clazz.defineMethod (c$, "modelChanged",
+function () {
+this.seqAssociated.setEnabled (this.enableSeqAss);
+});
+Clazz.defineMethod (c$, "ok_actionPerformed",
+function (e) {
+this.updateView ();
+this.frame.setVisible (false);
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "cancel_actionPerformed",
+function (e) {
+this.reset ();
+this.ap.paintAlignment (true);
+this.frame.setVisible (false);
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "thresholdCheck_actionPerformed",
+function (e) {
+this.updateView ();
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "annotations_actionPerformed",
+function (e) {
+this.updateView ();
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "threshold_actionPerformed",
+function (e) {
+this.updateView ();
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "thresholdValue_actionPerformed",
+function (e) {
+try {
+var f = Float.parseFloat (this.thresholdValue.getText ());
+this.slider.setValue (Clazz.floatToInt (f * 1000));
+this.updateView ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "populateThresholdComboBox",
+function (threshold) {
+threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_no_thereshold"));
+threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_above_thereshold"));
+threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_below_thereshold"));
+}, "awt2swing.Choice");
+Clazz.defineMethod (c$, "getCurrentAnnotation",
+function () {
+return this.currentAnnotation;
+});
+Clazz.defineMethod (c$, "setCurrentAnnotation",
+function (currentAnnotation) {
+this.currentAnnotation = currentAnnotation;
+}, "jalview.datamodel.AlignmentAnnotation");
+});
diff --git a/bin/jalview/appletgui/AppletJmol.js b/bin/jalview/appletgui/AppletJmol.js
index d2a97b8..b8f808a 100644
--- a/bin/jalview/appletgui/AppletJmol.js
+++ b/bin/jalview/appletgui/AppletJmol.js
@@ -1,48 +1,48 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.Dimension", "java.util.ArrayList"], "jalview.appletgui.AppletJmol", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.scriptWindow = null;
-this.inputLine = null;
-this.history = null;
-this.renderPanel = null;
-this.ap = null;
-this._aps = null;
-this.fileLoadingError = null;
-this.loadedInline = false;
-this.fr = null;
-this.jmb = null;
-if (!Clazz.isClassDefined ("jalview.appletgui.AppletJmol.RenderPanel")) {
-jalview.appletgui.AppletJmol.$AppletJmol$RenderPanel$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "AppletJmol");
-Clazz.prepareFields (c$, function () {
-this._aps = new java.util.ArrayList ();
-});
-Clazz.makeConstructor (c$,
-function (entry, sequenceIs, object, ap2, uRL) {
-}, "jalview.datamodel.PDBEntry,~A,~O,jalview.appletgui.AlignmentPanel,~S");
-Clazz.defineMethod (c$, "setJalviewColourScheme",
-function (ucs) {
-}, "jalview.schemes.UserColourScheme");
-c$.$AppletJmol$RenderPanel$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.currentSize = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.AppletJmol, "RenderPanel", awt2swing.Panel);
-Clazz.prepareFields (c$, function () {
-this.currentSize = new java.awt.Dimension ();
-});
-Clazz.overrideMethod (c$, "update",
-function (a) {
-this.paint (a);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "PaintComponent",
-function (a) {
-this.currentSize = this.getSize ();
-}, "java.awt.Graphics");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.Dimension", "java.util.ArrayList"], "jalview.appletgui.AppletJmol", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.scriptWindow = null;
+this.inputLine = null;
+this.history = null;
+this.renderPanel = null;
+this.ap = null;
+this._aps = null;
+this.fileLoadingError = null;
+this.loadedInline = false;
+this.fr = null;
+this.jmb = null;
+if (!Clazz.isClassDefined ("jalview.appletgui.AppletJmol.RenderPanel")) {
+jalview.appletgui.AppletJmol.$AppletJmol$RenderPanel$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "AppletJmol");
+Clazz.prepareFields (c$, function () {
+this._aps = new java.util.ArrayList ();
+});
+Clazz.makeConstructor (c$,
+function (entry, sequenceIs, object, ap2, uRL) {
+}, "jalview.datamodel.PDBEntry,~A,~O,jalview.appletgui.AlignmentPanel,~S");
+Clazz.defineMethod (c$, "setJalviewColourScheme",
+function (ucs) {
+}, "jalview.schemes.UserColourScheme");
+c$.$AppletJmol$RenderPanel$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.currentSize = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.AppletJmol, "RenderPanel", awt2swing.Panel);
+Clazz.prepareFields (c$, function () {
+this.currentSize = new java.awt.Dimension ();
+});
+Clazz.overrideMethod (c$, "update",
+function (a) {
+this.paint (a);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "PaintComponent",
+function (a) {
+this.currentSize = this.getSize ();
+}, "java.awt.Graphics");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/AppletJmolBinding.js b/bin/jalview/appletgui/AppletJmolBinding.js
index cdb8890..7f93e13 100644
--- a/bin/jalview/appletgui/AppletJmolBinding.js
+++ b/bin/jalview/appletgui/AppletJmolBinding.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.appletgui");
-c$ = Clazz.declareType (jalview.appletgui, "AppletJmolBinding");
+Clazz.declarePackage ("jalview.appletgui");
+c$ = Clazz.declareType (jalview.appletgui, "AppletJmolBinding");
diff --git a/bin/jalview/appletgui/CutAndPasteTransfer.class b/bin/jalview/appletgui/CutAndPasteTransfer.class
index 31c248d..9292d36 100644
Binary files a/bin/jalview/appletgui/CutAndPasteTransfer.class and b/bin/jalview/appletgui/CutAndPasteTransfer.class differ
diff --git a/bin/jalview/appletgui/CutAndPasteTransfer.js b/bin/jalview/appletgui/CutAndPasteTransfer.js
index c1e339a..4030094 100644
--- a/bin/jalview/appletgui/CutAndPasteTransfer.js
+++ b/bin/jalview/appletgui/CutAndPasteTransfer.js
@@ -1,264 +1,264 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.MouseListener", "awt2swing.Button", "$.TextArea", "java.awt.BorderLayout"], "jalview.appletgui.CutAndPasteTransfer", ["awt2swing.Frame", "$.Label", "jalview.analysis.AlignmentUtils", "jalview.api.ComplexAlignFile", "jalview.appletgui.AlignFrame", "$.AppletJmol", "$.JVDialog", "$.SplitFrame", "jalview.datamodel.PDBEntry", "jalview.io.AnnotationFile", "$.AppletFormatAdapter", "$.IdentifyFile", "$.NewickFile", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.TCoffeeColourScheme", "jalview.util.MessageManager", "java.awt.Font"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.pdbImport = false;
-this.treeImport = false;
-this.annotationImport = false;
-this.seq = null;
-this.alignFrame = null;
-this.source = null;
-this.textarea = null;
-this.accept = null;
-this.addSequences = null;
-this.$cancel = null;
-this.buttonPanel = null;
-this.borderLayout1 = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "CutAndPasteTransfer", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.MouseListener]);
-Clazz.prepareFields (c$, function () {
-this.textarea = new awt2swing.TextArea ();
-this.accept = new awt2swing.Button ("New Window");
-this.addSequences = new awt2swing.Button ("Add to Current Alignment");
-this.$cancel = new awt2swing.Button ("Close");
-this.buttonPanel = new awt2swing.Panel ();
-this.borderLayout1 = new java.awt.BorderLayout ();
-});
-Clazz.makeConstructor (c$,
-function (forImport, alignFrame) {
-Clazz.superConstructor (this, jalview.appletgui.CutAndPasteTransfer, []);
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.alignFrame = alignFrame;
-if (!forImport) {
-this.buttonPanel.setVisible (false);
-}}, "~B,jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "getText",
-function () {
-return this.textarea.getText ();
-});
-Clazz.defineMethod (c$, "setText",
-function (text) {
-this.textarea.setText (text);
-}, "~S");
-Clazz.defineMethod (c$, "setPDBImport",
-function (seq) {
-this.seq = seq;
-this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));
-this.addSequences.setVisible (false);
-this.pdbImport = true;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "setTreeImport",
-function () {
-this.treeImport = true;
-this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));
-this.addSequences.setVisible (false);
-});
-Clazz.defineMethod (c$, "setAnnotationImport",
-function () {
-this.annotationImport = true;
-this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));
-this.addSequences.setVisible (false);
-});
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.accept) {
-this.ok (true);
-} else if (evt.getSource () === this.addSequences) {
-this.ok (false);
-} else if (evt.getSource () === this.$cancel) {
-this.cancel ();
-}}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "ok",
-function (newWindow) {
-var text = this.getText ();
-var length = text.length;
-this.textarea.append ("\n");
-if (this.textarea.getText ().length == length) {
-var warning = "\n\n#################################################\nWARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n\nCAN\'T INPUT FULL ALIGNMENT\n\nYOU MUST DELETE THIS WARNING TO CONTINUE\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE\n#################################################\n";
-this.textarea.setText (text.substring (0, text.length - warning.length) + warning);
-this.textarea.setCaretPosition (text.length);
-}if (this.pdbImport) {
-this.openPdbViewer (text);
-} else if (this.treeImport) {
-if (!this.loadTree ()) {
-return;
-}} else if (this.annotationImport) {
-this.loadAnnotations ();
-} else if (this.alignFrame != null) {
-this.loadAlignment (text, newWindow, this.alignFrame.getAlignViewport ());
-}if (Clazz.instanceOf (this.getParent (), awt2swing.Frame)) {
-(this.getParent ()).setVisible (false);
-} else {
-(this.getParent ()).setVisible (false);
-}}, "~B");
-Clazz.defineMethod (c$, "loadTree",
-function () {
-try {
-var fin = new jalview.io.NewickFile (this.textarea.getText (), "Paste");
-fin.parse ();
-if (fin.getTree () != null) {
-this.alignFrame.loadTree (fin, "Pasted tree file");
-return true;
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-this.textarea.setText (jalview.util.MessageManager.formatMessage ("label.could_not_parse_newick_file", Clazz.newArray (-1, [ex.getMessage ()])));
-return false;
-} else {
-throw ex;
-}
-}
-return false;
-});
-Clazz.defineMethod (c$, "loadAlignment",
-function (text, newWindow, viewport) {
-var al = null;
-var format = new jalview.io.IdentifyFile ().Identify (text, jalview.io.AppletFormatAdapter.PASTE);
-var afa = new jalview.io.AppletFormatAdapter (this.alignFrame.alignPanel);
-try {
-al = afa.readFile (text, jalview.io.AppletFormatAdapter.PASTE, format);
-this.source = afa.getAlignFile ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, java.io.IOException)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-if (al != null) {
-al.setDataset (null);
-var allowSplitFrame = this.alignFrame.viewport.applet.getDefaultParameter ("enableSplitFrame", false);
-if (allowSplitFrame && this.openSplitFrame (al, format)) {
-return;
-}if (newWindow) {
-var af;
-if (Clazz.instanceOf (this.source, jalview.api.ComplexAlignFile)) {
-var colSel = (this.source).getColumnSelection ();
-var hiddenSeqs = (this.source).getHiddenSequences ();
-var showSeqFeatures = (this.source).isShowSeqFeatures ();
-var cs = (this.source).getColourScheme ();
-af = new jalview.appletgui.AlignFrame (al, hiddenSeqs, colSel, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false);
-af.getAlignViewport ().setShowSequenceFeatures (showSeqFeatures);
-af.changeColour (cs);
-} else {
-af = new jalview.appletgui.AlignFrame (al, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false);
-}af.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_annotation_to_alignment"));
-} else {
-this.alignFrame.addSequences (al.getSequencesArray ());
-this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_alignment_file"));
-}}}, "~S,~B,jalview.appletgui.AlignViewport");
-Clazz.defineMethod (c$, "openSplitFrame",
-function (al, format) {
-var thisAlignment = this.alignFrame.getAlignViewport ().getAlignment ();
-if (thisAlignment.isNucleotide () == al.isNucleotide ()) {
-return false;
-}var protein = thisAlignment.isNucleotide () ? al : thisAlignment;
-var dna = thisAlignment.isNucleotide () ? thisAlignment : al;
-var mapped = jalview.analysis.AlignmentUtils.mapProteinToCdna (protein, dna);
-if (!mapped) {
-return false;
-}var title = jalview.util.MessageManager.getString ("label.open_split_window");
-var dialog = new jalview.appletgui.JVDialog (this.getParent (), title, true, 100, 400);
-dialog.ok.setLabel (jalview.util.MessageManager.getString ("action.yes"));
-dialog.cancel.setLabel (jalview.util.MessageManager.getString ("action.no"));
-var question = new awt2swing.Panel ( new java.awt.BorderLayout ());
-var text = jalview.util.MessageManager.getString ("label.open_split_window?");
-question.add ( new awt2swing.Label (text, 0), "Center");
-dialog.setMainPanel (question);
-dialog.setVisible (true);
-dialog.toFront ();
-if (!dialog.accept) {
-return false;
-}var applet = this.alignFrame.viewport.applet;
-var copyFrame = new jalview.appletgui.AlignFrame (this.alignFrame.viewport.getAlignment (), applet, this.alignFrame.getTitle (), false, false);
-var newFrame = new jalview.appletgui.AlignFrame (al, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false, false);
-var dnaFrame = al.isNucleotide () ? newFrame : copyFrame;
-var proteinFrame = al.isNucleotide () ? copyFrame : newFrame;
-var sf = new jalview.appletgui.SplitFrame (dnaFrame, proteinFrame);
-sf.addToDisplay (false, applet);
-return true;
-}, "jalview.datamodel.AlignmentI,~S");
-Clazz.defineMethod (c$, "loadAnnotations",
-function () {
-var tcf = null;
-try {
-tcf = jalview.jsdev.GenericFileAdapter.getFile ("TCoffeeScoreFile", [this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE]);
-if (tcf.isValid ()) {
-if (tcf.annotateAlignment (this.alignFrame.viewport.getAlignment (), true)) {
-this.alignFrame.tcoffeeColour.setEnabled (true);
-this.alignFrame.alignPanel.fontChanged ();
-this.alignFrame.changeColour ( new jalview.schemes.TCoffeeColourScheme (this.alignFrame.viewport.getAlignment ()));
-this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_tcoffee_scores_to_alignment"));
-} else {
-this.alignFrame.setStatus (jalview.util.MessageManager.formatMessage ("label.failed_add_tcoffee_scores", Clazz.newArray (-1, [(tcf.getWarningMessage () != null ? tcf.getWarningMessage () : "")])));
-}} else {
-tcf = null;
-}} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-tcf = null;
-} else {
-throw x;
-}
-}
-if (tcf == null) {
-if ( new jalview.io.AnnotationFile ().annotateAlignmentView (this.alignFrame.viewport, this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE)) {
-this.alignFrame.alignPanel.fontChanged ();
-this.alignFrame.alignPanel.setScrollValues (0, 0);
-this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_annotation_to_alignment"));
-} else {
-if (!this.alignFrame.parseFeaturesFile (this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE)) {
-this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file"));
-}}}});
-Clazz.defineMethod (c$, "openPdbViewer",
-function (text) {
-var pdb = new jalview.datamodel.PDBEntry ();
-pdb.setFile (text);
- new jalview.appletgui.AppletJmol (pdb, Clazz.newArray (-1, [this.seq]), null, this.alignFrame.alignPanel, jalview.io.AppletFormatAdapter.PASTE);
-}, "~S");
-Clazz.defineMethod (c$, "cancel",
-function () {
-this.textarea.setText ("");
-if (Clazz.instanceOf (this.getParent (), awt2swing.Frame)) {
-(this.getParent ()).setVisible (false);
-} else {
-(this.getParent ()).setVisible (false);
-}});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.textarea.setFont ( new java.awt.Font ("Monospaced", 0, 10));
-this.textarea.setText (jalview.util.MessageManager.getString ("label.paste_your_alignment_file"));
-this.textarea.addMouseListener (this);
-this.setLayout (this.borderLayout1);
-this.accept.addActionListener (this);
-this.addSequences.addActionListener (this);
-this.$cancel.addActionListener (this);
-this.add (this.buttonPanel, "South");
-this.buttonPanel.add (this.accept, null);
-this.buttonPanel.add (this.addSequences);
-this.buttonPanel.add (this.$cancel, null);
-this.add (this.textarea, "Center");
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-if (this.textarea.getText ().startsWith (jalview.util.MessageManager.getString ("label.paste_your"))) {
-this.textarea.setText ("");
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.MouseListener", "awt2swing.Button", "$.TextArea", "java.awt.BorderLayout"], "jalview.appletgui.CutAndPasteTransfer", ["awt2swing.Frame", "$.Label", "jalview.analysis.AlignmentUtils", "jalview.api.ComplexAlignFile", "jalview.appletgui.AlignFrame", "$.AppletJmol", "$.JVDialog", "$.SplitFrame", "jalview.datamodel.PDBEntry", "jalview.io.AnnotationFile", "$.AppletFormatAdapter", "$.IdentifyFile", "$.NewickFile", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.TCoffeeColourScheme", "jalview.util.MessageManager", "java.awt.Font"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.pdbImport = false;
+this.treeImport = false;
+this.annotationImport = false;
+this.seq = null;
+this.alignFrame = null;
+this.source = null;
+this.textarea = null;
+this.accept = null;
+this.addSequences = null;
+this.$cancel = null;
+this.buttonPanel = null;
+this.borderLayout1 = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "CutAndPasteTransfer", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.MouseListener]);
+Clazz.prepareFields (c$, function () {
+this.textarea = new awt2swing.TextArea ();
+this.accept = new awt2swing.Button ("New Window");
+this.addSequences = new awt2swing.Button ("Add to Current Alignment");
+this.$cancel = new awt2swing.Button ("Close");
+this.buttonPanel = new awt2swing.Panel ();
+this.borderLayout1 = new java.awt.BorderLayout ();
+});
+Clazz.makeConstructor (c$,
+function (forImport, alignFrame) {
+Clazz.superConstructor (this, jalview.appletgui.CutAndPasteTransfer, []);
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.alignFrame = alignFrame;
+if (!forImport) {
+this.buttonPanel.setVisible (false);
+}}, "~B,jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "getText",
+function () {
+return this.textarea.getText ();
+});
+Clazz.defineMethod (c$, "setText",
+function (text) {
+this.textarea.setText (text);
+}, "~S");
+Clazz.defineMethod (c$, "setPDBImport",
+function (seq) {
+this.seq = seq;
+this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));
+this.addSequences.setVisible (false);
+this.pdbImport = true;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "setTreeImport",
+function () {
+this.treeImport = true;
+this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));
+this.addSequences.setVisible (false);
+});
+Clazz.defineMethod (c$, "setAnnotationImport",
+function () {
+this.annotationImport = true;
+this.accept.setLabel (jalview.util.MessageManager.getString ("action.accept"));
+this.addSequences.setVisible (false);
+});
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.accept) {
+this.ok (true);
+} else if (evt.getSource () === this.addSequences) {
+this.ok (false);
+} else if (evt.getSource () === this.$cancel) {
+this.cancel ();
+}}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "ok",
+function (newWindow) {
+var text = this.getText ();
+var length = text.length;
+this.textarea.append ("\n");
+if (this.textarea.getText ().length == length) {
+var warning = "\n\n#################################################\nWARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n\nCAN\'T INPUT FULL ALIGNMENT\n\nYOU MUST DELETE THIS WARNING TO CONTINUE\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE\n#################################################\n";
+this.textarea.setText (text.substring (0, text.length - warning.length) + warning);
+this.textarea.setCaretPosition (text.length);
+}if (this.pdbImport) {
+this.openPdbViewer (text);
+} else if (this.treeImport) {
+if (!this.loadTree ()) {
+return;
+}} else if (this.annotationImport) {
+this.loadAnnotations ();
+} else if (this.alignFrame != null) {
+this.loadAlignment (text, newWindow, this.alignFrame.getAlignViewport ());
+}if (Clazz.instanceOf (this.getParent (), awt2swing.Frame)) {
+(this.getParent ()).setVisible (false);
+} else {
+(this.getParent ()).setVisible (false);
+}}, "~B");
+Clazz.defineMethod (c$, "loadTree",
+function () {
+try {
+var fin = new jalview.io.NewickFile (this.textarea.getText (), "Paste");
+fin.parse ();
+if (fin.getTree () != null) {
+this.alignFrame.loadTree (fin, "Pasted tree file");
+return true;
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+this.textarea.setText (jalview.util.MessageManager.formatMessage ("label.could_not_parse_newick_file", Clazz.newArray (-1, [ex.getMessage ()])));
+return false;
+} else {
+throw ex;
+}
+}
+return false;
+});
+Clazz.defineMethod (c$, "loadAlignment",
+function (text, newWindow, viewport) {
+var al = null;
+var format = new jalview.io.IdentifyFile ().Identify (text, jalview.io.AppletFormatAdapter.PASTE);
+var afa = new jalview.io.AppletFormatAdapter (this.alignFrame.alignPanel);
+try {
+al = afa.readFile (text, jalview.io.AppletFormatAdapter.PASTE, format);
+this.source = afa.getAlignFile ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, java.io.IOException)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+if (al != null) {
+al.setDataset (null);
+var allowSplitFrame = this.alignFrame.viewport.applet.getDefaultParameter ("enableSplitFrame", false);
+if (allowSplitFrame && this.openSplitFrame (al, format)) {
+return;
+}if (newWindow) {
+var af;
+if (Clazz.instanceOf (this.source, jalview.api.ComplexAlignFile)) {
+var colSel = (this.source).getColumnSelection ();
+var hiddenSeqs = (this.source).getHiddenSequences ();
+var showSeqFeatures = (this.source).isShowSeqFeatures ();
+var cs = (this.source).getColourScheme ();
+af = new jalview.appletgui.AlignFrame (al, hiddenSeqs, colSel, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false);
+af.getAlignViewport ().setShowSequenceFeatures (showSeqFeatures);
+af.changeColour (cs);
+} else {
+af = new jalview.appletgui.AlignFrame (al, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false);
+}af.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_annotation_to_alignment"));
+} else {
+this.alignFrame.addSequences (al.getSequencesArray ());
+this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_alignment_file"));
+}}}, "~S,~B,jalview.appletgui.AlignViewport");
+Clazz.defineMethod (c$, "openSplitFrame",
+function (al, format) {
+var thisAlignment = this.alignFrame.getAlignViewport ().getAlignment ();
+if (thisAlignment.isNucleotide () == al.isNucleotide ()) {
+return false;
+}var protein = thisAlignment.isNucleotide () ? al : thisAlignment;
+var dna = thisAlignment.isNucleotide () ? thisAlignment : al;
+var mapped = jalview.analysis.AlignmentUtils.mapProteinToCdna (protein, dna);
+if (!mapped) {
+return false;
+}var title = jalview.util.MessageManager.getString ("label.open_split_window");
+var dialog = new jalview.appletgui.JVDialog (this.getParent (), title, true, 100, 400);
+dialog.ok.setLabel (jalview.util.MessageManager.getString ("action.yes"));
+dialog.cancel.setLabel (jalview.util.MessageManager.getString ("action.no"));
+var question = new awt2swing.Panel ( new java.awt.BorderLayout ());
+var text = jalview.util.MessageManager.getString ("label.open_split_window?");
+question.add ( new awt2swing.Label (text, 0), "Center");
+dialog.setMainPanel (question);
+dialog.setVisible (true);
+dialog.toFront ();
+if (!dialog.accept) {
+return false;
+}var applet = this.alignFrame.viewport.applet;
+var copyFrame = new jalview.appletgui.AlignFrame (this.alignFrame.viewport.getAlignment (), applet, this.alignFrame.getTitle (), false, false);
+var newFrame = new jalview.appletgui.AlignFrame (al, this.alignFrame.viewport.applet, "Cut & Paste input - " + format, false, false);
+var dnaFrame = al.isNucleotide () ? newFrame : copyFrame;
+var proteinFrame = al.isNucleotide () ? copyFrame : newFrame;
+var sf = new jalview.appletgui.SplitFrame (dnaFrame, proteinFrame);
+sf.addToDisplay (false, applet);
+return true;
+}, "jalview.datamodel.AlignmentI,~S");
+Clazz.defineMethod (c$, "loadAnnotations",
+function () {
+var tcf = null;
+try {
+tcf = jalview.jsdev.GenericFileAdapter.getFile ("TCoffeeScoreFile", [this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE]);
+if (tcf.isValid ()) {
+if (tcf.annotateAlignment (this.alignFrame.viewport.getAlignment (), true)) {
+this.alignFrame.tcoffeeColour.setEnabled (true);
+this.alignFrame.alignPanel.fontChanged ();
+this.alignFrame.changeColour ( new jalview.schemes.TCoffeeColourScheme (this.alignFrame.viewport.getAlignment ()));
+this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_tcoffee_scores_to_alignment"));
+} else {
+this.alignFrame.setStatus (jalview.util.MessageManager.formatMessage ("label.failed_add_tcoffee_scores", Clazz.newArray (-1, [(tcf.getWarningMessage () != null ? tcf.getWarningMessage () : "")])));
+}} else {
+tcf = null;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+tcf = null;
+} else {
+throw x;
+}
+}
+if (tcf == null) {
+if ( new jalview.io.AnnotationFile ().annotateAlignmentView (this.alignFrame.viewport, this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE)) {
+this.alignFrame.alignPanel.fontChanged ();
+this.alignFrame.alignPanel.setScrollValues (0, 0);
+this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.successfully_pasted_annotation_to_alignment"));
+} else {
+if (!this.alignFrame.parseFeaturesFile (this.textarea.getText (), jalview.io.AppletFormatAdapter.PASTE)) {
+this.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file"));
+}}}});
+Clazz.defineMethod (c$, "openPdbViewer",
+function (text) {
+var pdb = new jalview.datamodel.PDBEntry ();
+pdb.setFile (text);
+ new jalview.appletgui.AppletJmol (pdb, Clazz.newArray (-1, [this.seq]), null, this.alignFrame.alignPanel, jalview.io.AppletFormatAdapter.PASTE);
+}, "~S");
+Clazz.defineMethod (c$, "cancel",
+function () {
+this.textarea.setText ("");
+if (Clazz.instanceOf (this.getParent (), awt2swing.Frame)) {
+(this.getParent ()).setVisible (false);
+} else {
+(this.getParent ()).setVisible (false);
+}});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.textarea.setFont ( new java.awt.Font ("Monospaced", 0, 10));
+this.textarea.setText (jalview.util.MessageManager.getString ("label.paste_your_alignment_file"));
+this.textarea.addMouseListener (this);
+this.setLayout (this.borderLayout1);
+this.accept.addActionListener (this);
+this.addSequences.addActionListener (this);
+this.$cancel.addActionListener (this);
+this.add (this.buttonPanel, "South");
+this.buttonPanel.add (this.accept, null);
+this.buttonPanel.add (this.addSequences);
+this.buttonPanel.add (this.$cancel, null);
+this.add (this.textarea, "Center");
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+if (this.textarea.getText ().startsWith (jalview.util.MessageManager.getString ("label.paste_your"))) {
+this.textarea.setText ("");
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+});
diff --git a/bin/jalview/appletgui/EditNameDialog.js b/bin/jalview/appletgui/EditNameDialog.js
index efedf02..68044ad 100644
--- a/bin/jalview/appletgui/EditNameDialog.js
+++ b/bin/jalview/appletgui/EditNameDialog.js
@@ -1,44 +1,44 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.appletgui.JVDialog"], "jalview.appletgui.EditNameDialog", ["awt2swing.Label", "$.Panel", "$.TextField", "java.awt.BorderLayout", "$.Font"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.id = null;
-this.description = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "EditNameDialog", jalview.appletgui.JVDialog);
-Clazz.overrideMethod (c$, "getName",
-function () {
-return this.id.getText ();
-});
-Clazz.defineMethod (c$, "getDescription",
-function () {
-if (this.description.getText ().length < 1) {
-return null;
-} else {
-return this.description.getText ();
-}});
-Clazz.makeConstructor (c$,
-function (name, desc, label1, label2, owner, title, width, height, display) {
-Clazz.superConstructor (this, jalview.appletgui.EditNameDialog, [owner, title, true, width, height]);
-var mono = new java.awt.Font ("Monospaced", 0, 12);
-var panel = new awt2swing.Panel ( new java.awt.BorderLayout ());
-var panel2 = new awt2swing.Panel ( new java.awt.BorderLayout ());
-this.id = new awt2swing.TextField (name, 40);
-this.id.setFont (mono);
-var label = new awt2swing.Label (label1);
-label.setFont (mono);
-panel2.add (label, "West");
-panel2.add (this.id, "Center");
-panel.add (panel2, "North");
-if (label2 != null) {
-panel2 = new awt2swing.Panel ( new java.awt.BorderLayout ());
-this.description = new awt2swing.TextField (desc, 40);
-this.description.setFont (mono);
-label = new awt2swing.Label (label2);
-label.setFont (mono);
-panel2.add (label, "West");
-panel2.add (this.description, "Center");
-panel.add (panel2, "Center");
-}this.setMainPanel (panel);
-this.setVisible (display);
-}, "~S,~S,~S,~S,awt2swing.Frame,~S,~N,~N,~B");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.appletgui.JVDialog"], "jalview.appletgui.EditNameDialog", ["awt2swing.Label", "$.Panel", "$.TextField", "java.awt.BorderLayout", "$.Font"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.id = null;
+this.description = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "EditNameDialog", jalview.appletgui.JVDialog);
+Clazz.overrideMethod (c$, "getName",
+function () {
+return this.id.getText ();
+});
+Clazz.defineMethod (c$, "getDescription",
+function () {
+if (this.description.getText ().length < 1) {
+return null;
+} else {
+return this.description.getText ();
+}});
+Clazz.makeConstructor (c$,
+function (name, desc, label1, label2, owner, title, width, height, display) {
+Clazz.superConstructor (this, jalview.appletgui.EditNameDialog, [owner, title, true, width, height]);
+var mono = new java.awt.Font ("Monospaced", 0, 12);
+var panel = new awt2swing.Panel ( new java.awt.BorderLayout ());
+var panel2 = new awt2swing.Panel ( new java.awt.BorderLayout ());
+this.id = new awt2swing.TextField (name, 40);
+this.id.setFont (mono);
+var label = new awt2swing.Label (label1);
+label.setFont (mono);
+panel2.add (label, "West");
+panel2.add (this.id, "Center");
+panel.add (panel2, "North");
+if (label2 != null) {
+panel2 = new awt2swing.Panel ( new java.awt.BorderLayout ());
+this.description = new awt2swing.TextField (desc, 40);
+this.description.setFont (mono);
+label = new awt2swing.Label (label2);
+label.setFont (mono);
+panel2.add (label, "West");
+panel2.add (this.description, "Center");
+panel.add (panel2, "Center");
+}this.setMainPanel (panel);
+this.setVisible (display);
+}, "~S,~S,~S,~S,awt2swing.Frame,~S,~N,~N,~B");
+});
diff --git a/bin/jalview/appletgui/EmbmenuFrame.js b/bin/jalview/appletgui/EmbmenuFrame.js
index 13a7183..7a5362c 100644
--- a/bin/jalview/appletgui/EmbmenuFrame.js
+++ b/bin/jalview/appletgui/EmbmenuFrame.js
@@ -1,110 +1,110 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Frame", "java.awt.event.MouseListener", "java.awt.Font", "java.util.HashMap"], "jalview.appletgui.EmbmenuFrame", ["awt2swing.Label", "$.Panel", "$.PopupMenu", "jalview.util.Platform", "java.awt.Color", "$.FlowLayout"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.embeddedPopup = null;
-this.embeddedMenu = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "EmbmenuFrame", awt2swing.Frame, java.awt.event.MouseListener);
-Clazz.prepareFields (c$, function () {
-this.embeddedPopup = new java.util.HashMap ();
-});
-Clazz.defineMethod (c$, "embedMenuIfNeeded",
-function (tobeAdjusted) {
-var topMenuBar = this.getJMenuBar ();
-if (topMenuBar == null) {
-return false;
-}if (jalview.util.Platform.isAMac ()) {
-this.embeddedMenu = this.makeEmbeddedPopupMenu (topMenuBar, true, false);
-this.unsetMenuBar ();
-this.add (this.embeddedMenu, "North");
-tobeAdjusted.setSize (this.getSize ().width, this.getSize ().height - this.embeddedMenu.getHeight ());
-return true;
-}return false;
-}, "awt2swing.Panel");
-Clazz.defineMethod (c$, "makeEmbeddedPopupMenu",
-function (menuBar, overrideFonts, append) {
-if (!append) {
-this.embeddedPopup.clear ();
-if (this.embeddedMenu != null) {
-this.embeddedMenu.removeAll ();
-}}this.embeddedMenu = this.makeEmbeddedPopupMenu (menuBar, jalview.appletgui.EmbmenuFrame.DEFAULT_MENU_FONT, overrideFonts, new awt2swing.Panel (), this);
-return this.embeddedMenu;
-}, "awt2swing.MenuBar,~B,~B");
-Clazz.defineMethod (c$, "makeEmbeddedPopupMenu",
-function (menuBar, font, overrideFonts, embeddedMenu, clickHandler) {
-if (overrideFonts) {
-var mbf = menuBar.getFont ();
-if (mbf != null) {
-font = mbf;
-}}if (embeddedMenu == null) {
-embeddedMenu = new awt2swing.Panel ();
-}var flowLayout1 = new java.awt.FlowLayout ();
-embeddedMenu.setBackground (java.awt.Color.lightGray);
-embeddedMenu.setLayout (flowLayout1);
-for (var mbi = 0, nMbi = menuBar.getMenuCount (); mbi < nMbi; mbi++) {
-var mi = menuBar.getMenu (mbi);
-var elab = new awt2swing.Label (mi.getLabel ());
-elab.setFont (font);
-var popup = new awt2swing.PopupMenu ();
-var m;
-var mSize = mi.getItemCount ();
-for (m = 0; m < mSize; m++) {
-if (mi.getItem (m) == null) popup.addSeparator ();
- else popup.add (mi.getItem (m));
-mSize--;
-m--;
-}
-this.embeddedPopup.put (elab, popup);
-embeddedMenu.add (elab);
-elab.addMouseListener (clickHandler);
-}
-flowLayout1.setAlignment (0);
-flowLayout1.setHgap (2);
-flowLayout1.setVgap (0);
-return embeddedMenu;
-}, "awt2swing.MenuBar,java.awt.Font,~B,awt2swing.Panel,java.awt.event.MouseListener");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-var popup = null;
-var source = evt.getSource ();
-popup = this.getPopupMenu (source);
-if (popup != null) {
-this.embeddedMenu.add (popup);
-popup.show (this.embeddedMenu, source.getBounds ().x, source.getBounds ().y + source.getBounds ().getSize ().height);
-}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "getPopupMenu",
-function (source) {
-return this.embeddedPopup.get (source);
-}, "awt2swing.Label");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "destroyMenus",
-function () {
-if (this.embeddedPopup != null) {
-for (var lb, $lb = this.embeddedPopup.keySet ().iterator (); $lb.hasNext () && ((lb = $lb.next ()) || true);) {
-lb.removeMouseListener (this);
-}
-this.embeddedPopup.clear ();
-}if (this.embeddedMenu != null) {
-this.embeddedMenu.removeAll ();
-}});
-Clazz.defineMethod (c$, "finalize",
-function () {
-this.destroyMenus ();
-this.embeddedPopup = null;
-this.embeddedMenu = null;
-Clazz.superCall (this, jalview.appletgui.EmbmenuFrame, "finalize", []);
-});
-c$.FONT_ARIAL_PLAIN_11 = c$.prototype.FONT_ARIAL_PLAIN_11 = new java.awt.Font ("Arial", 0, 11);
-c$.DEFAULT_MENU_FONT = c$.prototype.DEFAULT_MENU_FONT = jalview.appletgui.EmbmenuFrame.FONT_ARIAL_PLAIN_11;
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Frame", "java.awt.event.MouseListener", "java.awt.Font", "java.util.HashMap"], "jalview.appletgui.EmbmenuFrame", ["awt2swing.Label", "$.Panel", "$.PopupMenu", "jalview.util.Platform", "java.awt.Color", "$.FlowLayout"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.embeddedPopup = null;
+this.embeddedMenu = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "EmbmenuFrame", awt2swing.Frame, java.awt.event.MouseListener);
+Clazz.prepareFields (c$, function () {
+this.embeddedPopup = new java.util.HashMap ();
+});
+Clazz.defineMethod (c$, "embedMenuIfNeeded",
+function (tobeAdjusted) {
+var topMenuBar = this.getJMenuBar ();
+if (topMenuBar == null) {
+return false;
+}if (jalview.util.Platform.isAMac ()) {
+this.embeddedMenu = this.makeEmbeddedPopupMenu (topMenuBar, true, false);
+this.unsetMenuBar ();
+this.add (this.embeddedMenu, "North");
+tobeAdjusted.setSize (this.getSize ().width, this.getSize ().height - this.embeddedMenu.getHeight ());
+return true;
+}return false;
+}, "awt2swing.Panel");
+Clazz.defineMethod (c$, "makeEmbeddedPopupMenu",
+function (menuBar, overrideFonts, append) {
+if (!append) {
+this.embeddedPopup.clear ();
+if (this.embeddedMenu != null) {
+this.embeddedMenu.removeAll ();
+}}this.embeddedMenu = this.makeEmbeddedPopupMenu (menuBar, jalview.appletgui.EmbmenuFrame.DEFAULT_MENU_FONT, overrideFonts, new awt2swing.Panel (), this);
+return this.embeddedMenu;
+}, "awt2swing.MenuBar,~B,~B");
+Clazz.defineMethod (c$, "makeEmbeddedPopupMenu",
+function (menuBar, font, overrideFonts, embeddedMenu, clickHandler) {
+if (overrideFonts) {
+var mbf = menuBar.getFont ();
+if (mbf != null) {
+font = mbf;
+}}if (embeddedMenu == null) {
+embeddedMenu = new awt2swing.Panel ();
+}var flowLayout1 = new java.awt.FlowLayout ();
+embeddedMenu.setBackground (java.awt.Color.lightGray);
+embeddedMenu.setLayout (flowLayout1);
+for (var mbi = 0, nMbi = menuBar.getMenuCount (); mbi < nMbi; mbi++) {
+var mi = menuBar.getMenu (mbi);
+var elab = new awt2swing.Label (mi.getLabel ());
+elab.setFont (font);
+var popup = new awt2swing.PopupMenu ();
+var m;
+var mSize = mi.getItemCount ();
+for (m = 0; m < mSize; m++) {
+if (mi.getItem (m) == null) popup.addSeparator ();
+ else popup.add (mi.getItem (m));
+mSize--;
+m--;
+}
+this.embeddedPopup.put (elab, popup);
+embeddedMenu.add (elab);
+elab.addMouseListener (clickHandler);
+}
+flowLayout1.setAlignment (0);
+flowLayout1.setHgap (2);
+flowLayout1.setVgap (0);
+return embeddedMenu;
+}, "awt2swing.MenuBar,java.awt.Font,~B,awt2swing.Panel,java.awt.event.MouseListener");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+var popup = null;
+var source = evt.getSource ();
+popup = this.getPopupMenu (source);
+if (popup != null) {
+this.embeddedMenu.add (popup);
+popup.show (this.embeddedMenu, source.getBounds ().x, source.getBounds ().y + source.getBounds ().getSize ().height);
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "getPopupMenu",
+function (source) {
+return this.embeddedPopup.get (source);
+}, "awt2swing.Label");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "destroyMenus",
+function () {
+if (this.embeddedPopup != null) {
+for (var lb, $lb = this.embeddedPopup.keySet ().iterator (); $lb.hasNext () && ((lb = $lb.next ()) || true);) {
+lb.removeMouseListener (this);
+}
+this.embeddedPopup.clear ();
+}if (this.embeddedMenu != null) {
+this.embeddedMenu.removeAll ();
+}});
+Clazz.defineMethod (c$, "finalize",
+function () {
+this.destroyMenus ();
+this.embeddedPopup = null;
+this.embeddedMenu = null;
+Clazz.superCall (this, jalview.appletgui.EmbmenuFrame, "finalize", []);
+});
+c$.FONT_ARIAL_PLAIN_11 = c$.prototype.FONT_ARIAL_PLAIN_11 = new java.awt.Font ("Arial", 0, 11);
+c$.DEFAULT_MENU_FONT = c$.prototype.DEFAULT_MENU_FONT = jalview.appletgui.EmbmenuFrame.FONT_ARIAL_PLAIN_11;
+});
diff --git a/bin/jalview/appletgui/ExtJmol.js b/bin/jalview/appletgui/ExtJmol.js
index 170d005..150efd5 100644
--- a/bin/jalview/appletgui/ExtJmol.js
+++ b/bin/jalview/appletgui/ExtJmol.js
@@ -1,17 +1,17 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.structures.models.AAStructureBindingModel"], "jalview.appletgui.ExtJmol", null, function () {
-c$ = Clazz.declareType (jalview.appletgui, "ExtJmol", jalview.structures.models.AAStructureBindingModel);
-Clazz.overrideMethod (c$, "getPdbFile",
-function () {
-return null;
-});
-Clazz.overrideMethod (c$, "updateColours",
-function (source) {
-}, "~O");
-Clazz.overrideMethod (c$, "releaseReferences",
-function (svl) {
-}, "~O");
-Clazz.overrideMethod (c$, "highlightAtoms",
-function (atoms) {
-}, "java.util.List");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.structures.models.AAStructureBindingModel"], "jalview.appletgui.ExtJmol", null, function () {
+c$ = Clazz.declareType (jalview.appletgui, "ExtJmol", jalview.structures.models.AAStructureBindingModel);
+Clazz.overrideMethod (c$, "getPdbFile",
+function () {
+return null;
+});
+Clazz.overrideMethod (c$, "updateColours",
+function (source) {
+}, "~O");
+Clazz.overrideMethod (c$, "releaseReferences",
+function (svl) {
+}, "~O");
+Clazz.overrideMethod (c$, "highlightAtoms",
+function (atoms) {
+}, "java.util.List");
+});
diff --git a/bin/jalview/appletgui/FeatureColourChooser.class b/bin/jalview/appletgui/FeatureColourChooser.class
index 0c8e554..8aee64e 100644
Binary files a/bin/jalview/appletgui/FeatureColourChooser.class and b/bin/jalview/appletgui/FeatureColourChooser.class differ
diff --git a/bin/jalview/appletgui/FeatureColourChooser.js b/bin/jalview/appletgui/FeatureColourChooser.js
index cfa5380..929c04b 100644
--- a/bin/jalview/appletgui/FeatureColourChooser.js
+++ b/bin/jalview/appletgui/FeatureColourChooser.js
@@ -1,292 +1,292 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "awt2swing.Checkbox", "$.Choice", "$.Scrollbar", "$.TextField"], "jalview.appletgui.FeatureColourChooser", ["awt2swing.Label", "jalview.appletgui.JVDialog", "$.PaintRefresher", "$.UserDefinedColours", "jalview.datamodel.GraphLine", "jalview.schemes.GraduatedColor", "jalview.util.MessageManager", "java.awt.Color", "$.Dimension", "$.FlowLayout", "$.Font", "$.GridLayout", "java.awt.event.ActionEvent", "java.lang.Float"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.frame = null;
-this.owner = null;
-this.fr = null;
-this.fs = null;
-this.cs = null;
-this.oldcs = null;
-this.oldgroupColours = null;
-this.adjusting = false;
-this.min = 0;
-this.max = 0;
-this.type = null;
-this.af = null;
-this.minColour = null;
-this.maxColour = null;
-this.jPanel1 = null;
-this.jPanel2 = null;
-this.threshold = null;
-this.jPanel3 = null;
-this.jPanel4 = null;
-this.slider = null;
-this.thresholdValue = null;
-this.thresholdIsMin = null;
-this.colourFromLabel = null;
-this.threshline = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "FeatureColourChooser", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.ItemListener, java.awt.event.MouseListener]);
-Clazz.prepareFields (c$, function () {
-this.minColour = new awt2swing.Panel ();
-this.maxColour = new awt2swing.Panel ();
-this.jPanel1 = new awt2swing.Panel ();
-this.jPanel2 = new awt2swing.Panel ();
-this.threshold = new awt2swing.Choice ();
-this.jPanel3 = new awt2swing.Panel ();
-this.jPanel4 = new awt2swing.Panel ();
-this.slider = new awt2swing.Scrollbar (0);
-this.thresholdValue = new awt2swing.TextField (20);
-this.thresholdIsMin = new awt2swing.Checkbox ();
-this.colourFromLabel = new awt2swing.Checkbox ();
-});
-Clazz.makeConstructor (c$,
-function (af, type) {
-Clazz.superConstructor (this, jalview.appletgui.FeatureColourChooser, []);
-this.af = af;
-this.init (af.getSeqcanvas ().getFeatureRenderer (), type);
-}, "jalview.appletgui.AlignFrame,~S");
-Clazz.makeConstructor (c$,
-function (fsettings, type) {
-Clazz.superConstructor (this, jalview.appletgui.FeatureColourChooser, []);
-this.fs = fsettings;
-this.init (fsettings.fr, type);
-}, "jalview.appletgui.FeatureSettings,~S");
-Clazz.defineMethod (c$, "init",
-($fz = function (frenderer, type) {
-this.type = type;
-this.fr = frenderer;
-var mm = (this.fr.getMinMax ().get (type))[0];
-this.min = mm[0];
-this.max = mm[1];
-this.oldcs = this.fr.getFeatureColours ().get (type);
-if (Clazz.instanceOf (this.oldcs, jalview.schemes.GraduatedColor)) {
-this.cs = new jalview.schemes.GraduatedColor (this.oldcs, this.min, this.max);
-} else {
-var bl = java.awt.Color.black;
-if (Clazz.instanceOf (this.oldcs, java.awt.Color)) {
-bl = this.oldcs;
-}this.cs = new jalview.schemes.GraduatedColor (java.awt.Color.white, bl, mm[0], mm[1]);
-}this.minColour.setBackground (this.cs.getMinColor ());
-this.maxColour.setBackground (this.cs.getMaxColor ());
-this.minColour.setForeground (this.cs.getMinColor ());
-this.maxColour.setForeground (this.cs.getMaxColor ());
-this.colourFromLabel.setState (this.cs.isColourByLabel ());
-this.adjusting = true;
-try {
-this.jbInit ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-this.threshold.select (new Integer (this.cs.getThreshType () == -1 ? 0 : this.cs.getThreshType () == 1 ? 1 : 2));
-this.adjusting = false;
-this.changeColour ();
-this.colourFromLabel.addItemListener (this);
-this.slider.addAdjustmentListener (this);
-this.slider.addMouseListener (this);
-this.owner = (this.af != null) ? this.af : this.fs.frame;
-this.frame = new jalview.appletgui.JVDialog (this.owner, jalview.util.MessageManager.formatMessage ("label.graduated_color_for_params", Clazz.newArray (-1, [type])), true, 480, 248);
-this.frame.setMainPanel (this);
-this.validate ();
-this.frame.setVisible (true);
-if (this.frame.accept) {
-this.changeColour ();
-} else {
-this.reset ();
-jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
-this.frame.setVisible (false);
-}}, $fz.isPrivate = true, $fz), "jalview.appletgui.FeatureRenderer,~S");
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.appletgui.FeatureColourChooser, []);
-try {
-this.jbInit ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-var minLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.min"));
-var maxLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.max"));
-minLabel.setFont ( new java.awt.Font ("Verdana", 0, 11));
-maxLabel.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.minColour.setBounds (0, 0, 40, 27);
-this.maxColour.setBounds (0, 0, 40, 27);
-this.minColour.addMouseListener (this);
-this.maxColour.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.maxColour.addMouseListener (this);
-this.thresholdIsMin.addItemListener (this);
-this.setLayout ( new java.awt.GridLayout (4, 1));
-this.jPanel1.setLayout ( new java.awt.FlowLayout ());
-this.jPanel2.setLayout ( new java.awt.FlowLayout ());
-this.jPanel3.setLayout ( new java.awt.GridLayout (1, 1));
-this.jPanel4.setLayout ( new java.awt.FlowLayout ());
-this.jPanel1.setBackground (java.awt.Color.white);
-this.jPanel2.setBackground (java.awt.Color.white);
-this.jPanel4.setBackground (java.awt.Color.white);
-this.threshold.addItemListener (this);
-this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_no_thereshold"));
-this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_above_thereshold"));
-this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_below_thereshold"));
-this.thresholdValue.addActionListener (this);
-this.slider.setBackground (java.awt.Color.white);
-this.slider.setEnabled (false);
-this.slider.setSize ( new java.awt.Dimension (93, 21));
-this.thresholdValue.setEnabled (false);
-this.thresholdValue.setSize ( new java.awt.Dimension (79, 22));
-this.thresholdValue.setColumns (5);
-this.jPanel3.setBackground (java.awt.Color.white);
-this.colourFromLabel.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.colourFromLabel.setLabel (jalview.util.MessageManager.getString ("label.colour_by_label"));
-this.colourFromLabel.setSize ( new java.awt.Dimension (139, 22));
-this.thresholdIsMin.setBackground (java.awt.Color.white);
-this.thresholdIsMin.setLabel (jalview.util.MessageManager.getString ("label.threshold_minmax"));
-this.thresholdIsMin.setSize ( new java.awt.Dimension (135, 23));
-this.jPanel1.add (minLabel);
-this.jPanel1.add (this.minColour);
-this.jPanel1.add (maxLabel);
-this.jPanel1.add (this.maxColour);
-this.jPanel1.add (this.colourFromLabel);
-this.jPanel2.add (this.threshold);
-this.jPanel3.add (this.slider);
-this.jPanel4.add (this.thresholdValue);
-this.jPanel4.add (this.thresholdIsMin);
-this.add (this.jPanel1);
-this.add (this.jPanel2);
-this.add (this.jPanel3);
-this.add (this.jPanel4);
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.thresholdValue) {
-try {
-var f = new Float (this.thresholdValue.getText ()).floatValue ();
-this.slider.setValue (Clazz.floatToInt (f * 1000));
-this.adjustmentValueChanged (null);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-} else if (evt.getSource () === this.minColour) {
-this.minColour_actionPerformed (null);
-} else if (evt.getSource () === this.maxColour) {
-this.maxColour_actionPerformed (null);
-} else {
-this.changeColour ();
-}}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-this.maxColour.setEnabled (!this.colourFromLabel.getState ());
-this.minColour.setEnabled (!this.colourFromLabel.getState ());
-this.changeColour ();
-}, "java.awt.event.ItemEvent");
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-if (!this.adjusting) {
-this.thresholdValue.setText ((this.slider.getValue () / 1000) + "");
-this.valueChanged ();
-}}, "java.awt.event.AdjustmentEvent");
-Clazz.defineMethod (c$, "valueChanged",
-function () {
-this.threshline.value = this.slider.getValue () / 1000;
-this.cs.setThresh (this.threshline.value);
-this.changeColour ();
-jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
-});
-Clazz.defineMethod (c$, "minColour_actionPerformed",
-function (newCol) {
-if (newCol == null) {
-var udc = new jalview.appletgui.UserDefinedColours (this, this.minColour.getBackground (), this.owner, jalview.util.MessageManager.getString ("label.select_colour_minimum_value"));
-} else {
-this.minColour.setBackground (newCol);
-this.minColour.setForeground (newCol);
-this.minColour.repaint ();
-this.changeColour ();
-}}, "java.awt.Color");
-Clazz.defineMethod (c$, "maxColour_actionPerformed",
-function (newCol) {
-if (newCol == null) {
-var udc = new jalview.appletgui.UserDefinedColours (this, this.maxColour.getBackground (), this.owner, jalview.util.MessageManager.getString ("label.select_colour_maximum_value"));
-} else {
-this.maxColour.setBackground (newCol);
-this.maxColour.setForeground (newCol);
-this.maxColour.repaint ();
-this.changeColour ();
-}}, "java.awt.Color");
-Clazz.defineMethod (c$, "changeColour",
-function () {
-if (this.adjusting) {
-return;
-}var aboveThreshold = -1;
-if (this.threshold.getSelectedIndex () == 1) {
-aboveThreshold = 1;
-} else if (this.threshold.getSelectedIndex () == 2) {
-aboveThreshold = 0;
-}this.slider.setEnabled (true);
-this.thresholdValue.setEnabled (true);
-var acg = new jalview.schemes.GraduatedColor (this.minColour.getBackground (), this.maxColour.getBackground (), this.min, this.max);
-acg.setColourByLabel (this.colourFromLabel.getState ());
-this.maxColour.setEnabled (!this.colourFromLabel.getState ());
-this.minColour.setEnabled (!this.colourFromLabel.getState ());
-if (aboveThreshold == -1) {
-this.slider.setEnabled (false);
-this.thresholdValue.setEnabled (false);
-this.thresholdValue.setText ("");
-} else if (aboveThreshold != -1 && this.threshline == null) {
-this.threshline = new jalview.datamodel.GraphLine ((this.max - this.min) / 2, "Threshold", java.awt.Color.black);
-}if (aboveThreshold != -1) {
-this.adjusting = true;
-acg.setThresh (this.threshline.value);
-var range = this.max * 1000 - this.min * 1000;
-this.slider.setMinimum (Clazz.floatToInt (this.min * 1000));
-this.slider.setMaximum (Clazz.floatToInt (this.max * 1000));
-this.slider.setValue (Clazz.floatToInt (this.threshline.value * 1000));
-this.thresholdValue.setText (this.threshline.value + "");
-this.slider.setEnabled (true);
-this.thresholdValue.setEnabled (true);
-this.adjusting = false;
-}acg.setThreshType (aboveThreshold);
-if (this.thresholdIsMin.getState () && aboveThreshold != -1) {
-if (aboveThreshold == 1) {
-acg = new jalview.schemes.GraduatedColor (acg, this.threshline.value, this.max);
-} else {
-acg = new jalview.schemes.GraduatedColor (acg, this.min, this.threshline.value);
-}}this.fr.setColour (this.type, acg);
-this.cs = acg;
-jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
-});
-Clazz.defineMethod (c$, "reset",
-function () {
-this.fr.setColour (this.type, this.oldcs);
-jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
-});
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-if (evt.getSource () === this.minColour || evt.getSource () === this.maxColour) {
-this.actionPerformed ( new java.awt.event.ActionEvent (evt.getSource (), 1, "Clicked"));
-} else {
-jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "awt2swing.Checkbox", "$.Choice", "$.Scrollbar", "$.TextField"], "jalview.appletgui.FeatureColourChooser", ["awt2swing.Label", "jalview.appletgui.JVDialog", "$.PaintRefresher", "$.UserDefinedColours", "jalview.datamodel.GraphLine", "jalview.schemes.GraduatedColor", "jalview.util.MessageManager", "java.awt.Color", "$.Dimension", "$.FlowLayout", "$.Font", "$.GridLayout", "java.awt.event.ActionEvent", "java.lang.Float"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.frame = null;
+this.owner = null;
+this.fr = null;
+this.fs = null;
+this.cs = null;
+this.oldcs = null;
+this.oldgroupColours = null;
+this.adjusting = false;
+this.min = 0;
+this.max = 0;
+this.type = null;
+this.af = null;
+this.minColour = null;
+this.maxColour = null;
+this.jPanel1 = null;
+this.jPanel2 = null;
+this.threshold = null;
+this.jPanel3 = null;
+this.jPanel4 = null;
+this.slider = null;
+this.thresholdValue = null;
+this.thresholdIsMin = null;
+this.colourFromLabel = null;
+this.threshline = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "FeatureColourChooser", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.ItemListener, java.awt.event.MouseListener]);
+Clazz.prepareFields (c$, function () {
+this.minColour = new awt2swing.Panel ();
+this.maxColour = new awt2swing.Panel ();
+this.jPanel1 = new awt2swing.Panel ();
+this.jPanel2 = new awt2swing.Panel ();
+this.threshold = new awt2swing.Choice ();
+this.jPanel3 = new awt2swing.Panel ();
+this.jPanel4 = new awt2swing.Panel ();
+this.slider = new awt2swing.Scrollbar (0);
+this.thresholdValue = new awt2swing.TextField (20);
+this.thresholdIsMin = new awt2swing.Checkbox ();
+this.colourFromLabel = new awt2swing.Checkbox ();
+});
+Clazz.makeConstructor (c$,
+function (af, type) {
+Clazz.superConstructor (this, jalview.appletgui.FeatureColourChooser, []);
+this.af = af;
+this.init (af.getSeqcanvas ().getFeatureRenderer (), type);
+}, "jalview.appletgui.AlignFrame,~S");
+Clazz.makeConstructor (c$,
+function (fsettings, type) {
+Clazz.superConstructor (this, jalview.appletgui.FeatureColourChooser, []);
+this.fs = fsettings;
+this.init (fsettings.fr, type);
+}, "jalview.appletgui.FeatureSettings,~S");
+Clazz.defineMethod (c$, "init",
+($fz = function (frenderer, type) {
+this.type = type;
+this.fr = frenderer;
+var mm = (this.fr.getMinMax ().get (type))[0];
+this.min = mm[0];
+this.max = mm[1];
+this.oldcs = this.fr.getFeatureColours ().get (type);
+if (Clazz.instanceOf (this.oldcs, jalview.schemes.GraduatedColor)) {
+this.cs = new jalview.schemes.GraduatedColor (this.oldcs, this.min, this.max);
+} else {
+var bl = java.awt.Color.black;
+if (Clazz.instanceOf (this.oldcs, java.awt.Color)) {
+bl = this.oldcs;
+}this.cs = new jalview.schemes.GraduatedColor (java.awt.Color.white, bl, mm[0], mm[1]);
+}this.minColour.setBackground (this.cs.getMinColor ());
+this.maxColour.setBackground (this.cs.getMaxColor ());
+this.minColour.setForeground (this.cs.getMinColor ());
+this.maxColour.setForeground (this.cs.getMaxColor ());
+this.colourFromLabel.setState (this.cs.isColourByLabel ());
+this.adjusting = true;
+try {
+this.jbInit ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+this.threshold.select (new Integer (this.cs.getThreshType () == -1 ? 0 : this.cs.getThreshType () == 1 ? 1 : 2));
+this.adjusting = false;
+this.changeColour ();
+this.colourFromLabel.addItemListener (this);
+this.slider.addAdjustmentListener (this);
+this.slider.addMouseListener (this);
+this.owner = (this.af != null) ? this.af : this.fs.frame;
+this.frame = new jalview.appletgui.JVDialog (this.owner, jalview.util.MessageManager.formatMessage ("label.graduated_color_for_params", Clazz.newArray (-1, [type])), true, 480, 248);
+this.frame.setMainPanel (this);
+this.validate ();
+this.frame.setVisible (true);
+if (this.frame.accept) {
+this.changeColour ();
+} else {
+this.reset ();
+jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
+this.frame.setVisible (false);
+}}, $fz.isPrivate = true, $fz), "jalview.appletgui.FeatureRenderer,~S");
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.appletgui.FeatureColourChooser, []);
+try {
+this.jbInit ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+var minLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.min"));
+var maxLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.max"));
+minLabel.setFont ( new java.awt.Font ("Verdana", 0, 11));
+maxLabel.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.minColour.setBounds (0, 0, 40, 27);
+this.maxColour.setBounds (0, 0, 40, 27);
+this.minColour.addMouseListener (this);
+this.maxColour.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.maxColour.addMouseListener (this);
+this.thresholdIsMin.addItemListener (this);
+this.setLayout ( new java.awt.GridLayout (4, 1));
+this.jPanel1.setLayout ( new java.awt.FlowLayout ());
+this.jPanel2.setLayout ( new java.awt.FlowLayout ());
+this.jPanel3.setLayout ( new java.awt.GridLayout (1, 1));
+this.jPanel4.setLayout ( new java.awt.FlowLayout ());
+this.jPanel1.setBackground (java.awt.Color.white);
+this.jPanel2.setBackground (java.awt.Color.white);
+this.jPanel4.setBackground (java.awt.Color.white);
+this.threshold.addItemListener (this);
+this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_no_thereshold"));
+this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_above_thereshold"));
+this.threshold.addItem (jalview.util.MessageManager.getString ("label.threshold_feature_below_thereshold"));
+this.thresholdValue.addActionListener (this);
+this.slider.setBackground (java.awt.Color.white);
+this.slider.setEnabled (false);
+this.slider.setSize ( new java.awt.Dimension (93, 21));
+this.thresholdValue.setEnabled (false);
+this.thresholdValue.setSize ( new java.awt.Dimension (79, 22));
+this.thresholdValue.setColumns (5);
+this.jPanel3.setBackground (java.awt.Color.white);
+this.colourFromLabel.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.colourFromLabel.setLabel (jalview.util.MessageManager.getString ("label.colour_by_label"));
+this.colourFromLabel.setSize ( new java.awt.Dimension (139, 22));
+this.thresholdIsMin.setBackground (java.awt.Color.white);
+this.thresholdIsMin.setLabel (jalview.util.MessageManager.getString ("label.threshold_minmax"));
+this.thresholdIsMin.setSize ( new java.awt.Dimension (135, 23));
+this.jPanel1.add (minLabel);
+this.jPanel1.add (this.minColour);
+this.jPanel1.add (maxLabel);
+this.jPanel1.add (this.maxColour);
+this.jPanel1.add (this.colourFromLabel);
+this.jPanel2.add (this.threshold);
+this.jPanel3.add (this.slider);
+this.jPanel4.add (this.thresholdValue);
+this.jPanel4.add (this.thresholdIsMin);
+this.add (this.jPanel1);
+this.add (this.jPanel2);
+this.add (this.jPanel3);
+this.add (this.jPanel4);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.thresholdValue) {
+try {
+var f = new Float (this.thresholdValue.getText ()).floatValue ();
+this.slider.setValue (Clazz.floatToInt (f * 1000));
+this.adjustmentValueChanged (null);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+} else if (evt.getSource () === this.minColour) {
+this.minColour_actionPerformed (null);
+} else if (evt.getSource () === this.maxColour) {
+this.maxColour_actionPerformed (null);
+} else {
+this.changeColour ();
+}}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+this.maxColour.setEnabled (!this.colourFromLabel.getState ());
+this.minColour.setEnabled (!this.colourFromLabel.getState ());
+this.changeColour ();
+}, "java.awt.event.ItemEvent");
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+if (!this.adjusting) {
+this.thresholdValue.setText ((this.slider.getValue () / 1000) + "");
+this.valueChanged ();
+}}, "java.awt.event.AdjustmentEvent");
+Clazz.defineMethod (c$, "valueChanged",
+function () {
+this.threshline.value = this.slider.getValue () / 1000;
+this.cs.setThresh (this.threshline.value);
+this.changeColour ();
+jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
+});
+Clazz.defineMethod (c$, "minColour_actionPerformed",
+function (newCol) {
+if (newCol == null) {
+var udc = new jalview.appletgui.UserDefinedColours (this, this.minColour.getBackground (), this.owner, jalview.util.MessageManager.getString ("label.select_colour_minimum_value"));
+} else {
+this.minColour.setBackground (newCol);
+this.minColour.setForeground (newCol);
+this.minColour.repaint ();
+this.changeColour ();
+}}, "java.awt.Color");
+Clazz.defineMethod (c$, "maxColour_actionPerformed",
+function (newCol) {
+if (newCol == null) {
+var udc = new jalview.appletgui.UserDefinedColours (this, this.maxColour.getBackground (), this.owner, jalview.util.MessageManager.getString ("label.select_colour_maximum_value"));
+} else {
+this.maxColour.setBackground (newCol);
+this.maxColour.setForeground (newCol);
+this.maxColour.repaint ();
+this.changeColour ();
+}}, "java.awt.Color");
+Clazz.defineMethod (c$, "changeColour",
+function () {
+if (this.adjusting) {
+return;
+}var aboveThreshold = -1;
+if (this.threshold.getSelectedIndex () == 1) {
+aboveThreshold = 1;
+} else if (this.threshold.getSelectedIndex () == 2) {
+aboveThreshold = 0;
+}this.slider.setEnabled (true);
+this.thresholdValue.setEnabled (true);
+var acg = new jalview.schemes.GraduatedColor (this.minColour.getBackground (), this.maxColour.getBackground (), this.min, this.max);
+acg.setColourByLabel (this.colourFromLabel.getState ());
+this.maxColour.setEnabled (!this.colourFromLabel.getState ());
+this.minColour.setEnabled (!this.colourFromLabel.getState ());
+if (aboveThreshold == -1) {
+this.slider.setEnabled (false);
+this.thresholdValue.setEnabled (false);
+this.thresholdValue.setText ("");
+} else if (aboveThreshold != -1 && this.threshline == null) {
+this.threshline = new jalview.datamodel.GraphLine ((this.max - this.min) / 2, "Threshold", java.awt.Color.black);
+}if (aboveThreshold != -1) {
+this.adjusting = true;
+acg.setThresh (this.threshline.value);
+var range = this.max * 1000 - this.min * 1000;
+this.slider.setMinimum (Clazz.floatToInt (this.min * 1000));
+this.slider.setMaximum (Clazz.floatToInt (this.max * 1000));
+this.slider.setValue (Clazz.floatToInt (this.threshline.value * 1000));
+this.thresholdValue.setText (this.threshline.value + "");
+this.slider.setEnabled (true);
+this.thresholdValue.setEnabled (true);
+this.adjusting = false;
+}acg.setThreshType (aboveThreshold);
+if (this.thresholdIsMin.getState () && aboveThreshold != -1) {
+if (aboveThreshold == 1) {
+acg = new jalview.schemes.GraduatedColor (acg, this.threshline.value, this.max);
+} else {
+acg = new jalview.schemes.GraduatedColor (acg, this.min, this.threshline.value);
+}}this.fr.setColour (this.type, acg);
+this.cs = acg;
+jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
+});
+Clazz.defineMethod (c$, "reset",
+function () {
+this.fr.setColour (this.type, this.oldcs);
+jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
+});
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+if (evt.getSource () === this.minColour || evt.getSource () === this.maxColour) {
+this.actionPerformed ( new java.awt.event.ActionEvent (evt.getSource (), 1, "Clicked"));
+} else {
+jalview.appletgui.PaintRefresher.Refresh (this, this.fr.getViewport ().getSequenceSetId ());
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+});
diff --git a/bin/jalview/appletgui/FeatureRenderer.class b/bin/jalview/appletgui/FeatureRenderer.class
index 94cc9b3..6582fe7 100644
Binary files a/bin/jalview/appletgui/FeatureRenderer.class and b/bin/jalview/appletgui/FeatureRenderer.class differ
diff --git a/bin/jalview/appletgui/FeatureRenderer.js b/bin/jalview/appletgui/FeatureRenderer.js
index 05b643c..3d688fd 100644
--- a/bin/jalview/appletgui/FeatureRenderer.js
+++ b/bin/jalview/appletgui/FeatureRenderer.js
@@ -1,272 +1,272 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "jalview.renderer.seqfeatures.FeatureRenderer"], "jalview.appletgui.FeatureRenderer", ["awt2swing.Button", "$.Choice", "$.Label", "$.ScrollPane", "$.TextArea", "$.TextField", "jalview.appletgui.FeatureColourChooser", "$.JVDialog", "$.UserDefinedColours", "jalview.datamodel.SearchResults", "jalview.io.FeaturesFile", "jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.MessageManager", "java.awt.BorderLayout", "$.Color", "$.Font", "$.GridLayout", "java.awt.event.ActionListener", "$.ItemListener", "$.MouseAdapter", "java.lang.Error"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.featureLinks = null;
-this.featureIndex = 0;
-this.deleteFeature = false;
-this.colourPanel = null;
-if (!Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer.FeatureColourPanel")) {
-jalview.appletgui.FeatureRenderer.$FeatureRenderer$FeatureColourPanel$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "FeatureRenderer", jalview.renderer.seqfeatures.FeatureRenderer);
-Clazz.makeConstructor (c$,
-function (av) {
-Clazz.superConstructor (this, jalview.appletgui.FeatureRenderer);
-this.av = av;
-this.setTransparencyAvailable (!System.getProperty ("java.version").startsWith ("1.1"));
-}, "jalview.viewmodel.AlignmentViewport");
-Clazz.defineMethod (c$, "amendFeatures",
-function (sequences, features, newFeatures, ap) {
-var bigPanel = new awt2swing.Panel ( new java.awt.BorderLayout ());
-var name = new awt2swing.TextField (16);
-var source = new awt2swing.TextField (16);
-var description = new awt2swing.TextArea (3, 35);
-var start = new awt2swing.TextField (8);
-var end = new awt2swing.TextField (8);
-var overlaps;
-var deleteButton = new awt2swing.Button ("Delete");
-this.deleteFeature = false;
-this.colourPanel = Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer.FeatureColourPanel, this, null);
-this.colourPanel.setSize (110, 15);
-var fr = this;
-var panel = new awt2swing.Panel ( new java.awt.GridLayout (3, 1));
-this.featureIndex = 0;
-var tmp;
-if (!newFeatures && features.length > 1) {
-panel = new awt2swing.Panel ( new java.awt.GridLayout (4, 1));
-tmp = new awt2swing.Panel ();
-tmp.add ( new awt2swing.Label ("Select Feature: "));
-overlaps = new awt2swing.Choice ();
-for (var i = 0; i < features.length; i++) {
-var item = features[i].getType () + "/" + features[i].getBegin () + "-" + features[i].getEnd ();
-if (features[i].getFeatureGroup () != null) {
-item += " (" + features[i].getFeatureGroup () + ")";
-}overlaps.addItem (item);
-}
-tmp.add (overlaps);
-overlaps.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer$1") ? 0 : jalview.appletgui.FeatureRenderer.$FeatureRenderer$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer$1, this, Clazz.cloneFinals ("overlaps", overlaps, "name", name, "features", features, "description", description, "source", source, "start", start, "end", end, "sequences", sequences, "ap", ap))));
-panel.add (tmp);
-}tmp = new awt2swing.Panel ();
-panel.add (tmp);
-tmp.add ( new awt2swing.Label ("Name: ", 4));
-tmp.add (name);
-tmp = new awt2swing.Panel ();
-panel.add (tmp);
-tmp.add ( new awt2swing.Label ("Group: ", 4));
-tmp.add (source);
-tmp = new awt2swing.Panel ();
-panel.add (tmp);
-tmp.add ( new awt2swing.Label ("Colour: ", 4));
-tmp.add (this.colourPanel);
-bigPanel.add (panel, "North");
-panel = new awt2swing.Panel ();
-panel.add ( new awt2swing.Label ("Description: ", 4));
-panel.add ( new awt2swing.ScrollPane ().add (description));
-if (!newFeatures) {
-bigPanel.add (panel, "South");
-panel = new awt2swing.Panel ();
-panel.add ( new awt2swing.Label (" Start:", 4));
-panel.add (start);
-panel.add ( new awt2swing.Label (" End:", 4));
-panel.add (end);
-bigPanel.add (panel, "Center");
-} else {
-bigPanel.add (panel, "Center");
-}if (jalview.appletgui.FeatureRenderer.lastFeatureAdded == null) {
-if (features[0].type != null) {
-jalview.appletgui.FeatureRenderer.lastFeatureAdded = features[0].type;
-} else {
-jalview.appletgui.FeatureRenderer.lastFeatureAdded = "feature_1";
-}}if (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded == null) {
-if (features[0].featureGroup != null) {
-jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded = features[0].featureGroup;
-} else {
-jalview.appletgui.FeatureRenderer.lastFeatureAdded = "Jalview";
-}}var title = newFeatures ? jalview.util.MessageManager.getString ("label.create_new_sequence_features") : jalview.util.MessageManager.formatMessage ("label.amend_delete_features", Clazz.newArray (-1, [sequences[0].getName ()]));
-var dialog = new jalview.appletgui.JVDialog (ap.alignFrame, title, true, 385, 240);
-dialog.setMainPanel (bigPanel);
-if (newFeatures) {
-name.setText (jalview.appletgui.FeatureRenderer.lastFeatureAdded);
-source.setText (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded);
-} else {
-dialog.ok.setLabel (jalview.util.MessageManager.getString ("label.amend"));
-dialog.buttonPanel.add (deleteButton, 1);
-deleteButton.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer$2") ? 0 : jalview.appletgui.FeatureRenderer.$FeatureRenderer$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer$2, this, Clazz.cloneFinals ("dialog", dialog))));
-name.setText (features[0].getType ());
-source.setText (features[0].getFeatureGroup ());
-}start.setText (features[0].getBegin () + "");
-end.setText (features[0].getEnd () + "");
-description.setText (features[0].getDescription ());
-var col = this.getColour (name.getText ());
-if (col == null) {
-col = new jalview.schemes.UserColourScheme ().createColourFromName (name.getText ());
-}var fcol = this.getFeatureStyle (name.getText ());
-this.colourPanel.updateColor (fcol);
-dialog.setResizable (true);
-this.colourPanel.addMouseListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer$3") ? 0 : jalview.appletgui.FeatureRenderer.$FeatureRenderer$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer$3, this, Clazz.cloneFinals ("fr", fr, "ap", ap, "name", name, "dialog", dialog))));
-dialog.setVisible (true);
-var ffile = new jalview.io.FeaturesFile ();
-if (dialog.accept) {
-this.lastSeq = null;
-jalview.appletgui.FeatureRenderer.lastFeatureAdded = name.getText ().trim ();
-jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded = source.getText ().trim ();
-jalview.appletgui.FeatureRenderer.lastDescriptionAdded = description.getText ().$replace ('\n', ' ');
-}if (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded != null && jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded.length < 1) {
-jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded = null;
-}if (!newFeatures) {
-var sf = features[this.featureIndex];
-if (dialog.accept) {
-sf.type = jalview.appletgui.FeatureRenderer.lastFeatureAdded;
-sf.featureGroup = jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded;
-sf.description = jalview.appletgui.FeatureRenderer.lastDescriptionAdded;
-if (!this.colourPanel.isGcol) {
-this.setColour (sf.type, this.colourPanel.getBackground ());
-}try {
-sf.begin = Integer.parseInt (start.getText ());
-sf.end = Integer.parseInt (end.getText ());
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-ffile.parseDescriptionHTML (sf, false);
-this.setVisible (jalview.appletgui.FeatureRenderer.lastFeatureAdded);
-}if (this.deleteFeature) {
-sequences[0].deleteFeature (sf);
-}} else {
-if (dialog.accept && name.getText ().length > 0) {
-for (var i = 0; i < sequences.length; i++) {
-features[i].type = jalview.appletgui.FeatureRenderer.lastFeatureAdded;
-features[i].featureGroup = jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded;
-features[i].description = jalview.appletgui.FeatureRenderer.lastDescriptionAdded;
-sequences[i].addSequenceFeature (features[i]);
-ffile.parseDescriptionHTML (features[i], false);
-}
-var newColour = this.colourPanel.getBackground ();
-if (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded != null) {
-this.setGroupVisibility (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded, true);
-}this.setColour (jalview.appletgui.FeatureRenderer.lastFeatureAdded, newColour);
-this.setVisible (jalview.appletgui.FeatureRenderer.lastFeatureAdded);
-this.findAllFeatures (false);
-} else {
-return false;
-}}if ((this.av).featureSettings != null) {
-(this.av).featureSettings.refreshTable ();
-}ap.paintAlignment (true);
-return true;
-}, "~A,~A,~B,jalview.appletgui.AlignmentPanel");
-c$.$FeatureRenderer$FeatureColourPanel$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.label = "";
-this.maxCol = null;
-this.isColourByLabel = false;
-this.isGcol = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.FeatureRenderer, "FeatureColourPanel", awt2swing.Panel);
-Clazz.defineMethod (c$, "updateColor",
-function (a) {
-var b;
-var c = null;
-var d = null;
-var e = "";
-if (Clazz.instanceOf (a, java.awt.Color)) {
-this.isGcol = false;
-c = a;
-d = null;
-} else if (Clazz.instanceOf (a, jalview.schemes.GraduatedColor)) {
-this.isGcol = true;
-d = a;
-c = null;
-} else {
-throw new Error (jalview.util.MessageManager.getString ("error.invalid_colour_for_mycheckbox"));
-}if (c != null) {
-this.setBackground (b = c);
-} else {
-if (d.getThreshType () != -1) {
-e += " " + ((d.getThreshType () == 1) ? "(>)" : "(<)");
-}if (this.isColourByLabel = d.isColourByLabel ()) {
-this.setBackground (b = java.awt.Color.white);
-e += " (by Label)";
-} else {
-this.setBackground (b = d.getMinColor ());
-this.maxCol = d.getMaxColor ();
-}}this.label = e;
-this.setBackground (b);
-this.repaint ();
-}, "~O");
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.appletgui.FeatureRenderer.FeatureColourPanel, [null]);
-});
-Clazz.defineMethod (c$, "PaintComponent",
-function (a) {
-var b = this.getSize ();
-if (this.isGcol) {
-if (this.isColourByLabel) {
-a.setColor (java.awt.Color.white);
-a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
-a.setColor (java.awt.Color.black);
-var c = new java.awt.Font ("Verdana", 0, 10);
-a.setFont (c);
-a.drawString (jalview.util.MessageManager.getString ("label.label"), 0, 0);
-} else {
-a.setColor (this.maxCol);
-a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
-}}}, "java.awt.Graphics");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureRenderer$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureRenderer$1", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (e) {
-var index = this.f$.overlaps.getSelectedIndex ();
-if (index != -1) {
-this.b$["jalview.appletgui.FeatureRenderer"].featureIndex = index;
-this.f$.name.setText (this.f$.features[index].getType ());
-this.f$.description.setText (this.f$.features[index].getDescription ());
-this.f$.source.setText (this.f$.features[index].getFeatureGroup ());
-this.f$.start.setText (this.f$.features[index].getBegin () + "");
-this.f$.end.setText (this.f$.features[index].getEnd () + "");
-var highlight = new jalview.datamodel.SearchResults ();
-highlight.addResult (this.f$.sequences[0], this.f$.features[index].getBegin (), this.f$.features[index].getEnd ());
-this.f$.ap.seqPanel.seqCanvas.highlightSearchResults (highlight);
-}var col = this.b$["jalview.appletgui.FeatureRenderer"].getFeatureStyle (this.f$.name.getText ());
-if (col == null) {
-col = new jalview.schemes.UserColourScheme ().createColourFromName (this.f$.name.getText ());
-}this.b$["jalview.appletgui.FeatureRenderer"].colourPanel.updateColor (col);
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureRenderer$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureRenderer$2", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-this.b$["jalview.appletgui.FeatureRenderer"].deleteFeature = true;
-this.f$.dialog.setVisible (false);
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureRenderer$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureRenderer$3", java.awt.event.MouseAdapter);
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-if (!this.b$["jalview.appletgui.FeatureRenderer"].colourPanel.isGcol) {
- new jalview.appletgui.UserDefinedColours (this.f$.fr, this.f$.ap.alignFrame);
-} else {
-var fcc = new jalview.appletgui.FeatureColourChooser (this.f$.ap.alignFrame, this.f$.name.getText ());
-this.f$.dialog.transferFocus ();
-}}, "java.awt.event.MouseEvent");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"lastFeatureAdded", null,
-"lastFeatureGroupAdded", null,
-"lastDescriptionAdded", null);
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.renderer.seqfeatures.FeatureRenderer"], "jalview.appletgui.FeatureRenderer", ["awt2swing.Button", "$.Choice", "$.Label", "$.ScrollPane", "$.TextArea", "$.TextField", "jalview.appletgui.FeatureColourChooser", "$.JVDialog", "$.UserDefinedColours", "jalview.datamodel.SearchResults", "jalview.io.FeaturesFile", "jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.MessageManager", "java.awt.BorderLayout", "$.Color", "$.Font", "$.GridLayout", "java.awt.event.ActionListener", "$.ItemListener", "$.MouseAdapter", "java.lang.Error"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.featureLinks = null;
+this.featureIndex = 0;
+this.deleteFeature = false;
+this.colourPanel = null;
+if (!Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer.FeatureColourPanel")) {
+jalview.appletgui.FeatureRenderer.$FeatureRenderer$FeatureColourPanel$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "FeatureRenderer", jalview.renderer.seqfeatures.FeatureRenderer);
+Clazz.makeConstructor (c$,
+function (av) {
+Clazz.superConstructor (this, jalview.appletgui.FeatureRenderer);
+this.av = av;
+this.setTransparencyAvailable (!System.getProperty ("java.version").startsWith ("1.1"));
+}, "jalview.viewmodel.AlignmentViewport");
+Clazz.defineMethod (c$, "amendFeatures",
+function (sequences, features, newFeatures, ap) {
+var bigPanel = new awt2swing.Panel ( new java.awt.BorderLayout ());
+var name = new awt2swing.TextField (16);
+var source = new awt2swing.TextField (16);
+var description = new awt2swing.TextArea (3, 35);
+var start = new awt2swing.TextField (8);
+var end = new awt2swing.TextField (8);
+var overlaps;
+var deleteButton = new awt2swing.Button ("Delete");
+this.deleteFeature = false;
+this.colourPanel = Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer.FeatureColourPanel, this, null);
+this.colourPanel.setSize (110, 15);
+var fr = this;
+var panel = new awt2swing.Panel ( new java.awt.GridLayout (3, 1));
+this.featureIndex = 0;
+var tmp;
+if (!newFeatures && features.length > 1) {
+panel = new awt2swing.Panel ( new java.awt.GridLayout (4, 1));
+tmp = new awt2swing.Panel ();
+tmp.add ( new awt2swing.Label ("Select Feature: "));
+overlaps = new awt2swing.Choice ();
+for (var i = 0; i < features.length; i++) {
+var item = features[i].getType () + "/" + features[i].getBegin () + "-" + features[i].getEnd ();
+if (features[i].getFeatureGroup () != null) {
+item += " (" + features[i].getFeatureGroup () + ")";
+}overlaps.addItem (item);
+}
+tmp.add (overlaps);
+overlaps.addItemListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer$1") ? 0 : jalview.appletgui.FeatureRenderer.$FeatureRenderer$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer$1, this, Clazz.cloneFinals ("overlaps", overlaps, "name", name, "features", features, "description", description, "source", source, "start", start, "end", end, "sequences", sequences, "ap", ap))));
+panel.add (tmp);
+}tmp = new awt2swing.Panel ();
+panel.add (tmp);
+tmp.add ( new awt2swing.Label ("Name: ", 4));
+tmp.add (name);
+tmp = new awt2swing.Panel ();
+panel.add (tmp);
+tmp.add ( new awt2swing.Label ("Group: ", 4));
+tmp.add (source);
+tmp = new awt2swing.Panel ();
+panel.add (tmp);
+tmp.add ( new awt2swing.Label ("Colour: ", 4));
+tmp.add (this.colourPanel);
+bigPanel.add (panel, "North");
+panel = new awt2swing.Panel ();
+panel.add ( new awt2swing.Label ("Description: ", 4));
+panel.add ( new awt2swing.ScrollPane ().add (description));
+if (!newFeatures) {
+bigPanel.add (panel, "South");
+panel = new awt2swing.Panel ();
+panel.add ( new awt2swing.Label (" Start:", 4));
+panel.add (start);
+panel.add ( new awt2swing.Label (" End:", 4));
+panel.add (end);
+bigPanel.add (panel, "Center");
+} else {
+bigPanel.add (panel, "Center");
+}if (jalview.appletgui.FeatureRenderer.lastFeatureAdded == null) {
+if (features[0].type != null) {
+jalview.appletgui.FeatureRenderer.lastFeatureAdded = features[0].type;
+} else {
+jalview.appletgui.FeatureRenderer.lastFeatureAdded = "feature_1";
+}}if (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded == null) {
+if (features[0].featureGroup != null) {
+jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded = features[0].featureGroup;
+} else {
+jalview.appletgui.FeatureRenderer.lastFeatureAdded = "Jalview";
+}}var title = newFeatures ? jalview.util.MessageManager.getString ("label.create_new_sequence_features") : jalview.util.MessageManager.formatMessage ("label.amend_delete_features", Clazz.newArray (-1, [sequences[0].getName ()]));
+var dialog = new jalview.appletgui.JVDialog (ap.alignFrame, title, true, 385, 240);
+dialog.setMainPanel (bigPanel);
+if (newFeatures) {
+name.setText (jalview.appletgui.FeatureRenderer.lastFeatureAdded);
+source.setText (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded);
+} else {
+dialog.ok.setLabel (jalview.util.MessageManager.getString ("label.amend"));
+dialog.buttonPanel.add (deleteButton, 1);
+deleteButton.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer$2") ? 0 : jalview.appletgui.FeatureRenderer.$FeatureRenderer$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer$2, this, Clazz.cloneFinals ("dialog", dialog))));
+name.setText (features[0].getType ());
+source.setText (features[0].getFeatureGroup ());
+}start.setText (features[0].getBegin () + "");
+end.setText (features[0].getEnd () + "");
+description.setText (features[0].getDescription ());
+var col = this.getColour (name.getText ());
+if (col == null) {
+col = new jalview.schemes.UserColourScheme ().createColourFromName (name.getText ());
+}var fcol = this.getFeatureStyle (name.getText ());
+this.colourPanel.updateColor (fcol);
+dialog.setResizable (true);
+this.colourPanel.addMouseListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureRenderer$3") ? 0 : jalview.appletgui.FeatureRenderer.$FeatureRenderer$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureRenderer$3, this, Clazz.cloneFinals ("fr", fr, "ap", ap, "name", name, "dialog", dialog))));
+dialog.setVisible (true);
+var ffile = new jalview.io.FeaturesFile ();
+if (dialog.accept) {
+this.lastSeq = null;
+jalview.appletgui.FeatureRenderer.lastFeatureAdded = name.getText ().trim ();
+jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded = source.getText ().trim ();
+jalview.appletgui.FeatureRenderer.lastDescriptionAdded = description.getText ().$replace ('\n', ' ');
+}if (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded != null && jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded.length < 1) {
+jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded = null;
+}if (!newFeatures) {
+var sf = features[this.featureIndex];
+if (dialog.accept) {
+sf.type = jalview.appletgui.FeatureRenderer.lastFeatureAdded;
+sf.featureGroup = jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded;
+sf.description = jalview.appletgui.FeatureRenderer.lastDescriptionAdded;
+if (!this.colourPanel.isGcol) {
+this.setColour (sf.type, this.colourPanel.getBackground ());
+}try {
+sf.begin = Integer.parseInt (start.getText ());
+sf.end = Integer.parseInt (end.getText ());
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+ffile.parseDescriptionHTML (sf, false);
+this.setVisible (jalview.appletgui.FeatureRenderer.lastFeatureAdded);
+}if (this.deleteFeature) {
+sequences[0].deleteFeature (sf);
+}} else {
+if (dialog.accept && name.getText ().length > 0) {
+for (var i = 0; i < sequences.length; i++) {
+features[i].type = jalview.appletgui.FeatureRenderer.lastFeatureAdded;
+features[i].featureGroup = jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded;
+features[i].description = jalview.appletgui.FeatureRenderer.lastDescriptionAdded;
+sequences[i].addSequenceFeature (features[i]);
+ffile.parseDescriptionHTML (features[i], false);
+}
+var newColour = this.colourPanel.getBackground ();
+if (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded != null) {
+this.setGroupVisibility (jalview.appletgui.FeatureRenderer.lastFeatureGroupAdded, true);
+}this.setColour (jalview.appletgui.FeatureRenderer.lastFeatureAdded, newColour);
+this.setVisible (jalview.appletgui.FeatureRenderer.lastFeatureAdded);
+this.findAllFeatures (false);
+} else {
+return false;
+}}if ((this.av).featureSettings != null) {
+(this.av).featureSettings.refreshTable ();
+}ap.paintAlignment (true);
+return true;
+}, "~A,~A,~B,jalview.appletgui.AlignmentPanel");
+c$.$FeatureRenderer$FeatureColourPanel$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.label = "";
+this.maxCol = null;
+this.isColourByLabel = false;
+this.isGcol = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.FeatureRenderer, "FeatureColourPanel", awt2swing.Panel);
+Clazz.defineMethod (c$, "updateColor",
+function (a) {
+var b;
+var c = null;
+var d = null;
+var e = "";
+if (Clazz.instanceOf (a, java.awt.Color)) {
+this.isGcol = false;
+c = a;
+d = null;
+} else if (Clazz.instanceOf (a, jalview.schemes.GraduatedColor)) {
+this.isGcol = true;
+d = a;
+c = null;
+} else {
+throw new Error (jalview.util.MessageManager.getString ("error.invalid_colour_for_mycheckbox"));
+}if (c != null) {
+this.setBackground (b = c);
+} else {
+if (d.getThreshType () != -1) {
+e += " " + ((d.getThreshType () == 1) ? "(>)" : "(<)");
+}if (this.isColourByLabel = d.isColourByLabel ()) {
+this.setBackground (b = java.awt.Color.white);
+e += " (by Label)";
+} else {
+this.setBackground (b = d.getMinColor ());
+this.maxCol = d.getMaxColor ();
+}}this.label = e;
+this.setBackground (b);
+this.repaint ();
+}, "~O");
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.appletgui.FeatureRenderer.FeatureColourPanel, [null]);
+});
+Clazz.defineMethod (c$, "PaintComponent",
+function (a) {
+var b = this.getSize ();
+if (this.isGcol) {
+if (this.isColourByLabel) {
+a.setColor (java.awt.Color.white);
+a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
+a.setColor (java.awt.Color.black);
+var c = new java.awt.Font ("Verdana", 0, 10);
+a.setFont (c);
+a.drawString (jalview.util.MessageManager.getString ("label.label"), 0, 0);
+} else {
+a.setColor (this.maxCol);
+a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
+}}}, "java.awt.Graphics");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureRenderer$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureRenderer$1", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (e) {
+var index = this.f$.overlaps.getSelectedIndex ();
+if (index != -1) {
+this.b$["jalview.appletgui.FeatureRenderer"].featureIndex = index;
+this.f$.name.setText (this.f$.features[index].getType ());
+this.f$.description.setText (this.f$.features[index].getDescription ());
+this.f$.source.setText (this.f$.features[index].getFeatureGroup ());
+this.f$.start.setText (this.f$.features[index].getBegin () + "");
+this.f$.end.setText (this.f$.features[index].getEnd () + "");
+var highlight = new jalview.datamodel.SearchResults ();
+highlight.addResult (this.f$.sequences[0], this.f$.features[index].getBegin (), this.f$.features[index].getEnd ());
+this.f$.ap.seqPanel.seqCanvas.highlightSearchResults (highlight);
+}var col = this.b$["jalview.appletgui.FeatureRenderer"].getFeatureStyle (this.f$.name.getText ());
+if (col == null) {
+col = new jalview.schemes.UserColourScheme ().createColourFromName (this.f$.name.getText ());
+}this.b$["jalview.appletgui.FeatureRenderer"].colourPanel.updateColor (col);
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureRenderer$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureRenderer$2", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+this.b$["jalview.appletgui.FeatureRenderer"].deleteFeature = true;
+this.f$.dialog.setVisible (false);
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureRenderer$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureRenderer$3", java.awt.event.MouseAdapter);
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+if (!this.b$["jalview.appletgui.FeatureRenderer"].colourPanel.isGcol) {
+ new jalview.appletgui.UserDefinedColours (this.f$.fr, this.f$.ap.alignFrame);
+} else {
+var fcc = new jalview.appletgui.FeatureColourChooser (this.f$.ap.alignFrame, this.f$.name.getText ());
+this.f$.dialog.transferFocus ();
+}}, "java.awt.event.MouseEvent");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"lastFeatureAdded", null,
+"lastFeatureGroupAdded", null,
+"lastDescriptionAdded", null);
+});
diff --git a/bin/jalview/appletgui/FeatureSettings.js b/bin/jalview/appletgui/FeatureSettings.js
index c10ac3f..cc92844 100644
--- a/bin/jalview/appletgui/FeatureSettings.js
+++ b/bin/jalview/appletgui/FeatureSettings.js
@@ -1,444 +1,444 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Checkbox", "$.Panel", "jalview.api.FeatureSettingsControllerI", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.FeatureSettings", ["awt2swing.Button", "$.Frame", "$.Label", "$.MenuItem", "$.PopupMenu", "$.ScrollPane", "$.Scrollbar", "jalview.appletgui.FeatureColourChooser", "$.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.schemes.GraduatedColor", "jalview.util.MessageManager", "java.awt.BorderLayout", "$.Color", "$.Font", "$.GridLayout", "$.Toolkit", "java.awt.event.WindowAdapter", "java.lang.Boolean", "$.Error", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fr = null;
-this.ap = null;
-this.av = null;
-this.frame = null;
-this.groupPanel = null;
-this.featurePanel = null;
-this.scrollPane = null;
-this.linkImage = null;
-this.transparency = null;
-this.groupItemListener = null;
-this.selectedCheck = null;
-this.dragging = false;
-if (!Clazz.isClassDefined ("jalview.appletgui.FeatureSettings.MyCheckbox")) {
-jalview.appletgui.FeatureSettings.$FeatureSettings$MyCheckbox$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "FeatureSettings", awt2swing.Panel, [java.awt.event.ItemListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.ActionListener, java.awt.event.AdjustmentListener, jalview.api.FeatureSettingsControllerI]);
-Clazz.prepareFields (c$, function () {
-this.featurePanel = new awt2swing.Panel ();
-this.groupItemListener = ((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$1") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$1, this, null));
-});
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.FeatureSettings, []);
-this.ap = ap;
-this.av = ap.av;
-ap.av.featureSettings = this;
-this.fr = ap.seqPanel.seqCanvas.getFeatureRenderer ();
-this.transparency = new awt2swing.Scrollbar (0, 100 - Clazz.floatToInt (this.fr.getTransparency () * 100), 1, 1, 100);
-if (this.fr.isTransparencyAvailable ()) {
-this.transparency.addAdjustmentListener (this);
-} else {
-this.transparency.setEnabled (false);
-}var url = this.getClass ().getResource ("/images/link.gif");
-if (url != null) {
-this.linkImage = java.awt.Toolkit.getDefaultToolkit ().getImage (url);
-}if (this.av.isShowSequenceFeatures () || !this.fr.hasRenderOrder ()) {
-this.fr.findAllFeatures (true);
-}this.discoverAllFeatureData ();
-this.setLayout ( new java.awt.BorderLayout ());
-this.scrollPane = new awt2swing.ScrollPane ();
-this.scrollPane.add (this.featurePanel);
-if (this.fr.getAllFeatureColours () != null && this.fr.getAllFeatureColours ().size () > 0) {
-this.add (this.scrollPane, "Center");
-}var invert = new awt2swing.Button ("Invert Selection");
-invert.addActionListener (this);
-var lowerPanel = new awt2swing.Panel ( new java.awt.GridLayout (2, 1, 5, 10));
-lowerPanel.add (invert);
-var tPanel = new awt2swing.Panel ( new java.awt.BorderLayout ());
-if (this.fr.isTransparencyAvailable ()) {
-tPanel.add (this.transparency, "Center");
-tPanel.add ( new awt2swing.Label ("Transparency"), "East");
-} else {
-tPanel.add ( new awt2swing.Label ("Transparency not available in this web browser"), "Center");
-}lowerPanel.add (tPanel, "South");
-this.add (lowerPanel, "South");
-if (this.groupPanel != null) {
-this.groupPanel.setLayout ( new java.awt.GridLayout (Clazz.doubleToInt ((this.fr.getFeatureGroupsSize ()) / 4) + 1, 4));
-this.groupPanel.validate ();
-this.add (this.groupPanel, "North");
-}this.frame = new awt2swing.Frame ();
-this.frame.add (this);
-var me = this;
-this.frame.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$2") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$2, this, Clazz.cloneFinals ("me", me))));
-var height = this.featurePanel.getComponentCount () * 50 + 60;
-height = Math.max (200, height);
-height = Math.min (400, height);
-var width = 300;
-jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.feature_settings"), width, height);
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.defineMethod (c$, "PaintComponent",
-function (g) {
-g.setColor (java.awt.Color.black);
-g.drawString (jalview.util.MessageManager.getString ("label.no_features_added_to_this_alignment"), 10, 20);
-g.drawString (jalview.util.MessageManager.getString ("label.features_can_be_added_from_searches_1"), 10, 40);
-g.drawString (jalview.util.MessageManager.getString ("label.features_can_be_added_from_searches_2"), 10, 60);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "popupSort",
-function (check, minmax, x, y) {
-var type = check.type;
-var typeCol = this.fr.getFeatureStyle (type);
-var men = new awt2swing.PopupMenu (jalview.util.MessageManager.formatMessage ("label.settings_for_type", Clazz.newArray (-1, [type])));
-var scr = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sort_by_score"));
-men.add (scr);
-var me = this;
-scr.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$3") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$3, this, Clazz.cloneFinals ("me", me, "type", type))));
-var dens = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sort_by_density"));
-dens.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$4") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$4$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$4, this, Clazz.cloneFinals ("me", me, "type", type))));
-men.add (dens);
-if (minmax != null) {
-var typeMinMax = minmax.get (type);
-if (typeMinMax != null && (typeMinMax)[0] != null) {
-var mxcol = new awt2swing.MenuItem ((Clazz.instanceOf (typeCol, java.awt.Color)) ? "Graduated Colour" : "Single Colour");
-men.add (mxcol);
-mxcol.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$5") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$5$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$5, this, Clazz.cloneFinals ("typeCol", typeCol, "me", me, "type", type, "check", check))));
-}}this.featurePanel.add (men);
-men.show (this.featurePanel, x, y);
-}, "jalview.appletgui.FeatureSettings.MyCheckbox,java.util.Hashtable,~N,~N");
-Clazz.overrideMethod (c$, "discoverAllFeatureData",
-function () {
-if (this.fr.getAllFeatureColours () != null && this.fr.getAllFeatureColours ().size () > 0) {
-this.rebuildGroups ();
-}this.resetTable (false);
-});
-Clazz.defineMethod (c$, "rebuildGroups",
-function () {
-var rdrw = false;
-if (this.groupPanel == null) {
-this.groupPanel = new awt2swing.Panel ();
-} else {
-rdrw = true;
-this.groupPanel.removeAll ();
-}for (var group, $group = this.fr.getFeatureGroups ().iterator (); $group.hasNext () && ((group = $group.next ()) || true);) {
-var vis = this.fr.checkGroupVisibility (group, false);
-var check = Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings.MyCheckbox, this, null, group, vis, (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (group)));
-check.addMouseListener (this);
-check.setFont ( new java.awt.Font ("Serif", 1, 12));
-check.addItemListener (this.groupItemListener);
-check.setVisible (vis);
-this.groupPanel.add (check);
-}
-if (rdrw) {
-this.groupPanel.validate ();
-}});
-Clazz.defineMethod (c$, "resetTable",
-function (groupsChanged) {
-var tmpfeatures;
-var group = null;
-var type;
-var visibleChecks = new java.util.Vector ();
-var alignment = this.av.getAlignment ();
-for (var i = 0; i < alignment.getHeight (); i++) {
-if (alignment.getSequenceAt (i).getSequenceFeatures () == null) {
-continue;
-}tmpfeatures = alignment.getSequenceAt (i).getSequenceFeatures ();
-var index = 0;
-while (index < tmpfeatures.length) {
-group = tmpfeatures[index].featureGroup;
-if (group == null || this.fr.checkGroupVisibility (group, true)) {
-type = tmpfeatures[index].getType ();
-if (!visibleChecks.contains (type)) {
-visibleChecks.addElement (type);
-}}index++;
-}
-}
-var comps;
-var cSize = this.featurePanel.getComponentCount ();
-var check;
-for (var i = 0; i < cSize; i++) {
-comps = this.featurePanel.getComponents ();
-check = comps[i];
-if (!visibleChecks.contains (check.type)) {
-this.featurePanel.remove (i);
-cSize--;
-i--;
-}}
-if (this.fr.getRenderOrder () != null) {
-var rol = this.fr.getRenderOrder ();
-for (var ro = rol.size () - 1; ro > -1; ro--) {
-var item = rol.get (ro);
-if (!visibleChecks.contains (item)) {
-continue;
-}visibleChecks.removeElement (item);
-this.addCheck (false, item);
-}
-}var en = visibleChecks.elements ();
-while (en.hasMoreElements ()) {
-this.addCheck (groupsChanged, en.nextElement ().toString ());
-}
-this.featurePanel.setLayout ( new java.awt.GridLayout (this.featurePanel.getComponentCount (), 1, 10, 5));
-this.featurePanel.validate ();
-if (this.scrollPane != null) {
-this.scrollPane.validate ();
-}this.itemStateChanged (null);
-}, "~B");
-Clazz.defineMethod (c$, "addCheck",
-function (groupsChanged, type) {
-var addCheck;
-var comps = this.featurePanel.getComponents ();
-var check;
-addCheck = true;
-for (var i = 0; i < this.featurePanel.getComponentCount (); i++) {
-check = comps[i];
-if (check.type.equals (type)) {
-addCheck = false;
-break;
-}}
-if (addCheck) {
-var selected = false;
-if (groupsChanged || this.av.getFeaturesDisplayed ().isVisible (type)) {
-selected = true;
-}check = Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings.MyCheckbox, this, null, type, selected, (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (type)), this.fr.getFeatureStyle (type));
-check.addMouseListener (this);
-check.addMouseMotionListener (this);
-check.addItemListener (this);
-if (groupsChanged) {
-this.featurePanel.add (check, 0);
-} else {
-this.featurePanel.add (check);
-}}}, "~B,~S");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-for (var i = 0; i < this.featurePanel.getComponentCount (); i++) {
-var check = this.featurePanel.getComponent (i);
-check.setState (!check.getState ());
-}
-this.selectionChanged ();
-}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-this.selectionChanged ();
-}, "java.awt.event.ItemEvent");
-Clazz.defineMethod (c$, "selectionChanged",
-function () {
-var comps = this.featurePanel.getComponents ();
-var cSize = comps.length;
-var tmp = Clazz.newArray (cSize, 3, null);
-var tmpSize = 0;
-for (var i = 0; i < cSize; i++) {
-var check = comps[i];
-tmp[tmpSize][0] = check.type;
-tmp[tmpSize][1] = this.fr.getFeatureStyle (check.type);
-tmp[tmpSize][2] = new Boolean (check.getState ());
-tmpSize++;
-}
-var data = Clazz.newArray (tmpSize, 3, null);
-System.arraycopy (tmp, 0, data, 0, tmpSize);
-this.fr.setFeaturePriority (data);
-this.ap.paintAlignment (true);
-});
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-this.selectedCheck = evt.getSource ();
-if (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (this.selectedCheck.type)) {
-if (evt.getX () > this.selectedCheck.stringWidth + 20) {
-evt.consume ();
-}}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-if ((evt.getSource ()).getParent () !== this.featurePanel) {
-return;
-}this.dragging = true;
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-if ((evt.getSource ()).getParent () !== this.featurePanel) {
-return;
-}var comp = null;
-var target = null;
-var height = evt.getY () + evt.getComponent ().getLocation ().y;
-if (height > this.featurePanel.getSize ().height) {
-comp = this.featurePanel.getComponent (this.featurePanel.getComponentCount () - 1);
-} else if (height < 0) {
-comp = this.featurePanel.getComponent (0);
-} else {
-comp = this.featurePanel.getComponentAt (evt.getX (), evt.getY () + evt.getComponent ().getLocation ().y);
-}if (comp != null && Clazz.instanceOf (comp, awt2swing.Checkbox)) {
-target = comp;
-}if (this.selectedCheck != null && target != null && this.selectedCheck !== target) {
-var targetIndex = -1;
-for (var i = 0; i < this.featurePanel.getComponentCount (); i++) {
-if (target === this.featurePanel.getComponent (i)) {
-targetIndex = i;
-break;
-}}
-this.featurePanel.remove (this.selectedCheck);
-this.featurePanel.add (this.selectedCheck, targetIndex);
-this.featurePanel.validate ();
-this.itemStateChanged (null);
-}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "setUserColour",
-function (feature, originalColour) {
-if (Clazz.instanceOf (originalColour, java.awt.Color) || Clazz.instanceOf (originalColour, jalview.schemes.GraduatedColor)) {
-this.fr.setColour (feature, originalColour);
-} else {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_unsupported_feature_colour_object"));
-}this.refreshTable ();
-}, "~S,~O");
-Clazz.defineMethod (c$, "refreshTable",
-function () {
-this.featurePanel.removeAll ();
-this.resetTable (false);
-this.ap.paintAlignment (true);
-});
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-var check = evt.getSource ();
-if ((evt.getModifiers () & 4) != 0) {
-this.popupSort (check, this.fr.getMinMax (), evt.getX (), evt.getY ());
-}if (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (check.type)) {
-if (evt.getX () > check.stringWidth + 20) {
-evt.consume ();
-var link = this.fr.featureLinks.get (check.type).toString ();
-this.ap.alignFrame.showURL (link.substring (link.indexOf ("|") + 1), link.substring (0, link.indexOf ("|")));
-}}if (check.getParent () !== this.featurePanel) {
-return;
-}if (evt.getClickCount () > 1) {
-var fcol = this.fr.getFeatureStyle (check.type);
-if (Clazz.instanceOf (fcol, java.awt.Color)) {
- new jalview.appletgui.UserDefinedColours (this, check.type, fcol);
-} else {
- new jalview.appletgui.FeatureColourChooser (this, check.type);
-check.updateColor (this.fr.getFeatureStyle (check.type));
-}}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-this.fr.setTransparency ((100 - this.transparency.getValue ()) / 100);
-this.ap.seqPanel.seqCanvas.repaint ();
-}, "java.awt.event.AdjustmentEvent");
-c$.$FeatureSettings$MyCheckbox$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.type = null;
-this.stringWidth = 0;
-this.hasLink = false;
-this.gcol = null;
-this.col = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.FeatureSettings, "MyCheckbox", awt2swing.Checkbox);
-Clazz.defineMethod (c$, "updateColor",
-function (a) {
-if (Clazz.instanceOf (a, java.awt.Color)) {
-this.col = a;
-this.gcol = null;
-} else if (Clazz.instanceOf (a, jalview.schemes.GraduatedColor)) {
-this.gcol = a;
-this.col = null;
-} else {
-throw new Error (jalview.util.MessageManager.getString ("error.invalid_colour_for_mycheckbox"));
-}if (this.col != null) {
-this.setBackground (this.col);
-} else {
-var b = this.type;
-if (this.gcol.getThreshType () != -1) {
-b += " " + ((this.gcol.getThreshType () == 1) ? "(>)" : "(<)");
-}if (this.gcol.isColourByLabel ()) {
-this.setBackground (java.awt.Color.white);
-b += " (by Label)";
-} else {
-this.setBackground (this.gcol.getMinColor ());
-}this.setLabel (b);
-}this.repaint ();
-}, "~O");
-Clazz.makeConstructor (c$,
-function (a, b, c) {
-Clazz.superConstructor (this, jalview.appletgui.FeatureSettings.MyCheckbox, [a, b]);
-this.type = a;
-var d = this.b$["jalview.appletgui.FeatureSettings"].av.nullFrame.getFontMetrics (this.b$["jalview.appletgui.FeatureSettings"].av.nullFrame.getFont ());
-this.stringWidth = d.stringWidth (a);
-this.hasLink = c;
-}, "~S,~B,~B");
-Clazz.makeConstructor (c$,
-function (a, b, c, d) {
-this.construct (a, b, c);
-this.updateColor (d);
-}, "~S,~B,~B,~O");
-Clazz.defineMethod (c$, "PaintComponent",
-function (a) {
-var b = this.getSize ();
-if (this.gcol != null) {
-if (this.gcol.isColourByLabel ()) {
-a.setColor (java.awt.Color.white);
-a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
-} else {
-var c = this.gcol.getMaxColor ();
-a.setColor (c);
-a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
-}}if (this.hasLink) {
-a.drawImage (this.b$["jalview.appletgui.FeatureSettings"].linkImage, this.stringWidth + 25, Clazz.doubleToInt ((this.getSize ().height - this.b$["jalview.appletgui.FeatureSettings"].linkImage.getHeight (this)) / 2), this);
-}}, "java.awt.Graphics");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureSettings$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$1", null, java.awt.event.ItemListener);
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-var source = evt.getSource ();
-this.b$["jalview.appletgui.FeatureSettings"].fr.setGroupVisibility (source.getLabel (), source.getState ());
-this.b$["jalview.appletgui.FeatureSettings"].ap.seqPanel.seqCanvas.repaint ();
-if (this.b$["jalview.appletgui.FeatureSettings"].ap.overviewPanel != null) {
-this.b$["jalview.appletgui.FeatureSettings"].ap.overviewPanel.updateOverviewImage ();
-}this.b$["jalview.appletgui.FeatureSettings"].resetTable (true);
-return;
-}, "java.awt.event.ItemEvent");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureSettings$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$2", java.awt.event.WindowAdapter);
-Clazz.overrideMethod (c$, "windowClosing",
-function (e) {
-if (this.f$.me.av.featureSettings === this.f$.me) {
-this.f$.me.av.featureSettings = null;
-this.f$.me.ap = null;
-this.f$.me.av = null;
-}}, "java.awt.event.WindowEvent");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureSettings$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$3", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.f$.me.ap.alignFrame.avc.sortAlignmentByFeatureScore ( Clazz.newArray (-1, [this.f$.type]));
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureSettings$4$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$4", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.f$.me.ap.alignFrame.avc.sortAlignmentByFeatureDensity ( Clazz.newArray (-1, [this.f$.type]));
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$FeatureSettings$5$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$5", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-if (Clazz.instanceOf (this.f$.typeCol, java.awt.Color)) {
- new jalview.appletgui.FeatureColourChooser (this.f$.me, this.f$.type);
-this.f$.check.updateColor (this.b$["jalview.appletgui.FeatureSettings"].fr.getFeatureStyle (this.f$.type));
-} else {
- new jalview.appletgui.UserDefinedColours (this.f$.me, this.f$.check.type, (this.f$.typeCol));
-}}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Checkbox", "$.Panel", "jalview.api.FeatureSettingsControllerI", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.ItemListener", "$.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.FeatureSettings", ["awt2swing.Button", "$.Frame", "$.Label", "$.MenuItem", "$.PopupMenu", "$.ScrollPane", "$.Scrollbar", "jalview.appletgui.FeatureColourChooser", "$.UserDefinedColours", "jalview.bin.JalviewLite", "jalview.schemes.GraduatedColor", "jalview.util.MessageManager", "java.awt.BorderLayout", "$.Color", "$.Font", "$.GridLayout", "$.Toolkit", "java.awt.event.WindowAdapter", "java.lang.Boolean", "$.Error", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fr = null;
+this.ap = null;
+this.av = null;
+this.frame = null;
+this.groupPanel = null;
+this.featurePanel = null;
+this.scrollPane = null;
+this.linkImage = null;
+this.transparency = null;
+this.groupItemListener = null;
+this.selectedCheck = null;
+this.dragging = false;
+if (!Clazz.isClassDefined ("jalview.appletgui.FeatureSettings.MyCheckbox")) {
+jalview.appletgui.FeatureSettings.$FeatureSettings$MyCheckbox$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "FeatureSettings", awt2swing.Panel, [java.awt.event.ItemListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.ActionListener, java.awt.event.AdjustmentListener, jalview.api.FeatureSettingsControllerI]);
+Clazz.prepareFields (c$, function () {
+this.featurePanel = new awt2swing.Panel ();
+this.groupItemListener = ((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$1") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$1, this, null));
+});
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.FeatureSettings, []);
+this.ap = ap;
+this.av = ap.av;
+ap.av.featureSettings = this;
+this.fr = ap.seqPanel.seqCanvas.getFeatureRenderer ();
+this.transparency = new awt2swing.Scrollbar (0, 100 - Clazz.floatToInt (this.fr.getTransparency () * 100), 1, 1, 100);
+if (this.fr.isTransparencyAvailable ()) {
+this.transparency.addAdjustmentListener (this);
+} else {
+this.transparency.setEnabled (false);
+}var url = this.getClass ().getResource ("/images/link.gif");
+if (url != null) {
+this.linkImage = java.awt.Toolkit.getDefaultToolkit ().getImage (url);
+}if (this.av.isShowSequenceFeatures () || !this.fr.hasRenderOrder ()) {
+this.fr.findAllFeatures (true);
+}this.discoverAllFeatureData ();
+this.setLayout ( new java.awt.BorderLayout ());
+this.scrollPane = new awt2swing.ScrollPane ();
+this.scrollPane.add (this.featurePanel);
+if (this.fr.getAllFeatureColours () != null && this.fr.getAllFeatureColours ().size () > 0) {
+this.add (this.scrollPane, "Center");
+}var invert = new awt2swing.Button ("Invert Selection");
+invert.addActionListener (this);
+var lowerPanel = new awt2swing.Panel ( new java.awt.GridLayout (2, 1, 5, 10));
+lowerPanel.add (invert);
+var tPanel = new awt2swing.Panel ( new java.awt.BorderLayout ());
+if (this.fr.isTransparencyAvailable ()) {
+tPanel.add (this.transparency, "Center");
+tPanel.add ( new awt2swing.Label ("Transparency"), "East");
+} else {
+tPanel.add ( new awt2swing.Label ("Transparency not available in this web browser"), "Center");
+}lowerPanel.add (tPanel, "South");
+this.add (lowerPanel, "South");
+if (this.groupPanel != null) {
+this.groupPanel.setLayout ( new java.awt.GridLayout (Clazz.doubleToInt ((this.fr.getFeatureGroupsSize ()) / 4) + 1, 4));
+this.groupPanel.validate ();
+this.add (this.groupPanel, "North");
+}this.frame = new awt2swing.Frame ();
+this.frame.add (this);
+var me = this;
+this.frame.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$2") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$2, this, Clazz.cloneFinals ("me", me))));
+var height = this.featurePanel.getComponentCount () * 50 + 60;
+height = Math.max (200, height);
+height = Math.min (400, height);
+var width = 300;
+jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.feature_settings"), width, height);
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.defineMethod (c$, "PaintComponent",
+function (g) {
+g.setColor (java.awt.Color.black);
+g.drawString (jalview.util.MessageManager.getString ("label.no_features_added_to_this_alignment"), 10, 20);
+g.drawString (jalview.util.MessageManager.getString ("label.features_can_be_added_from_searches_1"), 10, 40);
+g.drawString (jalview.util.MessageManager.getString ("label.features_can_be_added_from_searches_2"), 10, 60);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "popupSort",
+function (check, minmax, x, y) {
+var type = check.type;
+var typeCol = this.fr.getFeatureStyle (type);
+var men = new awt2swing.PopupMenu (jalview.util.MessageManager.formatMessage ("label.settings_for_type", Clazz.newArray (-1, [type])));
+var scr = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sort_by_score"));
+men.add (scr);
+var me = this;
+scr.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$3") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$3, this, Clazz.cloneFinals ("me", me, "type", type))));
+var dens = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.sort_by_density"));
+dens.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$4") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$4$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$4, this, Clazz.cloneFinals ("me", me, "type", type))));
+men.add (dens);
+if (minmax != null) {
+var typeMinMax = minmax.get (type);
+if (typeMinMax != null && (typeMinMax)[0] != null) {
+var mxcol = new awt2swing.MenuItem ((Clazz.instanceOf (typeCol, java.awt.Color)) ? "Graduated Colour" : "Single Colour");
+men.add (mxcol);
+mxcol.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FeatureSettings$5") ? 0 : jalview.appletgui.FeatureSettings.$FeatureSettings$5$ ()), Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings$5, this, Clazz.cloneFinals ("typeCol", typeCol, "me", me, "type", type, "check", check))));
+}}this.featurePanel.add (men);
+men.show (this.featurePanel, x, y);
+}, "jalview.appletgui.FeatureSettings.MyCheckbox,java.util.Hashtable,~N,~N");
+Clazz.overrideMethod (c$, "discoverAllFeatureData",
+function () {
+if (this.fr.getAllFeatureColours () != null && this.fr.getAllFeatureColours ().size () > 0) {
+this.rebuildGroups ();
+}this.resetTable (false);
+});
+Clazz.defineMethod (c$, "rebuildGroups",
+function () {
+var rdrw = false;
+if (this.groupPanel == null) {
+this.groupPanel = new awt2swing.Panel ();
+} else {
+rdrw = true;
+this.groupPanel.removeAll ();
+}for (var group, $group = this.fr.getFeatureGroups ().iterator (); $group.hasNext () && ((group = $group.next ()) || true);) {
+var vis = this.fr.checkGroupVisibility (group, false);
+var check = Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings.MyCheckbox, this, null, group, vis, (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (group)));
+check.addMouseListener (this);
+check.setFont ( new java.awt.Font ("Serif", 1, 12));
+check.addItemListener (this.groupItemListener);
+check.setVisible (vis);
+this.groupPanel.add (check);
+}
+if (rdrw) {
+this.groupPanel.validate ();
+}});
+Clazz.defineMethod (c$, "resetTable",
+function (groupsChanged) {
+var tmpfeatures;
+var group = null;
+var type;
+var visibleChecks = new java.util.Vector ();
+var alignment = this.av.getAlignment ();
+for (var i = 0; i < alignment.getHeight (); i++) {
+if (alignment.getSequenceAt (i).getSequenceFeatures () == null) {
+continue;
+}tmpfeatures = alignment.getSequenceAt (i).getSequenceFeatures ();
+var index = 0;
+while (index < tmpfeatures.length) {
+group = tmpfeatures[index].featureGroup;
+if (group == null || this.fr.checkGroupVisibility (group, true)) {
+type = tmpfeatures[index].getType ();
+if (!visibleChecks.contains (type)) {
+visibleChecks.addElement (type);
+}}index++;
+}
+}
+var comps;
+var cSize = this.featurePanel.getComponentCount ();
+var check;
+for (var i = 0; i < cSize; i++) {
+comps = this.featurePanel.getComponents ();
+check = comps[i];
+if (!visibleChecks.contains (check.type)) {
+this.featurePanel.remove (i);
+cSize--;
+i--;
+}}
+if (this.fr.getRenderOrder () != null) {
+var rol = this.fr.getRenderOrder ();
+for (var ro = rol.size () - 1; ro > -1; ro--) {
+var item = rol.get (ro);
+if (!visibleChecks.contains (item)) {
+continue;
+}visibleChecks.removeElement (item);
+this.addCheck (false, item);
+}
+}var en = visibleChecks.elements ();
+while (en.hasMoreElements ()) {
+this.addCheck (groupsChanged, en.nextElement ().toString ());
+}
+this.featurePanel.setLayout ( new java.awt.GridLayout (this.featurePanel.getComponentCount (), 1, 10, 5));
+this.featurePanel.validate ();
+if (this.scrollPane != null) {
+this.scrollPane.validate ();
+}this.itemStateChanged (null);
+}, "~B");
+Clazz.defineMethod (c$, "addCheck",
+function (groupsChanged, type) {
+var addCheck;
+var comps = this.featurePanel.getComponents ();
+var check;
+addCheck = true;
+for (var i = 0; i < this.featurePanel.getComponentCount (); i++) {
+check = comps[i];
+if (check.type.equals (type)) {
+addCheck = false;
+break;
+}}
+if (addCheck) {
+var selected = false;
+if (groupsChanged || this.av.getFeaturesDisplayed ().isVisible (type)) {
+selected = true;
+}check = Clazz.innerTypeInstance (jalview.appletgui.FeatureSettings.MyCheckbox, this, null, type, selected, (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (type)), this.fr.getFeatureStyle (type));
+check.addMouseListener (this);
+check.addMouseMotionListener (this);
+check.addItemListener (this);
+if (groupsChanged) {
+this.featurePanel.add (check, 0);
+} else {
+this.featurePanel.add (check);
+}}}, "~B,~S");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+for (var i = 0; i < this.featurePanel.getComponentCount (); i++) {
+var check = this.featurePanel.getComponent (i);
+check.setState (!check.getState ());
+}
+this.selectionChanged ();
+}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+this.selectionChanged ();
+}, "java.awt.event.ItemEvent");
+Clazz.defineMethod (c$, "selectionChanged",
+function () {
+var comps = this.featurePanel.getComponents ();
+var cSize = comps.length;
+var tmp = Clazz.newArray (cSize, 3, null);
+var tmpSize = 0;
+for (var i = 0; i < cSize; i++) {
+var check = comps[i];
+tmp[tmpSize][0] = check.type;
+tmp[tmpSize][1] = this.fr.getFeatureStyle (check.type);
+tmp[tmpSize][2] = new Boolean (check.getState ());
+tmpSize++;
+}
+var data = Clazz.newArray (tmpSize, 3, null);
+System.arraycopy (tmp, 0, data, 0, tmpSize);
+this.fr.setFeaturePriority (data);
+this.ap.paintAlignment (true);
+});
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+this.selectedCheck = evt.getSource ();
+if (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (this.selectedCheck.type)) {
+if (evt.getX () > this.selectedCheck.stringWidth + 20) {
+evt.consume ();
+}}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+if ((evt.getSource ()).getParent () !== this.featurePanel) {
+return;
+}this.dragging = true;
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+if ((evt.getSource ()).getParent () !== this.featurePanel) {
+return;
+}var comp = null;
+var target = null;
+var height = evt.getY () + evt.getComponent ().getLocation ().y;
+if (height > this.featurePanel.getSize ().height) {
+comp = this.featurePanel.getComponent (this.featurePanel.getComponentCount () - 1);
+} else if (height < 0) {
+comp = this.featurePanel.getComponent (0);
+} else {
+comp = this.featurePanel.getComponentAt (evt.getX (), evt.getY () + evt.getComponent ().getLocation ().y);
+}if (comp != null && Clazz.instanceOf (comp, awt2swing.Checkbox)) {
+target = comp;
+}if (this.selectedCheck != null && target != null && this.selectedCheck !== target) {
+var targetIndex = -1;
+for (var i = 0; i < this.featurePanel.getComponentCount (); i++) {
+if (target === this.featurePanel.getComponent (i)) {
+targetIndex = i;
+break;
+}}
+this.featurePanel.remove (this.selectedCheck);
+this.featurePanel.add (this.selectedCheck, targetIndex);
+this.featurePanel.validate ();
+this.itemStateChanged (null);
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "setUserColour",
+function (feature, originalColour) {
+if (Clazz.instanceOf (originalColour, java.awt.Color) || Clazz.instanceOf (originalColour, jalview.schemes.GraduatedColor)) {
+this.fr.setColour (feature, originalColour);
+} else {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_unsupported_feature_colour_object"));
+}this.refreshTable ();
+}, "~S,~O");
+Clazz.defineMethod (c$, "refreshTable",
+function () {
+this.featurePanel.removeAll ();
+this.resetTable (false);
+this.ap.paintAlignment (true);
+});
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+var check = evt.getSource ();
+if ((evt.getModifiers () & 4) != 0) {
+this.popupSort (check, this.fr.getMinMax (), evt.getX (), evt.getY ());
+}if (this.fr.featureLinks != null && this.fr.featureLinks.containsKey (check.type)) {
+if (evt.getX () > check.stringWidth + 20) {
+evt.consume ();
+var link = this.fr.featureLinks.get (check.type).toString ();
+this.ap.alignFrame.showURL (link.substring (link.indexOf ("|") + 1), link.substring (0, link.indexOf ("|")));
+}}if (check.getParent () !== this.featurePanel) {
+return;
+}if (evt.getClickCount () > 1) {
+var fcol = this.fr.getFeatureStyle (check.type);
+if (Clazz.instanceOf (fcol, java.awt.Color)) {
+ new jalview.appletgui.UserDefinedColours (this, check.type, fcol);
+} else {
+ new jalview.appletgui.FeatureColourChooser (this, check.type);
+check.updateColor (this.fr.getFeatureStyle (check.type));
+}}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+this.fr.setTransparency ((100 - this.transparency.getValue ()) / 100);
+this.ap.seqPanel.seqCanvas.repaint ();
+}, "java.awt.event.AdjustmentEvent");
+c$.$FeatureSettings$MyCheckbox$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.type = null;
+this.stringWidth = 0;
+this.hasLink = false;
+this.gcol = null;
+this.col = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.FeatureSettings, "MyCheckbox", awt2swing.Checkbox);
+Clazz.defineMethod (c$, "updateColor",
+function (a) {
+if (Clazz.instanceOf (a, java.awt.Color)) {
+this.col = a;
+this.gcol = null;
+} else if (Clazz.instanceOf (a, jalview.schemes.GraduatedColor)) {
+this.gcol = a;
+this.col = null;
+} else {
+throw new Error (jalview.util.MessageManager.getString ("error.invalid_colour_for_mycheckbox"));
+}if (this.col != null) {
+this.setBackground (this.col);
+} else {
+var b = this.type;
+if (this.gcol.getThreshType () != -1) {
+b += " " + ((this.gcol.getThreshType () == 1) ? "(>)" : "(<)");
+}if (this.gcol.isColourByLabel ()) {
+this.setBackground (java.awt.Color.white);
+b += " (by Label)";
+} else {
+this.setBackground (this.gcol.getMinColor ());
+}this.setLabel (b);
+}this.repaint ();
+}, "~O");
+Clazz.makeConstructor (c$,
+function (a, b, c) {
+Clazz.superConstructor (this, jalview.appletgui.FeatureSettings.MyCheckbox, [a, b]);
+this.type = a;
+var d = this.b$["jalview.appletgui.FeatureSettings"].av.nullFrame.getFontMetrics (this.b$["jalview.appletgui.FeatureSettings"].av.nullFrame.getFont ());
+this.stringWidth = d.stringWidth (a);
+this.hasLink = c;
+}, "~S,~B,~B");
+Clazz.makeConstructor (c$,
+function (a, b, c, d) {
+this.construct (a, b, c);
+this.updateColor (d);
+}, "~S,~B,~B,~O");
+Clazz.defineMethod (c$, "PaintComponent",
+function (a) {
+var b = this.getSize ();
+if (this.gcol != null) {
+if (this.gcol.isColourByLabel ()) {
+a.setColor (java.awt.Color.white);
+a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
+} else {
+var c = this.gcol.getMaxColor ();
+a.setColor (c);
+a.fillRect (Clazz.doubleToInt (b.width / 2), 0, Clazz.doubleToInt (b.width / 2), b.height);
+}}if (this.hasLink) {
+a.drawImage (this.b$["jalview.appletgui.FeatureSettings"].linkImage, this.stringWidth + 25, Clazz.doubleToInt ((this.getSize ().height - this.b$["jalview.appletgui.FeatureSettings"].linkImage.getHeight (this)) / 2), this);
+}}, "java.awt.Graphics");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureSettings$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$1", null, java.awt.event.ItemListener);
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+var source = evt.getSource ();
+this.b$["jalview.appletgui.FeatureSettings"].fr.setGroupVisibility (source.getLabel (), source.getState ());
+this.b$["jalview.appletgui.FeatureSettings"].ap.seqPanel.seqCanvas.repaint ();
+if (this.b$["jalview.appletgui.FeatureSettings"].ap.overviewPanel != null) {
+this.b$["jalview.appletgui.FeatureSettings"].ap.overviewPanel.updateOverviewImage ();
+}this.b$["jalview.appletgui.FeatureSettings"].resetTable (true);
+return;
+}, "java.awt.event.ItemEvent");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureSettings$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$2", java.awt.event.WindowAdapter);
+Clazz.overrideMethod (c$, "windowClosing",
+function (e) {
+if (this.f$.me.av.featureSettings === this.f$.me) {
+this.f$.me.av.featureSettings = null;
+this.f$.me.ap = null;
+this.f$.me.av = null;
+}}, "java.awt.event.WindowEvent");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureSettings$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$3", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.f$.me.ap.alignFrame.avc.sortAlignmentByFeatureScore ( Clazz.newArray (-1, [this.f$.type]));
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureSettings$4$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$4", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.f$.me.ap.alignFrame.avc.sortAlignmentByFeatureDensity ( Clazz.newArray (-1, [this.f$.type]));
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$FeatureSettings$5$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FeatureSettings$5", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+if (Clazz.instanceOf (this.f$.typeCol, java.awt.Color)) {
+ new jalview.appletgui.FeatureColourChooser (this.f$.me, this.f$.type);
+this.f$.check.updateColor (this.b$["jalview.appletgui.FeatureSettings"].fr.getFeatureStyle (this.f$.type));
+} else {
+ new jalview.appletgui.UserDefinedColours (this.f$.me, this.f$.check.type, (this.f$.typeCol));
+}}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/Finder.js b/bin/jalview/appletgui/Finder.js
index d64e048..22e3c84 100644
--- a/bin/jalview/appletgui/Finder.js
+++ b/bin/jalview/appletgui/Finder.js
@@ -1,184 +1,184 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "awt2swing.Button", "$.Checkbox", "$.Label", "$.TextField", "java.awt.GridLayout"], "jalview.appletgui.Finder", ["awt2swing.Frame", "jalview.analysis.Finder", "jalview.bin.JalviewLite", "jalview.datamodel.SequenceFeature", "jalview.util.MessageManager", "java.awt.Font", "$.Rectangle", "java.awt.event.KeyAdapter", "$.WindowAdapter"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.av = null;
-this.ap = null;
-this.frame = null;
-this.searchResults = null;
-this.seqIndex = 0;
-this.resIndex = -1;
-this.jLabel1 = null;
-this.textfield = null;
-this.findAll = null;
-this.findNext = null;
-this.actionsPanel = null;
-this.gridLayout1 = null;
-this.createNewGroup = null;
-this.caseSensitive = null;
-this.searchDescription = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "Finder", awt2swing.Panel, java.awt.event.ActionListener);
-Clazz.prepareFields (c$, function () {
-this.jLabel1 = new awt2swing.Label ();
-this.textfield = new awt2swing.TextField ();
-this.findAll = new awt2swing.Button ();
-this.findNext = new awt2swing.Button ();
-this.actionsPanel = new awt2swing.Panel ();
-this.gridLayout1 = new java.awt.GridLayout ();
-this.createNewGroup = new awt2swing.Button ();
-this.caseSensitive = new awt2swing.Checkbox ();
-this.searchDescription = new awt2swing.Checkbox ();
-});
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.Finder, []);
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.av = ap.av;
-this.ap = ap;
-this.frame = new awt2swing.Frame ();
-this.frame.add (this);
-jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("action.find"), 340, 120);
-this.frame.repaint ();
-this.frame.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.Finder$1") ? 0 : jalview.appletgui.Finder.$Finder$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.Finder$1, this, Clazz.cloneFinals ("ap", ap))));
-this.textfield.requestFocus ();
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.textfield) {
-this.doSearch (false);
-} else if (evt.getSource () === this.findNext) {
-this.doSearch (false);
-} else if (evt.getSource () === this.findAll) {
-this.resIndex = -1;
-this.seqIndex = 0;
-this.doSearch (true);
-} else if (evt.getSource () === this.createNewGroup) {
-this.createNewGroup_actionPerformed ();
-}}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "createNewGroup_actionPerformed",
-function () {
-var seqs = new Array (this.searchResults.getSize ());
-var features = new Array (this.searchResults.getSize ());
-for (var i = 0; i < this.searchResults.getSize (); i++) {
-seqs[i] = this.searchResults.getResultSequence (i);
-features[i] = new jalview.datamodel.SequenceFeature (this.textfield.getText ().trim (), "Search Results", null, this.searchResults.getResultStart (i), this.searchResults.getResultEnd (i), "Search Results");
-}
-if (this.ap.seqPanel.seqCanvas.getFeatureRenderer ().amendFeatures (seqs, features, true, this.ap)) {
-this.ap.alignFrame.sequenceFeatures.setState (true);
-this.av.setShowSequenceFeatures (true);
-this.ap.highlightSearchResults (null);
-}});
-Clazz.defineMethod (c$, "doSearch",
-function (findAll) {
-if (this.ap.av.applet.currentAlignFrame != null) {
-this.ap = this.ap.av.applet.currentAlignFrame.alignPanel;
-this.av = this.ap.av;
-}this.createNewGroup.setEnabled (false);
-var finder = new jalview.analysis.Finder (this.av.getAlignment (), this.av.getSelectionGroup (), this.seqIndex, this.resIndex);
-finder.setCaseSensitive (this.caseSensitive.getState ());
-finder.setIncludeDescription (this.searchDescription.getState ());
-finder.setFindAll (findAll);
-var searchString = this.textfield.getText ();
-finder.find (searchString);
-this.seqIndex = finder.getSeqIndex ();
-this.resIndex = finder.getResIndex ();
-this.searchResults = finder.getSearchResults ();
-var idMatch = finder.getIdMatch ();
-var haveResults = false;
-if ((idMatch.size () > 0)) {
-haveResults = true;
-this.ap.idPanel.highlightSearchResults (idMatch);
-} else {
-this.ap.idPanel.highlightSearchResults (null);
-}if (this.searchResults.getSize () > 0) {
-haveResults = true;
-this.createNewGroup.setEnabled (true);
-} else {
-this.searchResults = null;
-}this.ap.highlightSearchResults (this.searchResults);
-if (!haveResults) {
-this.ap.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.finished_searching"));
-this.resIndex = -1;
-this.seqIndex = 0;
-} else {
-if (findAll) {
-var message = (idMatch.size () > 0) ? "" + idMatch.size () + " IDs" : "";
-if (idMatch.size () > 0 && this.searchResults != null && this.searchResults.getSize () > 0) {
-message += " and ";
-}if (this.searchResults != null) {
-message += this.searchResults.getSize () + " subsequence matches.";
-}this.ap.alignFrame.setStatus (jalview.util.MessageManager.formatMessage ("label.search_results", Clazz.newArray (-1, [searchString, message])));
-} else {
-this.ap.alignFrame.setStatus (jalview.util.MessageManager.formatMessage ("label.found_match_for", Clazz.newArray (-1, [searchString])));
-}}}, "~B");
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.jLabel1.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.jLabel1.setText (jalview.util.MessageManager.getString ("action.find"));
-this.jLabel1.setBounds ( new java.awt.Rectangle (3, 30, 34, 15));
-this.setLayout (null);
-this.textfield.setFont ( new java.awt.Font ("Verdana", 0, 10));
-this.textfield.setText ("");
-this.textfield.setBounds ( new java.awt.Rectangle (40, 17, 133, 21));
-this.textfield.addKeyListener (((Clazz.isClassDefined ("jalview.appletgui.Finder$2") ? 0 : jalview.appletgui.Finder.$Finder$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.Finder$2, this, null)));
-this.textfield.addActionListener (this);
-this.findAll.setFont ( new java.awt.Font ("Verdana", 0, 10));
-this.findAll.setLabel (jalview.util.MessageManager.getString ("action.find_all"));
-this.findAll.addActionListener (this);
-this.findNext.setEnabled (false);
-this.findNext.setFont ( new java.awt.Font ("Verdana", 0, 10));
-this.findNext.setLabel (jalview.util.MessageManager.getString ("action.find_next"));
-this.findNext.addActionListener (this);
-this.actionsPanel.setBounds ( new java.awt.Rectangle (195, 5, 141, 64));
-this.actionsPanel.setLayout (this.gridLayout1);
-this.gridLayout1.setHgap (0);
-this.gridLayout1.setRows (3);
-this.gridLayout1.setVgap (2);
-this.createNewGroup.setEnabled (false);
-this.createNewGroup.setFont ( new java.awt.Font ("Verdana", 0, 10));
-this.createNewGroup.setLabel (jalview.util.MessageManager.getString ("label.new_feature"));
-this.createNewGroup.addActionListener (this);
-this.caseSensitive.setLabel (jalview.util.MessageManager.getString ("label.match_case"));
-this.caseSensitive.setBounds ( new java.awt.Rectangle (30, 39, 126, 23));
-this.searchDescription.setLabel (jalview.util.MessageManager.getString ("label.include_description"));
-this.searchDescription.setBounds ( new java.awt.Rectangle (30, 59, 170, 23));
-this.actionsPanel.add (this.findNext, null);
-this.actionsPanel.add (this.findAll, null);
-this.actionsPanel.add (this.createNewGroup, null);
-this.add (this.caseSensitive);
-this.add (this.textfield, null);
-this.add (this.jLabel1, null);
-this.add (this.actionsPanel, null);
-this.add (this.searchDescription);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "textfield_keyTyped",
-function (e) {
-this.findNext.setEnabled (true);
-}, "java.awt.event.KeyEvent");
-c$.$Finder$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "Finder$1", java.awt.event.WindowAdapter);
-Clazz.overrideMethod (c$, "windowClosing",
-function (evt) {
-this.f$.ap.highlightSearchResults (null);
-}, "java.awt.event.WindowEvent");
-c$ = Clazz.p0p ();
-};
-c$.$Finder$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "Finder$2", java.awt.event.KeyAdapter);
-Clazz.overrideMethod (c$, "keyTyped",
-function (e) {
-this.b$["jalview.appletgui.Finder"].textfield_keyTyped (e);
-}, "java.awt.event.KeyEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "awt2swing.Button", "$.Checkbox", "$.Label", "$.TextField", "java.awt.GridLayout"], "jalview.appletgui.Finder", ["awt2swing.Frame", "jalview.analysis.Finder", "jalview.bin.JalviewLite", "jalview.datamodel.SequenceFeature", "jalview.util.MessageManager", "java.awt.Font", "$.Rectangle", "java.awt.event.KeyAdapter", "$.WindowAdapter"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.ap = null;
+this.frame = null;
+this.searchResults = null;
+this.seqIndex = 0;
+this.resIndex = -1;
+this.jLabel1 = null;
+this.textfield = null;
+this.findAll = null;
+this.findNext = null;
+this.actionsPanel = null;
+this.gridLayout1 = null;
+this.createNewGroup = null;
+this.caseSensitive = null;
+this.searchDescription = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "Finder", awt2swing.Panel, java.awt.event.ActionListener);
+Clazz.prepareFields (c$, function () {
+this.jLabel1 = new awt2swing.Label ();
+this.textfield = new awt2swing.TextField ();
+this.findAll = new awt2swing.Button ();
+this.findNext = new awt2swing.Button ();
+this.actionsPanel = new awt2swing.Panel ();
+this.gridLayout1 = new java.awt.GridLayout ();
+this.createNewGroup = new awt2swing.Button ();
+this.caseSensitive = new awt2swing.Checkbox ();
+this.searchDescription = new awt2swing.Checkbox ();
+});
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.Finder, []);
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.av = ap.av;
+this.ap = ap;
+this.frame = new awt2swing.Frame ();
+this.frame.add (this);
+jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("action.find"), 340, 120);
+this.frame.repaint ();
+this.frame.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.Finder$1") ? 0 : jalview.appletgui.Finder.$Finder$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.Finder$1, this, Clazz.cloneFinals ("ap", ap))));
+this.textfield.requestFocus ();
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.textfield) {
+this.doSearch (false);
+} else if (evt.getSource () === this.findNext) {
+this.doSearch (false);
+} else if (evt.getSource () === this.findAll) {
+this.resIndex = -1;
+this.seqIndex = 0;
+this.doSearch (true);
+} else if (evt.getSource () === this.createNewGroup) {
+this.createNewGroup_actionPerformed ();
+}}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "createNewGroup_actionPerformed",
+function () {
+var seqs = new Array (this.searchResults.getSize ());
+var features = new Array (this.searchResults.getSize ());
+for (var i = 0; i < this.searchResults.getSize (); i++) {
+seqs[i] = this.searchResults.getResultSequence (i);
+features[i] = new jalview.datamodel.SequenceFeature (this.textfield.getText ().trim (), "Search Results", null, this.searchResults.getResultStart (i), this.searchResults.getResultEnd (i), "Search Results");
+}
+if (this.ap.seqPanel.seqCanvas.getFeatureRenderer ().amendFeatures (seqs, features, true, this.ap)) {
+this.ap.alignFrame.sequenceFeatures.setState (true);
+this.av.setShowSequenceFeatures (true);
+this.ap.highlightSearchResults (null);
+}});
+Clazz.defineMethod (c$, "doSearch",
+function (findAll) {
+if (this.ap.av.applet.currentAlignFrame != null) {
+this.ap = this.ap.av.applet.currentAlignFrame.alignPanel;
+this.av = this.ap.av;
+}this.createNewGroup.setEnabled (false);
+var finder = new jalview.analysis.Finder (this.av.getAlignment (), this.av.getSelectionGroup (), this.seqIndex, this.resIndex);
+finder.setCaseSensitive (this.caseSensitive.getState ());
+finder.setIncludeDescription (this.searchDescription.getState ());
+finder.setFindAll (findAll);
+var searchString = this.textfield.getText ();
+finder.find (searchString);
+this.seqIndex = finder.getSeqIndex ();
+this.resIndex = finder.getResIndex ();
+this.searchResults = finder.getSearchResults ();
+var idMatch = finder.getIdMatch ();
+var haveResults = false;
+if ((idMatch.size () > 0)) {
+haveResults = true;
+this.ap.idPanel.highlightSearchResults (idMatch);
+} else {
+this.ap.idPanel.highlightSearchResults (null);
+}if (this.searchResults.getSize () > 0) {
+haveResults = true;
+this.createNewGroup.setEnabled (true);
+} else {
+this.searchResults = null;
+}this.ap.highlightSearchResults (this.searchResults);
+if (!haveResults) {
+this.ap.alignFrame.setStatus (jalview.util.MessageManager.getString ("label.finished_searching"));
+this.resIndex = -1;
+this.seqIndex = 0;
+} else {
+if (findAll) {
+var message = (idMatch.size () > 0) ? "" + idMatch.size () + " IDs" : "";
+if (idMatch.size () > 0 && this.searchResults != null && this.searchResults.getSize () > 0) {
+message += " and ";
+}if (this.searchResults != null) {
+message += this.searchResults.getSize () + " subsequence matches.";
+}this.ap.alignFrame.setStatus (jalview.util.MessageManager.formatMessage ("label.search_results", Clazz.newArray (-1, [searchString, message])));
+} else {
+this.ap.alignFrame.setStatus (jalview.util.MessageManager.formatMessage ("label.found_match_for", Clazz.newArray (-1, [searchString])));
+}}}, "~B");
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.jLabel1.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.jLabel1.setText (jalview.util.MessageManager.getString ("action.find"));
+this.jLabel1.setBounds ( new java.awt.Rectangle (3, 30, 34, 15));
+this.setLayout (null);
+this.textfield.setFont ( new java.awt.Font ("Verdana", 0, 10));
+this.textfield.setText ("");
+this.textfield.setBounds ( new java.awt.Rectangle (40, 17, 133, 21));
+this.textfield.addKeyListener (((Clazz.isClassDefined ("jalview.appletgui.Finder$2") ? 0 : jalview.appletgui.Finder.$Finder$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.Finder$2, this, null)));
+this.textfield.addActionListener (this);
+this.findAll.setFont ( new java.awt.Font ("Verdana", 0, 10));
+this.findAll.setLabel (jalview.util.MessageManager.getString ("action.find_all"));
+this.findAll.addActionListener (this);
+this.findNext.setEnabled (false);
+this.findNext.setFont ( new java.awt.Font ("Verdana", 0, 10));
+this.findNext.setLabel (jalview.util.MessageManager.getString ("action.find_next"));
+this.findNext.addActionListener (this);
+this.actionsPanel.setBounds ( new java.awt.Rectangle (195, 5, 141, 64));
+this.actionsPanel.setLayout (this.gridLayout1);
+this.gridLayout1.setHgap (0);
+this.gridLayout1.setRows (3);
+this.gridLayout1.setVgap (2);
+this.createNewGroup.setEnabled (false);
+this.createNewGroup.setFont ( new java.awt.Font ("Verdana", 0, 10));
+this.createNewGroup.setLabel (jalview.util.MessageManager.getString ("label.new_feature"));
+this.createNewGroup.addActionListener (this);
+this.caseSensitive.setLabel (jalview.util.MessageManager.getString ("label.match_case"));
+this.caseSensitive.setBounds ( new java.awt.Rectangle (30, 39, 126, 23));
+this.searchDescription.setLabel (jalview.util.MessageManager.getString ("label.include_description"));
+this.searchDescription.setBounds ( new java.awt.Rectangle (30, 59, 170, 23));
+this.actionsPanel.add (this.findNext, null);
+this.actionsPanel.add (this.findAll, null);
+this.actionsPanel.add (this.createNewGroup, null);
+this.add (this.caseSensitive);
+this.add (this.textfield, null);
+this.add (this.jLabel1, null);
+this.add (this.actionsPanel, null);
+this.add (this.searchDescription);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "textfield_keyTyped",
+function (e) {
+this.findNext.setEnabled (true);
+}, "java.awt.event.KeyEvent");
+c$.$Finder$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "Finder$1", java.awt.event.WindowAdapter);
+Clazz.overrideMethod (c$, "windowClosing",
+function (evt) {
+this.f$.ap.highlightSearchResults (null);
+}, "java.awt.event.WindowEvent");
+c$ = Clazz.p0p ();
+};
+c$.$Finder$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "Finder$2", java.awt.event.KeyAdapter);
+Clazz.overrideMethod (c$, "keyTyped",
+function (e) {
+this.b$["jalview.appletgui.Finder"].textfield_keyTyped (e);
+}, "java.awt.event.KeyEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/FontChooser.js b/bin/jalview/appletgui/FontChooser.js
index c8a21c0..a0154ca 100644
--- a/bin/jalview/appletgui/FontChooser.js
+++ b/bin/jalview/appletgui/FontChooser.js
@@ -1,259 +1,259 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ItemListener", "awt2swing.Button", "$.Checkbox", "$.Choice", "java.awt.Font"], "jalview.appletgui.FontChooser", ["awt2swing.Frame", "$.Label", "jalview.appletgui.JVDialog", "jalview.bin.JalviewLite", "jalview.util.MessageManager", "java.awt.BorderLayout", "$.Color", "$.FlowLayout", "$.Toolkit", "java.awt.event.ActionListener"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fontSize = null;
-this.fontStyle = null;
-this.fontName = null;
-this.scaleAsCdna = null;
-this.ok = null;
-this.cancel = null;
-this.ap = null;
-this.tp = null;
-this.oldFont = null;
-this.oldCharWidth = 0;
-this.oldScaleProtein = false;
-this.lastSelected = null;
-this.lastSelStyle = 0;
-this.lastSelSize = 0;
-this.$init = true;
-this.frame = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "FontChooser", awt2swing.Panel, java.awt.event.ItemListener);
-Clazz.prepareFields (c$, function () {
-this.fontSize = new awt2swing.Choice ();
-this.fontStyle = new awt2swing.Choice ();
-this.fontName = new awt2swing.Choice ();
-this.scaleAsCdna = new awt2swing.Checkbox ();
-this.ok = new awt2swing.Button ();
-this.cancel = new awt2swing.Button ();
-});
-Clazz.makeConstructor (c$,
-function (tp) {
-Clazz.superConstructor (this, jalview.appletgui.FontChooser, []);
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.tp = tp;
-this.oldFont = tp.getTreeFont ();
-this.init ();
-}, "jalview.appletgui.TreePanel");
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.FontChooser, []);
-this.ap = ap;
-this.oldFont = ap.av.getFont ();
-this.oldCharWidth = ap.av.getViewStyle ().getCharWidth ();
-this.oldScaleProtein = ap.av.getViewStyle ().isScaleProteinAsCdna ();
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.init ();
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.defineMethod (c$, "init",
-function () {
-var fonts = java.awt.Toolkit.getDefaultToolkit ().getFontList ();
-for (var i = 0; i < fonts.length; i++) {
-this.fontName.addItem (fonts[i]);
-}
-for (var i = 1; i < 31; i++) {
-this.fontSize.addItem (i + "");
-}
-this.fontStyle.addItem ("plain");
-this.fontStyle.addItem ("bold");
-this.fontStyle.addItem ("italic");
-this.fontName.select (this.oldFont.getName ());
-this.fontSize.select (this.oldFont.getSize () + "");
-this.fontStyle.select (new Integer (this.oldFont.getStyle ()));
-this.frame = new awt2swing.Frame ();
-this.frame.add (this);
-jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("action.change_font"), 440, 115);
-this.$init = false;
-});
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-var source = evt.getSource ();
-if (source === this.fontName) {
-this.fontName_actionPerformed ();
-} else if (source === this.fontSize) {
-this.fontSize_actionPerformed ();
-} else if (source === this.fontStyle) {
-this.fontStyle_actionPerformed ();
-} else if (source === this.scaleAsCdna) {
-this.scaleAsCdna_actionPerformed ();
-}}, "java.awt.event.ItemEvent");
-Clazz.defineMethod (c$, "ok_actionPerformed",
-function () {
-this.frame.setVisible (false);
-if (this.ap != null) {
-if (this.ap.getOverviewPanel () != null) {
-this.ap.getOverviewPanel ().updateOverviewImage ();
-}}});
-Clazz.defineMethod (c$, "cancel_actionPerformed",
-function () {
-if (this.ap != null) {
-this.ap.av.setScaleProteinAsCdna (this.oldScaleProtein);
-if (this.ap.av.getCodingComplement () != null) {
-this.ap.av.getCodingComplement ().setScaleProteinAsCdna (this.oldScaleProtein);
-this.ap.alignFrame.getSplitFrame ().repaint ();
-}this.ap.av.setFont (this.oldFont);
-var style = this.ap.av.getViewStyle ();
-if (style.getCharWidth () != this.oldCharWidth) {
-style.setCharWidth (this.oldCharWidth);
-this.ap.av.setViewStyle (style);
-}this.ap.paintAlignment (true);
-} else if (this.tp != null) {
-this.tp.setTreeFont (this.oldFont);
-this.tp.treeCanvas.repaint ();
-}this.fontName.select (this.oldFont.getName ());
-this.fontSize.select (this.oldFont.getSize () + "");
-this.fontStyle.select (new Integer (this.oldFont.getStyle ()));
-this.frame.setVisible (false);
-});
-Clazz.defineMethod (c$, "changeFont",
-function () {
-if (this.lastSelected == null) {
-this.lastSelected = this.oldFont;
-this.lastSelSize = this.oldFont.getSize ();
-this.lastSelStyle = this.oldFont.getStyle ();
-}var newFont = new java.awt.Font (this.fontName.getSelectedItem ().toString (), this.fontStyle.getSelectedIndex (), Integer.parseInt (this.fontSize.getSelectedItem ().toString ()));
-var fm = this.getGraphics ().getFontMetrics (newFont);
-var mw = fm.getStringBounds ("M", this.getGraphics ()).getWidth ();
-var iw = fm.getStringBounds ("I", this.getGraphics ()).getWidth ();
-if (mw < 1 || iw < 1) {
-this.fontName.select (this.lastSelected.getName ());
-this.fontStyle.select (new Integer (this.lastSelStyle));
-this.fontSize.select ("" + this.lastSelSize);
-var d = new jalview.appletgui.JVDialog (this.frame, jalview.util.MessageManager.getString ("label.invalid_font"), true, 350, 200);
-var mp = new awt2swing.Panel ();
-d.cancel.setVisible (false);
-mp.setLayout ( new java.awt.FlowLayout ());
-mp.add ( new awt2swing.Label ("Font doesn't have letters defined\nso cannot be used\nwith alignment data."));
-d.setMainPanel (mp);
-d.setVisible (true);
-return;
-}if (this.tp != null) {
-this.tp.setTreeFont (newFont);
-} else if (this.ap != null) {
-this.ap.av.setFont (newFont);
-this.ap.fontChanged ();
-}this.lastSelected = newFont;
-});
-Clazz.defineMethod (c$, "fontName_actionPerformed",
-function () {
-if (this.$init) {
-return;
-}this.changeFont ();
-});
-Clazz.defineMethod (c$, "fontSize_actionPerformed",
-function () {
-if (this.$init) {
-return;
-}this.changeFont ();
-});
-Clazz.defineMethod (c$, "fontStyle_actionPerformed",
-function () {
-if (this.$init) {
-return;
-}this.changeFont ();
-});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setLayout ( new java.awt.BorderLayout ());
-this.setBackground (java.awt.Color.white);
-var fontLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.font"));
-fontLabel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-fontLabel.setAlignment (4);
-this.fontSize.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-this.fontSize.addItemListener (this);
-this.fontStyle.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-this.fontStyle.addItemListener (this);
-var sizeLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.size"));
-sizeLabel.setAlignment (4);
-sizeLabel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-var styleLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.style"));
-styleLabel.setAlignment (4);
-styleLabel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-this.fontName.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-this.fontName.addItemListener (this);
-this.scaleAsCdna.setLabel (jalview.util.MessageManager.getString ("label.scale_as_cdna"));
-this.scaleAsCdna.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-this.scaleAsCdna.addItemListener (this);
-this.scaleAsCdna.setState (this.ap.av.isScaleProteinAsCdna ());
-this.ok.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-this.ok.setLabel (jalview.util.MessageManager.getString ("action.ok"));
-this.ok.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FontChooser$1") ? 0 : jalview.appletgui.FontChooser.$FontChooser$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.FontChooser$1, this, null)));
-this.cancel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
-this.cancel.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
-this.cancel.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FontChooser$2") ? 0 : jalview.appletgui.FontChooser.$FontChooser$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.FontChooser$2, this, null)));
-var fontPanel = new awt2swing.Panel ();
-fontPanel.setLayout ( new java.awt.BorderLayout ());
-var stylePanel = new awt2swing.Panel ();
-stylePanel.setLayout ( new java.awt.BorderLayout ());
-var sizePanel = new awt2swing.Panel ();
-sizePanel.setLayout ( new java.awt.BorderLayout ());
-var scalePanel = new awt2swing.Panel ();
-scalePanel.setLayout ( new java.awt.BorderLayout ());
-var okCancelPanel = new awt2swing.Panel ();
-var optionsPanel = new awt2swing.Panel ();
-fontPanel.setBackground (java.awt.Color.white);
-stylePanel.setBackground (java.awt.Color.white);
-sizePanel.setBackground (java.awt.Color.white);
-okCancelPanel.setBackground (java.awt.Color.white);
-optionsPanel.setBackground (java.awt.Color.white);
-fontPanel.add (fontLabel, "West");
-fontPanel.add (this.fontName, "Center");
-stylePanel.add (styleLabel, "West");
-stylePanel.add (this.fontStyle, "Center");
-sizePanel.add (sizeLabel, "West");
-sizePanel.add (this.fontSize, "Center");
-scalePanel.add (this.scaleAsCdna, "Center");
-okCancelPanel.add (this.ok, null);
-okCancelPanel.add (this.cancel, null);
-optionsPanel.add (fontPanel, null);
-optionsPanel.add (sizePanel, null);
-optionsPanel.add (stylePanel, null);
-this.add (optionsPanel, "North");
-if (this.ap.alignFrame.getSplitFrame () != null) {
-this.add (scalePanel, "Center");
-}this.add (okCancelPanel, "South");
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "scaleAsCdna_actionPerformed",
-function () {
-this.ap.av.setScaleProteinAsCdna (this.scaleAsCdna.getState ());
-this.ap.av.getCodingComplement ().setScaleProteinAsCdna (this.scaleAsCdna.getState ());
-this.ap.alignFrame.getSplitFrame ().adjustLayout ();
-this.ap.paintAlignment (true);
-this.ap.alignFrame.getSplitFrame ().repaint ();
-});
-c$.$FontChooser$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FontChooser$1", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.FontChooser"].ok_actionPerformed ();
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$FontChooser$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "FontChooser$2", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.FontChooser"].cancel_actionPerformed ();
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.VERDANA_11PT = c$.prototype.VERDANA_11PT = new java.awt.Font ("Verdana", 0, 11);
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ItemListener", "awt2swing.Button", "$.Checkbox", "$.Choice", "java.awt.Font"], "jalview.appletgui.FontChooser", ["awt2swing.Frame", "$.Label", "jalview.appletgui.JVDialog", "jalview.bin.JalviewLite", "jalview.util.MessageManager", "java.awt.BorderLayout", "$.Color", "$.FlowLayout", "$.Toolkit", "java.awt.event.ActionListener"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fontSize = null;
+this.fontStyle = null;
+this.fontName = null;
+this.scaleAsCdna = null;
+this.ok = null;
+this.cancel = null;
+this.ap = null;
+this.tp = null;
+this.oldFont = null;
+this.oldCharWidth = 0;
+this.oldScaleProtein = false;
+this.lastSelected = null;
+this.lastSelStyle = 0;
+this.lastSelSize = 0;
+this.$init = true;
+this.frame = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "FontChooser", awt2swing.Panel, java.awt.event.ItemListener);
+Clazz.prepareFields (c$, function () {
+this.fontSize = new awt2swing.Choice ();
+this.fontStyle = new awt2swing.Choice ();
+this.fontName = new awt2swing.Choice ();
+this.scaleAsCdna = new awt2swing.Checkbox ();
+this.ok = new awt2swing.Button ();
+this.cancel = new awt2swing.Button ();
+});
+Clazz.makeConstructor (c$,
+function (tp) {
+Clazz.superConstructor (this, jalview.appletgui.FontChooser, []);
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.tp = tp;
+this.oldFont = tp.getTreeFont ();
+this.init ();
+}, "jalview.appletgui.TreePanel");
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.FontChooser, []);
+this.ap = ap;
+this.oldFont = ap.av.getFont ();
+this.oldCharWidth = ap.av.getViewStyle ().getCharWidth ();
+this.oldScaleProtein = ap.av.getViewStyle ().isScaleProteinAsCdna ();
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.init ();
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.defineMethod (c$, "init",
+function () {
+var fonts = java.awt.Toolkit.getDefaultToolkit ().getFontList ();
+for (var i = 0; i < fonts.length; i++) {
+this.fontName.addItem (fonts[i]);
+}
+for (var i = 1; i < 31; i++) {
+this.fontSize.addItem (i + "");
+}
+this.fontStyle.addItem ("plain");
+this.fontStyle.addItem ("bold");
+this.fontStyle.addItem ("italic");
+this.fontName.select (this.oldFont.getName ());
+this.fontSize.select (this.oldFont.getSize () + "");
+this.fontStyle.select (new Integer (this.oldFont.getStyle ()));
+this.frame = new awt2swing.Frame ();
+this.frame.add (this);
+jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("action.change_font"), 440, 115);
+this.$init = false;
+});
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+var source = evt.getSource ();
+if (source === this.fontName) {
+this.fontName_actionPerformed ();
+} else if (source === this.fontSize) {
+this.fontSize_actionPerformed ();
+} else if (source === this.fontStyle) {
+this.fontStyle_actionPerformed ();
+} else if (source === this.scaleAsCdna) {
+this.scaleAsCdna_actionPerformed ();
+}}, "java.awt.event.ItemEvent");
+Clazz.defineMethod (c$, "ok_actionPerformed",
+function () {
+this.frame.setVisible (false);
+if (this.ap != null) {
+if (this.ap.getOverviewPanel () != null) {
+this.ap.getOverviewPanel ().updateOverviewImage ();
+}}});
+Clazz.defineMethod (c$, "cancel_actionPerformed",
+function () {
+if (this.ap != null) {
+this.ap.av.setScaleProteinAsCdna (this.oldScaleProtein);
+if (this.ap.av.getCodingComplement () != null) {
+this.ap.av.getCodingComplement ().setScaleProteinAsCdna (this.oldScaleProtein);
+this.ap.alignFrame.getSplitFrame ().repaint ();
+}this.ap.av.setFont (this.oldFont);
+var style = this.ap.av.getViewStyle ();
+if (style.getCharWidth () != this.oldCharWidth) {
+style.setCharWidth (this.oldCharWidth);
+this.ap.av.setViewStyle (style);
+}this.ap.paintAlignment (true);
+} else if (this.tp != null) {
+this.tp.setTreeFont (this.oldFont);
+this.tp.treeCanvas.repaint ();
+}this.fontName.select (this.oldFont.getName ());
+this.fontSize.select (this.oldFont.getSize () + "");
+this.fontStyle.select (new Integer (this.oldFont.getStyle ()));
+this.frame.setVisible (false);
+});
+Clazz.defineMethod (c$, "changeFont",
+function () {
+if (this.lastSelected == null) {
+this.lastSelected = this.oldFont;
+this.lastSelSize = this.oldFont.getSize ();
+this.lastSelStyle = this.oldFont.getStyle ();
+}var newFont = new java.awt.Font (this.fontName.getSelectedItem ().toString (), this.fontStyle.getSelectedIndex (), Integer.parseInt (this.fontSize.getSelectedItem ().toString ()));
+var fm = this.getGraphics ().getFontMetrics (newFont);
+var mw = fm.getStringBounds ("M", this.getGraphics ()).getWidth ();
+var iw = fm.getStringBounds ("I", this.getGraphics ()).getWidth ();
+if (mw < 1 || iw < 1) {
+this.fontName.select (this.lastSelected.getName ());
+this.fontStyle.select (new Integer (this.lastSelStyle));
+this.fontSize.select ("" + this.lastSelSize);
+var d = new jalview.appletgui.JVDialog (this.frame, jalview.util.MessageManager.getString ("label.invalid_font"), true, 350, 200);
+var mp = new awt2swing.Panel ();
+d.cancel.setVisible (false);
+mp.setLayout ( new java.awt.FlowLayout ());
+mp.add ( new awt2swing.Label ("Font doesn't have letters defined\nso cannot be used\nwith alignment data."));
+d.setMainPanel (mp);
+d.setVisible (true);
+return;
+}if (this.tp != null) {
+this.tp.setTreeFont (newFont);
+} else if (this.ap != null) {
+this.ap.av.setFont (newFont);
+this.ap.fontChanged ();
+}this.lastSelected = newFont;
+});
+Clazz.defineMethod (c$, "fontName_actionPerformed",
+function () {
+if (this.$init) {
+return;
+}this.changeFont ();
+});
+Clazz.defineMethod (c$, "fontSize_actionPerformed",
+function () {
+if (this.$init) {
+return;
+}this.changeFont ();
+});
+Clazz.defineMethod (c$, "fontStyle_actionPerformed",
+function () {
+if (this.$init) {
+return;
+}this.changeFont ();
+});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setLayout ( new java.awt.BorderLayout ());
+this.setBackground (java.awt.Color.white);
+var fontLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.font"));
+fontLabel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+fontLabel.setAlignment (4);
+this.fontSize.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+this.fontSize.addItemListener (this);
+this.fontStyle.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+this.fontStyle.addItemListener (this);
+var sizeLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.size"));
+sizeLabel.setAlignment (4);
+sizeLabel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+var styleLabel = new awt2swing.Label (jalview.util.MessageManager.getString ("label.style"));
+styleLabel.setAlignment (4);
+styleLabel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+this.fontName.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+this.fontName.addItemListener (this);
+this.scaleAsCdna.setLabel (jalview.util.MessageManager.getString ("label.scale_as_cdna"));
+this.scaleAsCdna.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+this.scaleAsCdna.addItemListener (this);
+this.scaleAsCdna.setState (this.ap.av.isScaleProteinAsCdna ());
+this.ok.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+this.ok.setLabel (jalview.util.MessageManager.getString ("action.ok"));
+this.ok.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FontChooser$1") ? 0 : jalview.appletgui.FontChooser.$FontChooser$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.FontChooser$1, this, null)));
+this.cancel.setFont (jalview.appletgui.FontChooser.VERDANA_11PT);
+this.cancel.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
+this.cancel.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.FontChooser$2") ? 0 : jalview.appletgui.FontChooser.$FontChooser$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.FontChooser$2, this, null)));
+var fontPanel = new awt2swing.Panel ();
+fontPanel.setLayout ( new java.awt.BorderLayout ());
+var stylePanel = new awt2swing.Panel ();
+stylePanel.setLayout ( new java.awt.BorderLayout ());
+var sizePanel = new awt2swing.Panel ();
+sizePanel.setLayout ( new java.awt.BorderLayout ());
+var scalePanel = new awt2swing.Panel ();
+scalePanel.setLayout ( new java.awt.BorderLayout ());
+var okCancelPanel = new awt2swing.Panel ();
+var optionsPanel = new awt2swing.Panel ();
+fontPanel.setBackground (java.awt.Color.white);
+stylePanel.setBackground (java.awt.Color.white);
+sizePanel.setBackground (java.awt.Color.white);
+okCancelPanel.setBackground (java.awt.Color.white);
+optionsPanel.setBackground (java.awt.Color.white);
+fontPanel.add (fontLabel, "West");
+fontPanel.add (this.fontName, "Center");
+stylePanel.add (styleLabel, "West");
+stylePanel.add (this.fontStyle, "Center");
+sizePanel.add (sizeLabel, "West");
+sizePanel.add (this.fontSize, "Center");
+scalePanel.add (this.scaleAsCdna, "Center");
+okCancelPanel.add (this.ok, null);
+okCancelPanel.add (this.cancel, null);
+optionsPanel.add (fontPanel, null);
+optionsPanel.add (sizePanel, null);
+optionsPanel.add (stylePanel, null);
+this.add (optionsPanel, "North");
+if (this.ap.alignFrame.getSplitFrame () != null) {
+this.add (scalePanel, "Center");
+}this.add (okCancelPanel, "South");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "scaleAsCdna_actionPerformed",
+function () {
+this.ap.av.setScaleProteinAsCdna (this.scaleAsCdna.getState ());
+this.ap.av.getCodingComplement ().setScaleProteinAsCdna (this.scaleAsCdna.getState ());
+this.ap.alignFrame.getSplitFrame ().adjustLayout ();
+this.ap.paintAlignment (true);
+this.ap.alignFrame.getSplitFrame ().repaint ();
+});
+c$.$FontChooser$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FontChooser$1", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.FontChooser"].ok_actionPerformed ();
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$FontChooser$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "FontChooser$2", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.FontChooser"].cancel_actionPerformed ();
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.VERDANA_11PT = c$.prototype.VERDANA_11PT = new java.awt.Font ("Verdana", 0, 11);
+});
diff --git a/bin/jalview/appletgui/IdCanvas.class b/bin/jalview/appletgui/IdCanvas.class
index c079bc6..2c2cb6f 100644
Binary files a/bin/jalview/appletgui/IdCanvas.class and b/bin/jalview/appletgui/IdCanvas.class differ
diff --git a/bin/jalview/appletgui/IdCanvas.js b/bin/jalview/appletgui/IdCanvas.js
index 7c5a1c2..673b00e 100644
--- a/bin/jalview/appletgui/IdCanvas.js
+++ b/bin/jalview/appletgui/IdCanvas.js
@@ -1,191 +1,191 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel"], "jalview.appletgui.IdCanvas", ["jalview.appletgui.AnnotationLabels", "$.AnnotationPanel", "$.PaintRefresher", "java.awt.Color", "$.Font"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.av = null;
-this.showScores = true;
-this.maxIdLength = -1;
-this.maxIdStr = null;
-this.image = null;
-this.gg = null;
-this.imgHeight = 0;
-this.$fastPaint = false;
-this.searchResults = null;
-this.avcharHeight = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "IdCanvas", awt2swing.Panel);
-Clazz.makeConstructor (c$,
-function (av) {
-Clazz.superConstructor (this, jalview.appletgui.IdCanvas, []);
-this.setLayout (null);
-this.av = av;
-jalview.appletgui.PaintRefresher.Register (this, av.getSequenceSetId ());
-}, "jalview.appletgui.AlignViewport");
-Clazz.defineMethod (c$, "drawIdString",
-function (gg, hiddenRows, s, i, starty, ypos) {
-var charHeight = this.av.getCharHeight ();
-if (this.searchResults != null && this.searchResults.contains (s)) {
-gg.setColor (java.awt.Color.black);
-gg.fillRect (0, ((i - starty) * charHeight) + ypos, this.getSize ().width, charHeight);
-gg.setColor (java.awt.Color.white);
-} else if (this.av.getSelectionGroup () != null && this.av.getSelectionGroup ().getSequences (null).contains (s)) {
-gg.setColor (java.awt.Color.lightGray);
-gg.fillRect (0, ((i - starty) * charHeight) + ypos, this.getSize ().width, charHeight);
-gg.setColor (java.awt.Color.white);
-} else {
-gg.setColor (this.av.getSequenceColour (s));
-gg.fillRect (0, ((i - starty) * charHeight) + ypos, this.getSize ().width, charHeight);
-gg.setColor (java.awt.Color.black);
-}gg.drawString (s.getDisplayId (this.av.getShowJVSuffix ()), 0, ((i - starty) * charHeight) + ypos + charHeight - (Clazz.doubleToInt (charHeight / 5)));
-if (hiddenRows) {
-this.drawMarker (i, starty, ypos);
-}}, "java.awt.Graphics,~B,jalview.datamodel.SequenceI,~N,~N,~N");
-Clazz.defineMethod (c$, "fastPaint",
-function (vertical) {
-if (this.gg == null) {
-this.repaint ();
-return;
-}this.gg.copyArea (0, 0, this.getSize ().width, this.imgHeight, 0, -vertical * this.av.getCharHeight ());
-var ss = this.av.startSeq;
-var es = this.av.endSeq;
-var transY = 0;
-if (vertical > 0) {
-ss = es - vertical;
-if (ss < this.av.startSeq) {
-ss = this.av.startSeq;
-} else {
-transY = this.imgHeight - vertical * this.av.getCharHeight ();
-}} else if (vertical < 0) {
-es = ss - vertical;
-if (es > this.av.endSeq) {
-es = this.av.endSeq;
-}}this.gg.translate (0, transY);
-this.drawIds (ss, es);
-this.gg.translate (0, -transY);
-this.$fastPaint = true;
-this.repaint ();
-}, "~N");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-if (this.getSize ().height < 0 || this.getSize ().width < 0) {
-return;
-}if (this.$fastPaint) {
-this.$fastPaint = false;
-g.drawImage (this.image, 0, 0, this);
-return;
-}this.imgHeight = this.getSize ().height;
-this.imgHeight -= this.imgHeight % this.av.getCharHeight ();
-if (this.imgHeight < 1) {
-return;
-}if (this.image == null || this.imgHeight != this.image.getHeight (this)) {
-this.image = this.createImage (this.getSize ().width, this.imgHeight);
-this.gg = this.image.getGraphics ();
-this.gg.setFont (this.av.getFont ());
-}this.gg.setColor (java.awt.Color.white);
-var italic = new java.awt.Font (this.av.getFont ().getName (), 2, this.av.getFont ().getSize ());
-this.gg.setFont (italic);
-this.gg.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
-this.drawIds (this.av.startSeq, this.av.endSeq);
-g.drawImage (this.image, 0, 0, this);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "drawIds",
-function (starty, endy) {
-var italic = new java.awt.Font (this.av.getFont ().getName (), 2, this.av.getFont ().getSize ());
-this.avcharHeight = this.av.getCharHeight ();
-this.gg.setFont (italic);
-var currentColor = java.awt.Color.white;
-var currentTextColor = java.awt.Color.black;
-var doHiddenCheck = this.av.isDisplayReferenceSeq () || this.av.hasHiddenRows ();
-var hiddenRows = this.av.hasHiddenRows () && this.av.getShowHiddenMarkers ();
-if (this.av.getWrapAlignment ()) {
-var maxwidth = this.av.getAlignment ().getWidth ();
-var alheight = this.av.getAlignment ().getHeight ();
-if (this.av.hasHiddenColumns ()) {
-maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
-}var annotationHeight = 0;
-var labels = null;
-if (this.av.isShowAnnotation ()) {
-var ap = new jalview.appletgui.AnnotationPanel (this.av);
-annotationHeight = ap.adjustPanelHeight ();
-labels = new jalview.appletgui.AnnotationLabels (this.av);
-}var hgap = this.avcharHeight;
-if (this.av.getScaleAboveWrapped ()) {
-hgap += this.avcharHeight;
-}var cHeight = alheight * this.avcharHeight + hgap + annotationHeight;
-var rowSize = this.av.getEndRes () - this.av.getStartRes ();
-for (var ypos = hgap, row = this.av.startRes; (ypos <= this.getSize ().height) && (row < maxwidth); ypos += cHeight, row += rowSize) {
-for (var i = starty; i < alheight; i++) {
-var s = this.av.getAlignment ().getSequenceAt (i);
-this.gg.setFont (italic);
-if (doHiddenCheck) {
-this.setHiddenFont (s);
-}this.drawIdString (this.gg, hiddenRows, s, i, 0, ypos);
-}
-if (labels != null) {
-this.gg.translate (0, ypos + (alheight * this.avcharHeight));
-labels.drawComponent (this.gg, this.getSize ().width);
-this.gg.translate (0, -ypos - (alheight * this.avcharHeight));
-}}
-} else {
-var seq;
-for (var i = starty; i < endy; i++) {
-seq = this.av.getAlignment ().getSequenceAt (i);
-if (seq == null) {
-continue;
-}this.gg.setFont (italic);
-if (doHiddenCheck) {
-this.setHiddenFont (seq);
-}if ((this.searchResults != null) && this.searchResults.contains (seq)) {
-currentColor = java.awt.Color.black;
-currentTextColor = java.awt.Color.white;
-} else if ((this.av.getSelectionGroup () != null) && this.av.getSelectionGroup ().getSequences (null).contains (seq)) {
-currentColor = java.awt.Color.lightGray;
-currentTextColor = java.awt.Color.black;
-} else {
-currentColor = this.av.getSequenceColour (seq);
-currentTextColor = java.awt.Color.black;
-}this.gg.setColor (currentColor);
-this.gg.fillRect (0, (i - starty) * this.avcharHeight, this.getSize ().width, this.avcharHeight);
-this.gg.setColor (currentTextColor);
-this.gg.drawString (seq.getDisplayId (this.av.getShowJVSuffix ()), 0, (((i - starty) * this.avcharHeight) + this.avcharHeight) - (Clazz.doubleToInt (this.avcharHeight / 5)));
-if (hiddenRows) {
-this.drawMarker (i, starty, 0);
-}}
-}}, "~N,~N");
-Clazz.defineMethod (c$, "setHighlighted",
-function (list) {
-this.searchResults = list;
-this.repaint ();
-}, "java.util.List");
-Clazz.defineMethod (c$, "drawMarker",
-function (i, starty, yoffset) {
-var hseqs = this.av.getAlignment ().getHiddenSequences ().hiddenSequences;
-var hSize = hseqs.length;
-var hiddenIndex = i;
-var lastIndex = i - 1;
-var nextIndex = i + 1;
-for (var j = 0; j < hSize; j++) {
-if (hseqs[j] != null) {
-if (j - 1 < hiddenIndex) {
-hiddenIndex++;
-}if (j - 1 < lastIndex) {
-lastIndex++;
-}if (j - 1 < nextIndex) {
-nextIndex++;
-}}}
-var below = (hiddenIndex > lastIndex + 1);
-var above = (nextIndex > hiddenIndex + 1);
-this.gg.setColor (java.awt.Color.blue);
-if (below) {
-this.gg.fillPolygon ( Clazz.newIntArray (-1, [this.getSize ().width - this.avcharHeight, this.getSize ().width - this.avcharHeight, this.getSize ().width]), Clazz.newIntArray (-1, [(i - starty) * this.avcharHeight + yoffset, (i - starty) * this.avcharHeight + yoffset + Clazz.doubleToInt (this.avcharHeight / 4), (i - starty) * this.avcharHeight + yoffset]), 3);
-}if (above) {
-this.gg.fillPolygon ( Clazz.newIntArray (-1, [this.getSize ().width - this.avcharHeight, this.getSize ().width - this.avcharHeight, this.getSize ().width]), Clazz.newIntArray (-1, [(i - starty + 1) * this.avcharHeight + yoffset, (i - starty + 1) * this.avcharHeight + yoffset - Clazz.doubleToInt (this.avcharHeight / 4), (i - starty + 1) * this.avcharHeight + yoffset]), 3);
-}}, "~N,~N,~N");
-Clazz.defineMethod (c$, "setHiddenFont",
-function (seq) {
-var bold = new java.awt.Font (this.av.getFont ().getName (), 1, this.av.getFont ().getSize ());
-if (this.av.isHiddenRepSequence (seq)) {
-this.gg.setFont (bold);
-return true;
-}return false;
-}, "jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel"], "jalview.appletgui.IdCanvas", ["jalview.appletgui.AnnotationLabels", "$.AnnotationPanel", "$.PaintRefresher", "java.awt.Color", "$.Font"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.showScores = true;
+this.maxIdLength = -1;
+this.maxIdStr = null;
+this.image = null;
+this.gg = null;
+this.imgHeight = 0;
+this.$fastPaint = false;
+this.searchResults = null;
+this.avcharHeight = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "IdCanvas", awt2swing.Panel);
+Clazz.makeConstructor (c$,
+function (av) {
+Clazz.superConstructor (this, jalview.appletgui.IdCanvas, []);
+this.setLayout (null);
+this.av = av;
+jalview.appletgui.PaintRefresher.Register (this, av.getSequenceSetId ());
+}, "jalview.appletgui.AlignViewport");
+Clazz.defineMethod (c$, "drawIdString",
+function (gg, hiddenRows, s, i, starty, ypos) {
+var charHeight = this.av.getCharHeight ();
+if (this.searchResults != null && this.searchResults.contains (s)) {
+gg.setColor (java.awt.Color.black);
+gg.fillRect (0, ((i - starty) * charHeight) + ypos, this.getSize ().width, charHeight);
+gg.setColor (java.awt.Color.white);
+} else if (this.av.getSelectionGroup () != null && this.av.getSelectionGroup ().getSequences (null).contains (s)) {
+gg.setColor (java.awt.Color.lightGray);
+gg.fillRect (0, ((i - starty) * charHeight) + ypos, this.getSize ().width, charHeight);
+gg.setColor (java.awt.Color.white);
+} else {
+gg.setColor (this.av.getSequenceColour (s));
+gg.fillRect (0, ((i - starty) * charHeight) + ypos, this.getSize ().width, charHeight);
+gg.setColor (java.awt.Color.black);
+}gg.drawString (s.getDisplayId (this.av.getShowJVSuffix ()), 0, ((i - starty) * charHeight) + ypos + charHeight - (Clazz.doubleToInt (charHeight / 5)));
+if (hiddenRows) {
+this.drawMarker (i, starty, ypos);
+}}, "java.awt.Graphics,~B,jalview.datamodel.SequenceI,~N,~N,~N");
+Clazz.defineMethod (c$, "fastPaint",
+function (vertical) {
+if (this.gg == null) {
+this.repaint ();
+return;
+}this.gg.copyArea (0, 0, this.getSize ().width, this.imgHeight, 0, -vertical * this.av.getCharHeight ());
+var ss = this.av.startSeq;
+var es = this.av.endSeq;
+var transY = 0;
+if (vertical > 0) {
+ss = es - vertical;
+if (ss < this.av.startSeq) {
+ss = this.av.startSeq;
+} else {
+transY = this.imgHeight - vertical * this.av.getCharHeight ();
+}} else if (vertical < 0) {
+es = ss - vertical;
+if (es > this.av.endSeq) {
+es = this.av.endSeq;
+}}this.gg.translate (0, transY);
+this.drawIds (ss, es);
+this.gg.translate (0, -transY);
+this.$fastPaint = true;
+this.repaint ();
+}, "~N");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+if (this.getSize ().height < 0 || this.getSize ().width < 0) {
+return;
+}if (this.$fastPaint) {
+this.$fastPaint = false;
+g.drawImage (this.image, 0, 0, this);
+return;
+}this.imgHeight = this.getSize ().height;
+this.imgHeight -= this.imgHeight % this.av.getCharHeight ();
+if (this.imgHeight < 1) {
+return;
+}if (this.image == null || this.imgHeight != this.image.getHeight (this)) {
+this.image = this.createImage (this.getSize ().width, this.imgHeight);
+this.gg = this.image.getGraphics ();
+this.gg.setFont (this.av.getFont ());
+}this.gg.setColor (java.awt.Color.white);
+var italic = new java.awt.Font (this.av.getFont ().getName (), 2, this.av.getFont ().getSize ());
+this.gg.setFont (italic);
+this.gg.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
+this.drawIds (this.av.startSeq, this.av.endSeq);
+g.drawImage (this.image, 0, 0, this);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "drawIds",
+function (starty, endy) {
+var italic = new java.awt.Font (this.av.getFont ().getName (), 2, this.av.getFont ().getSize ());
+this.avcharHeight = this.av.getCharHeight ();
+this.gg.setFont (italic);
+var currentColor = java.awt.Color.white;
+var currentTextColor = java.awt.Color.black;
+var doHiddenCheck = this.av.isDisplayReferenceSeq () || this.av.hasHiddenRows ();
+var hiddenRows = this.av.hasHiddenRows () && this.av.getShowHiddenMarkers ();
+if (this.av.getWrapAlignment ()) {
+var maxwidth = this.av.getAlignment ().getWidth ();
+var alheight = this.av.getAlignment ().getHeight ();
+if (this.av.hasHiddenColumns ()) {
+maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
+}var annotationHeight = 0;
+var labels = null;
+if (this.av.isShowAnnotation ()) {
+var ap = new jalview.appletgui.AnnotationPanel (this.av);
+annotationHeight = ap.adjustPanelHeight ();
+labels = new jalview.appletgui.AnnotationLabels (this.av);
+}var hgap = this.avcharHeight;
+if (this.av.getScaleAboveWrapped ()) {
+hgap += this.avcharHeight;
+}var cHeight = alheight * this.avcharHeight + hgap + annotationHeight;
+var rowSize = this.av.getEndRes () - this.av.getStartRes ();
+for (var ypos = hgap, row = this.av.startRes; (ypos <= this.getSize ().height) && (row < maxwidth); ypos += cHeight, row += rowSize) {
+for (var i = starty; i < alheight; i++) {
+var s = this.av.getAlignment ().getSequenceAt (i);
+this.gg.setFont (italic);
+if (doHiddenCheck) {
+this.setHiddenFont (s);
+}this.drawIdString (this.gg, hiddenRows, s, i, 0, ypos);
+}
+if (labels != null) {
+this.gg.translate (0, ypos + (alheight * this.avcharHeight));
+labels.drawComponent (this.gg, this.getSize ().width);
+this.gg.translate (0, -ypos - (alheight * this.avcharHeight));
+}}
+} else {
+var seq;
+for (var i = starty; i < endy; i++) {
+seq = this.av.getAlignment ().getSequenceAt (i);
+if (seq == null) {
+continue;
+}this.gg.setFont (italic);
+if (doHiddenCheck) {
+this.setHiddenFont (seq);
+}if ((this.searchResults != null) && this.searchResults.contains (seq)) {
+currentColor = java.awt.Color.black;
+currentTextColor = java.awt.Color.white;
+} else if ((this.av.getSelectionGroup () != null) && this.av.getSelectionGroup ().getSequences (null).contains (seq)) {
+currentColor = java.awt.Color.lightGray;
+currentTextColor = java.awt.Color.black;
+} else {
+currentColor = this.av.getSequenceColour (seq);
+currentTextColor = java.awt.Color.black;
+}this.gg.setColor (currentColor);
+this.gg.fillRect (0, (i - starty) * this.avcharHeight, this.getSize ().width, this.avcharHeight);
+this.gg.setColor (currentTextColor);
+this.gg.drawString (seq.getDisplayId (this.av.getShowJVSuffix ()), 0, (((i - starty) * this.avcharHeight) + this.avcharHeight) - (Clazz.doubleToInt (this.avcharHeight / 5)));
+if (hiddenRows) {
+this.drawMarker (i, starty, 0);
+}}
+}}, "~N,~N");
+Clazz.defineMethod (c$, "setHighlighted",
+function (list) {
+this.searchResults = list;
+this.repaint ();
+}, "java.util.List");
+Clazz.defineMethod (c$, "drawMarker",
+function (i, starty, yoffset) {
+var hseqs = this.av.getAlignment ().getHiddenSequences ().hiddenSequences;
+var hSize = hseqs.length;
+var hiddenIndex = i;
+var lastIndex = i - 1;
+var nextIndex = i + 1;
+for (var j = 0; j < hSize; j++) {
+if (hseqs[j] != null) {
+if (j - 1 < hiddenIndex) {
+hiddenIndex++;
+}if (j - 1 < lastIndex) {
+lastIndex++;
+}if (j - 1 < nextIndex) {
+nextIndex++;
+}}}
+var below = (hiddenIndex > lastIndex + 1);
+var above = (nextIndex > hiddenIndex + 1);
+this.gg.setColor (java.awt.Color.blue);
+if (below) {
+this.gg.fillPolygon ( Clazz.newIntArray (-1, [this.getSize ().width - this.avcharHeight, this.getSize ().width - this.avcharHeight, this.getSize ().width]), Clazz.newIntArray (-1, [(i - starty) * this.avcharHeight + yoffset, (i - starty) * this.avcharHeight + yoffset + Clazz.doubleToInt (this.avcharHeight / 4), (i - starty) * this.avcharHeight + yoffset]), 3);
+}if (above) {
+this.gg.fillPolygon ( Clazz.newIntArray (-1, [this.getSize ().width - this.avcharHeight, this.getSize ().width - this.avcharHeight, this.getSize ().width]), Clazz.newIntArray (-1, [(i - starty + 1) * this.avcharHeight + yoffset, (i - starty + 1) * this.avcharHeight + yoffset - Clazz.doubleToInt (this.avcharHeight / 4), (i - starty + 1) * this.avcharHeight + yoffset]), 3);
+}}, "~N,~N,~N");
+Clazz.defineMethod (c$, "setHiddenFont",
+function (seq) {
+var bold = new java.awt.Font (this.av.getFont ().getName (), 1, this.av.getFont ().getSize ());
+if (this.av.isHiddenRepSequence (seq)) {
+this.gg.setFont (bold);
+return true;
+}return false;
+}, "jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/appletgui/IdPanel.js b/bin/jalview/appletgui/IdPanel.js
index 1419a24..4f70687 100644
--- a/bin/jalview/appletgui/IdPanel.js
+++ b/bin/jalview/appletgui/IdPanel.js
@@ -1,285 +1,285 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.lang.Thread", "java.util.Vector"], "jalview.appletgui.IdPanel", ["jalview.appletgui.APopupMenu", "$.IdCanvas", "$.PaintRefresher", "$.Tooltip", "jalview.datamodel.SequenceGroup", "jalview.util.UrlLink", "java.awt.BorderLayout", "java.lang.Float", "$.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.idCanvas = null;
-this.av = null;
-this.alignPanel = null;
-this.scrollThread = null;
-this.lastid = -1;
-this.mouseDragging = false;
-this.links = null;
-this.tooltip = null;
-if (!Clazz.isClassDefined ("jalview.appletgui.IdPanel.ScrollThread")) {
-jalview.appletgui.IdPanel.$IdPanel$ScrollThread$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "IdPanel", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
-Clazz.prepareFields (c$, function () {
-this.links = new java.util.Vector ();
-});
-Clazz.makeConstructor (c$,
-function (av, parent) {
-Clazz.superConstructor (this, jalview.appletgui.IdPanel, []);
-this.setName ("idPanel");
-this.av = av;
-this.alignPanel = parent;
-this.idCanvas = new jalview.appletgui.IdCanvas (av);
-this.setLayout ( new java.awt.BorderLayout ());
-this.add (this.idCanvas, "Center");
-this.idCanvas.addMouseListener (this);
-this.idCanvas.addMouseMotionListener (this);
-if (av.applet != null) {
-av.applet.getLinkParams (this.links);
-}{
-var srsPos = this.links.indexOf ("SRS|http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-newId+(([uniprot-all:$SEQUENCE_ID$]))+-view+SwissEntry");
-if (srsPos > -1) {
-this.links.setElementAt ("EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$", srsPos);
-}}if (this.links.size () < 1) {
-this.links = new java.util.Vector ();
-this.links.addElement ("EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$");
-}}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (e) {
-var seq = this.alignPanel.seqPanel.findSeq (e);
-var sequence = this.av.getAlignment ().getSequenceAt (seq);
-var tooltiptext = new StringBuffer ();
-if (sequence != null) {
-if (sequence.getDescription () != null) {
-tooltiptext.append (sequence.getDescription ());
-tooltiptext.append ("\n");
-}var sf = sequence.getSequenceFeatures ();
-for (var sl = 0; sf != null && sl < sf.length; sl++) {
-if (sf[sl].begin == sf[sl].end && sf[sl].begin == 0) {
-var nl = false;
-if (sf[sl].getFeatureGroup () != null) {
-tooltiptext.append (sf[sl].getFeatureGroup ());
-nl = true;
-};if (sf[sl].getType () != null) {
-tooltiptext.append (" ");
-tooltiptext.append (sf[sl].getType ());
-nl = true;
-};if (sf[sl].getDescription () != null) {
-tooltiptext.append (" ");
-tooltiptext.append (sf[sl].getDescription ());
-nl = true;
-};if (!Float.isNaN (sf[sl].getScore ()) && sf[sl].getScore () != 0) {
-tooltiptext.append (" Score = ");
-tooltiptext.append (sf[sl].getScore ());
-nl = true;
-};if (sf[sl].getStatus () != null && sf[sl].getStatus ().length > 0) {
-tooltiptext.append (" (");
-tooltiptext.append (sf[sl].getStatus ());
-tooltiptext.append (")");
-nl = true;
-};if (nl) {
-tooltiptext.append ("\n");
-}}}
-}if (tooltiptext.length () == 0) {
-if (this.tooltip != null) {
-this.tooltip.setVisible (false);
-}this.tooltip = null;
-tooltiptext = null;
-return;
-}if (this.tooltip == null) {
-this.tooltip = new jalview.appletgui.Tooltip (sequence.getDisplayId (true) + "\n" + tooltiptext.toString (), this.idCanvas);
-} else {
-this.tooltip.setTip (sequence.getDisplayId (true) + "\n" + tooltiptext.toString ());
-}tooltiptext = null;
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (e) {
-this.mouseDragging = true;
-var seq = Math.max (0, this.alignPanel.seqPanel.findSeq (e));
-if (seq < this.lastid) {
-this.selectSeqs (this.lastid - 1, seq);
-} else if (seq > this.lastid) {
-this.selectSeqs (this.lastid + 1, seq);
-}this.lastid = seq;
-this.alignPanel.paintAlignment (false);
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (e) {
-if (e.getClickCount () < 2) {
-return;
-}var seq = this.alignPanel.seqPanel.findSeq (e);
-var sq = this.av.getAlignment ().getSequenceAt (seq);
-if (sq == null) {
-return;
-}var id = sq.getName ();
-var target = null;
-var url = null;
-var i = 0;
-while (url == null && i < this.links.size ()) {
-url = this.links.elementAt (i++).toString ();
-var urlLink = null;
-try {
-urlLink = new jalview.util.UrlLink (url);
-target = urlLink.getTarget ();
-} catch (foo) {
-if (Clazz.exceptionOf (foo, Exception)) {
-System.err.println ("Exception for URLLink '" + url + "'");
-foo.printStackTrace ();
-url = null;
-continue;
-} else {
-throw foo;
-}
-}
-;if (!urlLink.isValid ()) {
-System.err.println (urlLink.getInvalidMessage ());
-url = null;
-continue;
-}var urls = urlLink.makeUrls (id, true);
-if (urls == null || urls[0] == null || urls[0].length < 1) {
-url = null;
-continue;
-}url = urls[1];
-}
-try {
-this.alignPanel.alignFrame.showURL (url, target);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (e) {
-if (this.scrollThread != null) {
-this.scrollThread.running = false;
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (e) {
-if (this.av.getWrapAlignment ()) {
-return;
-}if (this.mouseDragging && e.getY () < 0 && this.av.getStartSeq () > 0) {
-this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.IdPanel.ScrollThread, this, null, true);
-}if (this.mouseDragging && e.getY () >= this.getSize ().height && this.av.getAlignment ().getHeight () > this.av.getEndSeq ()) {
-this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.IdPanel.ScrollThread, this, null, false);
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (e) {
-if (e.getClickCount () > 1) {
-return;
-}var y = e.getY ();
-if (this.av.getWrapAlignment ()) {
-y -= 2 * this.av.getCharHeight ();
-}var seq = this.alignPanel.seqPanel.findSeq (e);
-if ((e.getModifiers () & 4) == 4) {
-var sq = this.av.getAlignment ().getSequenceAt (seq);
-var nlinks = new java.util.Vector ();
-for (var l = 0, lSize = this.links.size (); l < lSize; l++) {
-nlinks.addElement (this.links.elementAt (l));
-}
-var sf = sq == null ? null : sq.getSequenceFeatures ();
-for (var sl = 0; sf != null && sl < sf.length; sl++) {
-if (sf[sl].begin == sf[sl].end && sf[sl].begin == 0) {
-if (sf[sl].links != null && sf[sl].links.size () > 0) {
-for (var l = 0, lSize = sf[sl].links.size (); l < lSize; l++) {
-nlinks.addElement (sf[sl].links.elementAt (l));
-}
-}}}
-var popup = new jalview.appletgui.APopupMenu (this.alignPanel, sq, nlinks);
-this.add (popup);
-popup.show (this, e.getX (), e.getY ());
-return;
-}if ((this.av.getSelectionGroup () == null) || ((!e.isControlDown () && !e.isShiftDown ()) && this.av.getSelectionGroup () != null)) {
-this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());
-this.av.getSelectionGroup ().setStartRes (0);
-this.av.getSelectionGroup ().setEndRes (this.av.getAlignment ().getWidth () - 1);
-}if (e.isShiftDown () && this.lastid != -1) {
-this.selectSeqs (this.lastid, seq);
-} else {
-this.selectSeq (seq);
-}this.alignPanel.paintAlignment (false);
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "selectSeq",
-function (seq) {
-this.lastid = seq;
-var pickedSeq = this.av.getAlignment ().getSequenceAt (seq);
-this.av.getSelectionGroup ().addOrRemove (pickedSeq, true);
-}, "~N");
-Clazz.defineMethod (c$, "selectSeqs",
-function (start, end) {
-this.lastid = start;
-if (end >= this.av.getAlignment ().getHeight ()) {
-end = this.av.getAlignment ().getHeight () - 1;
-}if (end < start) {
-var tmp = start;
-start = end;
-end = tmp;
-this.lastid = end;
-}if (this.av.getSelectionGroup () == null) {
-this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());
-}for (var i = start; i <= end; i++) {
-this.av.getSelectionGroup ().addSequence (this.av.getAlignment ().getSequenceAt (i), i == end);
-}
-}, "~N,~N");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (e) {
-if (this.scrollThread != null) {
-this.scrollThread.running = false;
-}if (this.av.getSelectionGroup () != null) {
-this.av.getSelectionGroup ().recalcConservation ();
-}this.mouseDragging = false;
-jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
-this.av.sendSelection ();
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "highlightSearchResults",
-function (list) {
-this.idCanvas.setHighlighted (list);
-if (list == null) {
-return;
-}var index = this.av.getAlignment ().findIndex (list.get (0));
-if (this.av.getStartSeq () > index || this.av.getEndSeq () < index) {
-this.alignPanel.setScrollValues (this.av.getStartRes (), index);
-}}, "java.util.List");
-c$.$IdPanel$ScrollThread$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.running = false;
-this.up = true;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.IdPanel, "ScrollThread", Thread);
-Clazz.makeConstructor (c$,
-function (a) {
-Clazz.superConstructor (this, jalview.appletgui.IdPanel.ScrollThread, []);
-this.up = a;
-this.start ();
-}, "~B");
-Clazz.defineMethod (c$, "stopScrolling",
-function () {
-this.running = false;
-});
-Clazz.overrideMethod (c$, "run",
-function () {
-this.running = true;
-while (this.running) {
-if (this.b$["jalview.appletgui.IdPanel"].alignPanel.scrollUp (this.up)) {
-var a = this.b$["jalview.appletgui.IdPanel"].av.getStartSeq ();
-if (!this.up) {
-a = this.b$["jalview.appletgui.IdPanel"].av.getEndSeq ();
-}if (a < this.b$["jalview.appletgui.IdPanel"].lastid) {
-this.b$["jalview.appletgui.IdPanel"].selectSeqs (this.b$["jalview.appletgui.IdPanel"].lastid - 1, a);
-} else if (a > this.b$["jalview.appletgui.IdPanel"].lastid && a < this.b$["jalview.appletgui.IdPanel"].av.getAlignment ().getHeight ()) {
-this.b$["jalview.appletgui.IdPanel"].selectSeqs (this.b$["jalview.appletgui.IdPanel"].lastid + 1, a);
-}this.b$["jalview.appletgui.IdPanel"].lastid = a;
-} else {
-this.running = false;
-}this.b$["jalview.appletgui.IdPanel"].alignPanel.paintAlignment (true);
-try {
-Thread.sleep (100);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-}
-});
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.lang.Thread", "java.util.Vector"], "jalview.appletgui.IdPanel", ["jalview.appletgui.APopupMenu", "$.IdCanvas", "$.PaintRefresher", "$.Tooltip", "jalview.datamodel.SequenceGroup", "jalview.util.UrlLink", "java.awt.BorderLayout", "java.lang.Float", "$.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.idCanvas = null;
+this.av = null;
+this.alignPanel = null;
+this.scrollThread = null;
+this.lastid = -1;
+this.mouseDragging = false;
+this.links = null;
+this.tooltip = null;
+if (!Clazz.isClassDefined ("jalview.appletgui.IdPanel.ScrollThread")) {
+jalview.appletgui.IdPanel.$IdPanel$ScrollThread$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "IdPanel", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
+Clazz.prepareFields (c$, function () {
+this.links = new java.util.Vector ();
+});
+Clazz.makeConstructor (c$,
+function (av, parent) {
+Clazz.superConstructor (this, jalview.appletgui.IdPanel, []);
+this.setName ("idPanel");
+this.av = av;
+this.alignPanel = parent;
+this.idCanvas = new jalview.appletgui.IdCanvas (av);
+this.setLayout ( new java.awt.BorderLayout ());
+this.add (this.idCanvas, "Center");
+this.idCanvas.addMouseListener (this);
+this.idCanvas.addMouseMotionListener (this);
+if (av.applet != null) {
+av.applet.getLinkParams (this.links);
+}{
+var srsPos = this.links.indexOf ("SRS|http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-newId+(([uniprot-all:$SEQUENCE_ID$]))+-view+SwissEntry");
+if (srsPos > -1) {
+this.links.setElementAt ("EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$", srsPos);
+}}if (this.links.size () < 1) {
+this.links = new java.util.Vector ();
+this.links.addElement ("EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$");
+}}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (e) {
+var seq = this.alignPanel.seqPanel.findSeq (e);
+var sequence = this.av.getAlignment ().getSequenceAt (seq);
+var tooltiptext = new StringBuffer ();
+if (sequence != null) {
+if (sequence.getDescription () != null) {
+tooltiptext.append (sequence.getDescription ());
+tooltiptext.append ("\n");
+}var sf = sequence.getSequenceFeatures ();
+for (var sl = 0; sf != null && sl < sf.length; sl++) {
+if (sf[sl].begin == sf[sl].end && sf[sl].begin == 0) {
+var nl = false;
+if (sf[sl].getFeatureGroup () != null) {
+tooltiptext.append (sf[sl].getFeatureGroup ());
+nl = true;
+};if (sf[sl].getType () != null) {
+tooltiptext.append (" ");
+tooltiptext.append (sf[sl].getType ());
+nl = true;
+};if (sf[sl].getDescription () != null) {
+tooltiptext.append (" ");
+tooltiptext.append (sf[sl].getDescription ());
+nl = true;
+};if (!Float.isNaN (sf[sl].getScore ()) && sf[sl].getScore () != 0) {
+tooltiptext.append (" Score = ");
+tooltiptext.append (sf[sl].getScore ());
+nl = true;
+};if (sf[sl].getStatus () != null && sf[sl].getStatus ().length > 0) {
+tooltiptext.append (" (");
+tooltiptext.append (sf[sl].getStatus ());
+tooltiptext.append (")");
+nl = true;
+};if (nl) {
+tooltiptext.append ("\n");
+}}}
+}if (tooltiptext.length () == 0) {
+if (this.tooltip != null) {
+this.tooltip.setVisible (false);
+}this.tooltip = null;
+tooltiptext = null;
+return;
+}if (this.tooltip == null) {
+this.tooltip = new jalview.appletgui.Tooltip (sequence.getDisplayId (true) + "\n" + tooltiptext.toString (), this.idCanvas);
+} else {
+this.tooltip.setTip (sequence.getDisplayId (true) + "\n" + tooltiptext.toString ());
+}tooltiptext = null;
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (e) {
+this.mouseDragging = true;
+var seq = Math.max (0, this.alignPanel.seqPanel.findSeq (e));
+if (seq < this.lastid) {
+this.selectSeqs (this.lastid - 1, seq);
+} else if (seq > this.lastid) {
+this.selectSeqs (this.lastid + 1, seq);
+}this.lastid = seq;
+this.alignPanel.paintAlignment (false);
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (e) {
+if (e.getClickCount () < 2) {
+return;
+}var seq = this.alignPanel.seqPanel.findSeq (e);
+var sq = this.av.getAlignment ().getSequenceAt (seq);
+if (sq == null) {
+return;
+}var id = sq.getName ();
+var target = null;
+var url = null;
+var i = 0;
+while (url == null && i < this.links.size ()) {
+url = this.links.elementAt (i++).toString ();
+var urlLink = null;
+try {
+urlLink = new jalview.util.UrlLink (url);
+target = urlLink.getTarget ();
+} catch (foo) {
+if (Clazz.exceptionOf (foo, Exception)) {
+System.err.println ("Exception for URLLink '" + url + "'");
+foo.printStackTrace ();
+url = null;
+continue;
+} else {
+throw foo;
+}
+}
+;if (!urlLink.isValid ()) {
+System.err.println (urlLink.getInvalidMessage ());
+url = null;
+continue;
+}var urls = urlLink.makeUrls (id, true);
+if (urls == null || urls[0] == null || urls[0].length < 1) {
+url = null;
+continue;
+}url = urls[1];
+}
+try {
+this.alignPanel.alignFrame.showURL (url, target);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (e) {
+if (this.scrollThread != null) {
+this.scrollThread.running = false;
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (e) {
+if (this.av.getWrapAlignment ()) {
+return;
+}if (this.mouseDragging && e.getY () < 0 && this.av.getStartSeq () > 0) {
+this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.IdPanel.ScrollThread, this, null, true);
+}if (this.mouseDragging && e.getY () >= this.getSize ().height && this.av.getAlignment ().getHeight () > this.av.getEndSeq ()) {
+this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.IdPanel.ScrollThread, this, null, false);
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (e) {
+if (e.getClickCount () > 1) {
+return;
+}var y = e.getY ();
+if (this.av.getWrapAlignment ()) {
+y -= 2 * this.av.getCharHeight ();
+}var seq = this.alignPanel.seqPanel.findSeq (e);
+if ((e.getModifiers () & 4) == 4) {
+var sq = this.av.getAlignment ().getSequenceAt (seq);
+var nlinks = new java.util.Vector ();
+for (var l = 0, lSize = this.links.size (); l < lSize; l++) {
+nlinks.addElement (this.links.elementAt (l));
+}
+var sf = sq == null ? null : sq.getSequenceFeatures ();
+for (var sl = 0; sf != null && sl < sf.length; sl++) {
+if (sf[sl].begin == sf[sl].end && sf[sl].begin == 0) {
+if (sf[sl].links != null && sf[sl].links.size () > 0) {
+for (var l = 0, lSize = sf[sl].links.size (); l < lSize; l++) {
+nlinks.addElement (sf[sl].links.elementAt (l));
+}
+}}}
+var popup = new jalview.appletgui.APopupMenu (this.alignPanel, sq, nlinks);
+this.add (popup);
+popup.show (this, e.getX (), e.getY ());
+return;
+}if ((this.av.getSelectionGroup () == null) || ((!e.isControlDown () && !e.isShiftDown ()) && this.av.getSelectionGroup () != null)) {
+this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());
+this.av.getSelectionGroup ().setStartRes (0);
+this.av.getSelectionGroup ().setEndRes (this.av.getAlignment ().getWidth () - 1);
+}if (e.isShiftDown () && this.lastid != -1) {
+this.selectSeqs (this.lastid, seq);
+} else {
+this.selectSeq (seq);
+}this.alignPanel.paintAlignment (false);
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "selectSeq",
+function (seq) {
+this.lastid = seq;
+var pickedSeq = this.av.getAlignment ().getSequenceAt (seq);
+this.av.getSelectionGroup ().addOrRemove (pickedSeq, true);
+}, "~N");
+Clazz.defineMethod (c$, "selectSeqs",
+function (start, end) {
+this.lastid = start;
+if (end >= this.av.getAlignment ().getHeight ()) {
+end = this.av.getAlignment ().getHeight () - 1;
+}if (end < start) {
+var tmp = start;
+start = end;
+end = tmp;
+this.lastid = end;
+}if (this.av.getSelectionGroup () == null) {
+this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());
+}for (var i = start; i <= end; i++) {
+this.av.getSelectionGroup ().addSequence (this.av.getAlignment ().getSequenceAt (i), i == end);
+}
+}, "~N,~N");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (e) {
+if (this.scrollThread != null) {
+this.scrollThread.running = false;
+}if (this.av.getSelectionGroup () != null) {
+this.av.getSelectionGroup ().recalcConservation ();
+}this.mouseDragging = false;
+jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
+this.av.sendSelection ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "highlightSearchResults",
+function (list) {
+this.idCanvas.setHighlighted (list);
+if (list == null) {
+return;
+}var index = this.av.getAlignment ().findIndex (list.get (0));
+if (this.av.getStartSeq () > index || this.av.getEndSeq () < index) {
+this.alignPanel.setScrollValues (this.av.getStartRes (), index);
+}}, "java.util.List");
+c$.$IdPanel$ScrollThread$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.running = false;
+this.up = true;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.IdPanel, "ScrollThread", Thread);
+Clazz.makeConstructor (c$,
+function (a) {
+Clazz.superConstructor (this, jalview.appletgui.IdPanel.ScrollThread, []);
+this.up = a;
+this.start ();
+}, "~B");
+Clazz.defineMethod (c$, "stopScrolling",
+function () {
+this.running = false;
+});
+Clazz.overrideMethod (c$, "run",
+function () {
+this.running = true;
+while (this.running) {
+if (this.b$["jalview.appletgui.IdPanel"].alignPanel.scrollUp (this.up)) {
+var a = this.b$["jalview.appletgui.IdPanel"].av.getStartSeq ();
+if (!this.up) {
+a = this.b$["jalview.appletgui.IdPanel"].av.getEndSeq ();
+}if (a < this.b$["jalview.appletgui.IdPanel"].lastid) {
+this.b$["jalview.appletgui.IdPanel"].selectSeqs (this.b$["jalview.appletgui.IdPanel"].lastid - 1, a);
+} else if (a > this.b$["jalview.appletgui.IdPanel"].lastid && a < this.b$["jalview.appletgui.IdPanel"].av.getAlignment ().getHeight ()) {
+this.b$["jalview.appletgui.IdPanel"].selectSeqs (this.b$["jalview.appletgui.IdPanel"].lastid + 1, a);
+}this.b$["jalview.appletgui.IdPanel"].lastid = a;
+} else {
+this.running = false;
+}this.b$["jalview.appletgui.IdPanel"].alignPanel.paintAlignment (true);
+try {
+Thread.sleep (100);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/IdwidthAdjuster.js b/bin/jalview/appletgui/IdwidthAdjuster.js
index 80a0c59..e7b92f7 100644
--- a/bin/jalview/appletgui/IdwidthAdjuster.js
+++ b/bin/jalview/appletgui/IdwidthAdjuster.js
@@ -1,66 +1,66 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.IdwidthAdjuster", ["java.awt.Color", "$.Toolkit"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.active = false;
-this.oldX = 0;
-this.image = null;
-this.ap = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "IdwidthAdjuster", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.IdwidthAdjuster, []);
-this.setName ("IdwidthAdjuster");
-this.setLayout (null);
-this.ap = ap;
-var url = this.getClass ().getResource ("/images/idwidth.gif");
-if (url != null) {
-this.image = java.awt.Toolkit.getDefaultToolkit ().getImage (url);
-}this.addMouseListener (this);
-this.addMouseMotionListener (this);
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-this.oldX = evt.getX ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-this.active = false;
-this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-this.active = true;
-this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-this.active = false;
-this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-this.active = true;
-var d = this.ap.idPanel.idCanvas.getSize ();
-var dif = evt.getX () - this.oldX;
-var newWidth = d.width + dif;
-if (newWidth > 20 || dif > 0) {
-this.ap.setIdWidth (newWidth, d.height);
-this.setSize (newWidth, this.getSize ().height);
-this.oldX = evt.getX ();
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "PaintComponent",
-function (g) {
-g.setColor (java.awt.Color.white);
-g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
-if (this.active) {
-if (this.image != null) {
-g.drawImage (this.image, this.getSize ().width - 20, 2, this);
-}}}, "java.awt.Graphics");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.IdwidthAdjuster", ["java.awt.Color", "$.Toolkit"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.active = false;
+this.oldX = 0;
+this.image = null;
+this.ap = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "IdwidthAdjuster", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.IdwidthAdjuster, []);
+this.setName ("IdwidthAdjuster");
+this.setLayout (null);
+this.ap = ap;
+var url = this.getClass ().getResource ("/images/idwidth.gif");
+if (url != null) {
+this.image = java.awt.Toolkit.getDefaultToolkit ().getImage (url);
+}this.addMouseListener (this);
+this.addMouseMotionListener (this);
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+this.oldX = evt.getX ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+this.active = false;
+this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+this.active = true;
+this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+this.active = false;
+this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+this.active = true;
+var d = this.ap.idPanel.idCanvas.getSize ();
+var dif = evt.getX () - this.oldX;
+var newWidth = d.width + dif;
+if (newWidth > 20 || dif > 0) {
+this.ap.setIdWidth (newWidth, d.height);
+this.setSize (newWidth, this.getSize ().height);
+this.oldX = evt.getX ();
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "PaintComponent",
+function (g) {
+g.setColor (java.awt.Color.white);
+g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
+if (this.active) {
+if (this.image != null) {
+g.drawImage (this.image, this.getSize ().width - 20, 2, this);
+}}}, "java.awt.Graphics");
+});
diff --git a/bin/jalview/appletgui/JVDialog.js b/bin/jalview/appletgui/JVDialog.js
index 6f85ed1..ed9ee14 100644
--- a/bin/jalview/appletgui/JVDialog.js
+++ b/bin/jalview/appletgui/JVDialog.js
@@ -1,40 +1,40 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["java.awt.Dialog", "java.awt.event.ActionListener", "awt2swing.Button"], "jalview.appletgui.JVDialog", ["awt2swing.Panel", "java.awt.FlowLayout"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ap = null;
-this.buttonPanel = null;
-this.ok = null;
-this.cancel = null;
-this.accept = false;
-this.owner = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "JVDialog", java.awt.Dialog, java.awt.event.ActionListener);
-Clazz.prepareFields (c$, function () {
-this.ok = new awt2swing.Button ("Accept");
-this.cancel = new awt2swing.Button ("Cancel");
-});
-Clazz.makeConstructor (c$,
-function (owner, title, modal, width, height) {
-Clazz.superConstructor (this, jalview.appletgui.JVDialog, [owner, title, modal]);
-this.owner = owner;
-height += owner.getInsets ().top + this.getInsets ().bottom;
-this.setBounds (owner.getBounds ().x + Clazz.doubleToInt ((owner.getSize ().width - width) / 2), owner.getBounds ().y + Clazz.doubleToInt ((owner.getSize ().height - height) / 2), width, height);
-}, "awt2swing.Frame,~S,~B,~N,~N");
-Clazz.defineMethod (c$, "setMainPanel",
-function (panel) {
-this.add (panel, "North");
-this.buttonPanel = new awt2swing.Panel ( new java.awt.FlowLayout ());
-this.buttonPanel.add (this.ok);
-this.buttonPanel.add (this.cancel);
-this.ok.addActionListener (this);
-this.cancel.addActionListener (this);
-this.add (this.buttonPanel, "South");
-this.pack ();
-}, "awt2swing.Panel");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.ok) {
-this.accept = true;
-}this.setVisible (false);
-}, "java.awt.event.ActionEvent");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["java.awt.Dialog", "java.awt.event.ActionListener", "awt2swing.Button"], "jalview.appletgui.JVDialog", ["awt2swing.Panel", "java.awt.FlowLayout"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ap = null;
+this.buttonPanel = null;
+this.ok = null;
+this.cancel = null;
+this.accept = false;
+this.owner = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "JVDialog", java.awt.Dialog, java.awt.event.ActionListener);
+Clazz.prepareFields (c$, function () {
+this.ok = new awt2swing.Button ("Accept");
+this.cancel = new awt2swing.Button ("Cancel");
+});
+Clazz.makeConstructor (c$,
+function (owner, title, modal, width, height) {
+Clazz.superConstructor (this, jalview.appletgui.JVDialog, [owner, title, modal]);
+this.owner = owner;
+height += owner.getInsets ().top + this.getInsets ().bottom;
+this.setBounds (owner.getBounds ().x + Clazz.doubleToInt ((owner.getSize ().width - width) / 2), owner.getBounds ().y + Clazz.doubleToInt ((owner.getSize ().height - height) / 2), width, height);
+}, "awt2swing.Frame,~S,~B,~N,~N");
+Clazz.defineMethod (c$, "setMainPanel",
+function (panel) {
+this.add (panel, "North");
+this.buttonPanel = new awt2swing.Panel ( new java.awt.FlowLayout ());
+this.buttonPanel.add (this.ok);
+this.buttonPanel.add (this.cancel);
+this.ok.addActionListener (this);
+this.cancel.addActionListener (this);
+this.add (this.buttonPanel, "South");
+this.pack ();
+}, "awt2swing.Panel");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.ok) {
+this.accept = true;
+}this.setVisible (false);
+}, "java.awt.event.ActionEvent");
+});
diff --git a/bin/jalview/appletgui/OverviewPanel.class b/bin/jalview/appletgui/OverviewPanel.class
index 58462cb..e63efea 100644
Binary files a/bin/jalview/appletgui/OverviewPanel.class and b/bin/jalview/appletgui/OverviewPanel.class differ
diff --git a/bin/jalview/appletgui/OverviewPanel.js b/bin/jalview/appletgui/OverviewPanel.js
index cadd6b7..41baadd 100644
--- a/bin/jalview/appletgui/OverviewPanel.js
+++ b/bin/jalview/appletgui/OverviewPanel.js
@@ -1,262 +1,262 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.OverviewPanel", ["awt2swing.Frame", "jalview.appletgui.FeatureRenderer", "$.SequenceRenderer", "java.awt.Color", "$.Dimension", "java.awt.event.ComponentAdapter", "java.lang.Thread"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.miniMe = null;
-this.offscreen = null;
-this.av = null;
-this.ap = null;
-this.scalew = 1;
-this.scaleh = 1;
-this.$width = 0;
-this.sequencesHeight = 0;
-this.graphHeight = 20;
-this.boxX = -1;
-this.boxY = -1;
-this.boxWidth = -1;
-this.boxHeight = -1;
-this.resizing = false;
-this.sr = null;
-this.fr = null;
-this.nullFrame = null;
-this.resizeAgain = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "OverviewPanel", awt2swing.Panel, [Runnable, java.awt.event.MouseMotionListener, java.awt.event.MouseListener]);
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.OverviewPanel, []);
-this.av = ap.av;
-this.ap = ap;
-this.setLayout (null);
-this.nullFrame = new awt2swing.Frame ();
-this.nullFrame.addNotify ();
-this.sr = new jalview.appletgui.SequenceRenderer (this.av);
-this.sr.graphics = this.nullFrame.getGraphics ();
-this.sr.renderGaps = false;
-this.sr.forOverview = true;
-this.fr = new jalview.appletgui.FeatureRenderer (this.av);
-var initialScale = this.av.getAlignment ().getWidth () / this.av.getAlignment ().getHeight ();
-if (this.av.getSequenceConsensusHash () == null) {
-this.graphHeight = 0;
-}if (this.av.getAlignment ().getWidth () > this.av.getAlignment ().getHeight ()) {
-this.$width = 400;
-this.sequencesHeight = Clazz.floatToInt (400 / initialScale);
-if (this.sequencesHeight < 40) {
-this.sequencesHeight = 40;
-}} else {
-this.$width = Clazz.floatToInt (400 * initialScale);
-this.sequencesHeight = 300;
-if (this.$width < 120) {
-this.$width = 120;
-}}this.setSize ( new java.awt.Dimension (this.$width, this.sequencesHeight + this.graphHeight));
-this.addComponentListener (((Clazz.isClassDefined ("jalview.appletgui.OverviewPanel$1") ? 0 : jalview.appletgui.OverviewPanel.$OverviewPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.OverviewPanel$1, this, null)));
-this.addMouseMotionListener (this);
-this.addMouseListener (this);
-this.updateOverviewImage ();
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-this.boxX = evt.getX ();
-this.boxY = evt.getY ();
-this.checkValid ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-this.boxX = evt.getX ();
-this.boxY = evt.getY ();
-this.checkValid ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-this.boxX = evt.getX ();
-this.boxY = evt.getY ();
-this.checkValid ();
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "checkValid",
-function () {
-if (this.boxY < 0) {
-this.boxY = 0;
-}if (this.boxY > (this.sequencesHeight - this.boxHeight)) {
-this.boxY = this.sequencesHeight - this.boxHeight + 1;
-}if (this.boxX < 0) {
-this.boxX = 0;
-}if (this.boxX > (this.$width - this.boxWidth)) {
-if (this.av.hasHiddenColumns ()) {
-this.boxWidth = Clazz.floatToInt ((this.av.endRes - this.av.startRes + 1) * this.av.getCharWidth () * this.scalew);
-}this.boxX = this.$width - this.boxWidth;
-}var col = Clazz.floatToInt (this.boxX / this.scalew / this.av.getCharWidth ());
-var row = Clazz.floatToInt (this.boxY / this.scaleh / this.av.getCharHeight ());
-if (this.av.hasHiddenColumns ()) {
-if (!this.av.getColumnSelection ().isVisible (col)) {
-return;
-}col = this.av.getColumnSelection ().findColumnPosition (col);
-}if (this.av.hasHiddenRows ()) {
-row = this.av.getAlignment ().getHiddenSequences ().findIndexWithoutHiddenSeqs (row);
-}this.ap.setScrollValues (col, row);
-this.ap.paintAlignment (false);
-});
-Clazz.defineMethod (c$, "updateOverviewImage",
-function () {
-if (this.resizing) {
-this.resizeAgain = true;
-return;
-}if (this.av.isShowSequenceFeatures ()) {
-this.fr.transferSettings (this.ap.seqPanel.seqCanvas.fr);
-}this.resizing = true;
-if ((this.getSize ().width > 0) && (this.getSize ().height > 0)) {
-this.$width = this.getSize ().width;
-this.sequencesHeight = this.getSize ().height - this.graphHeight;
-}this.setSize ( new java.awt.Dimension (this.$width, this.sequencesHeight + this.graphHeight));
-var thread = new Thread (this);
-thread.start ();
-this.repaint ();
-});
-Clazz.overrideMethod (c$, "run",
-function () {
-this.miniMe = null;
-var alwidth = this.av.getAlignment ().getWidth ();
-var alheight = this.av.getAlignment ().getHeight ();
-if (this.av.isShowSequenceFeatures ()) {
-this.fr.transferSettings (this.ap.seqPanel.seqCanvas.getFeatureRenderer ());
-}if (this.getSize ().width > 0 && this.getSize ().height > 0) {
-this.$width = this.getSize ().width;
-this.sequencesHeight = this.getSize ().height - this.graphHeight;
-}this.setSize ( new java.awt.Dimension (this.$width, this.sequencesHeight + this.graphHeight));
-var fullsizeWidth = alwidth * this.av.getCharWidth ();
-var fullsizeHeight = alheight * this.av.getCharHeight ();
-this.scalew = this.$width / fullsizeWidth;
-this.scaleh = this.sequencesHeight / fullsizeHeight;
-this.miniMe = this.nullFrame.createImage (this.$width, this.sequencesHeight + this.graphHeight);
-this.offscreen = this.nullFrame.createImage (this.$width, this.sequencesHeight + this.graphHeight);
-var mg = this.miniMe.getGraphics ();
-var sampleCol = alwidth / this.$width;
-var sampleRow = alheight / this.sequencesHeight;
-var lastcol = 0;
-var lastrow = 0;
-var xstart = 0;
-var ystart = 0;
-var color = java.awt.Color.yellow;
-var row;
-var col;
-var sameRow = 0;
-var sameCol = 0;
-var seq;
-var hasHiddenRows = this.av.hasHiddenRows ();
-var hasHiddenCols = this.av.hasHiddenColumns ();
-var hiddenRow = false;
-var alignment = this.av.getAlignment ();
-for (row = 0; row <= this.sequencesHeight; row++) {
-if (Clazz.floatToInt (row * sampleRow) == lastrow) {
-sameRow++;
-continue;
-}hiddenRow = false;
-if (hasHiddenRows) {
-seq = alignment.getHiddenSequences ().getHiddenSequence (lastrow);
-if (seq == null) {
-var index = alignment.getHiddenSequences ().findIndexWithoutHiddenSeqs (lastrow);
-seq = alignment.getSequenceAt (index);
-} else {
-hiddenRow = true;
-}} else {
-seq = alignment.getSequenceAt (lastrow);
-}for (col = 0; col < this.$width; col++) {
-if (Clazz.floatToInt (col * sampleCol) == lastcol && Clazz.floatToInt (row * sampleRow) == lastrow) {
-sameCol++;
-continue;
-}lastcol = Clazz.floatToInt (col * sampleCol);
-if (seq.getLength () > lastcol) {
-color = this.sr.getResidueBoxColour (seq, lastcol);
-if (this.av.isShowSequenceFeatures ()) {
-color = this.fr.findFeatureColour (color, seq, lastcol);
-}} else {
-color = java.awt.Color.white;
-}if (hiddenRow || (hasHiddenCols && !this.av.getColumnSelection ().isVisible (lastcol))) {
-color = color.darker ().darker ();
-}mg.setColor (color);
-if (sameCol == 1 && sameRow == 1) {
-mg.drawLine (xstart, ystart, xstart, ystart);
-} else {
-mg.fillRect (xstart, ystart, sameCol, sameRow);
-}xstart = col;
-sameCol = 1;
-}
-lastrow = Clazz.floatToInt (row * sampleRow);
-ystart = row;
-sameRow = 1;
-}
-if (this.av.getAlignmentConservationAnnotation () != null) {
-for (col = 0; col < this.$width; col++) {
-lastcol = Clazz.floatToInt (col * sampleCol);
-{
-mg.translate (col, this.sequencesHeight);
-this.ap.annotationPanel.renderer.drawGraph (mg, this.av.getAlignmentConservationAnnotation (), this.av.getAlignmentConservationAnnotation ().annotations, Clazz.floatToInt (sampleCol) + 1, this.graphHeight, Clazz.floatToInt (col * sampleCol), Clazz.floatToInt (col * sampleCol) + 1);
-mg.translate (-col, -this.sequencesHeight);
-}}
-}System.gc ();
-this.resizing = false;
-this.setBoxPosition ();
-if (this.resizeAgain) {
-this.resizeAgain = false;
-this.updateOverviewImage ();
-}});
-Clazz.defineMethod (c$, "setBoxPosition",
-function () {
-var fullsizeWidth = this.av.getAlignment ().getWidth () * this.av.getCharWidth ();
-var fullsizeHeight = (this.av.getAlignment ().getHeight () + this.av.getAlignment ().getHiddenSequences ().getSize ()) * this.av.getCharHeight ();
-var startRes = this.av.getStartRes ();
-var endRes = this.av.getEndRes ();
-if (this.av.hasHiddenColumns ()) {
-startRes = this.av.getColumnSelection ().adjustForHiddenColumns (startRes);
-endRes = this.av.getColumnSelection ().adjustForHiddenColumns (endRes);
-}var startSeq = this.av.startSeq;
-var endSeq = this.av.endSeq;
-if (this.av.hasHiddenRows ()) {
-startSeq = this.av.getAlignment ().getHiddenSequences ().adjustForHiddenSeqs (startSeq);
-endSeq = this.av.getAlignment ().getHiddenSequences ().adjustForHiddenSeqs (endSeq);
-}this.scalew = this.$width / fullsizeWidth;
-this.scaleh = this.sequencesHeight / fullsizeHeight;
-this.boxX = Clazz.floatToInt (startRes * this.av.getCharWidth () * this.scalew);
-this.boxY = Clazz.floatToInt (startSeq * this.av.getCharHeight () * this.scaleh);
-if (this.av.hasHiddenColumns ()) {
-this.boxWidth = Clazz.floatToInt ((endRes - startRes + 1) * this.av.getCharWidth () * this.scalew);
-} else {
-this.boxWidth = Clazz.floatToInt ((endRes - startRes + 1) * this.av.getCharWidth () * this.scalew);
-}this.boxHeight = Clazz.floatToInt ((endSeq - startSeq) * this.av.getCharHeight () * this.scaleh);
-this.repaint ();
-});
-Clazz.overrideMethod (c$, "update",
-function (g) {
-this.paint (g);
-}, "java.awt.Graphics");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-var og = this.offscreen.getGraphics ();
-if (this.miniMe != null) {
-og.drawImage (this.miniMe, 0, 0, this);
-og.setColor (java.awt.Color.red);
-og.drawRect (this.boxX, this.boxY, this.boxWidth, this.boxHeight);
-og.drawRect (this.boxX + 1, this.boxY + 1, this.boxWidth - 2, this.boxHeight - 2);
-g.drawImage (this.offscreen, 0, 0, this);
-}}, "java.awt.Graphics");
-c$.$OverviewPanel$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "OverviewPanel$1", java.awt.event.ComponentAdapter);
-Clazz.overrideMethod (c$, "componentResized",
-function (evt) {
-if (this.b$["jalview.appletgui.OverviewPanel"].getSize ().width != this.b$["jalview.appletgui.OverviewPanel"].$width || this.b$["jalview.appletgui.OverviewPanel"].getSize ().height != this.b$["jalview.appletgui.OverviewPanel"].sequencesHeight + this.b$["jalview.appletgui.OverviewPanel"].graphHeight) {
-this.b$["jalview.appletgui.OverviewPanel"].updateOverviewImage ();
-}}, "java.awt.event.ComponentEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.OverviewPanel", ["awt2swing.Frame", "jalview.appletgui.FeatureRenderer", "$.SequenceRenderer", "java.awt.Color", "$.Dimension", "java.awt.event.ComponentAdapter", "java.lang.Thread"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.miniMe = null;
+this.offscreen = null;
+this.av = null;
+this.ap = null;
+this.scalew = 1;
+this.scaleh = 1;
+this.$width = 0;
+this.sequencesHeight = 0;
+this.graphHeight = 20;
+this.boxX = -1;
+this.boxY = -1;
+this.boxWidth = -1;
+this.boxHeight = -1;
+this.resizing = false;
+this.sr = null;
+this.fr = null;
+this.nullFrame = null;
+this.resizeAgain = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "OverviewPanel", awt2swing.Panel, [Runnable, java.awt.event.MouseMotionListener, java.awt.event.MouseListener]);
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.OverviewPanel, []);
+this.av = ap.av;
+this.ap = ap;
+this.setLayout (null);
+this.nullFrame = new awt2swing.Frame ();
+this.nullFrame.addNotify ();
+this.sr = new jalview.appletgui.SequenceRenderer (this.av);
+this.sr.graphics = this.nullFrame.getGraphics ();
+this.sr.renderGaps = false;
+this.sr.forOverview = true;
+this.fr = new jalview.appletgui.FeatureRenderer (this.av);
+var initialScale = this.av.getAlignment ().getWidth () / this.av.getAlignment ().getHeight ();
+if (this.av.getSequenceConsensusHash () == null) {
+this.graphHeight = 0;
+}if (this.av.getAlignment ().getWidth () > this.av.getAlignment ().getHeight ()) {
+this.$width = 400;
+this.sequencesHeight = Clazz.floatToInt (400 / initialScale);
+if (this.sequencesHeight < 40) {
+this.sequencesHeight = 40;
+}} else {
+this.$width = Clazz.floatToInt (400 * initialScale);
+this.sequencesHeight = 300;
+if (this.$width < 120) {
+this.$width = 120;
+}}this.setSize ( new java.awt.Dimension (this.$width, this.sequencesHeight + this.graphHeight));
+this.addComponentListener (((Clazz.isClassDefined ("jalview.appletgui.OverviewPanel$1") ? 0 : jalview.appletgui.OverviewPanel.$OverviewPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.OverviewPanel$1, this, null)));
+this.addMouseMotionListener (this);
+this.addMouseListener (this);
+this.updateOverviewImage ();
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+this.boxX = evt.getX ();
+this.boxY = evt.getY ();
+this.checkValid ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+this.boxX = evt.getX ();
+this.boxY = evt.getY ();
+this.checkValid ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+this.boxX = evt.getX ();
+this.boxY = evt.getY ();
+this.checkValid ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "checkValid",
+function () {
+if (this.boxY < 0) {
+this.boxY = 0;
+}if (this.boxY > (this.sequencesHeight - this.boxHeight)) {
+this.boxY = this.sequencesHeight - this.boxHeight + 1;
+}if (this.boxX < 0) {
+this.boxX = 0;
+}if (this.boxX > (this.$width - this.boxWidth)) {
+if (this.av.hasHiddenColumns ()) {
+this.boxWidth = Clazz.floatToInt ((this.av.endRes - this.av.startRes + 1) * this.av.getCharWidth () * this.scalew);
+}this.boxX = this.$width - this.boxWidth;
+}var col = Clazz.floatToInt (this.boxX / this.scalew / this.av.getCharWidth ());
+var row = Clazz.floatToInt (this.boxY / this.scaleh / this.av.getCharHeight ());
+if (this.av.hasHiddenColumns ()) {
+if (!this.av.getColumnSelection ().isVisible (col)) {
+return;
+}col = this.av.getColumnSelection ().findColumnPosition (col);
+}if (this.av.hasHiddenRows ()) {
+row = this.av.getAlignment ().getHiddenSequences ().findIndexWithoutHiddenSeqs (row);
+}this.ap.setScrollValues (col, row);
+this.ap.paintAlignment (false);
+});
+Clazz.defineMethod (c$, "updateOverviewImage",
+function () {
+if (this.resizing) {
+this.resizeAgain = true;
+return;
+}if (this.av.isShowSequenceFeatures ()) {
+this.fr.transferSettings (this.ap.seqPanel.seqCanvas.fr);
+}this.resizing = true;
+if ((this.getSize ().width > 0) && (this.getSize ().height > 0)) {
+this.$width = this.getSize ().width;
+this.sequencesHeight = this.getSize ().height - this.graphHeight;
+}this.setSize ( new java.awt.Dimension (this.$width, this.sequencesHeight + this.graphHeight));
+var thread = new Thread (this);
+thread.start ();
+this.repaint ();
+});
+Clazz.overrideMethod (c$, "run",
+function () {
+this.miniMe = null;
+var alwidth = this.av.getAlignment ().getWidth ();
+var alheight = this.av.getAlignment ().getHeight ();
+if (this.av.isShowSequenceFeatures ()) {
+this.fr.transferSettings (this.ap.seqPanel.seqCanvas.getFeatureRenderer ());
+}if (this.getSize ().width > 0 && this.getSize ().height > 0) {
+this.$width = this.getSize ().width;
+this.sequencesHeight = this.getSize ().height - this.graphHeight;
+}this.setSize ( new java.awt.Dimension (this.$width, this.sequencesHeight + this.graphHeight));
+var fullsizeWidth = alwidth * this.av.getCharWidth ();
+var fullsizeHeight = alheight * this.av.getCharHeight ();
+this.scalew = this.$width / fullsizeWidth;
+this.scaleh = this.sequencesHeight / fullsizeHeight;
+this.miniMe = this.nullFrame.createImage (this.$width, this.sequencesHeight + this.graphHeight);
+this.offscreen = this.nullFrame.createImage (this.$width, this.sequencesHeight + this.graphHeight);
+var mg = this.miniMe.getGraphics ();
+var sampleCol = alwidth / this.$width;
+var sampleRow = alheight / this.sequencesHeight;
+var lastcol = 0;
+var lastrow = 0;
+var xstart = 0;
+var ystart = 0;
+var color = java.awt.Color.yellow;
+var row;
+var col;
+var sameRow = 0;
+var sameCol = 0;
+var seq;
+var hasHiddenRows = this.av.hasHiddenRows ();
+var hasHiddenCols = this.av.hasHiddenColumns ();
+var hiddenRow = false;
+var alignment = this.av.getAlignment ();
+for (row = 0; row <= this.sequencesHeight; row++) {
+if (Clazz.floatToInt (row * sampleRow) == lastrow) {
+sameRow++;
+continue;
+}hiddenRow = false;
+if (hasHiddenRows) {
+seq = alignment.getHiddenSequences ().getHiddenSequence (lastrow);
+if (seq == null) {
+var index = alignment.getHiddenSequences ().findIndexWithoutHiddenSeqs (lastrow);
+seq = alignment.getSequenceAt (index);
+} else {
+hiddenRow = true;
+}} else {
+seq = alignment.getSequenceAt (lastrow);
+}for (col = 0; col < this.$width; col++) {
+if (Clazz.floatToInt (col * sampleCol) == lastcol && Clazz.floatToInt (row * sampleRow) == lastrow) {
+sameCol++;
+continue;
+}lastcol = Clazz.floatToInt (col * sampleCol);
+if (seq.getLength () > lastcol) {
+color = this.sr.getResidueBoxColour (seq, lastcol);
+if (this.av.isShowSequenceFeatures ()) {
+color = this.fr.findFeatureColour (color, seq, lastcol);
+}} else {
+color = java.awt.Color.white;
+}if (hiddenRow || (hasHiddenCols && !this.av.getColumnSelection ().isVisible (lastcol))) {
+color = color.darker ().darker ();
+}mg.setColor (color);
+if (sameCol == 1 && sameRow == 1) {
+mg.drawLine (xstart, ystart, xstart, ystart);
+} else {
+mg.fillRect (xstart, ystart, sameCol, sameRow);
+}xstart = col;
+sameCol = 1;
+}
+lastrow = Clazz.floatToInt (row * sampleRow);
+ystart = row;
+sameRow = 1;
+}
+if (this.av.getAlignmentConservationAnnotation () != null) {
+for (col = 0; col < this.$width; col++) {
+lastcol = Clazz.floatToInt (col * sampleCol);
+{
+mg.translate (col, this.sequencesHeight);
+this.ap.annotationPanel.renderer.drawGraph (mg, this.av.getAlignmentConservationAnnotation (), this.av.getAlignmentConservationAnnotation ().annotations, Clazz.floatToInt (sampleCol) + 1, this.graphHeight, Clazz.floatToInt (col * sampleCol), Clazz.floatToInt (col * sampleCol) + 1);
+mg.translate (-col, -this.sequencesHeight);
+}}
+}System.gc ();
+this.resizing = false;
+this.setBoxPosition ();
+if (this.resizeAgain) {
+this.resizeAgain = false;
+this.updateOverviewImage ();
+}});
+Clazz.defineMethod (c$, "setBoxPosition",
+function () {
+var fullsizeWidth = this.av.getAlignment ().getWidth () * this.av.getCharWidth ();
+var fullsizeHeight = (this.av.getAlignment ().getHeight () + this.av.getAlignment ().getHiddenSequences ().getSize ()) * this.av.getCharHeight ();
+var startRes = this.av.getStartRes ();
+var endRes = this.av.getEndRes ();
+if (this.av.hasHiddenColumns ()) {
+startRes = this.av.getColumnSelection ().adjustForHiddenColumns (startRes);
+endRes = this.av.getColumnSelection ().adjustForHiddenColumns (endRes);
+}var startSeq = this.av.startSeq;
+var endSeq = this.av.endSeq;
+if (this.av.hasHiddenRows ()) {
+startSeq = this.av.getAlignment ().getHiddenSequences ().adjustForHiddenSeqs (startSeq);
+endSeq = this.av.getAlignment ().getHiddenSequences ().adjustForHiddenSeqs (endSeq);
+}this.scalew = this.$width / fullsizeWidth;
+this.scaleh = this.sequencesHeight / fullsizeHeight;
+this.boxX = Clazz.floatToInt (startRes * this.av.getCharWidth () * this.scalew);
+this.boxY = Clazz.floatToInt (startSeq * this.av.getCharHeight () * this.scaleh);
+if (this.av.hasHiddenColumns ()) {
+this.boxWidth = Clazz.floatToInt ((endRes - startRes + 1) * this.av.getCharWidth () * this.scalew);
+} else {
+this.boxWidth = Clazz.floatToInt ((endRes - startRes + 1) * this.av.getCharWidth () * this.scalew);
+}this.boxHeight = Clazz.floatToInt ((endSeq - startSeq) * this.av.getCharHeight () * this.scaleh);
+this.repaint ();
+});
+Clazz.overrideMethod (c$, "update",
+function (g) {
+this.paint (g);
+}, "java.awt.Graphics");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+var og = this.offscreen.getGraphics ();
+if (this.miniMe != null) {
+og.drawImage (this.miniMe, 0, 0, this);
+og.setColor (java.awt.Color.red);
+og.drawRect (this.boxX, this.boxY, this.boxWidth, this.boxHeight);
+og.drawRect (this.boxX + 1, this.boxY + 1, this.boxWidth - 2, this.boxHeight - 2);
+g.drawImage (this.offscreen, 0, 0, this);
+}}, "java.awt.Graphics");
+c$.$OverviewPanel$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "OverviewPanel$1", java.awt.event.ComponentAdapter);
+Clazz.overrideMethod (c$, "componentResized",
+function (evt) {
+if (this.b$["jalview.appletgui.OverviewPanel"].getSize ().width != this.b$["jalview.appletgui.OverviewPanel"].$width || this.b$["jalview.appletgui.OverviewPanel"].getSize ().height != this.b$["jalview.appletgui.OverviewPanel"].sequencesHeight + this.b$["jalview.appletgui.OverviewPanel"].graphHeight) {
+this.b$["jalview.appletgui.OverviewPanel"].updateOverviewImage ();
+}}, "java.awt.event.ComponentEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/PCAPanel.class b/bin/jalview/appletgui/PCAPanel.class
index 92d23e5..fbccea5 100644
Binary files a/bin/jalview/appletgui/PCAPanel.class and b/bin/jalview/appletgui/PCAPanel.class differ
diff --git a/bin/jalview/appletgui/PCAPanel.js b/bin/jalview/appletgui/PCAPanel.js
index 7813b4d..77168bf 100644
--- a/bin/jalview/appletgui/PCAPanel.js
+++ b/bin/jalview/appletgui/PCAPanel.js
@@ -1,253 +1,253 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.appletgui.EmbmenuFrame", "java.awt.event.ActionListener", "$.ItemListener", "awt2swing.Button", "$.CheckboxMenuItem", "$.Choice", "$.Label", "$.Menu", "$.MenuBar", "$.MenuItem", "$.Panel", "java.awt.BorderLayout", "$.FlowLayout"], "jalview.appletgui.PCAPanel", ["awt2swing.Frame", "jalview.appletgui.AlignFrame", "$.CutAndPasteTransfer", "$.RotatableCanvas", "jalview.bin.JalviewLite", "jalview.datamodel.Alignment", "jalview.util.MessageManager", "jalview.viewmodel.PCAModel", "java.awt.Color", "$.Font", "java.lang.Thread"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.rc = null;
-this.av = null;
-this.pcaModel = null;
-this.top = 0;
-this.jPanel2 = null;
-this.jLabel1 = null;
-this.jLabel2 = null;
-this.jLabel3 = null;
-this.xCombobox = null;
-this.yCombobox = null;
-this.zCombobox = null;
-this.resetButton = null;
-this.flowLayout1 = null;
-this.borderLayout1 = null;
-this.menuBar1 = null;
-this.menu1 = null;
-this.menu2 = null;
-this.calcSettings = null;
-this.labels = null;
-this.protSetting = null;
-this.nuclSetting = null;
-this.values = null;
-this.inputData = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "PCAPanel", jalview.appletgui.EmbmenuFrame, [Runnable, java.awt.event.ActionListener, java.awt.event.ItemListener]);
-Clazz.prepareFields (c$, function () {
-this.jPanel2 = new awt2swing.Panel ();
-this.jLabel1 = new awt2swing.Label ();
-this.jLabel2 = new awt2swing.Label ();
-this.jLabel3 = new awt2swing.Label ();
-this.xCombobox = new awt2swing.Choice ();
-this.yCombobox = new awt2swing.Choice ();
-this.zCombobox = new awt2swing.Choice ();
-this.resetButton = new awt2swing.Button ();
-this.flowLayout1 = new java.awt.FlowLayout ();
-this.borderLayout1 = new java.awt.BorderLayout ();
-this.menuBar1 = new awt2swing.MenuBar ();
-this.menu1 = new awt2swing.Menu ();
-this.menu2 = new awt2swing.Menu ();
-this.calcSettings = new awt2swing.Menu ();
-this.labels = new awt2swing.CheckboxMenuItem ();
-this.protSetting = new awt2swing.CheckboxMenuItem ();
-this.nuclSetting = new awt2swing.CheckboxMenuItem ();
-this.values = new awt2swing.MenuItem ();
-this.inputData = new awt2swing.MenuItem ();
-});
-Clazz.makeConstructor (c$,
-function (av) {
-Clazz.superConstructor (this, jalview.appletgui.PCAPanel, []);
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-for (var i = 1; i < 8; i++) {
-this.xCombobox.addItem ("dim " + i);
-this.yCombobox.addItem ("dim " + i);
-this.zCombobox.addItem ("dim " + i);
-}
-this.av = av;
-var selected = av.getSelectionGroup () != null && av.getSelectionGroup ().getSize () > 0;
-var seqstrings = av.getAlignmentView (selected);
-var nucleotide = av.getAlignment ().isNucleotide ();
-var seqs;
-if (!selected) {
-seqs = av.getAlignment ().getSequencesArray ();
-} else {
-seqs = av.getSelectionGroup ().getSequencesInOrder (av.getAlignment ());
-}var sq = seqstrings.getSequences ();
-var length = sq[0].getWidth ();
-for (var i = 0; i < seqs.length; i++) {
-if (sq[i].getWidth () != length) {
-System.out.println ("Sequences must be equal length for PCA analysis");
-return;
-}}
-this.pcaModel = new jalview.viewmodel.PCAModel (seqstrings, seqs, nucleotide);
-this.rc = new jalview.appletgui.RotatableCanvas (av);
-this.embedMenuIfNeeded (this.rc);
-this.add (this.rc, "Center");
-jalview.bin.JalviewLite.addFrame (this, jalview.util.MessageManager.getString ("label.principal_component_analysis"), 475, 400);
-var worker = new Thread (this);
-worker.start ();
-}, "jalview.appletgui.AlignViewport");
-Clazz.overrideMethod (c$, "run",
-function () {
-this.calcSettings.setEnabled (false);
-this.rc.setEnabled (false);
-try {
-this.nuclSetting.setState (this.pcaModel.isNucleotide ());
-this.protSetting.setState (!this.pcaModel.isNucleotide ());
-this.pcaModel.run ();
-this.xCombobox.select (new Integer (0));
-this.yCombobox.select (new Integer (1));
-this.zCombobox.select (new Integer (2));
-this.pcaModel.updateRc (this.rc);
-this.top = this.pcaModel.getTop ();
-} catch (x) {
-if (Clazz.exceptionOf (x, OutOfMemoryError)) {
-System.err.println ("Out of memory when calculating PCA.");
-return;
-} else {
-throw x;
-}
-}
-this.calcSettings.setEnabled (true);
-this.rc.setEnabled (true);
-this.rc.repaint ();
-this.repaint ();
-});
-Clazz.defineMethod (c$, "doDimensionChange",
-function () {
-if (this.top == 0) {
-return;
-}var dim1 = this.top - this.xCombobox.getSelectedIndex ();
-var dim2 = this.top - this.yCombobox.getSelectedIndex ();
-var dim3 = this.top - this.zCombobox.getSelectedIndex ();
-this.pcaModel.updateRcView (dim1, dim2, dim3);
-this.rc.img = null;
-this.rc.rotmat.setIdentity ();
-this.rc.initAxes ();
-this.rc.paint (this.rc.getGraphics ());
-});
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.inputData) {
-this.showOriginalData ();
-}if (evt.getSource () === this.resetButton) {
-this.xCombobox.select (new Integer (0));
-this.yCombobox.select (new Integer (1));
-this.zCombobox.select (new Integer (2));
-this.doDimensionChange ();
-}if (evt.getSource () === this.values) {
-this.values_actionPerformed ();
-}}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-if (evt.getSource () === this.xCombobox) {
-this.xCombobox_actionPerformed ();
-} else if (evt.getSource () === this.yCombobox) {
-this.yCombobox_actionPerformed ();
-} else if (evt.getSource () === this.zCombobox) {
-this.zCombobox_actionPerformed ();
-} else if (evt.getSource () === this.labels) {
-this.labels_itemStateChanged (evt);
-} else if (evt.getSource () === this.nuclSetting) {
-if (!this.pcaModel.isNucleotide ()) {
-this.pcaModel.setNucleotide (true);
- new Thread (this).start ();
-}} else if (evt.getSource () === this.protSetting) {
-if (this.pcaModel.isNucleotide ()) {
-this.pcaModel.setNucleotide (false);
- new Thread (this).start ();
-}}}, "java.awt.event.ItemEvent");
-Clazz.defineMethod (c$, "xCombobox_actionPerformed",
-function () {
-this.doDimensionChange ();
-});
-Clazz.defineMethod (c$, "yCombobox_actionPerformed",
-function () {
-this.doDimensionChange ();
-});
-Clazz.defineMethod (c$, "zCombobox_actionPerformed",
-function () {
-this.doDimensionChange ();
-});
-Clazz.defineMethod (c$, "values_actionPerformed",
-function () {
-var cap = new jalview.appletgui.CutAndPasteTransfer (false, null);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.pca_details"), 500, 500);
-cap.setText (this.pcaModel.getDetails ());
-});
-Clazz.defineMethod (c$, "showOriginalData",
-function () {
-var gc = '-';
-try {
-gc = this.av.getGapCharacter ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-;var alAndColsel = this.pcaModel.getSeqtrings ().getAlignmentAndColumnSelection (gc);
-if (alAndColsel != null && alAndColsel[0] != null) {
-var al = new jalview.datamodel.Alignment (alAndColsel[0]);
-var af = new jalview.appletgui.AlignFrame (al, this.av.applet, "Original Data for PCA", false);
-af.viewport.setHiddenColumns (alAndColsel[1]);
-}});
-Clazz.defineMethod (c$, "labels_itemStateChanged",
-function (itemEvent) {
-this.rc.showLabels (this.labels.getState ());
-}, "java.awt.event.ItemEvent");
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setLayout (this.borderLayout1);
-this.jPanel2.setLayout (this.flowLayout1);
-this.jLabel1.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.jLabel1.setText ("x=");
-this.jLabel2.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.jLabel2.setText ("y=");
-this.jLabel3.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.jLabel3.setText ("z=");
-this.jPanel2.setBackground (java.awt.Color.white);
-this.zCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.zCombobox.addItemListener (this);
-this.yCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.yCombobox.addItemListener (this);
-this.xCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.xCombobox.addItemListener (this);
-this.resetButton.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.resetButton.setLabel (jalview.util.MessageManager.getString ("action.reset"));
-this.resetButton.addActionListener (this);
-this.setMenuBar (this.menuBar1);
-this.menu1.setLabel (jalview.util.MessageManager.getString ("action.file"));
-this.menu2.setLabel (jalview.util.MessageManager.getString ("action.view"));
-this.calcSettings.setLabel (jalview.util.MessageManager.getString ("action.change_params"));
-this.labels.setLabel (jalview.util.MessageManager.getString ("label.labels"));
-this.labels.addItemListener (this);
-this.values.setLabel (jalview.util.MessageManager.getString ("label.output_values"));
-this.values.addActionListener (this);
-this.inputData.setLabel (jalview.util.MessageManager.getString ("label.input_data"));
-this.nuclSetting.setLabel (jalview.util.MessageManager.getString ("label.nucleotide_matrix"));
-this.nuclSetting.addItemListener (this);
-this.protSetting.setLabel (jalview.util.MessageManager.getString ("label.protein_matrix"));
-this.protSetting.addItemListener (this);
-this.add (this.jPanel2, "South");
-this.jPanel2.add (this.jLabel1, null);
-this.jPanel2.add (this.xCombobox, null);
-this.jPanel2.add (this.jLabel2, null);
-this.jPanel2.add (this.yCombobox, null);
-this.jPanel2.add (this.jLabel3, null);
-this.jPanel2.add (this.zCombobox, null);
-this.jPanel2.add (this.resetButton, null);
-this.menuBar1.add (this.menu1);
-this.menuBar1.add (this.menu2);
-this.menuBar1.add (this.calcSettings);
-this.menu2.add (this.labels);
-this.menu1.add (this.values);
-this.menu1.add (this.inputData);
-this.calcSettings.add (this.nuclSetting);
-this.calcSettings.add (this.protSetting);
-this.inputData.addActionListener (this);
-}, $fz.isPrivate = true, $fz));
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.appletgui.EmbmenuFrame", "java.awt.event.ActionListener", "$.ItemListener", "awt2swing.Button", "$.CheckboxMenuItem", "$.Choice", "$.Label", "$.Menu", "$.MenuBar", "$.MenuItem", "$.Panel", "java.awt.BorderLayout", "$.FlowLayout"], "jalview.appletgui.PCAPanel", ["awt2swing.Frame", "jalview.appletgui.AlignFrame", "$.CutAndPasteTransfer", "$.RotatableCanvas", "jalview.bin.JalviewLite", "jalview.datamodel.Alignment", "jalview.util.MessageManager", "jalview.viewmodel.PCAModel", "java.awt.Color", "$.Font", "java.lang.Thread"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.rc = null;
+this.av = null;
+this.pcaModel = null;
+this.top = 0;
+this.jPanel2 = null;
+this.jLabel1 = null;
+this.jLabel2 = null;
+this.jLabel3 = null;
+this.xCombobox = null;
+this.yCombobox = null;
+this.zCombobox = null;
+this.resetButton = null;
+this.flowLayout1 = null;
+this.borderLayout1 = null;
+this.menuBar1 = null;
+this.menu1 = null;
+this.menu2 = null;
+this.calcSettings = null;
+this.labels = null;
+this.protSetting = null;
+this.nuclSetting = null;
+this.values = null;
+this.inputData = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "PCAPanel", jalview.appletgui.EmbmenuFrame, [Runnable, java.awt.event.ActionListener, java.awt.event.ItemListener]);
+Clazz.prepareFields (c$, function () {
+this.jPanel2 = new awt2swing.Panel ();
+this.jLabel1 = new awt2swing.Label ();
+this.jLabel2 = new awt2swing.Label ();
+this.jLabel3 = new awt2swing.Label ();
+this.xCombobox = new awt2swing.Choice ();
+this.yCombobox = new awt2swing.Choice ();
+this.zCombobox = new awt2swing.Choice ();
+this.resetButton = new awt2swing.Button ();
+this.flowLayout1 = new java.awt.FlowLayout ();
+this.borderLayout1 = new java.awt.BorderLayout ();
+this.menuBar1 = new awt2swing.MenuBar ();
+this.menu1 = new awt2swing.Menu ();
+this.menu2 = new awt2swing.Menu ();
+this.calcSettings = new awt2swing.Menu ();
+this.labels = new awt2swing.CheckboxMenuItem ();
+this.protSetting = new awt2swing.CheckboxMenuItem ();
+this.nuclSetting = new awt2swing.CheckboxMenuItem ();
+this.values = new awt2swing.MenuItem ();
+this.inputData = new awt2swing.MenuItem ();
+});
+Clazz.makeConstructor (c$,
+function (av) {
+Clazz.superConstructor (this, jalview.appletgui.PCAPanel, []);
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+for (var i = 1; i < 8; i++) {
+this.xCombobox.addItem ("dim " + i);
+this.yCombobox.addItem ("dim " + i);
+this.zCombobox.addItem ("dim " + i);
+}
+this.av = av;
+var selected = av.getSelectionGroup () != null && av.getSelectionGroup ().getSize () > 0;
+var seqstrings = av.getAlignmentView (selected);
+var nucleotide = av.getAlignment ().isNucleotide ();
+var seqs;
+if (!selected) {
+seqs = av.getAlignment ().getSequencesArray ();
+} else {
+seqs = av.getSelectionGroup ().getSequencesInOrder (av.getAlignment ());
+}var sq = seqstrings.getSequences ();
+var length = sq[0].getWidth ();
+for (var i = 0; i < seqs.length; i++) {
+if (sq[i].getWidth () != length) {
+System.out.println ("Sequences must be equal length for PCA analysis");
+return;
+}}
+this.pcaModel = new jalview.viewmodel.PCAModel (seqstrings, seqs, nucleotide);
+this.rc = new jalview.appletgui.RotatableCanvas (av);
+this.embedMenuIfNeeded (this.rc);
+this.add (this.rc, "Center");
+jalview.bin.JalviewLite.addFrame (this, jalview.util.MessageManager.getString ("label.principal_component_analysis"), 475, 400);
+var worker = new Thread (this);
+worker.start ();
+}, "jalview.appletgui.AlignViewport");
+Clazz.overrideMethod (c$, "run",
+function () {
+this.calcSettings.setEnabled (false);
+this.rc.setEnabled (false);
+try {
+this.nuclSetting.setState (this.pcaModel.isNucleotide ());
+this.protSetting.setState (!this.pcaModel.isNucleotide ());
+this.pcaModel.run ();
+this.xCombobox.select (new Integer (0));
+this.yCombobox.select (new Integer (1));
+this.zCombobox.select (new Integer (2));
+this.pcaModel.updateRc (this.rc);
+this.top = this.pcaModel.getTop ();
+} catch (x) {
+if (Clazz.exceptionOf (x, OutOfMemoryError)) {
+System.err.println ("Out of memory when calculating PCA.");
+return;
+} else {
+throw x;
+}
+}
+this.calcSettings.setEnabled (true);
+this.rc.setEnabled (true);
+this.rc.repaint ();
+this.repaint ();
+});
+Clazz.defineMethod (c$, "doDimensionChange",
+function () {
+if (this.top == 0) {
+return;
+}var dim1 = this.top - this.xCombobox.getSelectedIndex ();
+var dim2 = this.top - this.yCombobox.getSelectedIndex ();
+var dim3 = this.top - this.zCombobox.getSelectedIndex ();
+this.pcaModel.updateRcView (dim1, dim2, dim3);
+this.rc.img = null;
+this.rc.rotmat.setIdentity ();
+this.rc.initAxes ();
+this.rc.paint (this.rc.getGraphics ());
+});
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.inputData) {
+this.showOriginalData ();
+}if (evt.getSource () === this.resetButton) {
+this.xCombobox.select (new Integer (0));
+this.yCombobox.select (new Integer (1));
+this.zCombobox.select (new Integer (2));
+this.doDimensionChange ();
+}if (evt.getSource () === this.values) {
+this.values_actionPerformed ();
+}}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+if (evt.getSource () === this.xCombobox) {
+this.xCombobox_actionPerformed ();
+} else if (evt.getSource () === this.yCombobox) {
+this.yCombobox_actionPerformed ();
+} else if (evt.getSource () === this.zCombobox) {
+this.zCombobox_actionPerformed ();
+} else if (evt.getSource () === this.labels) {
+this.labels_itemStateChanged (evt);
+} else if (evt.getSource () === this.nuclSetting) {
+if (!this.pcaModel.isNucleotide ()) {
+this.pcaModel.setNucleotide (true);
+ new Thread (this).start ();
+}} else if (evt.getSource () === this.protSetting) {
+if (this.pcaModel.isNucleotide ()) {
+this.pcaModel.setNucleotide (false);
+ new Thread (this).start ();
+}}}, "java.awt.event.ItemEvent");
+Clazz.defineMethod (c$, "xCombobox_actionPerformed",
+function () {
+this.doDimensionChange ();
+});
+Clazz.defineMethod (c$, "yCombobox_actionPerformed",
+function () {
+this.doDimensionChange ();
+});
+Clazz.defineMethod (c$, "zCombobox_actionPerformed",
+function () {
+this.doDimensionChange ();
+});
+Clazz.defineMethod (c$, "values_actionPerformed",
+function () {
+var cap = new jalview.appletgui.CutAndPasteTransfer (false, null);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, jalview.util.MessageManager.getString ("label.pca_details"), 500, 500);
+cap.setText (this.pcaModel.getDetails ());
+});
+Clazz.defineMethod (c$, "showOriginalData",
+function () {
+var gc = '-';
+try {
+gc = this.av.getGapCharacter ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+;var alAndColsel = this.pcaModel.getSeqtrings ().getAlignmentAndColumnSelection (gc);
+if (alAndColsel != null && alAndColsel[0] != null) {
+var al = new jalview.datamodel.Alignment (alAndColsel[0]);
+var af = new jalview.appletgui.AlignFrame (al, this.av.applet, "Original Data for PCA", false);
+af.viewport.setHiddenColumns (alAndColsel[1]);
+}});
+Clazz.defineMethod (c$, "labels_itemStateChanged",
+function (itemEvent) {
+this.rc.showLabels (this.labels.getState ());
+}, "java.awt.event.ItemEvent");
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setLayout (this.borderLayout1);
+this.jPanel2.setLayout (this.flowLayout1);
+this.jLabel1.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.jLabel1.setText ("x=");
+this.jLabel2.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.jLabel2.setText ("y=");
+this.jLabel3.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.jLabel3.setText ("z=");
+this.jPanel2.setBackground (java.awt.Color.white);
+this.zCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.zCombobox.addItemListener (this);
+this.yCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.yCombobox.addItemListener (this);
+this.xCombobox.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.xCombobox.addItemListener (this);
+this.resetButton.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.resetButton.setLabel (jalview.util.MessageManager.getString ("action.reset"));
+this.resetButton.addActionListener (this);
+this.setMenuBar (this.menuBar1);
+this.menu1.setLabel (jalview.util.MessageManager.getString ("action.file"));
+this.menu2.setLabel (jalview.util.MessageManager.getString ("action.view"));
+this.calcSettings.setLabel (jalview.util.MessageManager.getString ("action.change_params"));
+this.labels.setLabel (jalview.util.MessageManager.getString ("label.labels"));
+this.labels.addItemListener (this);
+this.values.setLabel (jalview.util.MessageManager.getString ("label.output_values"));
+this.values.addActionListener (this);
+this.inputData.setLabel (jalview.util.MessageManager.getString ("label.input_data"));
+this.nuclSetting.setLabel (jalview.util.MessageManager.getString ("label.nucleotide_matrix"));
+this.nuclSetting.addItemListener (this);
+this.protSetting.setLabel (jalview.util.MessageManager.getString ("label.protein_matrix"));
+this.protSetting.addItemListener (this);
+this.add (this.jPanel2, "South");
+this.jPanel2.add (this.jLabel1, null);
+this.jPanel2.add (this.xCombobox, null);
+this.jPanel2.add (this.jLabel2, null);
+this.jPanel2.add (this.yCombobox, null);
+this.jPanel2.add (this.jLabel3, null);
+this.jPanel2.add (this.zCombobox, null);
+this.jPanel2.add (this.resetButton, null);
+this.menuBar1.add (this.menu1);
+this.menuBar1.add (this.menu2);
+this.menuBar1.add (this.calcSettings);
+this.menu2.add (this.labels);
+this.menu1.add (this.values);
+this.menu1.add (this.inputData);
+this.calcSettings.add (this.nuclSetting);
+this.calcSettings.add (this.protSetting);
+this.inputData.addActionListener (this);
+}, $fz.isPrivate = true, $fz));
+});
diff --git a/bin/jalview/appletgui/PaintRefresher.class b/bin/jalview/appletgui/PaintRefresher.class
index 0086f7e..8d0e0cc 100644
Binary files a/bin/jalview/appletgui/PaintRefresher.class and b/bin/jalview/appletgui/PaintRefresher.class differ
diff --git a/bin/jalview/appletgui/PaintRefresher.js b/bin/jalview/appletgui/PaintRefresher.js
index 09c8d0a..7bd9686 100644
--- a/bin/jalview/appletgui/PaintRefresher.js
+++ b/bin/jalview/appletgui/PaintRefresher.js
@@ -1,126 +1,126 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (null, "jalview.appletgui.PaintRefresher", ["jalview.appletgui.AlignmentPanel", "java.util.Hashtable", "$.Vector"], function () {
-c$ = Clazz.declareType (jalview.appletgui, "PaintRefresher");
-c$.Register = Clazz.defineMethod (c$, "Register",
-function (comp, seqSetId) {
-if (jalview.appletgui.PaintRefresher.components == null) {
-jalview.appletgui.PaintRefresher.components = new java.util.Hashtable ();
-}if (jalview.appletgui.PaintRefresher.components.containsKey (seqSetId)) {
-var comps = jalview.appletgui.PaintRefresher.components.get (seqSetId);
-if (!comps.contains (comp)) {
-comps.addElement (comp);
-}} else {
-var vcoms = new java.util.Vector ();
-vcoms.addElement (comp);
-jalview.appletgui.PaintRefresher.components.put (seqSetId, vcoms);
-}}, "java.awt.Component,~S");
-c$.RemoveComponent = Clazz.defineMethod (c$, "RemoveComponent",
-function (comp) {
-if (jalview.appletgui.PaintRefresher.components == null) {
-return;
-}var en = jalview.appletgui.PaintRefresher.components.keys ();
-while (en.hasMoreElements ()) {
-var id = en.nextElement ().toString ();
-var comps = jalview.appletgui.PaintRefresher.components.get (id);
-comps.removeElement (comp);
-if (comps.size () == 0) {
-jalview.appletgui.PaintRefresher.components.remove (id);
-}}
-}, "java.awt.Component");
-c$.Refresh = Clazz.defineMethod (c$, "Refresh",
-function (source, id) {
-jalview.appletgui.PaintRefresher.Refresh (source, id, false, false);
-}, "java.awt.Component,~S");
-c$.Refresh = Clazz.defineMethod (c$, "Refresh",
-function (source, id, alignmentChanged, validateSequences) {
-if (jalview.appletgui.PaintRefresher.components == null) {
-return;
-}var comp;
-var comps = jalview.appletgui.PaintRefresher.components.get (id);
-if (comps == null) {
-return;
-}var e = comps.elements ();
-while (e.hasMoreElements ()) {
-comp = e.nextElement ();
-if (comp === source) {
-continue;
-}if (!comp.isValid ()) {
-comps.removeElement (comp);
-} else if (validateSequences && Clazz.instanceOf (comp, jalview.appletgui.AlignmentPanel) && Clazz.instanceOf (source, jalview.appletgui.AlignmentPanel)) {
-jalview.appletgui.PaintRefresher.validateSequences ((source).av.getAlignment (), (comp).av.getAlignment ());
-}if (Clazz.instanceOf (comp, jalview.appletgui.AlignmentPanel) && alignmentChanged) {
-(comp).alignmentChanged ();
-}comp.repaint ();
-}
-}, "java.awt.Component,~S,~B,~B");
-c$.validateSequences = Clazz.defineMethod (c$, "validateSequences",
-function (source, comp) {
-var a1;
-if (source.getHiddenSequences ().getSize () > 0) {
-a1 = source.getHiddenSequences ().getFullAlignment ().getSequencesArray ();
-} else {
-a1 = source.getSequencesArray ();
-}var a2;
-if (comp.getHiddenSequences ().getSize () > 0) {
-a2 = comp.getHiddenSequences ().getFullAlignment ().getSequencesArray ();
-} else {
-a2 = comp.getSequencesArray ();
-}var i;
-var iSize = a1.length;
-var j;
-var jSize = a2.length;
-if (iSize == jSize) {
-return;
-}var exists = false;
-for (i = 0; i < iSize; i++) {
-exists = false;
-for (j = 0; j < jSize; j++) {
-if (a2[j] === a1[i]) {
-exists = true;
-break;
-}}
-if (!exists) {
-if (i < comp.getHeight ()) {
-var alsq;
-{
-alsq.add (i, a1[i]);
-}} else {
-comp.addSequence (a1[i]);
-}if (comp.getHiddenSequences ().getSize () > 0) {
-a2 = comp.getHiddenSequences ().getFullAlignment ().getSequencesArray ();
-} else {
-a2 = comp.getSequencesArray ();
-}jSize = a2.length;
-}}
-iSize = a1.length;
-jSize = a2.length;
-for (j = 0; j < jSize; j++) {
-exists = false;
-for (i = 0; i < iSize; i++) {
-if (a2[j] === a1[i]) {
-exists = true;
-break;
-}}
-if (!exists) {
-comp.deleteSequence (a2[j]);
-}}
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
-c$.getAssociatedPanels = Clazz.defineMethod (c$, "getAssociatedPanels",
-function (id) {
-var comps = jalview.appletgui.PaintRefresher.components.get (id);
-var tmp = new java.util.Vector ();
-var i;
-var iSize = comps.size ();
-for (i = 0; i < iSize; i++) {
-if (Clazz.instanceOf (comps.elementAt (i), jalview.appletgui.AlignmentPanel)) {
-tmp.addElement (comps.elementAt (i));
-}}
-var result = new Array (tmp.size ());
-for (var ix = 0; ix < result.length; ix++) {
-result[ix] = tmp.elementAt (ix);
-}
-return result;
-}, "~S");
-Clazz.defineStatics (c$,
-"components", null);
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (null, "jalview.appletgui.PaintRefresher", ["jalview.appletgui.AlignmentPanel", "java.util.Hashtable", "$.Vector"], function () {
+c$ = Clazz.declareType (jalview.appletgui, "PaintRefresher");
+c$.Register = Clazz.defineMethod (c$, "Register",
+function (comp, seqSetId) {
+if (jalview.appletgui.PaintRefresher.components == null) {
+jalview.appletgui.PaintRefresher.components = new java.util.Hashtable ();
+}if (jalview.appletgui.PaintRefresher.components.containsKey (seqSetId)) {
+var comps = jalview.appletgui.PaintRefresher.components.get (seqSetId);
+if (!comps.contains (comp)) {
+comps.addElement (comp);
+}} else {
+var vcoms = new java.util.Vector ();
+vcoms.addElement (comp);
+jalview.appletgui.PaintRefresher.components.put (seqSetId, vcoms);
+}}, "java.awt.Component,~S");
+c$.RemoveComponent = Clazz.defineMethod (c$, "RemoveComponent",
+function (comp) {
+if (jalview.appletgui.PaintRefresher.components == null) {
+return;
+}var en = jalview.appletgui.PaintRefresher.components.keys ();
+while (en.hasMoreElements ()) {
+var id = en.nextElement ().toString ();
+var comps = jalview.appletgui.PaintRefresher.components.get (id);
+comps.removeElement (comp);
+if (comps.size () == 0) {
+jalview.appletgui.PaintRefresher.components.remove (id);
+}}
+}, "java.awt.Component");
+c$.Refresh = Clazz.defineMethod (c$, "Refresh",
+function (source, id) {
+jalview.appletgui.PaintRefresher.Refresh (source, id, false, false);
+}, "java.awt.Component,~S");
+c$.Refresh = Clazz.defineMethod (c$, "Refresh",
+function (source, id, alignmentChanged, validateSequences) {
+if (jalview.appletgui.PaintRefresher.components == null) {
+return;
+}var comp;
+var comps = jalview.appletgui.PaintRefresher.components.get (id);
+if (comps == null) {
+return;
+}var e = comps.elements ();
+while (e.hasMoreElements ()) {
+comp = e.nextElement ();
+if (comp === source) {
+continue;
+}if (!comp.isValid ()) {
+comps.removeElement (comp);
+} else if (validateSequences && Clazz.instanceOf (comp, jalview.appletgui.AlignmentPanel) && Clazz.instanceOf (source, jalview.appletgui.AlignmentPanel)) {
+jalview.appletgui.PaintRefresher.validateSequences ((source).av.getAlignment (), (comp).av.getAlignment ());
+}if (Clazz.instanceOf (comp, jalview.appletgui.AlignmentPanel) && alignmentChanged) {
+(comp).alignmentChanged ();
+}comp.repaint ();
+}
+}, "java.awt.Component,~S,~B,~B");
+c$.validateSequences = Clazz.defineMethod (c$, "validateSequences",
+function (source, comp) {
+var a1;
+if (source.getHiddenSequences ().getSize () > 0) {
+a1 = source.getHiddenSequences ().getFullAlignment ().getSequencesArray ();
+} else {
+a1 = source.getSequencesArray ();
+}var a2;
+if (comp.getHiddenSequences ().getSize () > 0) {
+a2 = comp.getHiddenSequences ().getFullAlignment ().getSequencesArray ();
+} else {
+a2 = comp.getSequencesArray ();
+}var i;
+var iSize = a1.length;
+var j;
+var jSize = a2.length;
+if (iSize == jSize) {
+return;
+}var exists = false;
+for (i = 0; i < iSize; i++) {
+exists = false;
+for (j = 0; j < jSize; j++) {
+if (a2[j] === a1[i]) {
+exists = true;
+break;
+}}
+if (!exists) {
+if (i < comp.getHeight ()) {
+var alsq;
+{
+alsq.add (i, a1[i]);
+}} else {
+comp.addSequence (a1[i]);
+}if (comp.getHiddenSequences ().getSize () > 0) {
+a2 = comp.getHiddenSequences ().getFullAlignment ().getSequencesArray ();
+} else {
+a2 = comp.getSequencesArray ();
+}jSize = a2.length;
+}}
+iSize = a1.length;
+jSize = a2.length;
+for (j = 0; j < jSize; j++) {
+exists = false;
+for (i = 0; i < iSize; i++) {
+if (a2[j] === a1[i]) {
+exists = true;
+break;
+}}
+if (!exists) {
+comp.deleteSequence (a2[j]);
+}}
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentI");
+c$.getAssociatedPanels = Clazz.defineMethod (c$, "getAssociatedPanels",
+function (id) {
+var comps = jalview.appletgui.PaintRefresher.components.get (id);
+var tmp = new java.util.Vector ();
+var i;
+var iSize = comps.size ();
+for (i = 0; i < iSize; i++) {
+if (Clazz.instanceOf (comps.elementAt (i), jalview.appletgui.AlignmentPanel)) {
+tmp.addElement (comps.elementAt (i));
+}}
+var result = new Array (tmp.size ());
+for (var ix = 0; ix < result.length; ix++) {
+result[ix] = tmp.elementAt (ix);
+}
+return result;
+}, "~S");
+Clazz.defineStatics (c$,
+"components", null);
+});
diff --git a/bin/jalview/appletgui/PairwiseAlignPanel.class b/bin/jalview/appletgui/PairwiseAlignPanel.class
index 22c33f9..202bf5c 100644
Binary files a/bin/jalview/appletgui/PairwiseAlignPanel.class and b/bin/jalview/appletgui/PairwiseAlignPanel.class differ
diff --git a/bin/jalview/appletgui/PairwiseAlignPanel.js b/bin/jalview/appletgui/PairwiseAlignPanel.js
index ddb1948..e91c56d 100644
--- a/bin/jalview/appletgui/PairwiseAlignPanel.js
+++ b/bin/jalview/appletgui/PairwiseAlignPanel.js
@@ -1,100 +1,100 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "awt2swing.Button", "$.ScrollPane", "$.TextArea", "java.awt.BorderLayout", "java.util.Vector"], "jalview.appletgui.PairwiseAlignPanel", ["jalview.analysis.AlignSeq", "jalview.appletgui.AlignFrame", "jalview.datamodel.Alignment", "jalview.util.Format", "$.MessageManager", "java.awt.Font"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sequences = null;
-this.ap = null;
-this.scrollPane = null;
-this.textarea = null;
-this.viewInEditorButton = null;
-this.jPanel1 = null;
-this.borderLayout1 = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "PairwiseAlignPanel", awt2swing.Panel, java.awt.event.ActionListener);
-Clazz.prepareFields (c$, function () {
-this.sequences = new java.util.Vector ();
-this.scrollPane = new awt2swing.ScrollPane ();
-this.textarea = new awt2swing.TextArea ();
-this.viewInEditorButton = new awt2swing.Button ();
-this.jPanel1 = new awt2swing.Panel ();
-this.borderLayout1 = new java.awt.BorderLayout ();
-});
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.PairwiseAlignPanel, []);
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.ap = ap;
-this.sequences = new java.util.Vector ();
-var seqs;
-var seqStrings = ap.av.getViewAsString (true);
-if (ap.av.getSelectionGroup () == null) {
-seqs = ap.av.getAlignment ().getSequencesArray ();
-} else {
-seqs = ap.av.getSelectionGroup ().getSequencesInOrder (ap.av.getAlignment ());
-}var scores = Clazz.newFloatArray (seqs.length, seqs.length, 0);
-var totscore = 0;
-var count = ap.av.getSelectionGroup ().getSize ();
-var type = (ap.av.getAlignment ().isNucleotide ()) ? "dna" : "pep";
-var seq;
-for (var i = 1; i < count; i++) {
-for (var j = 0; j < i; j++) {
-var as = new jalview.analysis.AlignSeq (seqs[i], seqStrings[i], seqs[j], seqStrings[j], type);
-if (as.s1str.length == 0 || as.s2str.length == 0) {
-continue;
-}as.calcScoreMatrix ();
-as.traceAlignment ();
-as.printAlignment (System.out);
-scores[i][j] = as.getMaxScore () / as.getASeq1 ().length;
-totscore = totscore + scores[i][j];
-this.textarea.append (as.getOutput ());
-this.sequences.add (as.getAlignedSeq1 ());
-this.sequences.add (as.getAlignedSeq1 ());
-}
-}
-if (count > 2) {
-System.out.println ("Pairwise alignment scaled similarity score matrix\n");
-for (var i = 0; i < count; i++) {
-jalview.util.Format.print (System.out, "%s \n", ("" + i) + " " + seqs[i].getName ());
-}
-System.out.println ("\n");
-for (var i = 0; i < count; i++) {
-for (var j = 0; j < i; j++) {
-jalview.util.Format.printDouble (System.out, "%7.3f", scores[i][j] / totscore);
-}
-}
-System.out.println ("\n");
-}}, "jalview.appletgui.AlignmentPanel");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.viewInEditorButton) {
-this.viewInEditorButton_actionPerformed ();
-}}, "java.awt.event.ActionEvent");
-Clazz.defineMethod (c$, "viewInEditorButton_actionPerformed",
-function () {
-var seq = new Array (this.sequences.size ());
-for (var i = 0; i < this.sequences.size (); i++) {
-seq[i] = this.sequences.elementAt (i);
-}
- new jalview.appletgui.AlignFrame ( new jalview.datamodel.Alignment (seq), this.ap.av.applet, "Pairwise Aligned Sequences", false);
-});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setLayout (this.borderLayout1);
-this.textarea.setFont ( new java.awt.Font ("Monospaced", 0, 12));
-this.textarea.setText ("");
-this.viewInEditorButton.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.viewInEditorButton.setLabel (jalview.util.MessageManager.getString ("label.view_alignment_editor"));
-this.viewInEditorButton.addActionListener (this);
-this.add (this.scrollPane, "Center");
-this.scrollPane.add (this.textarea);
-this.add (this.jPanel1, "South");
-this.jPanel1.add (this.viewInEditorButton, null);
-}, $fz.isPrivate = true, $fz));
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "awt2swing.Button", "$.ScrollPane", "$.TextArea", "java.awt.BorderLayout", "java.util.Vector"], "jalview.appletgui.PairwiseAlignPanel", ["jalview.analysis.AlignSeq", "jalview.appletgui.AlignFrame", "jalview.datamodel.Alignment", "jalview.util.Format", "$.MessageManager", "java.awt.Font"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sequences = null;
+this.ap = null;
+this.scrollPane = null;
+this.textarea = null;
+this.viewInEditorButton = null;
+this.jPanel1 = null;
+this.borderLayout1 = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "PairwiseAlignPanel", awt2swing.Panel, java.awt.event.ActionListener);
+Clazz.prepareFields (c$, function () {
+this.sequences = new java.util.Vector ();
+this.scrollPane = new awt2swing.ScrollPane ();
+this.textarea = new awt2swing.TextArea ();
+this.viewInEditorButton = new awt2swing.Button ();
+this.jPanel1 = new awt2swing.Panel ();
+this.borderLayout1 = new java.awt.BorderLayout ();
+});
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.PairwiseAlignPanel, []);
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.ap = ap;
+this.sequences = new java.util.Vector ();
+var seqs;
+var seqStrings = ap.av.getViewAsString (true);
+if (ap.av.getSelectionGroup () == null) {
+seqs = ap.av.getAlignment ().getSequencesArray ();
+} else {
+seqs = ap.av.getSelectionGroup ().getSequencesInOrder (ap.av.getAlignment ());
+}var scores = Clazz.newFloatArray (seqs.length, seqs.length, 0);
+var totscore = 0;
+var count = ap.av.getSelectionGroup ().getSize ();
+var type = (ap.av.getAlignment ().isNucleotide ()) ? "dna" : "pep";
+var seq;
+for (var i = 1; i < count; i++) {
+for (var j = 0; j < i; j++) {
+var as = new jalview.analysis.AlignSeq (seqs[i], seqStrings[i], seqs[j], seqStrings[j], type);
+if (as.s1str.length == 0 || as.s2str.length == 0) {
+continue;
+}as.calcScoreMatrix ();
+as.traceAlignment ();
+as.printAlignment (System.out);
+scores[i][j] = as.getMaxScore () / as.getASeq1 ().length;
+totscore = totscore + scores[i][j];
+this.textarea.append (as.getOutput ());
+this.sequences.add (as.getAlignedSeq1 ());
+this.sequences.add (as.getAlignedSeq1 ());
+}
+}
+if (count > 2) {
+System.out.println ("Pairwise alignment scaled similarity score matrix\n");
+for (var i = 0; i < count; i++) {
+jalview.util.Format.print (System.out, "%s \n", ("" + i) + " " + seqs[i].getName ());
+}
+System.out.println ("\n");
+for (var i = 0; i < count; i++) {
+for (var j = 0; j < i; j++) {
+jalview.util.Format.printDouble (System.out, "%7.3f", scores[i][j] / totscore);
+}
+}
+System.out.println ("\n");
+}}, "jalview.appletgui.AlignmentPanel");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.viewInEditorButton) {
+this.viewInEditorButton_actionPerformed ();
+}}, "java.awt.event.ActionEvent");
+Clazz.defineMethod (c$, "viewInEditorButton_actionPerformed",
+function () {
+var seq = new Array (this.sequences.size ());
+for (var i = 0; i < this.sequences.size (); i++) {
+seq[i] = this.sequences.elementAt (i);
+}
+ new jalview.appletgui.AlignFrame ( new jalview.datamodel.Alignment (seq), this.ap.av.applet, "Pairwise Aligned Sequences", false);
+});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setLayout (this.borderLayout1);
+this.textarea.setFont ( new java.awt.Font ("Monospaced", 0, 12));
+this.textarea.setText ("");
+this.viewInEditorButton.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.viewInEditorButton.setLabel (jalview.util.MessageManager.getString ("label.view_alignment_editor"));
+this.viewInEditorButton.addActionListener (this);
+this.add (this.scrollPane, "Center");
+this.scrollPane.add (this.textarea);
+this.add (this.jPanel1, "South");
+this.jPanel1.add (this.viewInEditorButton, null);
+}, $fz.isPrivate = true, $fz));
+});
diff --git a/bin/jalview/appletgui/RedundancyPanel.js b/bin/jalview/appletgui/RedundancyPanel.js
index f6b850d..647ac1b 100644
--- a/bin/jalview/appletgui/RedundancyPanel.js
+++ b/bin/jalview/appletgui/RedundancyPanel.js
@@ -1,165 +1,165 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.appletgui.SliderPanel", "java.awt.event.WindowListener", "java.util.Stack"], "jalview.appletgui.RedundancyPanel", ["awt2swing.Frame", "jalview.analysis.AlignSeq", "jalview.appletgui.PaintRefresher", "jalview.bin.JalviewLite", "jalview.commands.EditCommand", "jalview.util.MessageManager", "java.awt.event.AdjustmentListener", "java.lang.Thread", "java.util.ArrayList", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.historyList = null;
-this.redundancy = null;
-this.originalSequences = null;
-this.frame = null;
-this.redundantSeqs = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "RedundancyPanel", jalview.appletgui.SliderPanel, [Runnable, java.awt.event.WindowListener]);
-Clazz.prepareFields (c$, function () {
-this.historyList = new java.util.Stack ();
-});
-Clazz.makeConstructor (c$,
-function (ap) {
-Clazz.superConstructor (this, jalview.appletgui.RedundancyPanel, [ap, 0, false, null]);
-this.redundantSeqs = new java.util.Vector ();
-this.ap = ap;
-this.undoButton.setVisible (true);
-this.applyButton.setVisible (true);
-this.allGroupsCheck.setVisible (false);
-this.label.setText (jalview.util.MessageManager.getString ("label.enter_redundancy_threshold"));
-this.valueField.setText ("100");
-this.slider.setVisibleAmount (1);
-this.slider.setMinimum (0);
-this.slider.setMaximum (100 + this.slider.getVisibleAmount ());
-this.slider.setValue (100);
-this.slider.addAdjustmentListener (((Clazz.isClassDefined ("jalview.appletgui.RedundancyPanel$1") ? 0 : jalview.appletgui.RedundancyPanel.$RedundancyPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.RedundancyPanel$1, this, null)));
-this.frame = new awt2swing.Frame ();
-this.frame.add (this);
-jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.redundancy_threshold_selection"), 400, 100);
-this.frame.addWindowListener (this);
-var worker = new Thread (this);
-worker.start ();
-}, "jalview.appletgui.AlignmentPanel");
-Clazz.overrideMethod (c$, "run",
-function () {
-this.label.setText (jalview.util.MessageManager.getString ("label.calculating"));
-this.slider.setVisible (false);
-this.applyButton.setEnabled (false);
-this.valueField.setVisible (false);
-this.validate ();
-var omitHidden = null;
-var sg = this.ap.av.getSelectionGroup ();
-var height;
-var start;
-var end;
-if ((sg != null) && (sg.getSize () >= 1)) {
-this.originalSequences = sg.getSequencesInOrder (this.ap.av.getAlignment ());
-start = sg.getStartRes ();
-end = sg.getEndRes ();
-} else {
-this.originalSequences = this.ap.av.getAlignment ().getSequencesArray ();
-start = 0;
-end = this.ap.av.getAlignment ().getWidth ();
-}height = this.originalSequences.length;
-this.redundancy = jalview.analysis.AlignSeq.computeRedundancyMatrix (this.originalSequences, omitHidden, start, end, false);
-this.label.setText (jalview.util.MessageManager.getString ("label.enter_redundancy_threshold"));
-this.slider.setVisible (true);
-this.applyButton.setEnabled (true);
-this.valueField.setVisible (true);
-this.validate ();
-this.sliderValueChanged ();
-});
-Clazz.defineMethod (c$, "sliderValueChanged",
-function () {
-if (this.redundancy == null) {
-return;
-}var value = this.slider.getValue ();
-var redundantSequences = new java.util.ArrayList ();
-for (var i = 0; i < this.redundancy.length; i++) {
-if (value <= this.redundancy[i]) {
-redundantSequences.add (this.originalSequences[i]);
-}}
-this.ap.idPanel.idCanvas.setHighlighted (redundantSequences);
-jalview.appletgui.PaintRefresher.Refresh (this, this.ap.av.getSequenceSetId (), true, true);
-});
-Clazz.overrideMethod (c$, "applyButton_actionPerformed",
-function () {
-var del = new java.util.Vector ();
-this.undoButton.setEnabled (true);
-var value = this.slider.getValue ();
-var sg = this.ap.av.getSelectionGroup ();
-for (var i = 0; i < this.redundancy.length; i++) {
-if (value <= this.redundancy[i]) {
-del.addElement (this.originalSequences[i]);
-}}
-if (del.size () > 0) {
-var deleted = new Array (del.size ());
-var width = 0;
-for (var i = 0; i < del.size (); i++) {
-deleted[i] = del.elementAt (i);
-if (deleted[i].getLength () > width) {
-width = deleted[i].getLength ();
-}}
-var cut = new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("action.remove_redundancy"), jalview.commands.EditCommand.Action.CUT, deleted, 0, width, this.ap.av.getAlignment ());
-var alignment = this.ap.av.getAlignment ();
-for (var i = 0; i < del.size (); i++) {
-alignment.deleteSequence (deleted[i]);
-if (sg != null) {
-sg.deleteSequence (deleted[i], false);
-}}
-this.historyList.push (cut);
-this.ap.alignFrame.addHistoryItem (cut);
-jalview.appletgui.PaintRefresher.Refresh (this, this.ap.av.getSequenceSetId (), true, true);
-this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
-}});
-Clazz.overrideMethod (c$, "undoButton_actionPerformed",
-function () {
-var command = this.historyList.pop ();
-command.undoCommand (null);
-if (this.ap.av.getHistoryList ().contains (command)) {
-this.ap.av.getHistoryList ().remove (command);
-this.ap.alignFrame.updateEditMenuBar ();
-this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
-}this.ap.paintAlignment (true);
-if (this.historyList.size () == 0) {
-this.undoButton.setEnabled (false);
-}});
-Clazz.defineMethod (c$, "valueField_actionPerformed",
-function (e) {
-try {
-var i = Integer.parseInt (this.valueField.getText ());
-this.slider.setValue (i);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-this.valueField.setText (this.slider.getValue () + "");
-} else {
-throw ex;
-}
-}
-}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "windowOpened",
-function (evt) {
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowClosing",
-function (evt) {
-this.ap.idPanel.idCanvas.setHighlighted (null);
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowClosed",
-function (evt) {
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowActivated",
-function (evt) {
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowDeactivated",
-function (evt) {
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowIconified",
-function (evt) {
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowDeiconified",
-function (evt) {
-}, "java.awt.event.WindowEvent");
-c$.$RedundancyPanel$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "RedundancyPanel$1", null, java.awt.event.AdjustmentListener);
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-this.b$["jalview.appletgui.RedundancyPanel"].valueField.setText (this.b$["jalview.appletgui.RedundancyPanel"].slider.getValue () + "");
-this.b$["jalview.appletgui.RedundancyPanel"].sliderValueChanged ();
-}, "java.awt.event.AdjustmentEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.appletgui.SliderPanel", "java.awt.event.WindowListener", "java.util.Stack"], "jalview.appletgui.RedundancyPanel", ["awt2swing.Frame", "jalview.analysis.AlignSeq", "jalview.appletgui.PaintRefresher", "jalview.bin.JalviewLite", "jalview.commands.EditCommand", "jalview.util.MessageManager", "java.awt.event.AdjustmentListener", "java.lang.Thread", "java.util.ArrayList", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.historyList = null;
+this.redundancy = null;
+this.originalSequences = null;
+this.frame = null;
+this.redundantSeqs = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "RedundancyPanel", jalview.appletgui.SliderPanel, [Runnable, java.awt.event.WindowListener]);
+Clazz.prepareFields (c$, function () {
+this.historyList = new java.util.Stack ();
+});
+Clazz.makeConstructor (c$,
+function (ap) {
+Clazz.superConstructor (this, jalview.appletgui.RedundancyPanel, [ap, 0, false, null]);
+this.redundantSeqs = new java.util.Vector ();
+this.ap = ap;
+this.undoButton.setVisible (true);
+this.applyButton.setVisible (true);
+this.allGroupsCheck.setVisible (false);
+this.label.setText (jalview.util.MessageManager.getString ("label.enter_redundancy_threshold"));
+this.valueField.setText ("100");
+this.slider.setVisibleAmount (1);
+this.slider.setMinimum (0);
+this.slider.setMaximum (100 + this.slider.getVisibleAmount ());
+this.slider.setValue (100);
+this.slider.addAdjustmentListener (((Clazz.isClassDefined ("jalview.appletgui.RedundancyPanel$1") ? 0 : jalview.appletgui.RedundancyPanel.$RedundancyPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.RedundancyPanel$1, this, null)));
+this.frame = new awt2swing.Frame ();
+this.frame.add (this);
+jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.redundancy_threshold_selection"), 400, 100);
+this.frame.addWindowListener (this);
+var worker = new Thread (this);
+worker.start ();
+}, "jalview.appletgui.AlignmentPanel");
+Clazz.overrideMethod (c$, "run",
+function () {
+this.label.setText (jalview.util.MessageManager.getString ("label.calculating"));
+this.slider.setVisible (false);
+this.applyButton.setEnabled (false);
+this.valueField.setVisible (false);
+this.validate ();
+var omitHidden = null;
+var sg = this.ap.av.getSelectionGroup ();
+var height;
+var start;
+var end;
+if ((sg != null) && (sg.getSize () >= 1)) {
+this.originalSequences = sg.getSequencesInOrder (this.ap.av.getAlignment ());
+start = sg.getStartRes ();
+end = sg.getEndRes ();
+} else {
+this.originalSequences = this.ap.av.getAlignment ().getSequencesArray ();
+start = 0;
+end = this.ap.av.getAlignment ().getWidth ();
+}height = this.originalSequences.length;
+this.redundancy = jalview.analysis.AlignSeq.computeRedundancyMatrix (this.originalSequences, omitHidden, start, end, false);
+this.label.setText (jalview.util.MessageManager.getString ("label.enter_redundancy_threshold"));
+this.slider.setVisible (true);
+this.applyButton.setEnabled (true);
+this.valueField.setVisible (true);
+this.validate ();
+this.sliderValueChanged ();
+});
+Clazz.defineMethod (c$, "sliderValueChanged",
+function () {
+if (this.redundancy == null) {
+return;
+}var value = this.slider.getValue ();
+var redundantSequences = new java.util.ArrayList ();
+for (var i = 0; i < this.redundancy.length; i++) {
+if (value <= this.redundancy[i]) {
+redundantSequences.add (this.originalSequences[i]);
+}}
+this.ap.idPanel.idCanvas.setHighlighted (redundantSequences);
+jalview.appletgui.PaintRefresher.Refresh (this, this.ap.av.getSequenceSetId (), true, true);
+});
+Clazz.overrideMethod (c$, "applyButton_actionPerformed",
+function () {
+var del = new java.util.Vector ();
+this.undoButton.setEnabled (true);
+var value = this.slider.getValue ();
+var sg = this.ap.av.getSelectionGroup ();
+for (var i = 0; i < this.redundancy.length; i++) {
+if (value <= this.redundancy[i]) {
+del.addElement (this.originalSequences[i]);
+}}
+if (del.size () > 0) {
+var deleted = new Array (del.size ());
+var width = 0;
+for (var i = 0; i < del.size (); i++) {
+deleted[i] = del.elementAt (i);
+if (deleted[i].getLength () > width) {
+width = deleted[i].getLength ();
+}}
+var cut = new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("action.remove_redundancy"), jalview.commands.EditCommand.Action.CUT, deleted, 0, width, this.ap.av.getAlignment ());
+var alignment = this.ap.av.getAlignment ();
+for (var i = 0; i < del.size (); i++) {
+alignment.deleteSequence (deleted[i]);
+if (sg != null) {
+sg.deleteSequence (deleted[i], false);
+}}
+this.historyList.push (cut);
+this.ap.alignFrame.addHistoryItem (cut);
+jalview.appletgui.PaintRefresher.Refresh (this, this.ap.av.getSequenceSetId (), true, true);
+this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
+}});
+Clazz.overrideMethod (c$, "undoButton_actionPerformed",
+function () {
+var command = this.historyList.pop ();
+command.undoCommand (null);
+if (this.ap.av.getHistoryList ().contains (command)) {
+this.ap.av.getHistoryList ().remove (command);
+this.ap.alignFrame.updateEditMenuBar ();
+this.ap.av.firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
+}this.ap.paintAlignment (true);
+if (this.historyList.size () == 0) {
+this.undoButton.setEnabled (false);
+}});
+Clazz.defineMethod (c$, "valueField_actionPerformed",
+function (e) {
+try {
+var i = Integer.parseInt (this.valueField.getText ());
+this.slider.setValue (i);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+this.valueField.setText (this.slider.getValue () + "");
+} else {
+throw ex;
+}
+}
+}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "windowOpened",
+function (evt) {
+}, "java.awt.event.WindowEvent");
+Clazz.overrideMethod (c$, "windowClosing",
+function (evt) {
+this.ap.idPanel.idCanvas.setHighlighted (null);
+}, "java.awt.event.WindowEvent");
+Clazz.overrideMethod (c$, "windowClosed",
+function (evt) {
+}, "java.awt.event.WindowEvent");
+Clazz.overrideMethod (c$, "windowActivated",
+function (evt) {
+}, "java.awt.event.WindowEvent");
+Clazz.overrideMethod (c$, "windowDeactivated",
+function (evt) {
+}, "java.awt.event.WindowEvent");
+Clazz.overrideMethod (c$, "windowIconified",
+function (evt) {
+}, "java.awt.event.WindowEvent");
+Clazz.overrideMethod (c$, "windowDeiconified",
+function (evt) {
+}, "java.awt.event.WindowEvent");
+c$.$RedundancyPanel$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "RedundancyPanel$1", null, java.awt.event.AdjustmentListener);
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+this.b$["jalview.appletgui.RedundancyPanel"].valueField.setText (this.b$["jalview.appletgui.RedundancyPanel"].slider.getValue () + "");
+this.b$["jalview.appletgui.RedundancyPanel"].sliderValueChanged ();
+}, "java.awt.event.AdjustmentEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/RotatableCanvas.js b/bin/jalview/appletgui/RotatableCanvas.js
index 0bb0b4a..5e61dea 100644
--- a/bin/jalview/appletgui/RotatableCanvas.js
+++ b/bin/jalview/appletgui/RotatableCanvas.js
@@ -1,371 +1,371 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "jalview.api.RotatableCanvasI", "java.awt.event.KeyListener", "$.MouseListener", "$.MouseMotionListener", "jalview.math.RotatableMatrix"], "jalview.appletgui.RotatableCanvas", ["jalview.appletgui.PaintRefresher", "jalview.datamodel.SequenceGroup", "jalview.util.Format", "$.MessageManager", "java.awt.Color", "$.Dimension", "$.Font"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.idmat = null;
-this.objmat = null;
-this.rotmat = null;
-this.tooltip = null;
-this.toolx = 0;
-this.tooly = 0;
-this.$drawAxes = true;
-this.omx = 0;
-this.mx = 0;
-this.omy = 0;
-this.my = 0;
-this.img = null;
-this.ig = null;
-this.prefsize = null;
-this.centre = null;
-this.$width = null;
-this.max = null;
-this.min = null;
-this.maxwidth = 0;
-this.scale = 0;
-this.npoint = 0;
-this.points = null;
-this.orig = null;
-this.axes = null;
-this.startx = 0;
-this.starty = 0;
-this.lastx = 0;
-this.lasty = 0;
-this.rectx1 = 0;
-this.recty1 = 0;
-this.rectx2 = 0;
-this.recty2 = 0;
-this.scalefactor = 1;
-this.av = null;
-this.$showLabels = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "RotatableCanvas", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.KeyListener, jalview.api.RotatableCanvasI]);
-Clazz.prepareFields (c$, function () {
-this.idmat = new jalview.math.RotatableMatrix (3, 3);
-this.objmat = new jalview.math.RotatableMatrix (3, 3);
-this.rotmat = new jalview.math.RotatableMatrix (3, 3);
-this.centre = Clazz.newFloatArray (3, 0);
-this.$width = Clazz.newFloatArray (3, 0);
-this.max = Clazz.newFloatArray (3, 0);
-this.min = Clazz.newFloatArray (3, 0);
-});
-Clazz.makeConstructor (c$,
-function (av) {
-Clazz.superConstructor (this, jalview.appletgui.RotatableCanvas, []);
-this.av = av;
-}, "jalview.viewmodel.AlignmentViewport");
-Clazz.defineMethod (c$, "showLabels",
-function (b) {
-this.$showLabels = b;
-this.repaint ();
-}, "~B");
-Clazz.overrideMethod (c$, "setPoints",
-function (points, npoint) {
-this.points = points;
-this.npoint = npoint;
-jalview.appletgui.PaintRefresher.Register (this, this.av.getSequenceSetId ());
-this.prefsize = this.getPreferredSize ();
-this.orig = Clazz.newFloatArray (npoint, 3, 0);
-for (var i = 0; i < npoint; i++) {
-var sp = points.elementAt (i);
-for (var j = 0; j < 3; j++) {
-this.orig[i][j] = sp.coord[j];
-}
-}
-for (var i = 0; i < 3; i++) {
-for (var j = 0; j < 3; j++) {
-if (i != j) {
-this.idmat.addElement (i, j, 0);
-this.objmat.addElement (i, j, 0);
-this.rotmat.addElement (i, j, 0);
-} else {
-this.idmat.addElement (i, j, 0);
-this.objmat.addElement (i, j, 0);
-this.rotmat.addElement (i, j, 0);
-}}
-}
-this.axes = Clazz.newFloatArray (3, 3, 0);
-this.initAxes ();
-this.findCentre ();
-this.findWidth ();
-this.scale = this.findScale ();
-this.addMouseListener (this);
-this.addKeyListener (this);
-this.addMouseMotionListener (this);
-}, "java.util.Vector,~N");
-Clazz.defineMethod (c$, "initAxes",
-function () {
-for (var i = 0; i < 3; i++) {
-for (var j = 0; j < 3; j++) {
-if (i != j) {
-this.axes[i][j] = 0;
-} else {
-this.axes[i][j] = 1;
-}}
-}
-});
-Clazz.defineMethod (c$, "findWidth",
-function () {
-this.max = Clazz.newFloatArray (3, 0);
-this.min = Clazz.newFloatArray (3, 0);
-this.max[0] = -1.0E30;
-this.max[1] = -1.0E30;
-this.max[2] = -1.0E30;
-this.min[0] = 1e30;
-this.min[1] = 1e30;
-this.min[2] = 1e30;
-for (var i = 0; i < 3; i++) {
-for (var j = 0; j < this.npoint; j++) {
-var sp = this.points.elementAt (j);
-if (sp.coord[i] >= this.max[i]) {
-this.max[i] = sp.coord[i];
-}if (sp.coord[i] <= this.min[i]) {
-this.min[i] = sp.coord[i];
-}}
-}
-this.$width[0] = Math.abs (this.max[0] - this.min[0]);
-this.$width[1] = Math.abs (this.max[1] - this.min[1]);
-this.$width[2] = Math.abs (this.max[2] - this.min[2]);
-this.maxwidth = this.$width[0];
-if (this.$width[1] > this.$width[0]) {
-this.maxwidth = this.$width[1];
-}if (this.$width[2] > this.$width[1]) {
-this.maxwidth = this.$width[2];
-}});
-Clazz.defineMethod (c$, "findScale",
-function () {
-var dim;
-var width;
-var height;
-if (this.getSize ().width != 0) {
-width = this.getSize ().width;
-height = this.getSize ().height;
-} else {
-width = this.prefsize.width;
-height = this.prefsize.height;
-}if (width < height) {
-dim = width;
-} else {
-dim = height;
-}return dim * this.scalefactor / (2 * this.maxwidth);
-});
-Clazz.defineMethod (c$, "findCentre",
-function () {
-this.findWidth ();
-this.centre[0] = (this.max[0] + this.min[0]) / 2;
-this.centre[1] = (this.max[1] + this.min[1]) / 2;
-this.centre[2] = (this.max[2] + this.min[2]) / 2;
-});
-Clazz.overrideMethod (c$, "getPreferredSize",
-function () {
-if (this.prefsize != null) {
-return this.prefsize;
-} else {
-return new java.awt.Dimension (400, 400);
-}});
-Clazz.overrideMethod (c$, "getMinimumSize",
-function () {
-return this.getPreferredSize ();
-});
-Clazz.overrideMethod (c$, "update",
-function (g) {
-this.paint (g);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "PaintComponent",
-function (g) {
-if (this.points == null) {
-g.setFont ( new java.awt.Font ("Verdana", 0, 18));
-g.drawString (jalview.util.MessageManager.getString ("label.calculating_pca") + "....", 20, Clazz.doubleToInt (this.getSize ().height / 2));
-} else {
-if ((this.img == null) || (this.prefsize.width != this.getSize ().width) || (this.prefsize.height != this.getSize ().height)) {
-this.prefsize.width = this.getSize ().width;
-this.prefsize.height = this.getSize ().height;
-this.scale = this.findScale ();
-this.img = this.createImage (this.getSize ().width, this.getSize ().height);
-this.ig = this.img.getGraphics ();
-}this.drawBackground (this.ig, java.awt.Color.black);
-this.drawScene (this.ig);
-if (this.$drawAxes == true) {
-this.drawAxes (this.ig);
-}if (this.tooltip != null) {
-this.ig.setColor (java.awt.Color.red);
-this.ig.drawString (this.tooltip, this.toolx, this.tooly);
-}g.drawImage (this.img, 0, 0, this);
-}}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "drawAxes",
-function (g) {
-g.setColor (java.awt.Color.yellow);
-for (var i = 0; i < 3; i++) {
-g.drawLine (Clazz.doubleToInt (this.getSize ().width / 2), Clazz.doubleToInt (this.getSize ().height / 2), Clazz.floatToInt (this.axes[i][0] * this.scale * this.max[0] + Clazz.doubleToInt (this.getSize ().width / 2)), Clazz.floatToInt (this.axes[i][1] * this.scale * this.max[1] + Clazz.doubleToInt (this.getSize ().height / 2)));
-}
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "drawBackground",
-function (g, col) {
-g.setColor (col);
-g.fillRect (0, 0, this.prefsize.width, this.prefsize.height);
-}, "java.awt.Graphics,java.awt.Color");
-Clazz.defineMethod (c$, "drawScene",
-function (g) {
-var halfwidth = Clazz.doubleToInt (this.getSize ().width / 2);
-var halfheight = Clazz.doubleToInt (this.getSize ().height / 2);
-for (var i = 0; i < this.npoint; i++) {
-var sp = this.points.elementAt (i);
-var x = Clazz.floatToInt ((sp.coord[0] - this.centre[0]) * this.scale) + halfwidth;
-var y = Clazz.floatToInt ((sp.coord[1] - this.centre[1]) * this.scale) + halfheight;
-var z = sp.coord[1] - this.centre[2];
-if (this.av.getSequenceColour (sp.sequence) === java.awt.Color.black) {
-g.setColor (java.awt.Color.white);
-} else {
-g.setColor (this.av.getSequenceColour (sp.sequence));
-}if (this.av.getSelectionGroup () != null) {
-if (this.av.getSelectionGroup ().getSequences (null).contains ((this.points.elementAt (i)).sequence)) {
-g.setColor (java.awt.Color.gray);
-}}if (z < 0) {
-g.setColor (g.getColor ().darker ());
-}g.fillRect (x - 3, y - 3, 6, 6);
-if (this.$showLabels) {
-g.setColor (java.awt.Color.red);
-g.drawString ((this.points.elementAt (i)).sequence.getName (), x - 3, y - 4);
-}}
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "minimumsize",
-function () {
-return this.prefsize;
-});
-Clazz.defineMethod (c$, "preferredsize",
-function () {
-return this.prefsize;
-});
-Clazz.overrideMethod (c$, "keyTyped",
-function (evt) {
-}, "java.awt.event.KeyEvent");
-Clazz.overrideMethod (c$, "keyReleased",
-function (evt) {
-}, "java.awt.event.KeyEvent");
-Clazz.overrideMethod (c$, "keyPressed",
-function (evt) {
-if (evt.getKeyCode () == 38) {
-this.scalefactor = (this.scalefactor * 1.1);
-this.scale = this.findScale ();
-} else if (evt.getKeyCode () == 40) {
-this.scalefactor = (this.scalefactor * 0.9);
-this.scale = this.findScale ();
-} else if (evt.getKeyChar () == 's') {
-System.err.println ("DEBUG: Rectangle selection");
-if (this.rectx2 != -1 && this.recty2 != -1) {
-this.rectSelect (this.rectx1, this.recty1, this.rectx2, this.recty2);
-}}this.repaint ();
-}, "java.awt.event.KeyEvent");
-Clazz.defineMethod (c$, "printPoints",
-function () {
-for (var i = 0; i < this.npoint; i++) {
-var sp = this.points.elementAt (i);
-jalview.util.Format.printLong (System.out, "%5d ", i);
-for (var j = 0; j < 3; j++) {
-jalview.util.Format.printDouble (System.out, "%13.3f ", sp.coord[j]);
-}
-System.out.println ();
-}
-});
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-var x = evt.getX ();
-var y = evt.getY ();
-this.mx = x;
-this.my = y;
-this.omx = this.mx;
-this.omy = this.my;
-this.startx = x;
-this.starty = y;
-this.rectx1 = x;
-this.recty1 = y;
-this.rectx2 = -1;
-this.recty2 = -1;
-var found = this.findPoint (x, y);
-if (found != null) {
-if (this.av.getSelectionGroup () != null) {
-this.av.getSelectionGroup ().addOrRemove (found, true);
-this.av.getSelectionGroup ().setEndRes (this.av.getAlignment ().getWidth () - 1);
-} else {
-this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());
-this.av.getSelectionGroup ().addOrRemove (found, true);
-this.av.getSelectionGroup ().setEndRes (this.av.getAlignment ().getWidth () - 1);
-}jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
-this.av.sendSelection ();
-}this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-var found = this.findPoint (evt.getX (), evt.getY ());
-if (found == null) {
-this.tooltip = null;
-} else {
-this.tooltip = found.getName ();
-this.toolx = evt.getX ();
-this.tooly = evt.getY ();
-}this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-this.mx = evt.getX ();
-this.my = evt.getY ();
-this.rotmat.setIdentity ();
-this.rotmat.rotate (this.my - this.omy, 'x');
-this.rotmat.rotate (this.mx - this.omx, 'y');
-for (var i = 0; i < this.npoint; i++) {
-var sp = this.points.elementAt (i);
-sp.coord[0] -= this.centre[0];
-sp.coord[1] -= this.centre[1];
-sp.coord[2] -= this.centre[2];
-sp.coord = this.rotmat.vectorMultiply (sp.coord);
-sp.coord[0] += this.centre[0];
-sp.coord[1] += this.centre[1];
-sp.coord[2] += this.centre[2];
-}
-for (var i = 0; i < 3; i++) {
-this.axes[i] = this.rotmat.vectorMultiply (this.axes[i]);
-}
-this.omx = this.mx;
-this.omy = this.my;
-this.paint (this.getGraphics ());
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "rectSelect",
-function (x1, y1, x2, y2) {
-for (var i = 0; i < this.npoint; i++) {
-var sp = this.points.elementAt (i);
-var tmp1 = Clazz.doubleToInt ((sp.coord[0] - this.centre[0]) * this.scale + this.getSize ().width / 2.0);
-var tmp2 = Clazz.doubleToInt ((sp.coord[1] - this.centre[1]) * this.scale + this.getSize ().height / 2.0);
-if (tmp1 > x1 && tmp1 < x2 && tmp2 > y1 && tmp2 < y2) {
-if (this.av != null) {
-if (!this.av.getSelectionGroup ().getSequences (null).contains (sp.sequence)) {
-this.av.getSelectionGroup ().addSequence (sp.sequence, true);
-}}}}
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "findPoint",
-function (x, y) {
-var halfwidth = Clazz.doubleToInt (this.getSize ().width / 2);
-var halfheight = Clazz.doubleToInt (this.getSize ().height / 2);
-var found = -1;
-for (var i = 0; i < this.npoint; i++) {
-var sp = this.points.elementAt (i);
-var px = Clazz.floatToInt ((sp.coord[0] - this.centre[0]) * this.scale) + halfwidth;
-var py = Clazz.floatToInt ((sp.coord[1] - this.centre[1]) * this.scale) + halfheight;
-if (Math.abs (px - x) < 3 && Math.abs (py - y) < 3) {
-found = i;
-}}
-if (found != -1) {
-return (this.points.elementAt (found)).sequence;
-} else {
-return null;
-}}, "~N,~N");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.api.RotatableCanvasI", "java.awt.event.KeyListener", "$.MouseListener", "$.MouseMotionListener", "jalview.math.RotatableMatrix"], "jalview.appletgui.RotatableCanvas", ["jalview.appletgui.PaintRefresher", "jalview.datamodel.SequenceGroup", "jalview.util.Format", "$.MessageManager", "java.awt.Color", "$.Dimension", "$.Font"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.idmat = null;
+this.objmat = null;
+this.rotmat = null;
+this.tooltip = null;
+this.toolx = 0;
+this.tooly = 0;
+this.$drawAxes = true;
+this.omx = 0;
+this.mx = 0;
+this.omy = 0;
+this.my = 0;
+this.img = null;
+this.ig = null;
+this.prefsize = null;
+this.centre = null;
+this.$width = null;
+this.max = null;
+this.min = null;
+this.maxwidth = 0;
+this.scale = 0;
+this.npoint = 0;
+this.points = null;
+this.orig = null;
+this.axes = null;
+this.startx = 0;
+this.starty = 0;
+this.lastx = 0;
+this.lasty = 0;
+this.rectx1 = 0;
+this.recty1 = 0;
+this.rectx2 = 0;
+this.recty2 = 0;
+this.scalefactor = 1;
+this.av = null;
+this.$showLabels = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "RotatableCanvas", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.KeyListener, jalview.api.RotatableCanvasI]);
+Clazz.prepareFields (c$, function () {
+this.idmat = new jalview.math.RotatableMatrix (3, 3);
+this.objmat = new jalview.math.RotatableMatrix (3, 3);
+this.rotmat = new jalview.math.RotatableMatrix (3, 3);
+this.centre = Clazz.newFloatArray (3, 0);
+this.$width = Clazz.newFloatArray (3, 0);
+this.max = Clazz.newFloatArray (3, 0);
+this.min = Clazz.newFloatArray (3, 0);
+});
+Clazz.makeConstructor (c$,
+function (av) {
+Clazz.superConstructor (this, jalview.appletgui.RotatableCanvas, []);
+this.av = av;
+}, "jalview.viewmodel.AlignmentViewport");
+Clazz.defineMethod (c$, "showLabels",
+function (b) {
+this.$showLabels = b;
+this.repaint ();
+}, "~B");
+Clazz.overrideMethod (c$, "setPoints",
+function (points, npoint) {
+this.points = points;
+this.npoint = npoint;
+jalview.appletgui.PaintRefresher.Register (this, this.av.getSequenceSetId ());
+this.prefsize = this.getPreferredSize ();
+this.orig = Clazz.newFloatArray (npoint, 3, 0);
+for (var i = 0; i < npoint; i++) {
+var sp = points.elementAt (i);
+for (var j = 0; j < 3; j++) {
+this.orig[i][j] = sp.coord[j];
+}
+}
+for (var i = 0; i < 3; i++) {
+for (var j = 0; j < 3; j++) {
+if (i != j) {
+this.idmat.addElement (i, j, 0);
+this.objmat.addElement (i, j, 0);
+this.rotmat.addElement (i, j, 0);
+} else {
+this.idmat.addElement (i, j, 0);
+this.objmat.addElement (i, j, 0);
+this.rotmat.addElement (i, j, 0);
+}}
+}
+this.axes = Clazz.newFloatArray (3, 3, 0);
+this.initAxes ();
+this.findCentre ();
+this.findWidth ();
+this.scale = this.findScale ();
+this.addMouseListener (this);
+this.addKeyListener (this);
+this.addMouseMotionListener (this);
+}, "java.util.Vector,~N");
+Clazz.defineMethod (c$, "initAxes",
+function () {
+for (var i = 0; i < 3; i++) {
+for (var j = 0; j < 3; j++) {
+if (i != j) {
+this.axes[i][j] = 0;
+} else {
+this.axes[i][j] = 1;
+}}
+}
+});
+Clazz.defineMethod (c$, "findWidth",
+function () {
+this.max = Clazz.newFloatArray (3, 0);
+this.min = Clazz.newFloatArray (3, 0);
+this.max[0] = -1.0E30;
+this.max[1] = -1.0E30;
+this.max[2] = -1.0E30;
+this.min[0] = 1e30;
+this.min[1] = 1e30;
+this.min[2] = 1e30;
+for (var i = 0; i < 3; i++) {
+for (var j = 0; j < this.npoint; j++) {
+var sp = this.points.elementAt (j);
+if (sp.coord[i] >= this.max[i]) {
+this.max[i] = sp.coord[i];
+}if (sp.coord[i] <= this.min[i]) {
+this.min[i] = sp.coord[i];
+}}
+}
+this.$width[0] = Math.abs (this.max[0] - this.min[0]);
+this.$width[1] = Math.abs (this.max[1] - this.min[1]);
+this.$width[2] = Math.abs (this.max[2] - this.min[2]);
+this.maxwidth = this.$width[0];
+if (this.$width[1] > this.$width[0]) {
+this.maxwidth = this.$width[1];
+}if (this.$width[2] > this.$width[1]) {
+this.maxwidth = this.$width[2];
+}});
+Clazz.defineMethod (c$, "findScale",
+function () {
+var dim;
+var width;
+var height;
+if (this.getSize ().width != 0) {
+width = this.getSize ().width;
+height = this.getSize ().height;
+} else {
+width = this.prefsize.width;
+height = this.prefsize.height;
+}if (width < height) {
+dim = width;
+} else {
+dim = height;
+}return dim * this.scalefactor / (2 * this.maxwidth);
+});
+Clazz.defineMethod (c$, "findCentre",
+function () {
+this.findWidth ();
+this.centre[0] = (this.max[0] + this.min[0]) / 2;
+this.centre[1] = (this.max[1] + this.min[1]) / 2;
+this.centre[2] = (this.max[2] + this.min[2]) / 2;
+});
+Clazz.overrideMethod (c$, "getPreferredSize",
+function () {
+if (this.prefsize != null) {
+return this.prefsize;
+} else {
+return new java.awt.Dimension (400, 400);
+}});
+Clazz.overrideMethod (c$, "getMinimumSize",
+function () {
+return this.getPreferredSize ();
+});
+Clazz.overrideMethod (c$, "update",
+function (g) {
+this.paint (g);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "PaintComponent",
+function (g) {
+if (this.points == null) {
+g.setFont ( new java.awt.Font ("Verdana", 0, 18));
+g.drawString (jalview.util.MessageManager.getString ("label.calculating_pca") + "....", 20, Clazz.doubleToInt (this.getSize ().height / 2));
+} else {
+if ((this.img == null) || (this.prefsize.width != this.getSize ().width) || (this.prefsize.height != this.getSize ().height)) {
+this.prefsize.width = this.getSize ().width;
+this.prefsize.height = this.getSize ().height;
+this.scale = this.findScale ();
+this.img = this.createImage (this.getSize ().width, this.getSize ().height);
+this.ig = this.img.getGraphics ();
+}this.drawBackground (this.ig, java.awt.Color.black);
+this.drawScene (this.ig);
+if (this.$drawAxes == true) {
+this.drawAxes (this.ig);
+}if (this.tooltip != null) {
+this.ig.setColor (java.awt.Color.red);
+this.ig.drawString (this.tooltip, this.toolx, this.tooly);
+}g.drawImage (this.img, 0, 0, this);
+}}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "drawAxes",
+function (g) {
+g.setColor (java.awt.Color.yellow);
+for (var i = 0; i < 3; i++) {
+g.drawLine (Clazz.doubleToInt (this.getSize ().width / 2), Clazz.doubleToInt (this.getSize ().height / 2), Clazz.floatToInt (this.axes[i][0] * this.scale * this.max[0] + Clazz.doubleToInt (this.getSize ().width / 2)), Clazz.floatToInt (this.axes[i][1] * this.scale * this.max[1] + Clazz.doubleToInt (this.getSize ().height / 2)));
+}
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "drawBackground",
+function (g, col) {
+g.setColor (col);
+g.fillRect (0, 0, this.prefsize.width, this.prefsize.height);
+}, "java.awt.Graphics,java.awt.Color");
+Clazz.defineMethod (c$, "drawScene",
+function (g) {
+var halfwidth = Clazz.doubleToInt (this.getSize ().width / 2);
+var halfheight = Clazz.doubleToInt (this.getSize ().height / 2);
+for (var i = 0; i < this.npoint; i++) {
+var sp = this.points.elementAt (i);
+var x = Clazz.floatToInt ((sp.coord[0] - this.centre[0]) * this.scale) + halfwidth;
+var y = Clazz.floatToInt ((sp.coord[1] - this.centre[1]) * this.scale) + halfheight;
+var z = sp.coord[1] - this.centre[2];
+if (this.av.getSequenceColour (sp.sequence) === java.awt.Color.black) {
+g.setColor (java.awt.Color.white);
+} else {
+g.setColor (this.av.getSequenceColour (sp.sequence));
+}if (this.av.getSelectionGroup () != null) {
+if (this.av.getSelectionGroup ().getSequences (null).contains ((this.points.elementAt (i)).sequence)) {
+g.setColor (java.awt.Color.gray);
+}}if (z < 0) {
+g.setColor (g.getColor ().darker ());
+}g.fillRect (x - 3, y - 3, 6, 6);
+if (this.$showLabels) {
+g.setColor (java.awt.Color.red);
+g.drawString ((this.points.elementAt (i)).sequence.getName (), x - 3, y - 4);
+}}
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "minimumsize",
+function () {
+return this.prefsize;
+});
+Clazz.defineMethod (c$, "preferredsize",
+function () {
+return this.prefsize;
+});
+Clazz.overrideMethod (c$, "keyTyped",
+function (evt) {
+}, "java.awt.event.KeyEvent");
+Clazz.overrideMethod (c$, "keyReleased",
+function (evt) {
+}, "java.awt.event.KeyEvent");
+Clazz.overrideMethod (c$, "keyPressed",
+function (evt) {
+if (evt.getKeyCode () == 38) {
+this.scalefactor = (this.scalefactor * 1.1);
+this.scale = this.findScale ();
+} else if (evt.getKeyCode () == 40) {
+this.scalefactor = (this.scalefactor * 0.9);
+this.scale = this.findScale ();
+} else if (evt.getKeyChar () == 's') {
+System.err.println ("DEBUG: Rectangle selection");
+if (this.rectx2 != -1 && this.recty2 != -1) {
+this.rectSelect (this.rectx1, this.recty1, this.rectx2, this.recty2);
+}}this.repaint ();
+}, "java.awt.event.KeyEvent");
+Clazz.defineMethod (c$, "printPoints",
+function () {
+for (var i = 0; i < this.npoint; i++) {
+var sp = this.points.elementAt (i);
+jalview.util.Format.printLong (System.out, "%5d ", i);
+for (var j = 0; j < 3; j++) {
+jalview.util.Format.printDouble (System.out, "%13.3f ", sp.coord[j]);
+}
+System.out.println ();
+}
+});
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+var x = evt.getX ();
+var y = evt.getY ();
+this.mx = x;
+this.my = y;
+this.omx = this.mx;
+this.omy = this.my;
+this.startx = x;
+this.starty = y;
+this.rectx1 = x;
+this.recty1 = y;
+this.rectx2 = -1;
+this.recty2 = -1;
+var found = this.findPoint (x, y);
+if (found != null) {
+if (this.av.getSelectionGroup () != null) {
+this.av.getSelectionGroup ().addOrRemove (found, true);
+this.av.getSelectionGroup ().setEndRes (this.av.getAlignment ().getWidth () - 1);
+} else {
+this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());
+this.av.getSelectionGroup ().addOrRemove (found, true);
+this.av.getSelectionGroup ().setEndRes (this.av.getAlignment ().getWidth () - 1);
+}jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
+this.av.sendSelection ();
+}this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+var found = this.findPoint (evt.getX (), evt.getY ());
+if (found == null) {
+this.tooltip = null;
+} else {
+this.tooltip = found.getName ();
+this.toolx = evt.getX ();
+this.tooly = evt.getY ();
+}this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+this.mx = evt.getX ();
+this.my = evt.getY ();
+this.rotmat.setIdentity ();
+this.rotmat.rotate (this.my - this.omy, 'x');
+this.rotmat.rotate (this.mx - this.omx, 'y');
+for (var i = 0; i < this.npoint; i++) {
+var sp = this.points.elementAt (i);
+sp.coord[0] -= this.centre[0];
+sp.coord[1] -= this.centre[1];
+sp.coord[2] -= this.centre[2];
+sp.coord = this.rotmat.vectorMultiply (sp.coord);
+sp.coord[0] += this.centre[0];
+sp.coord[1] += this.centre[1];
+sp.coord[2] += this.centre[2];
+}
+for (var i = 0; i < 3; i++) {
+this.axes[i] = this.rotmat.vectorMultiply (this.axes[i]);
+}
+this.omx = this.mx;
+this.omy = this.my;
+this.paint (this.getGraphics ());
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "rectSelect",
+function (x1, y1, x2, y2) {
+for (var i = 0; i < this.npoint; i++) {
+var sp = this.points.elementAt (i);
+var tmp1 = Clazz.doubleToInt ((sp.coord[0] - this.centre[0]) * this.scale + this.getSize ().width / 2.0);
+var tmp2 = Clazz.doubleToInt ((sp.coord[1] - this.centre[1]) * this.scale + this.getSize ().height / 2.0);
+if (tmp1 > x1 && tmp1 < x2 && tmp2 > y1 && tmp2 < y2) {
+if (this.av != null) {
+if (!this.av.getSelectionGroup ().getSequences (null).contains (sp.sequence)) {
+this.av.getSelectionGroup ().addSequence (sp.sequence, true);
+}}}}
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "findPoint",
+function (x, y) {
+var halfwidth = Clazz.doubleToInt (this.getSize ().width / 2);
+var halfheight = Clazz.doubleToInt (this.getSize ().height / 2);
+var found = -1;
+for (var i = 0; i < this.npoint; i++) {
+var sp = this.points.elementAt (i);
+var px = Clazz.floatToInt ((sp.coord[0] - this.centre[0]) * this.scale) + halfwidth;
+var py = Clazz.floatToInt ((sp.coord[1] - this.centre[1]) * this.scale) + halfheight;
+if (Math.abs (px - x) < 3 && Math.abs (py - y) < 3) {
+found = i;
+}}
+if (found != -1) {
+return (this.points.elementAt (found)).sequence;
+} else {
+return null;
+}}, "~N,~N");
+});
diff --git a/bin/jalview/appletgui/ScalePanel.class b/bin/jalview/appletgui/ScalePanel.class
index 66ccdcb..332e353 100644
Binary files a/bin/jalview/appletgui/ScalePanel.class and b/bin/jalview/appletgui/ScalePanel.class differ
diff --git a/bin/jalview/appletgui/ScalePanel.js b/bin/jalview/appletgui/ScalePanel.js
index 755df0a..eddee91 100644
--- a/bin/jalview/appletgui/ScalePanel.js
+++ b/bin/jalview/appletgui/ScalePanel.js
@@ -1,248 +1,248 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.ScalePanel", ["awt2swing.MenuItem", "$.PopupMenu", "jalview.datamodel.SequenceGroup", "jalview.util.MessageManager", "java.awt.Color", "java.awt.event.ActionListener"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.offy = 4;
-this.$width = 0;
-this.av = null;
-this.ap = null;
-this.stretchingGroup = false;
-this.min = 0;
-this.max = 0;
-this.mouseDragging = false;
-this.reveal = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "ScalePanel", awt2swing.Panel, [java.awt.event.MouseMotionListener, java.awt.event.MouseListener]);
-Clazz.makeConstructor (c$,
-function (av, ap) {
-Clazz.superConstructor (this, jalview.appletgui.ScalePanel, []);
-this.setName ("scalePanel");
-this.setLayout (null);
-this.av = av;
-this.ap = ap;
-this.addMouseListener (this);
-this.addMouseMotionListener (this);
-}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-var x = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
-var res;
-if (this.av.hasHiddenColumns ()) {
-res = this.av.getColumnSelection ().adjustForHiddenColumns (x);
-} else {
-res = x;
-}this.min = res;
-this.max = res;
-if ((evt.getModifiers () & 4) == 4) {
-var pop = new awt2swing.PopupMenu ();
-if (this.reveal != null) {
-var item = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.reveal"));
-item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$1") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$1, this, null)));
-pop.add (item);
-if (this.av.getColumnSelection ().hasManyHiddenColumns ()) {
-item = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.reveal_all"));
-item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$2") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$2, this, null)));
-pop.add (item);
-}this.add (pop);
-pop.show (this, evt.getX (), evt.getY ());
-} else if (this.av.getColumnSelection ().contains (res)) {
-var item = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.hide_columns"));
-item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$3") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$3, this, Clazz.cloneFinals ("res", res))));
-pop.add (item);
-this.add (pop);
-pop.show (this, evt.getX (), evt.getY ());
-}} else {
-if (!evt.isControlDown () && !evt.isShiftDown ()) {
-this.av.getColumnSelection ().clear ();
-}this.av.getColumnSelection ().addElement (res);
-var sg = new jalview.datamodel.SequenceGroup ();
-for (var i = 0; i < this.av.getAlignment ().getSequences ().size (); i++) {
-sg.addSequence (this.av.getAlignment ().getSequenceAt (i), false);
-}
-sg.setStartRes (res);
-sg.setEndRes (res);
-this.av.setSelectionGroup (sg);
-if (evt.isShiftDown ()) {
-var min = Math.min (this.av.getColumnSelection ().getMin (), res);
-var max = Math.max (this.av.getColumnSelection ().getMax (), res);
-for (var i = min; i < max; i++) {
-this.av.getColumnSelection ().addElement (i);
-}
-sg.setStartRes (min);
-sg.setEndRes (max);
-}}this.ap.paintAlignment (true);
-this.av.sendSelection ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-this.mouseDragging = false;
-var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
-if (res > this.av.getAlignment ().getWidth ()) {
-res = this.av.getAlignment ().getWidth () - 1;
-}if (this.av.hasHiddenColumns ()) {
-res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
-}if (!this.stretchingGroup) {
-this.ap.paintAlignment (false);
-return;
-}var sg = this.av.getSelectionGroup ();
-if (res > sg.getStartRes ()) {
-sg.setEndRes (res);
-} else if (res < sg.getStartRes ()) {
-sg.setStartRes (res);
-}this.stretchingGroup = false;
-this.ap.paintAlignment (false);
-this.av.sendSelection ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-this.mouseDragging = true;
-var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
-if (res < 0) {
-res = 0;
-}if (this.av.hasHiddenColumns ()) {
-res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
-}if (res > this.av.getAlignment ().getWidth ()) {
-res = this.av.getAlignment ().getWidth () - 1;
-}if (res < this.min) {
-this.min = res;
-}if (res > this.max) {
-this.max = res;
-}var sg = this.av.getSelectionGroup ();
-if (sg != null) {
-this.stretchingGroup = true;
-if (!this.av.getColumnSelection ().contains (res)) {
-this.av.getColumnSelection ().addElement (res);
-}if (res > sg.getStartRes ()) {
-sg.setEndRes (res);
-}if (res < sg.getStartRes ()) {
-sg.setStartRes (res);
-}var col;
-for (var i = this.min; i <= this.max; i++) {
-col = this.av.getColumnSelection ().adjustForHiddenColumns (i);
-if ((col < sg.getStartRes ()) || (col > sg.getEndRes ())) {
-this.av.getColumnSelection ().removeElement (col);
-} else {
-this.av.getColumnSelection ().addElement (col);
-}}
-this.ap.paintAlignment (false);
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-if (this.mouseDragging) {
-this.ap.seqPanel.scrollCanvas (null);
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-if (this.mouseDragging) {
-this.ap.seqPanel.scrollCanvas (evt);
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-if (!this.av.hasHiddenColumns ()) {
-return;
-}var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
-res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
-this.reveal = null;
-for (var region, $region = this.av.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
-if (res + 1 == region[0] || res - 1 == region[1]) {
-this.reveal = region;
-break;
-}}
-this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-if (this.av.getWrapAlignment ()) return;
-this.drawScale (g, this.av.getStartRes (), this.av.getEndRes (), this.getSize ().width, this.getSize ().height);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "drawScale",
-function (gg, startx, endx, width, height) {
-gg.setFont (this.av.getFont ());
-gg.setColor (java.awt.Color.white);
-gg.fillRect (0, 0, width, height);
-gg.setColor (java.awt.Color.black);
-var cs = this.av.getColumnSelection ();
-gg.setColor ( new java.awt.Color (220, 0, 0));
-var avcharWidth = this.av.getCharWidth ();
-var avcharHeight = this.av.getCharHeight ();
-for (var i = 0; i < cs.size (); i++) {
-var sel = cs.columnAt (i);
-if (this.av.hasHiddenColumns ()) {
-sel = this.av.getColumnSelection ().findColumnPosition (sel);
-}if ((sel >= startx) && (sel <= endx)) {
-gg.fillRect ((sel - startx) * avcharWidth, 0, avcharWidth, this.getSize ().height);
-}}
-gg.setColor (java.awt.Color.black);
-var scalestartx = (Clazz.doubleToInt (startx / 10)) * 10;
-var fm = gg.getFontMetrics (this.av.getFont ());
-var y = avcharHeight - fm.getDescent ();
-if ((scalestartx % 10) == 0) {
-scalestartx += 5;
-}var string;
-var maxX = 0;
-for (var i = scalestartx; i < endx; i += 5) {
-if ((i % 10) == 0) {
-string = String.valueOf (this.av.getColumnSelection ().adjustForHiddenColumns (i));
-if ((i - startx - 1) * avcharWidth > maxX) {
-gg.drawString (string, (i - startx - 1) * avcharWidth, y);
-maxX = (i - startx + 1) * avcharWidth + fm.stringWidth (string);
-}gg.drawLine (((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + 2, ((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + (fm.getDescent () * 2));
-} else {
-gg.drawLine (((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + fm.getDescent (), ((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + (fm.getDescent () * 2));
-}}
-if (this.av.hasHiddenColumns ()) {
-gg.setColor (java.awt.Color.blue);
-var res;
-if (this.av.getShowHiddenMarkers ()) {
-for (var i = 0; i < this.av.getColumnSelection ().getHiddenColumns ().size (); i++) {
-res = this.av.getColumnSelection ().findHiddenRegionPosition (i) - startx;
-if (res < 0 || res > endx - scalestartx) {
-continue;
-}gg.fillPolygon ( Clazz.newIntArray (-1, [res * avcharWidth - Clazz.doubleToInt (avcharHeight / 4), res * avcharWidth + Clazz.doubleToInt (avcharHeight / 4), res * avcharWidth]), Clazz.newIntArray (-1, [y - Clazz.doubleToInt (avcharHeight / 2), y - Clazz.doubleToInt (avcharHeight / 2), y + 8]), 3);
-}
-}if (this.reveal != null && this.reveal[0] > startx && this.reveal[0] < endx) {
-gg.drawString (jalview.util.MessageManager.getString ("label.reveal_columns"), this.reveal[0] * avcharWidth, 0);
-}}}, "java.awt.Graphics,~N,~N,~N,~N");
-c$.$ScalePanel$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$1", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.ScalePanel"].av.showColumn (this.b$["jalview.appletgui.ScalePanel"].reveal[0]);
-this.b$["jalview.appletgui.ScalePanel"].reveal = null;
-this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);
-if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {
-this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();
-}}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$ScalePanel$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$2", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.ScalePanel"].av.showAllHiddenColumns ();
-this.b$["jalview.appletgui.ScalePanel"].reveal = null;
-this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);
-if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {
-this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();
-}}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$ScalePanel$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$3", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-this.b$["jalview.appletgui.ScalePanel"].av.hideColumns (this.f$.res, this.f$.res);
-if (this.b$["jalview.appletgui.ScalePanel"].av.getSelectionGroup () != null && this.b$["jalview.appletgui.ScalePanel"].av.getSelectionGroup ().getSize () == this.b$["jalview.appletgui.ScalePanel"].av.getAlignment ().getHeight ()) {
-this.b$["jalview.appletgui.ScalePanel"].av.setSelectionGroup (null);
-}this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);
-if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {
-this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();
-}}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener"], "jalview.appletgui.ScalePanel", ["awt2swing.MenuItem", "$.PopupMenu", "jalview.datamodel.SequenceGroup", "jalview.util.MessageManager", "java.awt.Color", "java.awt.event.ActionListener"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.offy = 4;
+this.$width = 0;
+this.av = null;
+this.ap = null;
+this.stretchingGroup = false;
+this.min = 0;
+this.max = 0;
+this.mouseDragging = false;
+this.reveal = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "ScalePanel", awt2swing.Panel, [java.awt.event.MouseMotionListener, java.awt.event.MouseListener]);
+Clazz.makeConstructor (c$,
+function (av, ap) {
+Clazz.superConstructor (this, jalview.appletgui.ScalePanel, []);
+this.setName ("scalePanel");
+this.setLayout (null);
+this.av = av;
+this.ap = ap;
+this.addMouseListener (this);
+this.addMouseMotionListener (this);
+}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+var x = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
+var res;
+if (this.av.hasHiddenColumns ()) {
+res = this.av.getColumnSelection ().adjustForHiddenColumns (x);
+} else {
+res = x;
+}this.min = res;
+this.max = res;
+if ((evt.getModifiers () & 4) == 4) {
+var pop = new awt2swing.PopupMenu ();
+if (this.reveal != null) {
+var item = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.reveal"));
+item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$1") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$1, this, null)));
+pop.add (item);
+if (this.av.getColumnSelection ().hasManyHiddenColumns ()) {
+item = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("action.reveal_all"));
+item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$2") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$2, this, null)));
+pop.add (item);
+}this.add (pop);
+pop.show (this, evt.getX (), evt.getY ());
+} else if (this.av.getColumnSelection ().contains (res)) {
+var item = new awt2swing.MenuItem (jalview.util.MessageManager.getString ("label.hide_columns"));
+item.addActionListener (((Clazz.isClassDefined ("jalview.appletgui.ScalePanel$3") ? 0 : jalview.appletgui.ScalePanel.$ScalePanel$3$ ()), Clazz.innerTypeInstance (jalview.appletgui.ScalePanel$3, this, Clazz.cloneFinals ("res", res))));
+pop.add (item);
+this.add (pop);
+pop.show (this, evt.getX (), evt.getY ());
+}} else {
+if (!evt.isControlDown () && !evt.isShiftDown ()) {
+this.av.getColumnSelection ().clear ();
+}this.av.getColumnSelection ().addElement (res);
+var sg = new jalview.datamodel.SequenceGroup ();
+for (var i = 0; i < this.av.getAlignment ().getSequences ().size (); i++) {
+sg.addSequence (this.av.getAlignment ().getSequenceAt (i), false);
+}
+sg.setStartRes (res);
+sg.setEndRes (res);
+this.av.setSelectionGroup (sg);
+if (evt.isShiftDown ()) {
+var min = Math.min (this.av.getColumnSelection ().getMin (), res);
+var max = Math.max (this.av.getColumnSelection ().getMax (), res);
+for (var i = min; i < max; i++) {
+this.av.getColumnSelection ().addElement (i);
+}
+sg.setStartRes (min);
+sg.setEndRes (max);
+}}this.ap.paintAlignment (true);
+this.av.sendSelection ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+this.mouseDragging = false;
+var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
+if (res > this.av.getAlignment ().getWidth ()) {
+res = this.av.getAlignment ().getWidth () - 1;
+}if (this.av.hasHiddenColumns ()) {
+res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
+}if (!this.stretchingGroup) {
+this.ap.paintAlignment (false);
+return;
+}var sg = this.av.getSelectionGroup ();
+if (res > sg.getStartRes ()) {
+sg.setEndRes (res);
+} else if (res < sg.getStartRes ()) {
+sg.setStartRes (res);
+}this.stretchingGroup = false;
+this.ap.paintAlignment (false);
+this.av.sendSelection ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+this.mouseDragging = true;
+var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
+if (res < 0) {
+res = 0;
+}if (this.av.hasHiddenColumns ()) {
+res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
+}if (res > this.av.getAlignment ().getWidth ()) {
+res = this.av.getAlignment ().getWidth () - 1;
+}if (res < this.min) {
+this.min = res;
+}if (res > this.max) {
+this.max = res;
+}var sg = this.av.getSelectionGroup ();
+if (sg != null) {
+this.stretchingGroup = true;
+if (!this.av.getColumnSelection ().contains (res)) {
+this.av.getColumnSelection ().addElement (res);
+}if (res > sg.getStartRes ()) {
+sg.setEndRes (res);
+}if (res < sg.getStartRes ()) {
+sg.setStartRes (res);
+}var col;
+for (var i = this.min; i <= this.max; i++) {
+col = this.av.getColumnSelection ().adjustForHiddenColumns (i);
+if ((col < sg.getStartRes ()) || (col > sg.getEndRes ())) {
+this.av.getColumnSelection ().removeElement (col);
+} else {
+this.av.getColumnSelection ().addElement (col);
+}}
+this.ap.paintAlignment (false);
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+if (this.mouseDragging) {
+this.ap.seqPanel.scrollCanvas (null);
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+if (this.mouseDragging) {
+this.ap.seqPanel.scrollCanvas (evt);
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+if (!this.av.hasHiddenColumns ()) {
+return;
+}var res = (Clazz.doubleToInt (evt.getX () / this.av.getCharWidth ())) + this.av.getStartRes ();
+res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
+this.reveal = null;
+for (var region, $region = this.av.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
+if (res + 1 == region[0] || res - 1 == region[1]) {
+this.reveal = region;
+break;
+}}
+this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+if (this.av.getWrapAlignment ()) return;
+this.drawScale (g, this.av.getStartRes (), this.av.getEndRes (), this.getSize ().width, this.getSize ().height);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "drawScale",
+function (gg, startx, endx, width, height) {
+gg.setFont (this.av.getFont ());
+gg.setColor (java.awt.Color.white);
+gg.fillRect (0, 0, width, height);
+gg.setColor (java.awt.Color.black);
+var cs = this.av.getColumnSelection ();
+gg.setColor ( new java.awt.Color (220, 0, 0));
+var avcharWidth = this.av.getCharWidth ();
+var avcharHeight = this.av.getCharHeight ();
+for (var i = 0; i < cs.size (); i++) {
+var sel = cs.columnAt (i);
+if (this.av.hasHiddenColumns ()) {
+sel = this.av.getColumnSelection ().findColumnPosition (sel);
+}if ((sel >= startx) && (sel <= endx)) {
+gg.fillRect ((sel - startx) * avcharWidth, 0, avcharWidth, this.getSize ().height);
+}}
+gg.setColor (java.awt.Color.black);
+var scalestartx = (Clazz.doubleToInt (startx / 10)) * 10;
+var fm = gg.getFontMetrics (this.av.getFont ());
+var y = avcharHeight - fm.getDescent ();
+if ((scalestartx % 10) == 0) {
+scalestartx += 5;
+}var string;
+var maxX = 0;
+for (var i = scalestartx; i < endx; i += 5) {
+if ((i % 10) == 0) {
+string = String.valueOf (this.av.getColumnSelection ().adjustForHiddenColumns (i));
+if ((i - startx - 1) * avcharWidth > maxX) {
+gg.drawString (string, (i - startx - 1) * avcharWidth, y);
+maxX = (i - startx + 1) * avcharWidth + fm.stringWidth (string);
+}gg.drawLine (((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + 2, ((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + (fm.getDescent () * 2));
+} else {
+gg.drawLine (((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + fm.getDescent (), ((i - startx - 1) * avcharWidth) + (Clazz.doubleToInt (avcharWidth / 2)), y + (fm.getDescent () * 2));
+}}
+if (this.av.hasHiddenColumns ()) {
+gg.setColor (java.awt.Color.blue);
+var res;
+if (this.av.getShowHiddenMarkers ()) {
+for (var i = 0; i < this.av.getColumnSelection ().getHiddenColumns ().size (); i++) {
+res = this.av.getColumnSelection ().findHiddenRegionPosition (i) - startx;
+if (res < 0 || res > endx - scalestartx) {
+continue;
+}gg.fillPolygon ( Clazz.newIntArray (-1, [res * avcharWidth - Clazz.doubleToInt (avcharHeight / 4), res * avcharWidth + Clazz.doubleToInt (avcharHeight / 4), res * avcharWidth]), Clazz.newIntArray (-1, [y - Clazz.doubleToInt (avcharHeight / 2), y - Clazz.doubleToInt (avcharHeight / 2), y + 8]), 3);
+}
+}if (this.reveal != null && this.reveal[0] > startx && this.reveal[0] < endx) {
+gg.drawString (jalview.util.MessageManager.getString ("label.reveal_columns"), this.reveal[0] * avcharWidth, 0);
+}}}, "java.awt.Graphics,~N,~N,~N,~N");
+c$.$ScalePanel$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$1", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.ScalePanel"].av.showColumn (this.b$["jalview.appletgui.ScalePanel"].reveal[0]);
+this.b$["jalview.appletgui.ScalePanel"].reveal = null;
+this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);
+if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {
+this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();
+}}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$ScalePanel$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$2", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.ScalePanel"].av.showAllHiddenColumns ();
+this.b$["jalview.appletgui.ScalePanel"].reveal = null;
+this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);
+if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {
+this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();
+}}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$ScalePanel$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "ScalePanel$3", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+this.b$["jalview.appletgui.ScalePanel"].av.hideColumns (this.f$.res, this.f$.res);
+if (this.b$["jalview.appletgui.ScalePanel"].av.getSelectionGroup () != null && this.b$["jalview.appletgui.ScalePanel"].av.getSelectionGroup ().getSize () == this.b$["jalview.appletgui.ScalePanel"].av.getAlignment ().getHeight ()) {
+this.b$["jalview.appletgui.ScalePanel"].av.setSelectionGroup (null);
+}this.b$["jalview.appletgui.ScalePanel"].ap.paintAlignment (true);
+if (this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel != null) {
+this.b$["jalview.appletgui.ScalePanel"].ap.overviewPanel.updateOverviewImage ();
+}}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/SeqCanvas.class b/bin/jalview/appletgui/SeqCanvas.class
index a5ce5f0..c3feb04 100644
Binary files a/bin/jalview/appletgui/SeqCanvas.class and b/bin/jalview/appletgui/SeqCanvas.class differ
diff --git a/bin/jalview/appletgui/SeqCanvas.js b/bin/jalview/appletgui/SeqCanvas.js
index ac84c24..af5372b 100644
--- a/bin/jalview/appletgui/SeqCanvas.js
+++ b/bin/jalview/appletgui/SeqCanvas.js
@@ -1,411 +1,411 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel"], "jalview.appletgui.SeqCanvas", ["jalview.appletgui.AnnotationPanel", "$.FeatureRenderer", "$.PaintRefresher", "$.SequenceRenderer", "jalview.util.Comparison", "java.awt.Color"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fr = null;
-this.sr = null;
-this.img = null;
-this.gg = null;
-this.imgWidth = 0;
-this.imgHeight = 0;
-this.av = null;
-this.searchResults = null;
-this.$fastPaint = false;
-this.cursorX = 0;
-this.cursorY = 0;
-this.avcharHeight = 0;
-this.avcharWidth = 0;
-this.lastsr = 0;
-this.LABEL_WEST = 0;
-this.LABEL_EAST = 0;
-this.annotations = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "SeqCanvas", awt2swing.Panel);
-Clazz.makeConstructor (c$,
-function (av) {
-Clazz.superConstructor (this, jalview.appletgui.SeqCanvas, []);
-this.av = av;
-this.fr = new jalview.appletgui.FeatureRenderer (av);
-this.sr = new jalview.appletgui.SequenceRenderer (av);
-jalview.appletgui.PaintRefresher.Register (this, av.getSequenceSetId ());
-this.updateViewport ();
-}, "jalview.appletgui.AlignViewport");
-Clazz.defineMethod (c$, "updateViewport",
-($fz = function () {
-this.avcharHeight = this.av.getCharHeight ();
-this.avcharWidth = this.av.getCharWidth ();
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getViewport",
-function () {
-return this.av;
-});
-Clazz.defineMethod (c$, "getFeatureRenderer",
-function () {
-return this.fr;
-});
-Clazz.defineMethod (c$, "getSequenceRenderer",
-function () {
-return this.sr;
-});
-Clazz.defineMethod (c$, "drawNorthScale",
-($fz = function (g, startx, endx, ypos) {
-var scalestartx = startx - startx % 10 + 10;
-g.setColor (java.awt.Color.black);
-for (var i = scalestartx; i < endx; i += 10) {
-var value = i;
-if (this.av.hasHiddenColumns ()) {
-value = this.av.getColumnSelection ().adjustForHiddenColumns (value);
-}g.drawString (String.valueOf (value), (i - startx - 1) * this.avcharWidth, ypos - (Clazz.doubleToInt (this.avcharHeight / 2)));
-g.drawLine (((i - startx - 1) * this.avcharWidth) + (Clazz.doubleToInt (this.avcharWidth / 2)), (ypos + 2) - (Clazz.doubleToInt (this.avcharHeight / 2)), ((i - startx - 1) * this.avcharWidth) + (Clazz.doubleToInt (this.avcharWidth / 2)), ypos - 2);
-}
-}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
-Clazz.defineMethod (c$, "drawWestScale",
-($fz = function (g, startx, endx, ypos) {
-var fm = this.getFontMetrics (this.av.getFont ());
-ypos += this.avcharHeight;
-if (this.av.hasHiddenColumns ()) {
-startx = this.av.getColumnSelection ().adjustForHiddenColumns (startx);
-endx = this.av.getColumnSelection ().adjustForHiddenColumns (endx);
-}var maxwidth = this.av.getAlignment ().getWidth ();
-if (this.av.hasHiddenColumns ()) {
-maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
-}for (var i = 0; i < this.av.getAlignment ().getHeight (); i++) {
-var seq = this.av.getAlignment ().getSequenceAt (i);
-var index = startx;
-var value = -1;
-while (index < endx) {
-if (jalview.util.Comparison.isGap (seq.getCharAt (index))) {
-index++;
-continue;
-}value = this.av.getAlignment ().getSequenceAt (i).findPosition (index);
-break;
-}
-if (value != -1) {
-var x = this.LABEL_WEST - fm.stringWidth (String.valueOf (value)) - Clazz.doubleToInt (this.avcharWidth / 2);
-g.drawString (value + "", x, (ypos + (i * this.avcharHeight)) - (Clazz.doubleToInt (this.avcharHeight / 5)));
-}}
-}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
-Clazz.defineMethod (c$, "drawEastScale",
-($fz = function (g, startx, endx, ypos) {
-ypos += this.avcharHeight;
-if (this.av.hasHiddenColumns ()) {
-endx = this.av.getColumnSelection ().adjustForHiddenColumns (endx);
-}var seq;
-for (var i = 0; i < this.av.getAlignment ().getHeight (); i++) {
-seq = this.av.getAlignment ().getSequenceAt (i);
-var index = endx;
-var value = -1;
-while (index > startx) {
-if (jalview.util.Comparison.isGap (seq.getCharAt (index))) {
-index--;
-continue;
-}value = seq.findPosition (index);
-break;
-}
-if (value != -1) {
-g.drawString (String.valueOf (value), 0, (ypos + (i * this.avcharHeight)) - (Clazz.doubleToInt (this.avcharHeight / 5)));
-}}
-}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
-Clazz.defineMethod (c$, "fastPaint",
-function (horizontal, vertical) {
-if (this.$fastPaint || this.gg == null) {
-return;
-}this.updateViewport ();
-if (this.lastsr + horizontal != this.av.startRes) {
-horizontal = this.av.startRes - this.lastsr;
-}this.lastsr = this.av.startRes;
-this.$fastPaint = true;
-this.gg.copyArea (horizontal * this.avcharWidth, vertical * this.avcharHeight, this.imgWidth - horizontal * this.avcharWidth, this.imgHeight - vertical * this.avcharHeight, -horizontal * this.avcharWidth, -vertical * this.avcharHeight);
-var sr = this.av.startRes;
-var er = this.av.endRes;
-var ss = this.av.startSeq;
-var es = this.av.endSeq;
-var transX = 0;
-var transY = 0;
-if (horizontal > 0) {
-transX = (er - sr - horizontal) * this.avcharWidth;
-sr = er - horizontal;
-} else if (horizontal < 0) {
-er = sr - horizontal;
-} else if (vertical > 0) {
-ss = es - vertical;
-if (ss < this.av.startSeq) {
-ss = this.av.startSeq;
-} else {
-transY = this.imgHeight - vertical * this.avcharHeight;
-}} else if (vertical < 0) {
-es = ss - vertical;
-if (es > this.av.endSeq) {
-es = this.av.endSeq;
-}}this.gg.translate (transX, transY);
-this.drawPanel (this.gg, sr, er, ss, es, 0);
-this.gg.translate (-transX, -transY);
-this.repaint ();
-}, "~N,~N");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-if (this.img != null && (this.$fastPaint || (this.getSize ().width != g.getClipBounds ().width) || (this.getSize ().height != g.getClipBounds ().height))) {
-g.drawImage (this.img, 0, 0, this);
-this.$fastPaint = false;
-return;
-}if (this.$fastPaint) {
-g.drawImage (this.img, 0, 0, this);
-this.$fastPaint = false;
-return;
-}this.updateViewport ();
-this.imgWidth = this.getSize ().width;
-this.imgHeight = this.getSize ().height;
-this.imgWidth -= this.imgWidth % this.avcharWidth;
-this.imgHeight -= this.imgHeight % this.avcharHeight;
-if (this.imgWidth < 1 || this.imgHeight < 1) {
-return;
-}if (this.img == null || this.imgWidth != this.img.getWidth (this) || this.imgHeight != this.img.getHeight (this)) {
-this.img = this.createImage (this.imgWidth, this.imgHeight);
-this.gg = this.img.getGraphics ();
-this.gg.setFont (this.av.getFont ());
-}this.gg.setColor (java.awt.Color.white);
-this.gg.fillRect (0, 0, this.imgWidth, this.imgHeight);
-if (this.av.getWrapAlignment ()) {
-this.drawWrappedPanel (this.gg, this.imgWidth, this.imgHeight, this.av.startRes);
-} else {
-this.drawPanel (this.gg, this.av.startRes, this.av.endRes, this.av.startSeq, this.av.endSeq, 0);
-}g.drawImage (this.img, 0, 0, this);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "getWrappedCanvasWidth",
-function (cwidth) {
-cwidth -= cwidth % this.av.getCharWidth ();
-var fm = this.getFontMetrics (this.av.getFont ());
-this.LABEL_EAST = 0;
-this.LABEL_WEST = 0;
-if (this.av.getScaleRightWrapped ()) {
-this.LABEL_EAST = fm.stringWidth (this.getMask ());
-}if (this.av.getScaleLeftWrapped ()) {
-this.LABEL_WEST = fm.stringWidth (this.getMask ());
-}return Clazz.doubleToInt ((cwidth - this.LABEL_EAST - this.LABEL_WEST) / this.av.getCharWidth ());
-}, "~N");
-Clazz.defineMethod (c$, "getMask",
-function () {
-var mask = "0";
-var maxWidth = 0;
-var tmp;
-var alignment = this.av.getAlignment ();
-for (var i = 0; i < alignment.getHeight (); i++) {
-tmp = alignment.getSequenceAt (i).getEnd ();
-if (tmp > maxWidth) {
-maxWidth = tmp;
-}}
-for (var i = maxWidth; i > 0; i /= 10) {
-mask += "0";
-}
-return mask;
-});
-Clazz.defineMethod (c$, "drawWrappedPanel",
-($fz = function (g, canvasWidth, canvasHeight, startRes) {
-var al = this.av.getAlignment ();
-var fm = this.getFontMetrics (this.av.getFont ());
-if (this.av.getScaleRightWrapped ()) {
-this.LABEL_EAST = fm.stringWidth (this.getMask ());
-}if (this.av.getScaleLeftWrapped ()) {
-this.LABEL_WEST = fm.stringWidth (this.getMask ());
-}var hgap = this.avcharHeight;
-if (this.av.getScaleAboveWrapped ()) {
-hgap += this.avcharHeight;
-}var cWidth = Clazz.doubleToInt ((canvasWidth - this.LABEL_EAST - this.LABEL_WEST) / this.avcharWidth);
-var cHeight = this.av.getAlignment ().getHeight () * this.avcharHeight;
-this.av.setWrappedWidth (cWidth);
-this.av.endRes = this.av.startRes + cWidth;
-var endx;
-var ypos = hgap;
-var maxwidth = this.av.getAlignment ().getWidth () - 1;
-if (this.av.hasHiddenColumns ()) {
-maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
-}while ((ypos <= canvasHeight) && (startRes < maxwidth)) {
-endx = startRes + cWidth - 1;
-if (endx > maxwidth) {
-endx = maxwidth;
-}g.setColor (java.awt.Color.black);
-if (this.av.getScaleLeftWrapped ()) {
-this.drawWestScale (g, startRes, endx, ypos);
-}if (this.av.getScaleRightWrapped ()) {
-g.translate (canvasWidth - this.LABEL_EAST, 0);
-this.drawEastScale (g, startRes, endx, ypos);
-g.translate (-(canvasWidth - this.LABEL_EAST), 0);
-}g.translate (this.LABEL_WEST, 0);
-if (this.av.getScaleAboveWrapped ()) {
-this.drawNorthScale (g, startRes, endx, ypos);
-}if (this.av.hasHiddenColumns () && this.av.getShowHiddenMarkers ()) {
-g.setColor (java.awt.Color.blue);
-var res;
-for (var i = 0; i < this.av.getColumnSelection ().getHiddenColumns ().size (); i++) {
-res = this.av.getColumnSelection ().findHiddenRegionPosition (i) - startRes;
-if (res < 0 || res > endx - startRes) {
-continue;
-}this.gg.fillPolygon ( Clazz.newIntArray (-1, [res * this.avcharWidth - Clazz.doubleToInt (this.avcharHeight / 4), res * this.avcharWidth + Clazz.doubleToInt (this.avcharHeight / 4), res * this.avcharWidth]), Clazz.newIntArray (-1, [ypos - (Clazz.doubleToInt (this.avcharHeight / 2)), ypos - (Clazz.doubleToInt (this.avcharHeight / 2)), ypos - (Clazz.doubleToInt (this.avcharHeight / 2)) + 8]), 3);
-}
-}if (g.getClip () == null) {
-g.setClip (0, 0, cWidth * this.avcharWidth, canvasHeight);
-}this.drawPanel (g, startRes, endx, 0, al.getHeight (), ypos);
-g.setClip (null);
-if (this.av.isShowAnnotation ()) {
-g.translate (0, cHeight + ypos + 4);
-if (this.annotations == null) {
-this.annotations = new jalview.appletgui.AnnotationPanel (this.av);
-}this.annotations.drawComponent (g, startRes, endx + 1);
-g.translate (0, -cHeight - ypos - 4);
-}g.translate (-this.LABEL_WEST, 0);
-ypos += cHeight + this.getAnnotationHeight () + hgap;
-startRes += cWidth;
-}
-}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
-Clazz.defineMethod (c$, "getAnnotationHeight",
-function () {
-if (!this.av.isShowAnnotation ()) {
-return 0;
-}if (this.annotations == null) {
-this.annotations = new jalview.appletgui.AnnotationPanel (this.av);
-}return this.annotations.adjustPanelHeight ();
-});
-Clazz.defineMethod (c$, "drawPanel",
-($fz = function (g1, startRes, endRes, startSeq, endSeq, offset) {
-if (!this.av.hasHiddenColumns ()) {
-this.draw (g1, startRes, endRes, startSeq, endSeq, offset);
-} else {
-var screenY = 0;
-var blockStart = startRes;
-var blockEnd = endRes;
-if (this.av.hasHiddenColumns ()) {
-for (var region, $region = this.av.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
-var hideStart = region[0];
-var hideEnd = region[1];
-if (hideStart <= blockStart) {
-blockStart += (hideEnd - hideStart) + 1;
-continue;
-}blockEnd = hideStart - 1;
-g1.translate (screenY * this.avcharWidth, 0);
-this.draw (g1, blockStart, blockEnd, startSeq, endSeq, offset);
-if (this.av.getShowHiddenMarkers ()) {
-g1.setColor (java.awt.Color.blue);
-g1.drawLine ((blockEnd - blockStart + 1) * this.avcharWidth - 1, 0 + offset, (blockEnd - blockStart + 1) * this.avcharWidth - 1, (endSeq - startSeq) * this.avcharHeight + offset);
-}g1.translate (-screenY * this.avcharWidth, 0);
-screenY += blockEnd - blockStart + 1;
-blockStart = hideEnd + 1;
-}
-}if (screenY <= (endRes - startRes)) {
-blockEnd = blockStart + (endRes - startRes) - screenY;
-g1.translate (screenY * this.avcharWidth, 0);
-this.draw (g1, blockStart, blockEnd, startSeq, endSeq, offset);
-g1.translate (-screenY * this.avcharWidth, 0);
-}}}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "draw",
-function (g, startRes, endRes, startSeq, endSeq, offset) {
-g.setFont (this.av.getFont ());
-this.sr.prepare (g, this.av.isRenderGaps ());
-this.updateViewport ();
-var nextSeq;
-for (var i = startSeq; i < endSeq; i++) {
-nextSeq = this.av.getAlignment ().getSequenceAt (i);
-if (nextSeq == null) {
-continue;
-}this.sr.drawSequence (nextSeq, this.av.getAlignment ().findAllGroups (nextSeq), startRes, endRes, offset + ((i - startSeq) * this.avcharHeight));
-if (this.av.isShowSequenceFeatures ()) {
-this.fr.drawSequence (g, nextSeq, startRes, endRes, offset + ((i - startSeq) * this.avcharHeight));
-}if (this.searchResults != null) {
-var visibleResults = this.searchResults.getResults (nextSeq, startRes, endRes);
-if (visibleResults != null) {
-for (var r = 0; r < visibleResults.length; r += 2) {
-this.sr.drawHighlightedText (nextSeq, visibleResults[r], visibleResults[r + 1], (visibleResults[r] - startRes) * this.avcharWidth, offset + ((i - startSeq) * this.avcharHeight));
-}
-}}if (this.av.cursorMode && this.cursorY == i && this.cursorX >= startRes && this.cursorX <= endRes) {
-this.sr.drawCursor (nextSeq, this.cursorX, (this.cursorX - startRes) * this.avcharWidth, offset + ((i - startSeq) * this.avcharHeight));
-}}
-if (this.av.getSelectionGroup () != null || this.av.getAlignment ().getGroups ().size () > 0) {
-this.drawGroupsBoundaries (g, startRes, endRes, startSeq, endSeq, offset);
-}}, "java.awt.Graphics,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "drawGroupsBoundaries",
-($fz = function (g, startRes, endRes, startSeq, endSeq, offset) {
-var group = this.av.getSelectionGroup ();
-var sx = -1;
-var sy = -1;
-var ex = -1;
-var groupIndex = -1;
-if ((group == null) && (this.av.getAlignment ().getGroups ().size () > 0)) {
-group = this.av.getAlignment ().getGroups ().get (0);
-groupIndex = 0;
-}if (group != null) {
-do {
-var oldY = -1;
-var i = 0;
-var inGroup = false;
-var top = -1;
-var bottom = -1;
-var alHeight = this.av.getAlignment ().getHeight () - 1;
-for (i = startSeq; i < endSeq; i++) {
-sx = (group.getStartRes () - startRes) * this.avcharWidth;
-sy = offset + ((i - startSeq) * this.avcharHeight);
-ex = (((group.getEndRes () + 1) - group.getStartRes ()) * this.avcharWidth) - 1;
-if (sx + ex < 0 || sx > this.imgWidth) {
-continue;
-}if ((sx <= (endRes - startRes) * this.avcharWidth) && group.getSequences (null).contains (this.av.getAlignment ().getSequenceAt (i))) {
-if ((bottom == -1) && (i >= alHeight || !group.getSequences (null).contains (this.av.getAlignment ().getSequenceAt (i + 1)))) {
-bottom = sy + this.avcharHeight;
-}if (!inGroup) {
-if (((top == -1) && (i == 0)) || !group.getSequences (null).contains (this.av.getAlignment ().getSequenceAt (i - 1))) {
-top = sy;
-}oldY = sy;
-inGroup = true;
-if (group === this.av.getSelectionGroup ()) {
-g.setColor (java.awt.Color.red);
-} else {
-g.setColor (group.getOutlineColour ());
-}}} else {
-if (inGroup) {
-if (sx >= 0 && sx < this.imgWidth) {
-g.drawLine (sx, oldY, sx, sy);
-}if (sx + ex < this.imgWidth) {
-g.drawLine (sx + ex, oldY, sx + ex, sy);
-}if (sx < 0) {
-ex += sx;
-sx = 0;
-}if (sx + ex > this.imgWidth) {
-ex = this.imgWidth;
-} else if (sx + ex >= (endRes - startRes + 1) * this.avcharWidth) {
-ex = (endRes - startRes + 1) * this.avcharWidth;
-}if (top != -1) {
-g.drawLine (sx, top, sx + ex, top);
-top = -1;
-}if (bottom != -1) {
-g.drawLine (sx, bottom, sx + ex, bottom);
-bottom = -1;
-}inGroup = false;
-}}}
-if (inGroup) {
-sy = offset + ((i - startSeq) * this.avcharHeight);
-if (sx >= 0 && sx < this.imgWidth) {
-g.drawLine (sx, oldY, sx, sy);
-}if (sx + ex < this.imgWidth) {
-g.drawLine (sx + ex, oldY, sx + ex, sy);
-}if (sx < 0) {
-ex += sx;
-sx = 0;
-}if (sx + ex > this.imgWidth) {
-ex = this.imgWidth;
-} else if (sx + ex >= (endRes - startRes + 1) * this.avcharWidth) {
-ex = (endRes - startRes + 1) * this.avcharWidth;
-}if (top != -1) {
-g.drawLine (sx, top, sx + ex, top);
-top = -1;
-}if (bottom != -1) {
-g.drawLine (sx, bottom - 1, sx + ex, bottom - 1);
-bottom = -1;
-}inGroup = false;
-}groupIndex++;
-if (groupIndex >= this.av.getAlignment ().getGroups ().size ()) {
-break;
-}group = this.av.getAlignment ().getGroups ().get (groupIndex);
-} while (groupIndex < this.av.getAlignment ().getGroups ().size ());
-}}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "highlightSearchResults",
-function (results) {
-this.searchResults = results;
-this.repaint ();
-}, "jalview.datamodel.SearchResults");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel"], "jalview.appletgui.SeqCanvas", ["jalview.appletgui.AnnotationPanel", "$.FeatureRenderer", "$.PaintRefresher", "$.SequenceRenderer", "jalview.util.Comparison", "java.awt.Color"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fr = null;
+this.sr = null;
+this.img = null;
+this.gg = null;
+this.imgWidth = 0;
+this.imgHeight = 0;
+this.av = null;
+this.searchResults = null;
+this.$fastPaint = false;
+this.cursorX = 0;
+this.cursorY = 0;
+this.avcharHeight = 0;
+this.avcharWidth = 0;
+this.lastsr = 0;
+this.LABEL_WEST = 0;
+this.LABEL_EAST = 0;
+this.annotations = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "SeqCanvas", awt2swing.Panel);
+Clazz.makeConstructor (c$,
+function (av) {
+Clazz.superConstructor (this, jalview.appletgui.SeqCanvas, []);
+this.av = av;
+this.fr = new jalview.appletgui.FeatureRenderer (av);
+this.sr = new jalview.appletgui.SequenceRenderer (av);
+jalview.appletgui.PaintRefresher.Register (this, av.getSequenceSetId ());
+this.updateViewport ();
+}, "jalview.appletgui.AlignViewport");
+Clazz.defineMethod (c$, "updateViewport",
+($fz = function () {
+this.avcharHeight = this.av.getCharHeight ();
+this.avcharWidth = this.av.getCharWidth ();
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getViewport",
+function () {
+return this.av;
+});
+Clazz.defineMethod (c$, "getFeatureRenderer",
+function () {
+return this.fr;
+});
+Clazz.defineMethod (c$, "getSequenceRenderer",
+function () {
+return this.sr;
+});
+Clazz.defineMethod (c$, "drawNorthScale",
+($fz = function (g, startx, endx, ypos) {
+var scalestartx = startx - startx % 10 + 10;
+g.setColor (java.awt.Color.black);
+for (var i = scalestartx; i < endx; i += 10) {
+var value = i;
+if (this.av.hasHiddenColumns ()) {
+value = this.av.getColumnSelection ().adjustForHiddenColumns (value);
+}g.drawString (String.valueOf (value), (i - startx - 1) * this.avcharWidth, ypos - (Clazz.doubleToInt (this.avcharHeight / 2)));
+g.drawLine (((i - startx - 1) * this.avcharWidth) + (Clazz.doubleToInt (this.avcharWidth / 2)), (ypos + 2) - (Clazz.doubleToInt (this.avcharHeight / 2)), ((i - startx - 1) * this.avcharWidth) + (Clazz.doubleToInt (this.avcharWidth / 2)), ypos - 2);
+}
+}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
+Clazz.defineMethod (c$, "drawWestScale",
+($fz = function (g, startx, endx, ypos) {
+var fm = this.getFontMetrics (this.av.getFont ());
+ypos += this.avcharHeight;
+if (this.av.hasHiddenColumns ()) {
+startx = this.av.getColumnSelection ().adjustForHiddenColumns (startx);
+endx = this.av.getColumnSelection ().adjustForHiddenColumns (endx);
+}var maxwidth = this.av.getAlignment ().getWidth ();
+if (this.av.hasHiddenColumns ()) {
+maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
+}for (var i = 0; i < this.av.getAlignment ().getHeight (); i++) {
+var seq = this.av.getAlignment ().getSequenceAt (i);
+var index = startx;
+var value = -1;
+while (index < endx) {
+if (jalview.util.Comparison.isGap (seq.getCharAt (index))) {
+index++;
+continue;
+}value = this.av.getAlignment ().getSequenceAt (i).findPosition (index);
+break;
+}
+if (value != -1) {
+var x = this.LABEL_WEST - fm.stringWidth (String.valueOf (value)) - Clazz.doubleToInt (this.avcharWidth / 2);
+g.drawString (value + "", x, (ypos + (i * this.avcharHeight)) - (Clazz.doubleToInt (this.avcharHeight / 5)));
+}}
+}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
+Clazz.defineMethod (c$, "drawEastScale",
+($fz = function (g, startx, endx, ypos) {
+ypos += this.avcharHeight;
+if (this.av.hasHiddenColumns ()) {
+endx = this.av.getColumnSelection ().adjustForHiddenColumns (endx);
+}var seq;
+for (var i = 0; i < this.av.getAlignment ().getHeight (); i++) {
+seq = this.av.getAlignment ().getSequenceAt (i);
+var index = endx;
+var value = -1;
+while (index > startx) {
+if (jalview.util.Comparison.isGap (seq.getCharAt (index))) {
+index--;
+continue;
+}value = seq.findPosition (index);
+break;
+}
+if (value != -1) {
+g.drawString (String.valueOf (value), 0, (ypos + (i * this.avcharHeight)) - (Clazz.doubleToInt (this.avcharHeight / 5)));
+}}
+}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
+Clazz.defineMethod (c$, "fastPaint",
+function (horizontal, vertical) {
+if (this.$fastPaint || this.gg == null) {
+return;
+}this.updateViewport ();
+if (this.lastsr + horizontal != this.av.startRes) {
+horizontal = this.av.startRes - this.lastsr;
+}this.lastsr = this.av.startRes;
+this.$fastPaint = true;
+this.gg.copyArea (horizontal * this.avcharWidth, vertical * this.avcharHeight, this.imgWidth - horizontal * this.avcharWidth, this.imgHeight - vertical * this.avcharHeight, -horizontal * this.avcharWidth, -vertical * this.avcharHeight);
+var sr = this.av.startRes;
+var er = this.av.endRes;
+var ss = this.av.startSeq;
+var es = this.av.endSeq;
+var transX = 0;
+var transY = 0;
+if (horizontal > 0) {
+transX = (er - sr - horizontal) * this.avcharWidth;
+sr = er - horizontal;
+} else if (horizontal < 0) {
+er = sr - horizontal;
+} else if (vertical > 0) {
+ss = es - vertical;
+if (ss < this.av.startSeq) {
+ss = this.av.startSeq;
+} else {
+transY = this.imgHeight - vertical * this.avcharHeight;
+}} else if (vertical < 0) {
+es = ss - vertical;
+if (es > this.av.endSeq) {
+es = this.av.endSeq;
+}}this.gg.translate (transX, transY);
+this.drawPanel (this.gg, sr, er, ss, es, 0);
+this.gg.translate (-transX, -transY);
+this.repaint ();
+}, "~N,~N");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+if (this.img != null && (this.$fastPaint || (this.getSize ().width != g.getClipBounds ().width) || (this.getSize ().height != g.getClipBounds ().height))) {
+g.drawImage (this.img, 0, 0, this);
+this.$fastPaint = false;
+return;
+}if (this.$fastPaint) {
+g.drawImage (this.img, 0, 0, this);
+this.$fastPaint = false;
+return;
+}this.updateViewport ();
+this.imgWidth = this.getSize ().width;
+this.imgHeight = this.getSize ().height;
+this.imgWidth -= this.imgWidth % this.avcharWidth;
+this.imgHeight -= this.imgHeight % this.avcharHeight;
+if (this.imgWidth < 1 || this.imgHeight < 1) {
+return;
+}if (this.img == null || this.imgWidth != this.img.getWidth (this) || this.imgHeight != this.img.getHeight (this)) {
+this.img = this.createImage (this.imgWidth, this.imgHeight);
+this.gg = this.img.getGraphics ();
+this.gg.setFont (this.av.getFont ());
+}this.gg.setColor (java.awt.Color.white);
+this.gg.fillRect (0, 0, this.imgWidth, this.imgHeight);
+if (this.av.getWrapAlignment ()) {
+this.drawWrappedPanel (this.gg, this.imgWidth, this.imgHeight, this.av.startRes);
+} else {
+this.drawPanel (this.gg, this.av.startRes, this.av.endRes, this.av.startSeq, this.av.endSeq, 0);
+}g.drawImage (this.img, 0, 0, this);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "getWrappedCanvasWidth",
+function (cwidth) {
+cwidth -= cwidth % this.av.getCharWidth ();
+var fm = this.getFontMetrics (this.av.getFont ());
+this.LABEL_EAST = 0;
+this.LABEL_WEST = 0;
+if (this.av.getScaleRightWrapped ()) {
+this.LABEL_EAST = fm.stringWidth (this.getMask ());
+}if (this.av.getScaleLeftWrapped ()) {
+this.LABEL_WEST = fm.stringWidth (this.getMask ());
+}return Clazz.doubleToInt ((cwidth - this.LABEL_EAST - this.LABEL_WEST) / this.av.getCharWidth ());
+}, "~N");
+Clazz.defineMethod (c$, "getMask",
+function () {
+var mask = "0";
+var maxWidth = 0;
+var tmp;
+var alignment = this.av.getAlignment ();
+for (var i = 0; i < alignment.getHeight (); i++) {
+tmp = alignment.getSequenceAt (i).getEnd ();
+if (tmp > maxWidth) {
+maxWidth = tmp;
+}}
+for (var i = maxWidth; i > 0; i /= 10) {
+mask += "0";
+}
+return mask;
+});
+Clazz.defineMethod (c$, "drawWrappedPanel",
+($fz = function (g, canvasWidth, canvasHeight, startRes) {
+var al = this.av.getAlignment ();
+var fm = this.getFontMetrics (this.av.getFont ());
+if (this.av.getScaleRightWrapped ()) {
+this.LABEL_EAST = fm.stringWidth (this.getMask ());
+}if (this.av.getScaleLeftWrapped ()) {
+this.LABEL_WEST = fm.stringWidth (this.getMask ());
+}var hgap = this.avcharHeight;
+if (this.av.getScaleAboveWrapped ()) {
+hgap += this.avcharHeight;
+}var cWidth = Clazz.doubleToInt ((canvasWidth - this.LABEL_EAST - this.LABEL_WEST) / this.avcharWidth);
+var cHeight = this.av.getAlignment ().getHeight () * this.avcharHeight;
+this.av.setWrappedWidth (cWidth);
+this.av.endRes = this.av.startRes + cWidth;
+var endx;
+var ypos = hgap;
+var maxwidth = this.av.getAlignment ().getWidth () - 1;
+if (this.av.hasHiddenColumns ()) {
+maxwidth = this.av.getColumnSelection ().findColumnPosition (maxwidth) - 1;
+}while ((ypos <= canvasHeight) && (startRes < maxwidth)) {
+endx = startRes + cWidth - 1;
+if (endx > maxwidth) {
+endx = maxwidth;
+}g.setColor (java.awt.Color.black);
+if (this.av.getScaleLeftWrapped ()) {
+this.drawWestScale (g, startRes, endx, ypos);
+}if (this.av.getScaleRightWrapped ()) {
+g.translate (canvasWidth - this.LABEL_EAST, 0);
+this.drawEastScale (g, startRes, endx, ypos);
+g.translate (-(canvasWidth - this.LABEL_EAST), 0);
+}g.translate (this.LABEL_WEST, 0);
+if (this.av.getScaleAboveWrapped ()) {
+this.drawNorthScale (g, startRes, endx, ypos);
+}if (this.av.hasHiddenColumns () && this.av.getShowHiddenMarkers ()) {
+g.setColor (java.awt.Color.blue);
+var res;
+for (var i = 0; i < this.av.getColumnSelection ().getHiddenColumns ().size (); i++) {
+res = this.av.getColumnSelection ().findHiddenRegionPosition (i) - startRes;
+if (res < 0 || res > endx - startRes) {
+continue;
+}this.gg.fillPolygon ( Clazz.newIntArray (-1, [res * this.avcharWidth - Clazz.doubleToInt (this.avcharHeight / 4), res * this.avcharWidth + Clazz.doubleToInt (this.avcharHeight / 4), res * this.avcharWidth]), Clazz.newIntArray (-1, [ypos - (Clazz.doubleToInt (this.avcharHeight / 2)), ypos - (Clazz.doubleToInt (this.avcharHeight / 2)), ypos - (Clazz.doubleToInt (this.avcharHeight / 2)) + 8]), 3);
+}
+}if (g.getClip () == null) {
+g.setClip (0, 0, cWidth * this.avcharWidth, canvasHeight);
+}this.drawPanel (g, startRes, endx, 0, al.getHeight (), ypos);
+g.setClip (null);
+if (this.av.isShowAnnotation ()) {
+g.translate (0, cHeight + ypos + 4);
+if (this.annotations == null) {
+this.annotations = new jalview.appletgui.AnnotationPanel (this.av);
+}this.annotations.drawComponent (g, startRes, endx + 1);
+g.translate (0, -cHeight - ypos - 4);
+}g.translate (-this.LABEL_WEST, 0);
+ypos += cHeight + this.getAnnotationHeight () + hgap;
+startRes += cWidth;
+}
+}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N");
+Clazz.defineMethod (c$, "getAnnotationHeight",
+function () {
+if (!this.av.isShowAnnotation ()) {
+return 0;
+}if (this.annotations == null) {
+this.annotations = new jalview.appletgui.AnnotationPanel (this.av);
+}return this.annotations.adjustPanelHeight ();
+});
+Clazz.defineMethod (c$, "drawPanel",
+($fz = function (g1, startRes, endRes, startSeq, endSeq, offset) {
+if (!this.av.hasHiddenColumns ()) {
+this.draw (g1, startRes, endRes, startSeq, endSeq, offset);
+} else {
+var screenY = 0;
+var blockStart = startRes;
+var blockEnd = endRes;
+if (this.av.hasHiddenColumns ()) {
+for (var region, $region = this.av.getColumnSelection ().getHiddenColumns ().iterator (); $region.hasNext () && ((region = $region.next ()) || true);) {
+var hideStart = region[0];
+var hideEnd = region[1];
+if (hideStart <= blockStart) {
+blockStart += (hideEnd - hideStart) + 1;
+continue;
+}blockEnd = hideStart - 1;
+g1.translate (screenY * this.avcharWidth, 0);
+this.draw (g1, blockStart, blockEnd, startSeq, endSeq, offset);
+if (this.av.getShowHiddenMarkers ()) {
+g1.setColor (java.awt.Color.blue);
+g1.drawLine ((blockEnd - blockStart + 1) * this.avcharWidth - 1, 0 + offset, (blockEnd - blockStart + 1) * this.avcharWidth - 1, (endSeq - startSeq) * this.avcharHeight + offset);
+}g1.translate (-screenY * this.avcharWidth, 0);
+screenY += blockEnd - blockStart + 1;
+blockStart = hideEnd + 1;
+}
+}if (screenY <= (endRes - startRes)) {
+blockEnd = blockStart + (endRes - startRes) - screenY;
+g1.translate (screenY * this.avcharWidth, 0);
+this.draw (g1, blockStart, blockEnd, startSeq, endSeq, offset);
+g1.translate (-screenY * this.avcharWidth, 0);
+}}}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "draw",
+function (g, startRes, endRes, startSeq, endSeq, offset) {
+g.setFont (this.av.getFont ());
+this.sr.prepare (g, this.av.isRenderGaps ());
+this.updateViewport ();
+var nextSeq;
+for (var i = startSeq; i < endSeq; i++) {
+nextSeq = this.av.getAlignment ().getSequenceAt (i);
+if (nextSeq == null) {
+continue;
+}this.sr.drawSequence (nextSeq, this.av.getAlignment ().findAllGroups (nextSeq), startRes, endRes, offset + ((i - startSeq) * this.avcharHeight));
+if (this.av.isShowSequenceFeatures ()) {
+this.fr.drawSequence (g, nextSeq, startRes, endRes, offset + ((i - startSeq) * this.avcharHeight));
+}if (this.searchResults != null) {
+var visibleResults = this.searchResults.getResults (nextSeq, startRes, endRes);
+if (visibleResults != null) {
+for (var r = 0; r < visibleResults.length; r += 2) {
+this.sr.drawHighlightedText (nextSeq, visibleResults[r], visibleResults[r + 1], (visibleResults[r] - startRes) * this.avcharWidth, offset + ((i - startSeq) * this.avcharHeight));
+}
+}}if (this.av.cursorMode && this.cursorY == i && this.cursorX >= startRes && this.cursorX <= endRes) {
+this.sr.drawCursor (nextSeq, this.cursorX, (this.cursorX - startRes) * this.avcharWidth, offset + ((i - startSeq) * this.avcharHeight));
+}}
+if (this.av.getSelectionGroup () != null || this.av.getAlignment ().getGroups ().size () > 0) {
+this.drawGroupsBoundaries (g, startRes, endRes, startSeq, endSeq, offset);
+}}, "java.awt.Graphics,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "drawGroupsBoundaries",
+($fz = function (g, startRes, endRes, startSeq, endSeq, offset) {
+var group = this.av.getSelectionGroup ();
+var sx = -1;
+var sy = -1;
+var ex = -1;
+var groupIndex = -1;
+if ((group == null) && (this.av.getAlignment ().getGroups ().size () > 0)) {
+group = this.av.getAlignment ().getGroups ().get (0);
+groupIndex = 0;
+}if (group != null) {
+do {
+var oldY = -1;
+var i = 0;
+var inGroup = false;
+var top = -1;
+var bottom = -1;
+var alHeight = this.av.getAlignment ().getHeight () - 1;
+for (i = startSeq; i < endSeq; i++) {
+sx = (group.getStartRes () - startRes) * this.avcharWidth;
+sy = offset + ((i - startSeq) * this.avcharHeight);
+ex = (((group.getEndRes () + 1) - group.getStartRes ()) * this.avcharWidth) - 1;
+if (sx + ex < 0 || sx > this.imgWidth) {
+continue;
+}if ((sx <= (endRes - startRes) * this.avcharWidth) && group.getSequences (null).contains (this.av.getAlignment ().getSequenceAt (i))) {
+if ((bottom == -1) && (i >= alHeight || !group.getSequences (null).contains (this.av.getAlignment ().getSequenceAt (i + 1)))) {
+bottom = sy + this.avcharHeight;
+}if (!inGroup) {
+if (((top == -1) && (i == 0)) || !group.getSequences (null).contains (this.av.getAlignment ().getSequenceAt (i - 1))) {
+top = sy;
+}oldY = sy;
+inGroup = true;
+if (group === this.av.getSelectionGroup ()) {
+g.setColor (java.awt.Color.red);
+} else {
+g.setColor (group.getOutlineColour ());
+}}} else {
+if (inGroup) {
+if (sx >= 0 && sx < this.imgWidth) {
+g.drawLine (sx, oldY, sx, sy);
+}if (sx + ex < this.imgWidth) {
+g.drawLine (sx + ex, oldY, sx + ex, sy);
+}if (sx < 0) {
+ex += sx;
+sx = 0;
+}if (sx + ex > this.imgWidth) {
+ex = this.imgWidth;
+} else if (sx + ex >= (endRes - startRes + 1) * this.avcharWidth) {
+ex = (endRes - startRes + 1) * this.avcharWidth;
+}if (top != -1) {
+g.drawLine (sx, top, sx + ex, top);
+top = -1;
+}if (bottom != -1) {
+g.drawLine (sx, bottom, sx + ex, bottom);
+bottom = -1;
+}inGroup = false;
+}}}
+if (inGroup) {
+sy = offset + ((i - startSeq) * this.avcharHeight);
+if (sx >= 0 && sx < this.imgWidth) {
+g.drawLine (sx, oldY, sx, sy);
+}if (sx + ex < this.imgWidth) {
+g.drawLine (sx + ex, oldY, sx + ex, sy);
+}if (sx < 0) {
+ex += sx;
+sx = 0;
+}if (sx + ex > this.imgWidth) {
+ex = this.imgWidth;
+} else if (sx + ex >= (endRes - startRes + 1) * this.avcharWidth) {
+ex = (endRes - startRes + 1) * this.avcharWidth;
+}if (top != -1) {
+g.drawLine (sx, top, sx + ex, top);
+top = -1;
+}if (bottom != -1) {
+g.drawLine (sx, bottom - 1, sx + ex, bottom - 1);
+bottom = -1;
+}inGroup = false;
+}groupIndex++;
+if (groupIndex >= this.av.getAlignment ().getGroups ().size ()) {
+break;
+}group = this.av.getAlignment ().getGroups ().get (groupIndex);
+} while (groupIndex < this.av.getAlignment ().getGroups ().size ());
+}}, $fz.isPrivate = true, $fz), "java.awt.Graphics,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "highlightSearchResults",
+function (results) {
+this.searchResults = results;
+this.repaint ();
+}, "jalview.datamodel.SearchResults");
+});
diff --git a/bin/jalview/appletgui/SeqPanel.class b/bin/jalview/appletgui/SeqPanel.class
index 90a2222..f3e19d0 100644
Binary files a/bin/jalview/appletgui/SeqPanel.class and b/bin/jalview/appletgui/SeqPanel.class differ
diff --git a/bin/jalview/appletgui/SeqPanel.js b/bin/jalview/appletgui/SeqPanel.js
index 7f97353..d500d0e 100644
--- a/bin/jalview/appletgui/SeqPanel.js
+++ b/bin/jalview/appletgui/SeqPanel.js
@@ -1,962 +1,962 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "jalview.structure.SelectionListener", "$.SequenceListener", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.lang.Thread"], "jalview.appletgui.SeqPanel", ["jalview.api.AlignViewportI", "jalview.appletgui.APopupMenu", "$.AlignViewport", "$.PaintRefresher", "$.SeqCanvas", "$.SliderPanel", "$.Tooltip", "jalview.commands.EditCommand", "jalview.datamodel.ColumnSelection", "$.SearchResults", "$.SequenceGroup", "jalview.schemes.ResidueProperties", "jalview.structure.StructureSelectionManager", "jalview.util.Comparison", "$.MappingUtils", "$.MessageManager", "java.awt.BorderLayout", "$.Font", "java.lang.StringBuffer", "$.StringBuilder", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.seqCanvas = null;
-this.ap = null;
-this.lastres = 0;
-this.startseq = 0;
-this.av = null;
-this.seqEditOccurred = false;
-this.scrollThread = null;
-this.mouseDragging = false;
-this.editingSeqs = false;
-this.groupEditing = false;
-this.oldSeq = -1;
-this.changeEndSeq = false;
-this.changeStartSeq = false;
-this.changeEndRes = false;
-this.changeStartRes = false;
-this.stretchGroup = null;
-this.keyboardNo1 = null;
-this.keyboardNo2 = null;
-this.mouseWheelPressed = false;
-this.lastMousePress = null;
-this.editCommand = null;
-this.ssm = null;
-this.startWrapBlock = -1;
-this.wrappedBlock = -1;
-this.lastMessage = null;
-this.tooltip = null;
-if (!Clazz.isClassDefined ("jalview.appletgui.SeqPanel.ScrollThread")) {
-jalview.appletgui.SeqPanel.$SeqPanel$ScrollThread$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "SeqPanel", awt2swing.Panel, [java.awt.event.MouseMotionListener, java.awt.event.MouseListener, jalview.structure.SequenceListener, jalview.structure.SelectionListener]);
-Clazz.makeConstructor (c$,
-function (avp, p) {
-Clazz.superConstructor (this, jalview.appletgui.SeqPanel, []);
-this.av = avp;
-this.setName ("seqPanel");
-this.seqCanvas = new jalview.appletgui.SeqCanvas (avp);
-this.setLayout ( new java.awt.BorderLayout ());
-this.add (this.seqCanvas);
-this.ap = p;
-this.seqCanvas.addMouseMotionListener (this);
-this.seqCanvas.addMouseListener (this);
-this.ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);
-this.ssm.addStructureViewerListener (this);
-this.ssm.addSelectionListener (this);
-this.seqCanvas.repaint ();
-}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
-Clazz.defineMethod (c$, "endEditing",
-function () {
-if (this.editCommand != null && this.editCommand.getSize () > 0) {
-this.ap.alignFrame.addHistoryItem (this.editCommand);
-this.av.firePropertyChange ("alignment", null, this.av.getAlignment ().getSequences ());
-}this.startseq = -1;
-this.lastres = -1;
-this.editingSeqs = false;
-this.groupEditing = false;
-this.keyboardNo1 = null;
-this.keyboardNo2 = null;
-this.editCommand = null;
-});
-Clazz.defineMethod (c$, "setCursorRow",
-function () {
-this.seqCanvas.cursorY = this.getKeyboardNo1 () - 1;
-this.scrollToVisible ();
-});
-Clazz.defineMethod (c$, "setCursorColumn",
-function () {
-this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;
-this.scrollToVisible ();
-});
-Clazz.defineMethod (c$, "setCursorRowAndColumn",
-function () {
-if (this.keyboardNo2 == null) {
-this.keyboardNo2 = new StringBuffer ();
-} else {
-this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;
-this.seqCanvas.cursorY = this.getKeyboardNo2 () - 1;
-this.scrollToVisible ();
-}});
-Clazz.defineMethod (c$, "setCursorPosition",
-function () {
-var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);
-this.seqCanvas.cursorX = sequence.findIndex (this.getKeyboardNo1 ()) - 1;
-this.scrollToVisible ();
-});
-Clazz.defineMethod (c$, "moveCursor",
-function (dx, dy) {
-this.seqCanvas.cursorX += dx;
-this.seqCanvas.cursorY += dy;
-if (this.av.hasHiddenColumns () && !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {
-var original = this.seqCanvas.cursorX - dx;
-var maxWidth = this.av.getAlignment ().getWidth ();
-while (!this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX) && this.seqCanvas.cursorX < maxWidth && this.seqCanvas.cursorX > 0) {
-this.seqCanvas.cursorX += dx;
-}
-if (this.seqCanvas.cursorX >= maxWidth || !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {
-this.seqCanvas.cursorX = original;
-}}this.scrollToVisible ();
-}, "~N,~N");
-Clazz.defineMethod (c$, "scrollToVisible",
-function () {
-if (this.seqCanvas.cursorX < 0) {
-this.seqCanvas.cursorX = 0;
-} else if (this.seqCanvas.cursorX > this.av.getAlignment ().getWidth () - 1) {
-this.seqCanvas.cursorX = this.av.getAlignment ().getWidth () - 1;
-}if (this.seqCanvas.cursorY < 0) {
-this.seqCanvas.cursorY = 0;
-} else if (this.seqCanvas.cursorY > this.av.getAlignment ().getHeight () - 1) {
-this.seqCanvas.cursorY = this.av.getAlignment ().getHeight () - 1;
-}this.endEditing ();
-if (this.av.getWrapAlignment ()) {
-this.ap.scrollToWrappedVisible (this.seqCanvas.cursorX);
-} else {
-while (this.seqCanvas.cursorY < this.av.startSeq) {
-this.ap.scrollUp (true);
-}
-while (this.seqCanvas.cursorY + 1 > this.av.endSeq) {
-this.ap.scrollUp (false);
-}
-while (this.seqCanvas.cursorX < this.av.getColumnSelection ().adjustForHiddenColumns (this.av.startRes)) {
-if (!this.ap.scrollRight (false)) {
-break;
-}}
-while (this.seqCanvas.cursorX > this.av.getColumnSelection ().adjustForHiddenColumns (this.av.endRes)) {
-if (!this.ap.scrollRight (true)) {
-break;
-}}
-}this.setStatusMessage (this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY), this.seqCanvas.cursorX, this.seqCanvas.cursorY);
-this.seqCanvas.repaint ();
-});
-Clazz.defineMethod (c$, "setSelectionAreaAtCursor",
-function (topLeft) {
-var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);
-if (this.av.getSelectionGroup () != null) {
-var sg = this.av.getSelectionGroup ();
-var min = this.av.getAlignment ().getHeight ();
-var max = 0;
-for (var i = 0; i < sg.getSize (); i++) {
-var index = this.av.getAlignment ().findIndex (sg.getSequenceAt (i));
-if (index > max) {
-max = index;
-}if (index < min) {
-min = index;
-}}
-max++;
-if (topLeft) {
-sg.setStartRes (this.seqCanvas.cursorX);
-if (sg.getEndRes () < this.seqCanvas.cursorX) {
-sg.setEndRes (this.seqCanvas.cursorX);
-}min = this.seqCanvas.cursorY;
-} else {
-sg.setEndRes (this.seqCanvas.cursorX);
-if (sg.getStartRes () > this.seqCanvas.cursorX) {
-sg.setStartRes (this.seqCanvas.cursorX);
-}max = this.seqCanvas.cursorY + 1;
-}if (min > max) {
-this.av.setSelectionGroup (null);
-} else {
-sg.clear ();
-for (var i = min; i < max; i++) {
-sg.addSequence (this.av.getAlignment ().getSequenceAt (i), false);
-}
-}}if (this.av.getSelectionGroup () == null) {
-var sg = new jalview.datamodel.SequenceGroup ();
-sg.setStartRes (this.seqCanvas.cursorX);
-sg.setEndRes (this.seqCanvas.cursorX);
-sg.addSequence (sequence, false);
-this.av.setSelectionGroup (sg);
-}this.ap.paintAlignment (false);
-this.av.sendSelection ();
-}, "~B");
-Clazz.defineMethod (c$, "insertGapAtCursor",
-function (group) {
-this.groupEditing = group;
-this.startseq = this.seqCanvas.cursorY;
-this.lastres = this.seqCanvas.cursorX;
-this.editSequence (true, this.seqCanvas.cursorX + this.getKeyboardNo1 ());
-this.endEditing ();
-}, "~B");
-Clazz.defineMethod (c$, "deleteGapAtCursor",
-function (group) {
-this.groupEditing = group;
-this.startseq = this.seqCanvas.cursorY;
-this.lastres = this.seqCanvas.cursorX + this.getKeyboardNo1 ();
-this.editSequence (false, this.seqCanvas.cursorX);
-this.endEditing ();
-}, "~B");
-Clazz.defineMethod (c$, "numberPressed",
-function (value) {
-if (this.keyboardNo1 == null) {
-this.keyboardNo1 = new StringBuffer ();
-}if (this.keyboardNo2 != null) {
-this.keyboardNo2.append (value);
-} else {
-this.keyboardNo1.append (value);
-}}, "~S");
-Clazz.defineMethod (c$, "getKeyboardNo1",
-function () {
-try {
-if (this.keyboardNo1 != null) {
-var value = Integer.parseInt (this.keyboardNo1.toString ());
-this.keyboardNo1 = null;
-return value;
-}} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-} else {
-throw x;
-}
-}
-this.keyboardNo1 = null;
-return 1;
-});
-Clazz.defineMethod (c$, "getKeyboardNo2",
-function () {
-try {
-if (this.keyboardNo2 != null) {
-var value = Integer.parseInt (this.keyboardNo2.toString ());
-this.keyboardNo2 = null;
-return value;
-}} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-} else {
-throw x;
-}
-}
-this.keyboardNo2 = null;
-return 1;
-});
-Clazz.defineMethod (c$, "setStatusMessage",
-function (sequence, res, seq) {
-var text = new StringBuilder (32);
-var seqno = seq == -1 ? "" : " " + (seq + 1);
-text.append ("Sequence" + seqno + " ID: " + sequence.getName ());
-var residue = null;
-var displayChar = String.valueOf (sequence.getCharAt (res));
-if (this.av.getAlignment ().isNucleotide ()) {
-residue = jalview.schemes.ResidueProperties.nucleotideName.get (displayChar);
-if (residue != null) {
-text.append (" Nucleotide: ").append (residue);
-}} else {
-residue = "X".equalsIgnoreCase (displayChar) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (displayChar);
-if (residue != null) {
-text.append (" Residue: ").append (residue);
-}}var pos = -1;
-if (residue != null) {
-pos = sequence.findPosition (res);
-text.append (" (").append (Integer.toString (pos)).append (")");
-}this.ap.alignFrame.setStatus (text.toString ());
-}, "jalview.datamodel.SequenceI,~N,~N");
-Clazz.defineMethod (c$, "setStatusMessage",
-($fz = function (results) {
-var matches = results.getResults ();
-if (!matches.isEmpty ()) {
-var m = matches.get (0);
-var seq = m.getSequence ();
-var sequenceIndex = this.av.getAlignment ().findIndex (seq);
-var start = m.getStart () - 1;
-this.setStatusMessage (seq, start, sequenceIndex);
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SearchResults");
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-this.lastMousePress = evt.getPoint ();
-if ((evt.getModifiers () & 8) == 8 && !this.av.MAC) {
-this.mouseWheelPressed = true;
-return;
-}if (evt.isShiftDown () || evt.isControlDown () || evt.isAltDown ()) {
-if (evt.isControlDown () || evt.isAltDown ()) {
-this.groupEditing = true;
-}this.editingSeqs = true;
-} else {
-this.doMousePressedDefineMode (evt);
-return;
-}var seq = this.findSeq (evt);
-var res = this.findRes (evt);
-if (seq < 0 || res < 0) {
-return;
-}if ((seq < this.av.getAlignment ().getHeight ()) && (res < this.av.getAlignment ().getSequenceAt (seq).getLength ())) {
-this.startseq = seq;
-this.lastres = res;
-} else {
-this.startseq = -1;
-this.lastres = -1;
-}return;
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-var sequence = this.av.getAlignment ().getSequenceAt (this.findSeq (evt));
-if (evt.getClickCount () > 1) {
-if (this.av.getSelectionGroup () != null && this.av.getSelectionGroup ().getSize () == 1 && this.av.getSelectionGroup ().getEndRes () - this.av.getSelectionGroup ().getStartRes () < 2) {
-this.av.setSelectionGroup (null);
-}var features = this.findFeaturesAtRes (sequence, sequence.findPosition (this.findRes (evt)));
-if (features != null && features.length > 0) {
-var highlight = new jalview.datamodel.SearchResults ();
-highlight.addResult (sequence, features[0].getBegin (), features[0].getEnd ());
-this.seqCanvas.highlightSearchResults (highlight);
-}if (features != null && features.length > 0) {
-this.seqCanvas.getFeatureRenderer ().amendFeatures ( Clazz.newArray (-1, [sequence]), features, false, this.ap);
-this.seqCanvas.highlightSearchResults (null);
-}}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-this.mouseDragging = false;
-this.mouseWheelPressed = false;
-this.ap.paintAlignment (true);
-if (!this.editingSeqs) {
-this.doMouseReleasedDefineMode (evt);
-return;
-}this.endEditing ();
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "findRes",
-function (evt) {
-var res = 0;
-var x = evt.getX ();
-if (this.av.getWrapAlignment ()) {
-var hgap = this.av.getCharHeight ();
-if (this.av.getScaleAboveWrapped ()) {
-hgap += this.av.getCharHeight ();
-}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();
-var y = evt.getY ();
-y -= hgap;
-x -= this.seqCanvas.LABEL_WEST;
-var cwidth = this.seqCanvas.getWrappedCanvasWidth (this.getSize ().width);
-if (cwidth < 1) {
-return 0;
-}this.wrappedBlock = Clazz.doubleToInt (y / cHeight);
-this.wrappedBlock += Clazz.doubleToInt (this.av.getStartRes () / cwidth);
-res = this.wrappedBlock * cwidth + Clazz.doubleToInt (x / this.av.getCharWidth ());
-} else {
-res = (Clazz.doubleToInt (x / this.av.getCharWidth ())) + this.av.getStartRes ();
-}if (this.av.hasHiddenColumns ()) {
-res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
-}return res;
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "findSeq",
-function (evt) {
-var sqnum = this.findAlRow (evt);
-return (sqnum < 0) ? 0 : sqnum;
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "findAlRow",
-($fz = function (evt) {
-var seq = 0;
-var y = evt.getY ();
-if (this.av.getWrapAlignment ()) {
-var hgap = this.av.getCharHeight ();
-if (this.av.getScaleAboveWrapped ()) {
-hgap += this.av.getCharHeight ();
-}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();
-y -= hgap;
-seq = Math.min (Clazz.doubleToInt ((y % cHeight) / this.av.getCharHeight ()), this.av.getAlignment ().getHeight () - 1);
-if (seq < 0) {
-seq = -1;
-}} else {
-seq = Math.min ((Clazz.doubleToInt (y / this.av.getCharHeight ())) + this.av.getStartSeq (), this.av.getAlignment ().getHeight () - 1);
-if (seq < 0) {
-seq = -1;
-}}return seq;
-}, $fz.isPrivate = true, $fz), "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "doMousePressed",
-function (evt) {
-var seq = this.findSeq (evt);
-var res = this.findRes (evt);
-if (seq < this.av.getAlignment ().getHeight () && res < this.av.getAlignment ().getSequenceAt (seq).getLength ()) {
-this.startseq = seq;
-this.lastres = res;
-} else {
-this.startseq = -1;
-this.lastres = -1;
-}return;
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseOverSequence",
-function (sequence, index, pos) {
-var tmp = sequence.hashCode () + index + "";
-if (this.lastMessage == null || !this.lastMessage.equals (tmp)) {
-this.ssm.mouseOverSequence (sequence, index, pos, this.av);
-}this.lastMessage = tmp;
-}, "jalview.datamodel.SequenceI,~N,~N");
-Clazz.overrideMethod (c$, "highlightSequence",
-function (results) {
-if (this.av.isFollowHighlight ()) {
-if (this.ap.scrollToPosition (results, true)) {
-this.ap.alignFrame.repaint ();
-}}this.setStatusMessage (results);
-this.seqCanvas.highlightSearchResults (results);
-}, "jalview.datamodel.SearchResults");
-Clazz.overrideMethod (c$, "getVamsasSource",
-function () {
-return this.ap == null ? null : this.ap.av;
-});
-Clazz.overrideMethod (c$, "updateColours",
-function (seq, index) {
-System.out.println ("update the seqPanel colours");
-}, "jalview.datamodel.SequenceI,~N");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-var res = this.findRes (evt);
-var seq = this.findSeq (evt);
-if (seq >= this.av.getAlignment ().getHeight () || seq < 0 || res < 0) {
-if (this.tooltip != null) {
-this.tooltip.setTip ("");
-}return;
-}var sequence = this.av.getAlignment ().getSequenceAt (seq);
-if (res > sequence.getLength ()) {
-if (this.tooltip != null) {
-this.tooltip.setTip ("");
-}return;
-}var respos = sequence.findPosition (res);
-if (this.ssm != null) {
-this.mouseOverSequence (sequence, res, respos);
-}var text = new StringBuilder ();
-text.append ("Sequence ").append (Integer.toString (seq + 1)).append (" ID: ").append (sequence.getName ());
-var obj = null;
-var ch = String.valueOf (sequence.getCharAt (res));
-if (this.av.getAlignment ().isNucleotide ()) {
-obj = jalview.schemes.ResidueProperties.nucleotideName.get (ch);
-if (obj != null) {
-text.append (" Nucleotide: ").append (obj);
-}} else {
-obj = "X".equalsIgnoreCase (ch) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (ch);
-if (obj != null) {
-text.append (" Residue: ").append (obj);
-}}if (obj != null) {
-text.append (" (").append (Integer.toString (respos)).append (")");
-}this.ap.alignFrame.setStatus (text.toString ());
-var tooltipText = new StringBuilder ();
-var groups = this.av.getAlignment ().findAllGroups (sequence);
-if (groups != null) {
-for (var g = 0; g < groups.length; g++) {
-if (groups[g].getStartRes () <= res && groups[g].getEndRes () >= res) {
-if (!groups[g].getName ().startsWith ("JTreeGroup") && !groups[g].getName ().startsWith ("JGroup")) {
-tooltipText.append (groups[g].getName ()).append (" ");
-}if (groups[g].getDescription () != null) {
-tooltipText.append (groups[g].getDescription ());
-}tooltipText.append ("\n");
-}}
-}var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));
-var index = 0;
-while (index < allFeatures.length) {
-var sf = allFeatures[index];
-tooltipText.append (sf.getType () + " " + sf.begin + ":" + sf.end);
-if (sf.getDescription () != null) {
-tooltipText.append (" " + sf.getDescription ());
-}if (sf.getValue ("status") != null) {
-var status = sf.getValue ("status").toString ();
-if (status.length > 0) {
-tooltipText.append (" (" + sf.getValue ("status") + ")");
-}}tooltipText.append ("\n");
-index++;
-}
-if (this.tooltip == null) {
-this.tooltip = new jalview.appletgui.Tooltip (tooltipText.toString (), this.seqCanvas);
-} else {
-this.tooltip.setTip (tooltipText.toString ());
-}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "findFeaturesAtRes",
-function (sequence, res) {
-var tmp = new java.util.Vector ();
-var features = sequence.getSequenceFeatures ();
-if (features != null) {
-for (var i = 0; i < features.length; i++) {
-if (this.av.getFeaturesDisplayed () == null || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) {
-continue;
-}if (features[i].featureGroup != null && !this.seqCanvas.fr.checkGroupVisibility (features[i].featureGroup, false)) {
-continue;
-}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) {
-tmp.addElement (features[i]);
-}}
-}features = new Array (tmp.size ());
-tmp.copyInto (features);
-return features;
-}, "jalview.datamodel.SequenceI,~N");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (evt) {
-if (this.mouseWheelPressed) {
-var oldWidth = this.av.getCharWidth ();
-if (Math.abs (evt.getY () - this.lastMousePress.y) > Math.abs (evt.getX () - this.lastMousePress.x)) {
-var fontSize = this.av.font.getSize ();
-if (evt.getY () < this.lastMousePress.y && this.av.getCharHeight () > 1) {
-fontSize--;
-} else if (evt.getY () > this.lastMousePress.y) {
-fontSize++;
-}if (fontSize < 1) {
-fontSize = 1;
-}this.av.setFont ( new java.awt.Font (this.av.font.getName (), this.av.font.getStyle (), fontSize));
-this.av.setCharWidth (oldWidth);
-} else {
-if (evt.getX () < this.lastMousePress.x && this.av.getCharWidth () > 1) {
-this.av.setCharWidth (this.av.getCharWidth () - 1);
-} else if (evt.getX () > this.lastMousePress.x) {
-this.av.setCharWidth (this.av.getCharWidth () + 1);
-}if (this.av.getCharWidth () < 1) {
-this.av.setCharWidth (1);
-}}this.ap.fontChanged ();
-var fm = this.getFontMetrics (this.av.getFont ());
-this.av.validCharWidth = fm.charWidth ('M') <= this.av.getCharWidth ();
-this.lastMousePress = evt.getPoint ();
-this.ap.paintAlignment (false);
-this.ap.annotationPanel.image = null;
-return;
-}if (!this.editingSeqs) {
-this.doMouseDraggedDefineMode (evt);
-return;
-}var res = this.findRes (evt);
-if (res < 0) {
-res = 0;
-}if ((this.lastres == -1) || (this.lastres == res)) {
-return;
-}if ((res < this.av.getAlignment ().getWidth ()) && (res < this.lastres)) {
-this.editSequence (false, res);
-} else {
-this.editSequence (true, res);
-}this.mouseDragging = true;
-if (this.scrollThread != null) {
-this.scrollThread.setEvent (evt);
-}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "editSequence",
-function (insertGap, startres) {
-var fixedLeft = -1;
-var fixedRight = -1;
-var fixedColumns = false;
-var sg = this.av.getSelectionGroup ();
-var seq = this.av.getAlignment ().getSequenceAt (this.startseq);
-if (!this.groupEditing && this.av.hasHiddenRows ()) {
-if (this.av.isHiddenRepSequence (seq)) {
-sg = this.av.getRepresentedSequences (seq);
-this.groupEditing = true;
-}}var message = new StringBuffer ();
-if (this.groupEditing) {
-message.append (jalview.util.MessageManager.getString ("action.edit_group")).append (":");
-if (this.editCommand == null) {
-this.editCommand = new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("action.edit_group"));
-}} else {
-message.append (jalview.util.MessageManager.getString ("label.edit_sequence")).append (" " + seq.getName ());
-var label = seq.getName ();
-if (label.length > 10) {
-label = label.substring (0, 10);
-}if (this.editCommand == null) {
-this.editCommand = new jalview.commands.EditCommand (jalview.util.MessageManager.formatMessage ("label.edit_params", Clazz.newArray (-1, [label])));
-}}if (insertGap) {
-message.append (" insert ");
-} else {
-message.append (" delete ");
-}message.append (Math.abs (startres - this.lastres) + " gaps.");
-this.ap.alignFrame.setStatus (message.toString ());
-if (this.groupEditing || (sg != null && sg.getSequences (this.av.getHiddenRepSequences ()).contains (seq))) {
-fixedColumns = true;
-if (sg == null) {
-if (!this.av.isHiddenRepSequence (seq)) {
-this.endEditing ();
-return;
-}sg = this.av.getRepresentedSequences (seq);
-}fixedLeft = sg.getStartRes ();
-fixedRight = sg.getEndRes ();
-if ((startres < fixedLeft && this.lastres >= fixedLeft) || (startres >= fixedLeft && this.lastres < fixedLeft) || (startres > fixedRight && this.lastres <= fixedRight) || (startres <= fixedRight && this.lastres > fixedRight)) {
-this.endEditing ();
-return;
-}if (fixedLeft > startres) {
-fixedRight = fixedLeft - 1;
-fixedLeft = 0;
-} else if (fixedRight < startres) {
-fixedLeft = fixedRight;
-fixedRight = -1;
-}}if (this.av.hasHiddenColumns ()) {
-fixedColumns = true;
-var y1 = this.av.getColumnSelection ().getHiddenBoundaryLeft (startres);
-var y2 = this.av.getColumnSelection ().getHiddenBoundaryRight (startres);
-if ((insertGap && startres > y1 && this.lastres < y1) || (!insertGap && startres < y2 && this.lastres > y2)) {
-this.endEditing ();
-return;
-}if (fixedLeft < y1 && (fixedRight > y2 || fixedRight == -1)) {
-if (startres >= y2) {
-fixedLeft = y2;
-} else {
-fixedRight = y2 - 1;
-}}}if (this.groupEditing) {
-var groupSeqs = sg.getSequences (this.av.getHiddenRepSequences ()).toArray ( new Array (0));
-if (insertGap) {
-if (sg.getStartRes () == 0 && sg.getEndRes () == fixedRight && sg.getEndRes () == this.av.getAlignment ().getWidth () - 1) {
-sg.setEndRes (this.av.getAlignment ().getWidth () + startres - this.lastres);
-fixedRight = sg.getEndRes ();
-}var blank = false;
-for (fixedRight = fixedRight; fixedRight > this.lastres; fixedRight--) {
-blank = true;
-for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {
-for (var j = 0; j < startres - this.lastres; j++) {
-if (!jalview.util.Comparison.isGap (gs.getCharAt (fixedRight - j))) {
-blank = false;
-break;
-}}
-}
-if (blank) {
-break;
-}}
-if (!blank) {
-if (sg.getSize () == this.av.getAlignment ().getHeight ()) {
-if ((this.av.hasHiddenColumns () && startres < this.av.getColumnSelection ().getHiddenBoundaryRight (startres))) {
-this.endEditing ();
-return;
-}var alWidth = this.av.getAlignment ().getWidth ();
-if (this.av.hasHiddenRows ()) {
-var hwidth = this.av.getAlignment ().getHiddenSequences ().getWidth ();
-if (hwidth > alWidth) {
-alWidth = hwidth;
-}}sg.setEndRes (sg.getEndRes () + startres - this.lastres);
-fixedRight = alWidth + startres - this.lastres;
-} else {
-this.endEditing ();
-return;
-}}} else if (!insertGap) {
-for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {
-for (var j = startres; j < this.lastres; j++) {
-if (gs.getLength () <= j) {
-continue;
-}if (!jalview.util.Comparison.isGap (gs.getCharAt (j))) {
-this.endEditing ();
-return;
-}}
-}
-}if (insertGap) {
-if (fixedColumns && fixedRight != -1) {
-for (var j = this.lastres; j < startres; j++) {
-this.insertChar (j, groupSeqs, fixedRight);
-}
-} else {
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, groupSeqs, startres, startres - this.lastres, this.av.getAlignment (), true);
-}} else {
-if (fixedColumns && fixedRight != -1) {
-for (var j = this.lastres; j > startres; j--) {
-this.deleteChar (startres, groupSeqs, fixedRight);
-}
-} else {
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, groupSeqs, startres, this.lastres - startres, this.av.getAlignment (), true);
-}}} else {
-if (insertGap) {
-if (fixedColumns && fixedRight != -1) {
-for (var j = this.lastres; j < startres; j++) {
-this.insertChar (j, Clazz.newArray (-1, [seq]), fixedRight);
-}
-} else {
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, Clazz.newArray (-1, [seq]), this.lastres, startres - this.lastres, this.av.getAlignment (), true);
-}} else {
-if (fixedColumns && fixedRight != -1) {
-for (var j = this.lastres; j > startres; j--) {
-if (!jalview.util.Comparison.isGap (seq.getCharAt (startres))) {
-this.endEditing ();
-break;
-}this.deleteChar (startres, Clazz.newArray (-1, [seq]), fixedRight);
-}
-} else {
-var max = 0;
-for (var m = startres; m < this.lastres; m++) {
-if (!jalview.util.Comparison.isGap (seq.getCharAt (m))) {
-break;
-}max++;
-}
-if (max > 0) {
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, Clazz.newArray (-1, [seq]), startres, max, this.av.getAlignment (), true);
-}}}}this.lastres = startres;
-this.seqCanvas.repaint ();
-}, "~B,~N");
-Clazz.defineMethod (c$, "insertChar",
-function (j, seq, fixedColumn) {
-var blankColumn = fixedColumn;
-for (var s = 0; s < seq.length; s++) {
-for (blankColumn = fixedColumn; blankColumn > j; blankColumn--) {
-if (jalview.util.Comparison.isGap (seq[s].getCharAt (blankColumn))) {
-break;
-}}
-if (blankColumn <= j) {
-blankColumn = fixedColumn;
-this.endEditing ();
-return;
-}}
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, blankColumn, 1, this.av.getAlignment (), true);
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, j, 1, this.av.getAlignment (), true);
-}, "~N,~A,~N");
-Clazz.defineMethod (c$, "deleteChar",
-function (j, seq, fixedColumn) {
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, j, 1, this.av.getAlignment (), true);
-this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, fixedColumn, 1, this.av.getAlignment (), true);
-}, "~N,~A,~N");
-Clazz.defineMethod (c$, "doMousePressedDefineMode",
-function (evt) {
-if (this.scrollThread != null) {
-this.scrollThread.running = false;
-this.scrollThread = null;
-}var res = this.findRes (evt);
-var seq = this.findSeq (evt);
-this.oldSeq = seq;
-this.startWrapBlock = this.wrappedBlock;
-if (seq == -1) {
-return;
-}var sequence = this.av.getAlignment ().getSequenceAt (seq);
-if (sequence == null || res > sequence.getLength ()) {
-return;
-}this.stretchGroup = this.av.getSelectionGroup ();
-if (this.stretchGroup == null) {
-this.stretchGroup = this.av.getAlignment ().findGroup (sequence);
-if (this.stretchGroup != null && res > this.stretchGroup.getStartRes () && res < this.stretchGroup.getEndRes ()) {
-this.av.setSelectionGroup (this.stretchGroup);
-} else {
-this.stretchGroup = null;
-}} else if (!this.stretchGroup.getSequences (null).contains (sequence) || this.stretchGroup.getStartRes () > res || this.stretchGroup.getEndRes () < res) {
-this.stretchGroup = null;
-var allGroups = this.av.getAlignment ().findAllGroups (sequence);
-if (allGroups != null) {
-for (var i = 0; i < allGroups.length; i++) {
-if (allGroups[i].getStartRes () <= res && allGroups[i].getEndRes () >= res) {
-this.stretchGroup = allGroups[i];
-break;
-}}
-}this.av.setSelectionGroup (this.stretchGroup);
-}if ((evt.getModifiers () & 4) == 4) {
-var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));
-var links = null;
-if (allFeatures != null) {
-for (var i = 0; i < allFeatures.length; i++) {
-if (allFeatures[i].links != null) {
-if (links == null) {
-links = new java.util.Vector ();
-}for (var j = 0; j < allFeatures[i].links.size (); j++) {
-links.addElement (allFeatures[i].links.elementAt (j));
-}
-}}
-}var popup = new jalview.appletgui.APopupMenu (this.ap, null, links);
-this.add (popup);
-popup.show (this, evt.getX (), evt.getY ());
-return;
-}if (this.av.cursorMode) {
-this.seqCanvas.cursorX = this.findRes (evt);
-this.seqCanvas.cursorY = this.findSeq (evt);
-this.seqCanvas.repaint ();
-return;
-}if (this.stretchGroup == null) {
-var sg = new jalview.datamodel.SequenceGroup ();
-sg.setStartRes (res);
-sg.setEndRes (res);
-sg.addSequence (sequence, false);
-this.av.setSelectionGroup (sg);
-this.stretchGroup = sg;
-if (this.av.getConservationSelected ()) {
-jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.av.getGlobalColourScheme (), "Background");
-}if (this.av.getAbovePIDThreshold ()) {
-jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.av.getGlobalColourScheme (), "Background");
-}}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "doMouseReleasedDefineMode",
-function (evt) {
-if (this.stretchGroup == null) {
-return;
-}this.stretchGroup.recalcConservation ();
-if (this.stretchGroup.cs != null) {
-this.stretchGroup.cs.alignmentChanged (this.stretchGroup, this.av.getHiddenRepSequences ());
-if (this.stretchGroup.cs.conservationApplied ()) {
-jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());
-} else {
-jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());
-}}this.changeEndRes = false;
-this.changeStartRes = false;
-this.stretchGroup = null;
-jalview.appletgui.PaintRefresher.Refresh (this.ap, this.av.getSequenceSetId ());
-this.ap.paintAlignment (true);
-this.av.sendSelection ();
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "doMouseDraggedDefineMode",
-function (evt) {
-var res = this.findRes (evt);
-var y = this.findSeq (evt);
-if (this.wrappedBlock != this.startWrapBlock) {
-return;
-}if (this.stretchGroup == null) {
-return;
-}this.mouseDragging = true;
-if (y > this.av.getAlignment ().getHeight ()) {
-y = this.av.getAlignment ().getHeight () - 1;
-}if (res >= this.av.getAlignment ().getWidth ()) {
-res = this.av.getAlignment ().getWidth () - 1;
-}if (this.stretchGroup.getEndRes () == res) {
-this.changeEndRes = true;
-} else if (this.stretchGroup.getStartRes () == res) {
-this.changeStartRes = true;
-}if (res < 0) {
-res = 0;
-}if (this.changeEndRes) {
-if (res > (this.stretchGroup.getStartRes () - 1)) {
-this.stretchGroup.setEndRes (res);
-}} else if (this.changeStartRes) {
-if (res < (this.stretchGroup.getEndRes () + 1)) {
-this.stretchGroup.setStartRes (res);
-}}var dragDirection = 0;
-if (y > this.oldSeq) {
-dragDirection = 1;
-} else if (y < this.oldSeq) {
-dragDirection = -1;
-}while ((y != this.oldSeq) && (this.oldSeq > -1) && (y < this.av.getAlignment ().getHeight ())) {
-var seq = this.av.getAlignment ().getSequenceAt (this.oldSeq);
-this.oldSeq += dragDirection;
-if (this.oldSeq < 0) {
-break;
-}var nextSeq = this.av.getAlignment ().getSequenceAt (this.oldSeq);
-if (this.stretchGroup.getSequences (null).contains (nextSeq)) {
-this.stretchGroup.deleteSequence (seq, false);
-} else {
-if (seq != null) {
-this.stretchGroup.addSequence (seq, false);
-}this.stretchGroup.addSequence (nextSeq, false);
-}}
-if (this.oldSeq < 0) {
-this.oldSeq = -1;
-}if (res > this.av.endRes || res < this.av.startRes || y < this.av.startSeq || y > this.av.endSeq) {
-this.mouseExited (evt);
-}if (this.scrollThread != null) {
-this.scrollThread.setEvent (evt);
-}this.seqCanvas.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (e) {
-if (this.oldSeq < 0) {
-this.oldSeq = 0;
-}if (this.scrollThread != null) {
-this.scrollThread.running = false;
-this.scrollThread = null;
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (e) {
-if (this.av.getWrapAlignment ()) {
-return;
-}if (this.mouseDragging && this.scrollThread == null) {
-this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);
-}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "scrollCanvas",
-function (evt) {
-if (evt == null) {
-if (this.scrollThread != null) {
-this.scrollThread.running = false;
-this.scrollThread = null;
-}this.mouseDragging = false;
-} else {
-if (this.scrollThread == null) {
-this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);
-}this.mouseDragging = true;
-this.scrollThread.setEvent (evt);
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "selection",
-function (seqsel, colsel, source) {
-if (this.av != null && (this.av === source || !this.av.followSelection || (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).getSequenceSetId ().equals (this.av.getSequenceSetId ())))) {
-return;
-}if (this.selectionFromTranslation (seqsel, colsel, source)) {
-return;
-}var repaint = false;
-var copycolsel = true;
-if (this.av.getSelectionGroup () == null || !this.av.isSelectionGroupChanged (true)) {
-var sgroup = null;
-if (seqsel != null && seqsel.getSize () > 0) {
-if (this.av.getAlignment () == null) {
-System.out.println ("Selection message: alignviewport av SeqSetId=" + this.av.getSequenceSetId () + " ViewId=" + this.av.getViewId () + " 's alignment is NULL! returning immediatly.");
-return;
-}sgroup = seqsel.intersect (this.av.getAlignment (), (this.av.hasHiddenRows ()) ? this.av.getHiddenRepSequences () : null);
-if ((sgroup == null || sgroup.getSize () == 0) && (colsel == null || colsel.size () == 0)) {
-copycolsel = false;
-}}if (sgroup != null && sgroup.getSize () > 0) {
-this.av.setSelectionGroup (sgroup);
-} else {
-this.av.setSelectionGroup (null);
-}repaint = this.av.isSelectionGroupChanged (true);
-}if (copycolsel && (this.av.getColumnSelection () == null || !this.av.isColSelChanged (true))) {
-if (colsel == null || colsel.size () == 0) {
-if (this.av.getColumnSelection () != null) {
-this.av.getColumnSelection ().clear ();
-}} else {
-if (this.av.getColumnSelection () == null) {
-this.av.setColumnSelection ( new jalview.datamodel.ColumnSelection (colsel));
-} else {
-this.av.getColumnSelection ().setElementsFrom (colsel);
-}}repaint = new Boolean (repaint | this.av.isColSelChanged (true)).valueOf ();
-}if (copycolsel && this.av.hasHiddenColumns () && (this.av.getColumnSelection () == null || this.av.getColumnSelection ().getHiddenColumns () == null)) {
-System.err.println ("Bad things");
-}if (repaint) {
-this.ap.scalePanelHolder.repaint ();
-this.ap.repaint ();
-}}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
-Clazz.defineMethod (c$, "scrollTo",
-function (row, column) {
-row = row < 0 ? this.ap.av.startSeq : row;
-column = column < 0 ? this.ap.av.startRes : column;
-this.ap.scrollTo (column, column, row, true, true);
-}, "~N,~N");
-Clazz.defineMethod (c$, "scrollToRow",
-function (row) {
-row = row < 0 ? this.ap.av.startSeq : row;
-this.ap.scrollTo (this.ap.av.startRes, this.ap.av.startRes, row, true, true);
-}, "~N");
-Clazz.defineMethod (c$, "scrollToColumn",
-function (column) {
-column = column < 0 ? this.ap.av.startRes : column;
-this.ap.scrollTo (column, column, this.ap.av.startSeq, true, true);
-}, "~N");
-Clazz.defineMethod (c$, "selectionFromTranslation",
-function (seqsel, colsel, source) {
-if (!(Clazz.instanceOf (source, jalview.api.AlignViewportI))) {
-return false;
-}var sourceAv = source;
-if (sourceAv.getCodingComplement () !== this.av && this.av.getCodingComplement () !== sourceAv) {
-return false;
-}var sg = jalview.util.MappingUtils.mapSequenceGroup (seqsel, sourceAv, this.av);
-this.av.setSelectionGroup (sg);
-this.av.isSelectionGroupChanged (true);
-var cs = jalview.util.MappingUtils.mapColumnSelection (colsel, sourceAv, this.av);
-this.av.setColumnSelection (cs);
-this.av.isColSelChanged (true);
-this.ap.scalePanelHolder.repaint ();
-this.ap.repaint ();
-return true;
-}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
-c$.$SeqPanel$ScrollThread$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.evt = null;
-this.running = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.SeqPanel, "ScrollThread", Thread);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.appletgui.SeqPanel.ScrollThread, []);
-this.start ();
-});
-Clazz.defineMethod (c$, "setEvent",
-function (a) {
-this.evt = a;
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "stopScrolling",
-function () {
-this.running = false;
-});
-Clazz.overrideMethod (c$, "run",
-function () {
-this.running = true;
-while (this.running) {
-if (this.evt != null) {
-if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () < 0 && this.b$["jalview.appletgui.SeqPanel"].av.getStartSeq () > 0) {
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (true);
-}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().height && this.b$["jalview.appletgui.SeqPanel"].av.getAlignment ().getHeight () > this.b$["jalview.appletgui.SeqPanel"].av.getEndSeq ()) {
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (false);
-}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () < 0) {
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (false);
-} else if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().width) {
-this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (true);
-}}try {
-Thread.sleep (75);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-}
-});
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "jalview.structure.SelectionListener", "$.SequenceListener", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.lang.Thread"], "jalview.appletgui.SeqPanel", ["jalview.api.AlignViewportI", "jalview.appletgui.APopupMenu", "$.AlignViewport", "$.PaintRefresher", "$.SeqCanvas", "$.SliderPanel", "$.Tooltip", "jalview.commands.EditCommand", "jalview.datamodel.ColumnSelection", "$.SearchResults", "$.SequenceGroup", "jalview.schemes.ResidueProperties", "jalview.structure.StructureSelectionManager", "jalview.util.Comparison", "$.MappingUtils", "$.MessageManager", "java.awt.BorderLayout", "$.Font", "java.lang.StringBuffer", "$.StringBuilder", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.seqCanvas = null;
+this.ap = null;
+this.lastres = 0;
+this.startseq = 0;
+this.av = null;
+this.seqEditOccurred = false;
+this.scrollThread = null;
+this.mouseDragging = false;
+this.editingSeqs = false;
+this.groupEditing = false;
+this.oldSeq = -1;
+this.changeEndSeq = false;
+this.changeStartSeq = false;
+this.changeEndRes = false;
+this.changeStartRes = false;
+this.stretchGroup = null;
+this.keyboardNo1 = null;
+this.keyboardNo2 = null;
+this.mouseWheelPressed = false;
+this.lastMousePress = null;
+this.editCommand = null;
+this.ssm = null;
+this.startWrapBlock = -1;
+this.wrappedBlock = -1;
+this.lastMessage = null;
+this.tooltip = null;
+if (!Clazz.isClassDefined ("jalview.appletgui.SeqPanel.ScrollThread")) {
+jalview.appletgui.SeqPanel.$SeqPanel$ScrollThread$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "SeqPanel", awt2swing.Panel, [java.awt.event.MouseMotionListener, java.awt.event.MouseListener, jalview.structure.SequenceListener, jalview.structure.SelectionListener]);
+Clazz.makeConstructor (c$,
+function (avp, p) {
+Clazz.superConstructor (this, jalview.appletgui.SeqPanel, []);
+this.av = avp;
+this.setName ("seqPanel");
+this.seqCanvas = new jalview.appletgui.SeqCanvas (avp);
+this.setLayout ( new java.awt.BorderLayout ());
+this.add (this.seqCanvas);
+this.ap = p;
+this.seqCanvas.addMouseMotionListener (this);
+this.seqCanvas.addMouseListener (this);
+this.ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.av.applet);
+this.ssm.addStructureViewerListener (this);
+this.ssm.addSelectionListener (this);
+this.seqCanvas.repaint ();
+}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");
+Clazz.defineMethod (c$, "endEditing",
+function () {
+if (this.editCommand != null && this.editCommand.getSize () > 0) {
+this.ap.alignFrame.addHistoryItem (this.editCommand);
+this.av.firePropertyChange ("alignment", null, this.av.getAlignment ().getSequences ());
+}this.startseq = -1;
+this.lastres = -1;
+this.editingSeqs = false;
+this.groupEditing = false;
+this.keyboardNo1 = null;
+this.keyboardNo2 = null;
+this.editCommand = null;
+});
+Clazz.defineMethod (c$, "setCursorRow",
+function () {
+this.seqCanvas.cursorY = this.getKeyboardNo1 () - 1;
+this.scrollToVisible ();
+});
+Clazz.defineMethod (c$, "setCursorColumn",
+function () {
+this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;
+this.scrollToVisible ();
+});
+Clazz.defineMethod (c$, "setCursorRowAndColumn",
+function () {
+if (this.keyboardNo2 == null) {
+this.keyboardNo2 = new StringBuffer ();
+} else {
+this.seqCanvas.cursorX = this.getKeyboardNo1 () - 1;
+this.seqCanvas.cursorY = this.getKeyboardNo2 () - 1;
+this.scrollToVisible ();
+}});
+Clazz.defineMethod (c$, "setCursorPosition",
+function () {
+var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);
+this.seqCanvas.cursorX = sequence.findIndex (this.getKeyboardNo1 ()) - 1;
+this.scrollToVisible ();
+});
+Clazz.defineMethod (c$, "moveCursor",
+function (dx, dy) {
+this.seqCanvas.cursorX += dx;
+this.seqCanvas.cursorY += dy;
+if (this.av.hasHiddenColumns () && !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {
+var original = this.seqCanvas.cursorX - dx;
+var maxWidth = this.av.getAlignment ().getWidth ();
+while (!this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX) && this.seqCanvas.cursorX < maxWidth && this.seqCanvas.cursorX > 0) {
+this.seqCanvas.cursorX += dx;
+}
+if (this.seqCanvas.cursorX >= maxWidth || !this.av.getColumnSelection ().isVisible (this.seqCanvas.cursorX)) {
+this.seqCanvas.cursorX = original;
+}}this.scrollToVisible ();
+}, "~N,~N");
+Clazz.defineMethod (c$, "scrollToVisible",
+function () {
+if (this.seqCanvas.cursorX < 0) {
+this.seqCanvas.cursorX = 0;
+} else if (this.seqCanvas.cursorX > this.av.getAlignment ().getWidth () - 1) {
+this.seqCanvas.cursorX = this.av.getAlignment ().getWidth () - 1;
+}if (this.seqCanvas.cursorY < 0) {
+this.seqCanvas.cursorY = 0;
+} else if (this.seqCanvas.cursorY > this.av.getAlignment ().getHeight () - 1) {
+this.seqCanvas.cursorY = this.av.getAlignment ().getHeight () - 1;
+}this.endEditing ();
+if (this.av.getWrapAlignment ()) {
+this.ap.scrollToWrappedVisible (this.seqCanvas.cursorX);
+} else {
+while (this.seqCanvas.cursorY < this.av.startSeq) {
+this.ap.scrollUp (true);
+}
+while (this.seqCanvas.cursorY + 1 > this.av.endSeq) {
+this.ap.scrollUp (false);
+}
+while (this.seqCanvas.cursorX < this.av.getColumnSelection ().adjustForHiddenColumns (this.av.startRes)) {
+if (!this.ap.scrollRight (false)) {
+break;
+}}
+while (this.seqCanvas.cursorX > this.av.getColumnSelection ().adjustForHiddenColumns (this.av.endRes)) {
+if (!this.ap.scrollRight (true)) {
+break;
+}}
+}this.setStatusMessage (this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY), this.seqCanvas.cursorX, this.seqCanvas.cursorY);
+this.seqCanvas.repaint ();
+});
+Clazz.defineMethod (c$, "setSelectionAreaAtCursor",
+function (topLeft) {
+var sequence = this.av.getAlignment ().getSequenceAt (this.seqCanvas.cursorY);
+if (this.av.getSelectionGroup () != null) {
+var sg = this.av.getSelectionGroup ();
+var min = this.av.getAlignment ().getHeight ();
+var max = 0;
+for (var i = 0; i < sg.getSize (); i++) {
+var index = this.av.getAlignment ().findIndex (sg.getSequenceAt (i));
+if (index > max) {
+max = index;
+}if (index < min) {
+min = index;
+}}
+max++;
+if (topLeft) {
+sg.setStartRes (this.seqCanvas.cursorX);
+if (sg.getEndRes () < this.seqCanvas.cursorX) {
+sg.setEndRes (this.seqCanvas.cursorX);
+}min = this.seqCanvas.cursorY;
+} else {
+sg.setEndRes (this.seqCanvas.cursorX);
+if (sg.getStartRes () > this.seqCanvas.cursorX) {
+sg.setStartRes (this.seqCanvas.cursorX);
+}max = this.seqCanvas.cursorY + 1;
+}if (min > max) {
+this.av.setSelectionGroup (null);
+} else {
+sg.clear ();
+for (var i = min; i < max; i++) {
+sg.addSequence (this.av.getAlignment ().getSequenceAt (i), false);
+}
+}}if (this.av.getSelectionGroup () == null) {
+var sg = new jalview.datamodel.SequenceGroup ();
+sg.setStartRes (this.seqCanvas.cursorX);
+sg.setEndRes (this.seqCanvas.cursorX);
+sg.addSequence (sequence, false);
+this.av.setSelectionGroup (sg);
+}this.ap.paintAlignment (false);
+this.av.sendSelection ();
+}, "~B");
+Clazz.defineMethod (c$, "insertGapAtCursor",
+function (group) {
+this.groupEditing = group;
+this.startseq = this.seqCanvas.cursorY;
+this.lastres = this.seqCanvas.cursorX;
+this.editSequence (true, this.seqCanvas.cursorX + this.getKeyboardNo1 ());
+this.endEditing ();
+}, "~B");
+Clazz.defineMethod (c$, "deleteGapAtCursor",
+function (group) {
+this.groupEditing = group;
+this.startseq = this.seqCanvas.cursorY;
+this.lastres = this.seqCanvas.cursorX + this.getKeyboardNo1 ();
+this.editSequence (false, this.seqCanvas.cursorX);
+this.endEditing ();
+}, "~B");
+Clazz.defineMethod (c$, "numberPressed",
+function (value) {
+if (this.keyboardNo1 == null) {
+this.keyboardNo1 = new StringBuffer ();
+}if (this.keyboardNo2 != null) {
+this.keyboardNo2.append (value);
+} else {
+this.keyboardNo1.append (value);
+}}, "~S");
+Clazz.defineMethod (c$, "getKeyboardNo1",
+function () {
+try {
+if (this.keyboardNo1 != null) {
+var value = Integer.parseInt (this.keyboardNo1.toString ());
+this.keyboardNo1 = null;
+return value;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+}
+this.keyboardNo1 = null;
+return 1;
+});
+Clazz.defineMethod (c$, "getKeyboardNo2",
+function () {
+try {
+if (this.keyboardNo2 != null) {
+var value = Integer.parseInt (this.keyboardNo2.toString ());
+this.keyboardNo2 = null;
+return value;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+}
+this.keyboardNo2 = null;
+return 1;
+});
+Clazz.defineMethod (c$, "setStatusMessage",
+function (sequence, res, seq) {
+var text = new StringBuilder (32);
+var seqno = seq == -1 ? "" : " " + (seq + 1);
+text.append ("Sequence" + seqno + " ID: " + sequence.getName ());
+var residue = null;
+var displayChar = String.valueOf (sequence.getCharAt (res));
+if (this.av.getAlignment ().isNucleotide ()) {
+residue = jalview.schemes.ResidueProperties.nucleotideName.get (displayChar);
+if (residue != null) {
+text.append (" Nucleotide: ").append (residue);
+}} else {
+residue = "X".equalsIgnoreCase (displayChar) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (displayChar);
+if (residue != null) {
+text.append (" Residue: ").append (residue);
+}}var pos = -1;
+if (residue != null) {
+pos = sequence.findPosition (res);
+text.append (" (").append (Integer.toString (pos)).append (")");
+}this.ap.alignFrame.setStatus (text.toString ());
+}, "jalview.datamodel.SequenceI,~N,~N");
+Clazz.defineMethod (c$, "setStatusMessage",
+($fz = function (results) {
+var matches = results.getResults ();
+if (!matches.isEmpty ()) {
+var m = matches.get (0);
+var seq = m.getSequence ();
+var sequenceIndex = this.av.getAlignment ().findIndex (seq);
+var start = m.getStart () - 1;
+this.setStatusMessage (seq, start, sequenceIndex);
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SearchResults");
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+this.lastMousePress = evt.getPoint ();
+if ((evt.getModifiers () & 8) == 8 && !this.av.MAC) {
+this.mouseWheelPressed = true;
+return;
+}if (evt.isShiftDown () || evt.isControlDown () || evt.isAltDown ()) {
+if (evt.isControlDown () || evt.isAltDown ()) {
+this.groupEditing = true;
+}this.editingSeqs = true;
+} else {
+this.doMousePressedDefineMode (evt);
+return;
+}var seq = this.findSeq (evt);
+var res = this.findRes (evt);
+if (seq < 0 || res < 0) {
+return;
+}if ((seq < this.av.getAlignment ().getHeight ()) && (res < this.av.getAlignment ().getSequenceAt (seq).getLength ())) {
+this.startseq = seq;
+this.lastres = res;
+} else {
+this.startseq = -1;
+this.lastres = -1;
+}return;
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+var sequence = this.av.getAlignment ().getSequenceAt (this.findSeq (evt));
+if (evt.getClickCount () > 1) {
+if (this.av.getSelectionGroup () != null && this.av.getSelectionGroup ().getSize () == 1 && this.av.getSelectionGroup ().getEndRes () - this.av.getSelectionGroup ().getStartRes () < 2) {
+this.av.setSelectionGroup (null);
+}var features = this.findFeaturesAtRes (sequence, sequence.findPosition (this.findRes (evt)));
+if (features != null && features.length > 0) {
+var highlight = new jalview.datamodel.SearchResults ();
+highlight.addResult (sequence, features[0].getBegin (), features[0].getEnd ());
+this.seqCanvas.highlightSearchResults (highlight);
+}if (features != null && features.length > 0) {
+this.seqCanvas.getFeatureRenderer ().amendFeatures ( Clazz.newArray (-1, [sequence]), features, false, this.ap);
+this.seqCanvas.highlightSearchResults (null);
+}}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+this.mouseDragging = false;
+this.mouseWheelPressed = false;
+this.ap.paintAlignment (true);
+if (!this.editingSeqs) {
+this.doMouseReleasedDefineMode (evt);
+return;
+}this.endEditing ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findRes",
+function (evt) {
+var res = 0;
+var x = evt.getX ();
+if (this.av.getWrapAlignment ()) {
+var hgap = this.av.getCharHeight ();
+if (this.av.getScaleAboveWrapped ()) {
+hgap += this.av.getCharHeight ();
+}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();
+var y = evt.getY ();
+y -= hgap;
+x -= this.seqCanvas.LABEL_WEST;
+var cwidth = this.seqCanvas.getWrappedCanvasWidth (this.getSize ().width);
+if (cwidth < 1) {
+return 0;
+}this.wrappedBlock = Clazz.doubleToInt (y / cHeight);
+this.wrappedBlock += Clazz.doubleToInt (this.av.getStartRes () / cwidth);
+res = this.wrappedBlock * cwidth + Clazz.doubleToInt (x / this.av.getCharWidth ());
+} else {
+res = (Clazz.doubleToInt (x / this.av.getCharWidth ())) + this.av.getStartRes ();
+}if (this.av.hasHiddenColumns ()) {
+res = this.av.getColumnSelection ().adjustForHiddenColumns (res);
+}return res;
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findSeq",
+function (evt) {
+var sqnum = this.findAlRow (evt);
+return (sqnum < 0) ? 0 : sqnum;
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findAlRow",
+($fz = function (evt) {
+var seq = 0;
+var y = evt.getY ();
+if (this.av.getWrapAlignment ()) {
+var hgap = this.av.getCharHeight ();
+if (this.av.getScaleAboveWrapped ()) {
+hgap += this.av.getCharHeight ();
+}var cHeight = this.av.getAlignment ().getHeight () * this.av.getCharHeight () + hgap + this.seqCanvas.getAnnotationHeight ();
+y -= hgap;
+seq = Math.min (Clazz.doubleToInt ((y % cHeight) / this.av.getCharHeight ()), this.av.getAlignment ().getHeight () - 1);
+if (seq < 0) {
+seq = -1;
+}} else {
+seq = Math.min ((Clazz.doubleToInt (y / this.av.getCharHeight ())) + this.av.getStartSeq (), this.av.getAlignment ().getHeight () - 1);
+if (seq < 0) {
+seq = -1;
+}}return seq;
+}, $fz.isPrivate = true, $fz), "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "doMousePressed",
+function (evt) {
+var seq = this.findSeq (evt);
+var res = this.findRes (evt);
+if (seq < this.av.getAlignment ().getHeight () && res < this.av.getAlignment ().getSequenceAt (seq).getLength ()) {
+this.startseq = seq;
+this.lastres = res;
+} else {
+this.startseq = -1;
+this.lastres = -1;
+}return;
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseOverSequence",
+function (sequence, index, pos) {
+var tmp = sequence.hashCode () + index + "";
+if (this.lastMessage == null || !this.lastMessage.equals (tmp)) {
+this.ssm.mouseOverSequence (sequence, index, pos, this.av);
+}this.lastMessage = tmp;
+}, "jalview.datamodel.SequenceI,~N,~N");
+Clazz.overrideMethod (c$, "highlightSequence",
+function (results) {
+if (this.av.isFollowHighlight ()) {
+if (this.ap.scrollToPosition (results, true)) {
+this.ap.alignFrame.repaint ();
+}}this.setStatusMessage (results);
+this.seqCanvas.highlightSearchResults (results);
+}, "jalview.datamodel.SearchResults");
+Clazz.overrideMethod (c$, "getVamsasSource",
+function () {
+return this.ap == null ? null : this.ap.av;
+});
+Clazz.overrideMethod (c$, "updateColours",
+function (seq, index) {
+System.out.println ("update the seqPanel colours");
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+var res = this.findRes (evt);
+var seq = this.findSeq (evt);
+if (seq >= this.av.getAlignment ().getHeight () || seq < 0 || res < 0) {
+if (this.tooltip != null) {
+this.tooltip.setTip ("");
+}return;
+}var sequence = this.av.getAlignment ().getSequenceAt (seq);
+if (res > sequence.getLength ()) {
+if (this.tooltip != null) {
+this.tooltip.setTip ("");
+}return;
+}var respos = sequence.findPosition (res);
+if (this.ssm != null) {
+this.mouseOverSequence (sequence, res, respos);
+}var text = new StringBuilder ();
+text.append ("Sequence ").append (Integer.toString (seq + 1)).append (" ID: ").append (sequence.getName ());
+var obj = null;
+var ch = String.valueOf (sequence.getCharAt (res));
+if (this.av.getAlignment ().isNucleotide ()) {
+obj = jalview.schemes.ResidueProperties.nucleotideName.get (ch);
+if (obj != null) {
+text.append (" Nucleotide: ").append (obj);
+}} else {
+obj = "X".equalsIgnoreCase (ch) ? "X" : jalview.schemes.ResidueProperties.aa2Triplet.get (ch);
+if (obj != null) {
+text.append (" Residue: ").append (obj);
+}}if (obj != null) {
+text.append (" (").append (Integer.toString (respos)).append (")");
+}this.ap.alignFrame.setStatus (text.toString ());
+var tooltipText = new StringBuilder ();
+var groups = this.av.getAlignment ().findAllGroups (sequence);
+if (groups != null) {
+for (var g = 0; g < groups.length; g++) {
+if (groups[g].getStartRes () <= res && groups[g].getEndRes () >= res) {
+if (!groups[g].getName ().startsWith ("JTreeGroup") && !groups[g].getName ().startsWith ("JGroup")) {
+tooltipText.append (groups[g].getName ()).append (" ");
+}if (groups[g].getDescription () != null) {
+tooltipText.append (groups[g].getDescription ());
+}tooltipText.append ("\n");
+}}
+}var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));
+var index = 0;
+while (index < allFeatures.length) {
+var sf = allFeatures[index];
+tooltipText.append (sf.getType () + " " + sf.begin + ":" + sf.end);
+if (sf.getDescription () != null) {
+tooltipText.append (" " + sf.getDescription ());
+}if (sf.getValue ("status") != null) {
+var status = sf.getValue ("status").toString ();
+if (status.length > 0) {
+tooltipText.append (" (" + sf.getValue ("status") + ")");
+}}tooltipText.append ("\n");
+index++;
+}
+if (this.tooltip == null) {
+this.tooltip = new jalview.appletgui.Tooltip (tooltipText.toString (), this.seqCanvas);
+} else {
+this.tooltip.setTip (tooltipText.toString ());
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "findFeaturesAtRes",
+function (sequence, res) {
+var tmp = new java.util.Vector ();
+var features = sequence.getSequenceFeatures ();
+if (features != null) {
+for (var i = 0; i < features.length; i++) {
+if (this.av.getFeaturesDisplayed () == null || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) {
+continue;
+}if (features[i].featureGroup != null && !this.seqCanvas.fr.checkGroupVisibility (features[i].featureGroup, false)) {
+continue;
+}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) {
+tmp.addElement (features[i]);
+}}
+}features = new Array (tmp.size ());
+tmp.copyInto (features);
+return features;
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (evt) {
+if (this.mouseWheelPressed) {
+var oldWidth = this.av.getCharWidth ();
+if (Math.abs (evt.getY () - this.lastMousePress.y) > Math.abs (evt.getX () - this.lastMousePress.x)) {
+var fontSize = this.av.font.getSize ();
+if (evt.getY () < this.lastMousePress.y && this.av.getCharHeight () > 1) {
+fontSize--;
+} else if (evt.getY () > this.lastMousePress.y) {
+fontSize++;
+}if (fontSize < 1) {
+fontSize = 1;
+}this.av.setFont ( new java.awt.Font (this.av.font.getName (), this.av.font.getStyle (), fontSize));
+this.av.setCharWidth (oldWidth);
+} else {
+if (evt.getX () < this.lastMousePress.x && this.av.getCharWidth () > 1) {
+this.av.setCharWidth (this.av.getCharWidth () - 1);
+} else if (evt.getX () > this.lastMousePress.x) {
+this.av.setCharWidth (this.av.getCharWidth () + 1);
+}if (this.av.getCharWidth () < 1) {
+this.av.setCharWidth (1);
+}}this.ap.fontChanged ();
+var fm = this.getFontMetrics (this.av.getFont ());
+this.av.validCharWidth = fm.charWidth ('M') <= this.av.getCharWidth ();
+this.lastMousePress = evt.getPoint ();
+this.ap.paintAlignment (false);
+this.ap.annotationPanel.image = null;
+return;
+}if (!this.editingSeqs) {
+this.doMouseDraggedDefineMode (evt);
+return;
+}var res = this.findRes (evt);
+if (res < 0) {
+res = 0;
+}if ((this.lastres == -1) || (this.lastres == res)) {
+return;
+}if ((res < this.av.getAlignment ().getWidth ()) && (res < this.lastres)) {
+this.editSequence (false, res);
+} else {
+this.editSequence (true, res);
+}this.mouseDragging = true;
+if (this.scrollThread != null) {
+this.scrollThread.setEvent (evt);
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "editSequence",
+function (insertGap, startres) {
+var fixedLeft = -1;
+var fixedRight = -1;
+var fixedColumns = false;
+var sg = this.av.getSelectionGroup ();
+var seq = this.av.getAlignment ().getSequenceAt (this.startseq);
+if (!this.groupEditing && this.av.hasHiddenRows ()) {
+if (this.av.isHiddenRepSequence (seq)) {
+sg = this.av.getRepresentedSequences (seq);
+this.groupEditing = true;
+}}var message = new StringBuffer ();
+if (this.groupEditing) {
+message.append (jalview.util.MessageManager.getString ("action.edit_group")).append (":");
+if (this.editCommand == null) {
+this.editCommand = new jalview.commands.EditCommand (jalview.util.MessageManager.getString ("action.edit_group"));
+}} else {
+message.append (jalview.util.MessageManager.getString ("label.edit_sequence")).append (" " + seq.getName ());
+var label = seq.getName ();
+if (label.length > 10) {
+label = label.substring (0, 10);
+}if (this.editCommand == null) {
+this.editCommand = new jalview.commands.EditCommand (jalview.util.MessageManager.formatMessage ("label.edit_params", Clazz.newArray (-1, [label])));
+}}if (insertGap) {
+message.append (" insert ");
+} else {
+message.append (" delete ");
+}message.append (Math.abs (startres - this.lastres) + " gaps.");
+this.ap.alignFrame.setStatus (message.toString ());
+if (this.groupEditing || (sg != null && sg.getSequences (this.av.getHiddenRepSequences ()).contains (seq))) {
+fixedColumns = true;
+if (sg == null) {
+if (!this.av.isHiddenRepSequence (seq)) {
+this.endEditing ();
+return;
+}sg = this.av.getRepresentedSequences (seq);
+}fixedLeft = sg.getStartRes ();
+fixedRight = sg.getEndRes ();
+if ((startres < fixedLeft && this.lastres >= fixedLeft) || (startres >= fixedLeft && this.lastres < fixedLeft) || (startres > fixedRight && this.lastres <= fixedRight) || (startres <= fixedRight && this.lastres > fixedRight)) {
+this.endEditing ();
+return;
+}if (fixedLeft > startres) {
+fixedRight = fixedLeft - 1;
+fixedLeft = 0;
+} else if (fixedRight < startres) {
+fixedLeft = fixedRight;
+fixedRight = -1;
+}}if (this.av.hasHiddenColumns ()) {
+fixedColumns = true;
+var y1 = this.av.getColumnSelection ().getHiddenBoundaryLeft (startres);
+var y2 = this.av.getColumnSelection ().getHiddenBoundaryRight (startres);
+if ((insertGap && startres > y1 && this.lastres < y1) || (!insertGap && startres < y2 && this.lastres > y2)) {
+this.endEditing ();
+return;
+}if (fixedLeft < y1 && (fixedRight > y2 || fixedRight == -1)) {
+if (startres >= y2) {
+fixedLeft = y2;
+} else {
+fixedRight = y2 - 1;
+}}}if (this.groupEditing) {
+var groupSeqs = sg.getSequences (this.av.getHiddenRepSequences ()).toArray ( new Array (0));
+if (insertGap) {
+if (sg.getStartRes () == 0 && sg.getEndRes () == fixedRight && sg.getEndRes () == this.av.getAlignment ().getWidth () - 1) {
+sg.setEndRes (this.av.getAlignment ().getWidth () + startres - this.lastres);
+fixedRight = sg.getEndRes ();
+}var blank = false;
+for (fixedRight = fixedRight; fixedRight > this.lastres; fixedRight--) {
+blank = true;
+for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {
+for (var j = 0; j < startres - this.lastres; j++) {
+if (!jalview.util.Comparison.isGap (gs.getCharAt (fixedRight - j))) {
+blank = false;
+break;
+}}
+}
+if (blank) {
+break;
+}}
+if (!blank) {
+if (sg.getSize () == this.av.getAlignment ().getHeight ()) {
+if ((this.av.hasHiddenColumns () && startres < this.av.getColumnSelection ().getHiddenBoundaryRight (startres))) {
+this.endEditing ();
+return;
+}var alWidth = this.av.getAlignment ().getWidth ();
+if (this.av.hasHiddenRows ()) {
+var hwidth = this.av.getAlignment ().getHiddenSequences ().getWidth ();
+if (hwidth > alWidth) {
+alWidth = hwidth;
+}}sg.setEndRes (sg.getEndRes () + startres - this.lastres);
+fixedRight = alWidth + startres - this.lastres;
+} else {
+this.endEditing ();
+return;
+}}} else if (!insertGap) {
+for (var gs, $gs = 0, $$gs = groupSeqs; $gs < $$gs.length && ((gs = $$gs[$gs]) || true); $gs++) {
+for (var j = startres; j < this.lastres; j++) {
+if (gs.getLength () <= j) {
+continue;
+}if (!jalview.util.Comparison.isGap (gs.getCharAt (j))) {
+this.endEditing ();
+return;
+}}
+}
+}if (insertGap) {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j < startres; j++) {
+this.insertChar (j, groupSeqs, fixedRight);
+}
+} else {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, groupSeqs, startres, startres - this.lastres, this.av.getAlignment (), true);
+}} else {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j > startres; j--) {
+this.deleteChar (startres, groupSeqs, fixedRight);
+}
+} else {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, groupSeqs, startres, this.lastres - startres, this.av.getAlignment (), true);
+}}} else {
+if (insertGap) {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j < startres; j++) {
+this.insertChar (j, Clazz.newArray (-1, [seq]), fixedRight);
+}
+} else {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, Clazz.newArray (-1, [seq]), this.lastres, startres - this.lastres, this.av.getAlignment (), true);
+}} else {
+if (fixedColumns && fixedRight != -1) {
+for (var j = this.lastres; j > startres; j--) {
+if (!jalview.util.Comparison.isGap (seq.getCharAt (startres))) {
+this.endEditing ();
+break;
+}this.deleteChar (startres, Clazz.newArray (-1, [seq]), fixedRight);
+}
+} else {
+var max = 0;
+for (var m = startres; m < this.lastres; m++) {
+if (!jalview.util.Comparison.isGap (seq.getCharAt (m))) {
+break;
+}max++;
+}
+if (max > 0) {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, Clazz.newArray (-1, [seq]), startres, max, this.av.getAlignment (), true);
+}}}}this.lastres = startres;
+this.seqCanvas.repaint ();
+}, "~B,~N");
+Clazz.defineMethod (c$, "insertChar",
+function (j, seq, fixedColumn) {
+var blankColumn = fixedColumn;
+for (var s = 0; s < seq.length; s++) {
+for (blankColumn = fixedColumn; blankColumn > j; blankColumn--) {
+if (jalview.util.Comparison.isGap (seq[s].getCharAt (blankColumn))) {
+break;
+}}
+if (blankColumn <= j) {
+blankColumn = fixedColumn;
+this.endEditing ();
+return;
+}}
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, blankColumn, 1, this.av.getAlignment (), true);
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, j, 1, this.av.getAlignment (), true);
+}, "~N,~A,~N");
+Clazz.defineMethod (c$, "deleteChar",
+function (j, seq, fixedColumn) {
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seq, j, 1, this.av.getAlignment (), true);
+this.editCommand.appendEdit (jalview.commands.EditCommand.Action.INSERT_GAP, seq, fixedColumn, 1, this.av.getAlignment (), true);
+}, "~N,~A,~N");
+Clazz.defineMethod (c$, "doMousePressedDefineMode",
+function (evt) {
+if (this.scrollThread != null) {
+this.scrollThread.running = false;
+this.scrollThread = null;
+}var res = this.findRes (evt);
+var seq = this.findSeq (evt);
+this.oldSeq = seq;
+this.startWrapBlock = this.wrappedBlock;
+if (seq == -1) {
+return;
+}var sequence = this.av.getAlignment ().getSequenceAt (seq);
+if (sequence == null || res > sequence.getLength ()) {
+return;
+}this.stretchGroup = this.av.getSelectionGroup ();
+if (this.stretchGroup == null) {
+this.stretchGroup = this.av.getAlignment ().findGroup (sequence);
+if (this.stretchGroup != null && res > this.stretchGroup.getStartRes () && res < this.stretchGroup.getEndRes ()) {
+this.av.setSelectionGroup (this.stretchGroup);
+} else {
+this.stretchGroup = null;
+}} else if (!this.stretchGroup.getSequences (null).contains (sequence) || this.stretchGroup.getStartRes () > res || this.stretchGroup.getEndRes () < res) {
+this.stretchGroup = null;
+var allGroups = this.av.getAlignment ().findAllGroups (sequence);
+if (allGroups != null) {
+for (var i = 0; i < allGroups.length; i++) {
+if (allGroups[i].getStartRes () <= res && allGroups[i].getEndRes () >= res) {
+this.stretchGroup = allGroups[i];
+break;
+}}
+}this.av.setSelectionGroup (this.stretchGroup);
+}if ((evt.getModifiers () & 4) == 4) {
+var allFeatures = this.findFeaturesAtRes (sequence, sequence.findPosition (res));
+var links = null;
+if (allFeatures != null) {
+for (var i = 0; i < allFeatures.length; i++) {
+if (allFeatures[i].links != null) {
+if (links == null) {
+links = new java.util.Vector ();
+}for (var j = 0; j < allFeatures[i].links.size (); j++) {
+links.addElement (allFeatures[i].links.elementAt (j));
+}
+}}
+}var popup = new jalview.appletgui.APopupMenu (this.ap, null, links);
+this.add (popup);
+popup.show (this, evt.getX (), evt.getY ());
+return;
+}if (this.av.cursorMode) {
+this.seqCanvas.cursorX = this.findRes (evt);
+this.seqCanvas.cursorY = this.findSeq (evt);
+this.seqCanvas.repaint ();
+return;
+}if (this.stretchGroup == null) {
+var sg = new jalview.datamodel.SequenceGroup ();
+sg.setStartRes (res);
+sg.setEndRes (res);
+sg.addSequence (sequence, false);
+this.av.setSelectionGroup (sg);
+this.stretchGroup = sg;
+if (this.av.getConservationSelected ()) {
+jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.av.getGlobalColourScheme (), "Background");
+}if (this.av.getAbovePIDThreshold ()) {
+jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.av.getGlobalColourScheme (), "Background");
+}}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "doMouseReleasedDefineMode",
+function (evt) {
+if (this.stretchGroup == null) {
+return;
+}this.stretchGroup.recalcConservation ();
+if (this.stretchGroup.cs != null) {
+this.stretchGroup.cs.alignmentChanged (this.stretchGroup, this.av.getHiddenRepSequences ());
+if (this.stretchGroup.cs.conservationApplied ()) {
+jalview.appletgui.SliderPanel.setConservationSlider (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());
+} else {
+jalview.appletgui.SliderPanel.setPIDSliderSource (this.ap, this.stretchGroup.cs, this.stretchGroup.getName ());
+}}this.changeEndRes = false;
+this.changeStartRes = false;
+this.stretchGroup = null;
+jalview.appletgui.PaintRefresher.Refresh (this.ap, this.av.getSequenceSetId ());
+this.ap.paintAlignment (true);
+this.av.sendSelection ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "doMouseDraggedDefineMode",
+function (evt) {
+var res = this.findRes (evt);
+var y = this.findSeq (evt);
+if (this.wrappedBlock != this.startWrapBlock) {
+return;
+}if (this.stretchGroup == null) {
+return;
+}this.mouseDragging = true;
+if (y > this.av.getAlignment ().getHeight ()) {
+y = this.av.getAlignment ().getHeight () - 1;
+}if (res >= this.av.getAlignment ().getWidth ()) {
+res = this.av.getAlignment ().getWidth () - 1;
+}if (this.stretchGroup.getEndRes () == res) {
+this.changeEndRes = true;
+} else if (this.stretchGroup.getStartRes () == res) {
+this.changeStartRes = true;
+}if (res < 0) {
+res = 0;
+}if (this.changeEndRes) {
+if (res > (this.stretchGroup.getStartRes () - 1)) {
+this.stretchGroup.setEndRes (res);
+}} else if (this.changeStartRes) {
+if (res < (this.stretchGroup.getEndRes () + 1)) {
+this.stretchGroup.setStartRes (res);
+}}var dragDirection = 0;
+if (y > this.oldSeq) {
+dragDirection = 1;
+} else if (y < this.oldSeq) {
+dragDirection = -1;
+}while ((y != this.oldSeq) && (this.oldSeq > -1) && (y < this.av.getAlignment ().getHeight ())) {
+var seq = this.av.getAlignment ().getSequenceAt (this.oldSeq);
+this.oldSeq += dragDirection;
+if (this.oldSeq < 0) {
+break;
+}var nextSeq = this.av.getAlignment ().getSequenceAt (this.oldSeq);
+if (this.stretchGroup.getSequences (null).contains (nextSeq)) {
+this.stretchGroup.deleteSequence (seq, false);
+} else {
+if (seq != null) {
+this.stretchGroup.addSequence (seq, false);
+}this.stretchGroup.addSequence (nextSeq, false);
+}}
+if (this.oldSeq < 0) {
+this.oldSeq = -1;
+}if (res > this.av.endRes || res < this.av.startRes || y < this.av.startSeq || y > this.av.endSeq) {
+this.mouseExited (evt);
+}if (this.scrollThread != null) {
+this.scrollThread.setEvent (evt);
+}this.seqCanvas.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (e) {
+if (this.oldSeq < 0) {
+this.oldSeq = 0;
+}if (this.scrollThread != null) {
+this.scrollThread.running = false;
+this.scrollThread = null;
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (e) {
+if (this.av.getWrapAlignment ()) {
+return;
+}if (this.mouseDragging && this.scrollThread == null) {
+this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "scrollCanvas",
+function (evt) {
+if (evt == null) {
+if (this.scrollThread != null) {
+this.scrollThread.running = false;
+this.scrollThread = null;
+}this.mouseDragging = false;
+} else {
+if (this.scrollThread == null) {
+this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.SeqPanel.ScrollThread, this, null);
+}this.mouseDragging = true;
+this.scrollThread.setEvent (evt);
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "selection",
+function (seqsel, colsel, source) {
+if (this.av != null && (this.av === source || !this.av.followSelection || (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).getSequenceSetId ().equals (this.av.getSequenceSetId ())))) {
+return;
+}if (this.selectionFromTranslation (seqsel, colsel, source)) {
+return;
+}var repaint = false;
+var copycolsel = true;
+if (this.av.getSelectionGroup () == null || !this.av.isSelectionGroupChanged (true)) {
+var sgroup = null;
+if (seqsel != null && seqsel.getSize () > 0) {
+if (this.av.getAlignment () == null) {
+System.out.println ("Selection message: alignviewport av SeqSetId=" + this.av.getSequenceSetId () + " ViewId=" + this.av.getViewId () + " 's alignment is NULL! returning immediatly.");
+return;
+}sgroup = seqsel.intersect (this.av.getAlignment (), (this.av.hasHiddenRows ()) ? this.av.getHiddenRepSequences () : null);
+if ((sgroup == null || sgroup.getSize () == 0) && (colsel == null || colsel.size () == 0)) {
+copycolsel = false;
+}}if (sgroup != null && sgroup.getSize () > 0) {
+this.av.setSelectionGroup (sgroup);
+} else {
+this.av.setSelectionGroup (null);
+}repaint = this.av.isSelectionGroupChanged (true);
+}if (copycolsel && (this.av.getColumnSelection () == null || !this.av.isColSelChanged (true))) {
+if (colsel == null || colsel.size () == 0) {
+if (this.av.getColumnSelection () != null) {
+this.av.getColumnSelection ().clear ();
+}} else {
+if (this.av.getColumnSelection () == null) {
+this.av.setColumnSelection ( new jalview.datamodel.ColumnSelection (colsel));
+} else {
+this.av.getColumnSelection ().setElementsFrom (colsel);
+}}repaint = new Boolean (repaint | this.av.isColSelChanged (true)).valueOf ();
+}if (copycolsel && this.av.hasHiddenColumns () && (this.av.getColumnSelection () == null || this.av.getColumnSelection ().getHiddenColumns () == null)) {
+System.err.println ("Bad things");
+}if (repaint) {
+this.ap.scalePanelHolder.repaint ();
+this.ap.repaint ();
+}}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
+Clazz.defineMethod (c$, "scrollTo",
+function (row, column) {
+row = row < 0 ? this.ap.av.startSeq : row;
+column = column < 0 ? this.ap.av.startRes : column;
+this.ap.scrollTo (column, column, row, true, true);
+}, "~N,~N");
+Clazz.defineMethod (c$, "scrollToRow",
+function (row) {
+row = row < 0 ? this.ap.av.startSeq : row;
+this.ap.scrollTo (this.ap.av.startRes, this.ap.av.startRes, row, true, true);
+}, "~N");
+Clazz.defineMethod (c$, "scrollToColumn",
+function (column) {
+column = column < 0 ? this.ap.av.startRes : column;
+this.ap.scrollTo (column, column, this.ap.av.startSeq, true, true);
+}, "~N");
+Clazz.defineMethod (c$, "selectionFromTranslation",
+function (seqsel, colsel, source) {
+if (!(Clazz.instanceOf (source, jalview.api.AlignViewportI))) {
+return false;
+}var sourceAv = source;
+if (sourceAv.getCodingComplement () !== this.av && this.av.getCodingComplement () !== sourceAv) {
+return false;
+}var sg = jalview.util.MappingUtils.mapSequenceGroup (seqsel, sourceAv, this.av);
+this.av.setSelectionGroup (sg);
+this.av.isSelectionGroupChanged (true);
+var cs = jalview.util.MappingUtils.mapColumnSelection (colsel, sourceAv, this.av);
+this.av.setColumnSelection (cs);
+this.av.isColSelChanged (true);
+this.ap.scalePanelHolder.repaint ();
+this.ap.repaint ();
+return true;
+}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
+c$.$SeqPanel$ScrollThread$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.evt = null;
+this.running = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.SeqPanel, "ScrollThread", Thread);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.appletgui.SeqPanel.ScrollThread, []);
+this.start ();
+});
+Clazz.defineMethod (c$, "setEvent",
+function (a) {
+this.evt = a;
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "stopScrolling",
+function () {
+this.running = false;
+});
+Clazz.overrideMethod (c$, "run",
+function () {
+this.running = true;
+while (this.running) {
+if (this.evt != null) {
+if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () < 0 && this.b$["jalview.appletgui.SeqPanel"].av.getStartSeq () > 0) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (true);
+}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getY () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().height && this.b$["jalview.appletgui.SeqPanel"].av.getAlignment ().getHeight () > this.b$["jalview.appletgui.SeqPanel"].av.getEndSeq ()) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollUp (false);
+}if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () < 0) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (false);
+} else if (this.b$["jalview.appletgui.SeqPanel"].mouseDragging && this.evt.getX () >= this.b$["jalview.appletgui.SeqPanel"].getSize ().width) {
+this.running = this.b$["jalview.appletgui.SeqPanel"].ap.scrollRight (true);
+}}try {
+Thread.sleep (75);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/SequenceRenderer.class b/bin/jalview/appletgui/SequenceRenderer.class
index a758da7..d15b02f 100644
Binary files a/bin/jalview/appletgui/SequenceRenderer.class and b/bin/jalview/appletgui/SequenceRenderer.class differ
diff --git a/bin/jalview/appletgui/SequenceRenderer.js b/bin/jalview/appletgui/SequenceRenderer.js
index 449c271..43ee455 100644
--- a/bin/jalview/appletgui/SequenceRenderer.js
+++ b/bin/jalview/appletgui/SequenceRenderer.js
@@ -1,196 +1,196 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.api.SequenceRenderer"], "jalview.appletgui.SequenceRenderer", ["jalview.util.Comparison", "java.awt.Color", "$.Font"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.av = null;
-this.fm = null;
-this.renderGaps = true;
-this.currentSequenceGroup = null;
-this.allGroups = null;
-this.resBoxColour = null;
-this.graphics = null;
-this.forOverview = false;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "SequenceRenderer", null, jalview.api.SequenceRenderer);
-Clazz.makeConstructor (c$,
-function (av) {
-this.av = av;
-}, "jalview.appletgui.AlignViewport");
-Clazz.defineMethod (c$, "prepare",
-function (g, renderGaps) {
-this.graphics = g;
-this.fm = g.getFontMetrics ();
-this.renderGaps = renderGaps;
-}, "java.awt.Graphics,~B");
-Clazz.overrideMethod (c$, "getResidueBoxColour",
-function (seq, i) {
-this.allGroups = this.av.getAlignment ().findAllGroups (seq);
-if (this.inCurrentSequenceGroup (i)) {
-if (this.currentSequenceGroup.getDisplayBoxes ()) {
-this.getBoxColour (this.currentSequenceGroup.cs, seq, i);
-}} else if (this.av.getShowBoxes ()) {
-this.getBoxColour (this.av.getGlobalColourScheme (), seq, i);
-}return this.resBoxColour;
-}, "jalview.datamodel.SequenceI,~N");
-Clazz.overrideMethod (c$, "getResidueColour",
-function (seq, position, fr) {
-var col = this.getResidueBoxColour (seq, position);
-if (fr != null) {
-col = fr.findFeatureColour (col, seq, position);
-}return col;
-}, "jalview.datamodel.SequenceI,~N,jalview.api.FeatureRenderer");
-Clazz.defineMethod (c$, "getBoxColour",
-function (cs, seq, i) {
-if (cs != null) {
-this.resBoxColour = cs.findColour (seq.getCharAt (i), i, seq);
-} else if (this.forOverview && !jalview.util.Comparison.isGap (seq.getCharAt (i))) {
-this.resBoxColour = java.awt.Color.lightGray;
-} else {
-this.resBoxColour = java.awt.Color.white;
-}}, "jalview.schemes.ColourSchemeI,jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "findSequenceColour",
-function (seq, i) {
-this.allGroups = this.av.getAlignment ().findAllGroups (seq);
-this.drawBoxes (seq, i, i, 0);
-return this.resBoxColour;
-}, "jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "drawSequence",
-function (seq, sg, start, end, y1) {
-if (seq == null) {
-return;
-}this.allGroups = sg;
-this.drawBoxes (seq, start, end, y1);
-if (this.av.validCharWidth) {
-this.drawText (seq, start, end, y1);
-}}, "jalview.datamodel.SequenceI,~A,~N,~N,~N");
-Clazz.defineMethod (c$, "drawBoxes",
-function (seq, start, end, y1) {
-var i = start;
-var length = seq.getLength ();
-var curStart = -1;
-var curWidth = this.av.getCharWidth ();
-var avCharWidth = this.av.getCharWidth ();
-var avCharHeight = this.av.getCharHeight ();
-var tempColour = null;
-while (i <= end) {
-this.resBoxColour = java.awt.Color.white;
-if (i < length) {
-if (this.inCurrentSequenceGroup (i)) {
-if (this.currentSequenceGroup.getDisplayBoxes ()) {
-this.getBoxColour (this.currentSequenceGroup.cs, seq, i);
-}} else if (this.av.getShowBoxes ()) {
-this.getBoxColour (this.av.getGlobalColourScheme (), seq, i);
-}}if (this.resBoxColour !== tempColour) {
-if (tempColour != null) {
-this.graphics.fillRect (avCharWidth * (curStart - start), y1, curWidth, avCharHeight);
-}this.graphics.setColor (this.resBoxColour);
-curStart = i;
-curWidth = avCharWidth;
-tempColour = this.resBoxColour;
-} else {
-curWidth += avCharWidth;
-}i++;
-}
-this.graphics.fillRect (avCharWidth * (curStart - start), y1, curWidth, avCharHeight);
-}, "jalview.datamodel.SequenceI,~N,~N,~N");
-Clazz.defineMethod (c$, "drawText",
-function (seq, start, end, y1) {
-var avCharWidth = this.av.getCharWidth ();
-var avCharHeight = this.av.getCharHeight ();
-var boldFont = null;
-var bold = false;
-if (this.av.isUpperCasebold ()) {
-boldFont = new java.awt.Font (this.av.getFont ().getName (), 1, avCharHeight);
-this.graphics.setFont (this.av.getFont ());
-}y1 += avCharHeight - Clazz.doubleToInt (avCharHeight / 5);
-var charOffset = 0;
-if (end + 1 >= seq.getLength ()) {
-end = seq.getLength () - 1;
-}var s = ' ';
-var srep = this.av.isDisplayReferenceSeq ();
-for (var i = start; i <= end; i++) {
-this.graphics.setColor (java.awt.Color.black);
-s = seq.getCharAt (i);
-if (!this.renderGaps && jalview.util.Comparison.isGap (s)) {
-continue;
-}if (this.inCurrentSequenceGroup (i)) {
-if (!this.currentSequenceGroup.getDisplayText ()) {
-continue;
-}if (this.currentSequenceGroup.getColourText ()) {
-this.getBoxColour (this.currentSequenceGroup.cs, seq, i);
-this.graphics.setColor (this.resBoxColour.darker ());
-}if (this.currentSequenceGroup.getShowNonconserved ()) {
-s = this.getDisplayChar (srep, i, s, '.');
-}} else {
-if (!this.av.getShowText ()) {
-continue;
-}if (this.av.getColourText ()) {
-this.getBoxColour (this.av.getGlobalColourScheme (), seq, i);
-if (this.av.getShowBoxes ()) {
-this.graphics.setColor (this.resBoxColour.darker ());
-} else {
-this.graphics.setColor (this.resBoxColour);
-}}if (this.av.getShowUnconserved ()) {
-s = this.getDisplayChar (srep, i, s, '.');
-}}if (this.av.isUpperCasebold ()) {
-this.fm = this.graphics.getFontMetrics ();
-if ('A' <= s && s <= 'Z') {
-if (!bold) {
-this.graphics.setFont (boldFont);
-}bold = true;
-} else if (bold) {
-this.graphics.setFont (this.av.font);
-bold = false;
-}}charOffset = Clazz.doubleToInt ((avCharWidth - this.fm.charWidth (s)) / 2);
-this.graphics.drawString (String.valueOf (s), charOffset + avCharWidth * (i - start), y1);
-}
-}, "jalview.datamodel.SequenceI,~N,~N,~N");
-Clazz.defineMethod (c$, "getDisplayChar",
-($fz = function (usesrep, position, s, c) {
-var conschar = (usesrep) ? this.av.getAlignment ().getSeqrep ().getCharAt (position) : this.av.getAlignmentConsensusAnnotation ().annotations[position].displayCharacter.charAt (0);
-if (conschar != '-' && s == conschar) {
-s = c;
-}return s;
-}, $fz.isPrivate = true, $fz), "~B,~N,~S,~S");
-Clazz.defineMethod (c$, "inCurrentSequenceGroup",
-function (res) {
-if (this.allGroups == null) {
-return false;
-}for (var i = 0; i < this.allGroups.length; i++) {
-if (this.allGroups[i].getStartRes () <= res && this.allGroups[i].getEndRes () >= res) {
-this.currentSequenceGroup = this.allGroups[i];
-return true;
-}}
-return false;
-}, "~N");
-Clazz.defineMethod (c$, "drawHighlightedText",
-function (seq, start, end, x1, y1) {
-var avCharWidth = this.av.getCharWidth ();
-var avCharHeight = this.av.getCharHeight ();
-var pady = Clazz.doubleToInt (avCharHeight / 5);
-var charOffset = 0;
-this.graphics.setColor (java.awt.Color.black);
-this.graphics.fillRect (x1, y1, avCharWidth * (end - start + 1), avCharHeight);
-this.graphics.setColor (java.awt.Color.white);
-var s = '~';
-if (this.av.validCharWidth) {
-for (var i = start; i <= end; i++) {
-if (i < seq.getLength ()) {
-s = seq.getCharAt (i);
-}charOffset = Clazz.doubleToInt ((avCharWidth - this.fm.charWidth (s)) / 2);
-this.graphics.drawString (String.valueOf (s), charOffset + x1 + avCharWidth * (i - start), y1 + avCharHeight - pady);
-}
-}}, "jalview.datamodel.SequenceI,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "drawCursor",
-function (seq, res, x1, y1) {
-var pady = Clazz.doubleToInt (this.av.getCharHeight () / 5);
-var charOffset = 0;
-this.graphics.setColor (java.awt.Color.black);
-this.graphics.fillRect (x1, y1, this.av.getCharWidth (), this.av.getCharHeight ());
-this.graphics.setColor (java.awt.Color.white);
-this.graphics.setColor (java.awt.Color.white);
-var s = seq.getCharAt (res);
-if (this.av.validCharWidth) {
-charOffset = Clazz.doubleToInt ((this.av.getCharWidth () - this.fm.charWidth (s)) / 2);
-this.graphics.drawString (String.valueOf (s), charOffset + x1, (y1 + this.av.getCharHeight ()) - pady);
-}}, "jalview.datamodel.SequenceI,~N,~N,~N");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.api.SequenceRenderer"], "jalview.appletgui.SequenceRenderer", ["jalview.util.Comparison", "java.awt.Color", "$.Font"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.fm = null;
+this.renderGaps = true;
+this.currentSequenceGroup = null;
+this.allGroups = null;
+this.resBoxColour = null;
+this.graphics = null;
+this.forOverview = false;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "SequenceRenderer", null, jalview.api.SequenceRenderer);
+Clazz.makeConstructor (c$,
+function (av) {
+this.av = av;
+}, "jalview.appletgui.AlignViewport");
+Clazz.defineMethod (c$, "prepare",
+function (g, renderGaps) {
+this.graphics = g;
+this.fm = g.getFontMetrics ();
+this.renderGaps = renderGaps;
+}, "java.awt.Graphics,~B");
+Clazz.overrideMethod (c$, "getResidueBoxColour",
+function (seq, i) {
+this.allGroups = this.av.getAlignment ().findAllGroups (seq);
+if (this.inCurrentSequenceGroup (i)) {
+if (this.currentSequenceGroup.getDisplayBoxes ()) {
+this.getBoxColour (this.currentSequenceGroup.cs, seq, i);
+}} else if (this.av.getShowBoxes ()) {
+this.getBoxColour (this.av.getGlobalColourScheme (), seq, i);
+}return this.resBoxColour;
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.overrideMethod (c$, "getResidueColour",
+function (seq, position, fr) {
+var col = this.getResidueBoxColour (seq, position);
+if (fr != null) {
+col = fr.findFeatureColour (col, seq, position);
+}return col;
+}, "jalview.datamodel.SequenceI,~N,jalview.api.FeatureRenderer");
+Clazz.defineMethod (c$, "getBoxColour",
+function (cs, seq, i) {
+if (cs != null) {
+this.resBoxColour = cs.findColour (seq.getCharAt (i), i, seq);
+} else if (this.forOverview && !jalview.util.Comparison.isGap (seq.getCharAt (i))) {
+this.resBoxColour = java.awt.Color.lightGray;
+} else {
+this.resBoxColour = java.awt.Color.white;
+}}, "jalview.schemes.ColourSchemeI,jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "findSequenceColour",
+function (seq, i) {
+this.allGroups = this.av.getAlignment ().findAllGroups (seq);
+this.drawBoxes (seq, i, i, 0);
+return this.resBoxColour;
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "drawSequence",
+function (seq, sg, start, end, y1) {
+if (seq == null) {
+return;
+}this.allGroups = sg;
+this.drawBoxes (seq, start, end, y1);
+if (this.av.validCharWidth) {
+this.drawText (seq, start, end, y1);
+}}, "jalview.datamodel.SequenceI,~A,~N,~N,~N");
+Clazz.defineMethod (c$, "drawBoxes",
+function (seq, start, end, y1) {
+var i = start;
+var length = seq.getLength ();
+var curStart = -1;
+var curWidth = this.av.getCharWidth ();
+var avCharWidth = this.av.getCharWidth ();
+var avCharHeight = this.av.getCharHeight ();
+var tempColour = null;
+while (i <= end) {
+this.resBoxColour = java.awt.Color.white;
+if (i < length) {
+if (this.inCurrentSequenceGroup (i)) {
+if (this.currentSequenceGroup.getDisplayBoxes ()) {
+this.getBoxColour (this.currentSequenceGroup.cs, seq, i);
+}} else if (this.av.getShowBoxes ()) {
+this.getBoxColour (this.av.getGlobalColourScheme (), seq, i);
+}}if (this.resBoxColour !== tempColour) {
+if (tempColour != null) {
+this.graphics.fillRect (avCharWidth * (curStart - start), y1, curWidth, avCharHeight);
+}this.graphics.setColor (this.resBoxColour);
+curStart = i;
+curWidth = avCharWidth;
+tempColour = this.resBoxColour;
+} else {
+curWidth += avCharWidth;
+}i++;
+}
+this.graphics.fillRect (avCharWidth * (curStart - start), y1, curWidth, avCharHeight);
+}, "jalview.datamodel.SequenceI,~N,~N,~N");
+Clazz.defineMethod (c$, "drawText",
+function (seq, start, end, y1) {
+var avCharWidth = this.av.getCharWidth ();
+var avCharHeight = this.av.getCharHeight ();
+var boldFont = null;
+var bold = false;
+if (this.av.isUpperCasebold ()) {
+boldFont = new java.awt.Font (this.av.getFont ().getName (), 1, avCharHeight);
+this.graphics.setFont (this.av.getFont ());
+}y1 += avCharHeight - Clazz.doubleToInt (avCharHeight / 5);
+var charOffset = 0;
+if (end + 1 >= seq.getLength ()) {
+end = seq.getLength () - 1;
+}var s = ' ';
+var srep = this.av.isDisplayReferenceSeq ();
+for (var i = start; i <= end; i++) {
+this.graphics.setColor (java.awt.Color.black);
+s = seq.getCharAt (i);
+if (!this.renderGaps && jalview.util.Comparison.isGap (s)) {
+continue;
+}if (this.inCurrentSequenceGroup (i)) {
+if (!this.currentSequenceGroup.getDisplayText ()) {
+continue;
+}if (this.currentSequenceGroup.getColourText ()) {
+this.getBoxColour (this.currentSequenceGroup.cs, seq, i);
+this.graphics.setColor (this.resBoxColour.darker ());
+}if (this.currentSequenceGroup.getShowNonconserved ()) {
+s = this.getDisplayChar (srep, i, s, '.');
+}} else {
+if (!this.av.getShowText ()) {
+continue;
+}if (this.av.getColourText ()) {
+this.getBoxColour (this.av.getGlobalColourScheme (), seq, i);
+if (this.av.getShowBoxes ()) {
+this.graphics.setColor (this.resBoxColour.darker ());
+} else {
+this.graphics.setColor (this.resBoxColour);
+}}if (this.av.getShowUnconserved ()) {
+s = this.getDisplayChar (srep, i, s, '.');
+}}if (this.av.isUpperCasebold ()) {
+this.fm = this.graphics.getFontMetrics ();
+if ('A' <= s && s <= 'Z') {
+if (!bold) {
+this.graphics.setFont (boldFont);
+}bold = true;
+} else if (bold) {
+this.graphics.setFont (this.av.font);
+bold = false;
+}}charOffset = Clazz.doubleToInt ((avCharWidth - this.fm.charWidth (s)) / 2);
+this.graphics.drawString (String.valueOf (s), charOffset + avCharWidth * (i - start), y1);
+}
+}, "jalview.datamodel.SequenceI,~N,~N,~N");
+Clazz.defineMethod (c$, "getDisplayChar",
+($fz = function (usesrep, position, s, c) {
+var conschar = (usesrep) ? this.av.getAlignment ().getSeqrep ().getCharAt (position) : this.av.getAlignmentConsensusAnnotation ().annotations[position].displayCharacter.charAt (0);
+if (conschar != '-' && s == conschar) {
+s = c;
+}return s;
+}, $fz.isPrivate = true, $fz), "~B,~N,~S,~S");
+Clazz.defineMethod (c$, "inCurrentSequenceGroup",
+function (res) {
+if (this.allGroups == null) {
+return false;
+}for (var i = 0; i < this.allGroups.length; i++) {
+if (this.allGroups[i].getStartRes () <= res && this.allGroups[i].getEndRes () >= res) {
+this.currentSequenceGroup = this.allGroups[i];
+return true;
+}}
+return false;
+}, "~N");
+Clazz.defineMethod (c$, "drawHighlightedText",
+function (seq, start, end, x1, y1) {
+var avCharWidth = this.av.getCharWidth ();
+var avCharHeight = this.av.getCharHeight ();
+var pady = Clazz.doubleToInt (avCharHeight / 5);
+var charOffset = 0;
+this.graphics.setColor (java.awt.Color.black);
+this.graphics.fillRect (x1, y1, avCharWidth * (end - start + 1), avCharHeight);
+this.graphics.setColor (java.awt.Color.white);
+var s = '~';
+if (this.av.validCharWidth) {
+for (var i = start; i <= end; i++) {
+if (i < seq.getLength ()) {
+s = seq.getCharAt (i);
+}charOffset = Clazz.doubleToInt ((avCharWidth - this.fm.charWidth (s)) / 2);
+this.graphics.drawString (String.valueOf (s), charOffset + x1 + avCharWidth * (i - start), y1 + avCharHeight - pady);
+}
+}}, "jalview.datamodel.SequenceI,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "drawCursor",
+function (seq, res, x1, y1) {
+var pady = Clazz.doubleToInt (this.av.getCharHeight () / 5);
+var charOffset = 0;
+this.graphics.setColor (java.awt.Color.black);
+this.graphics.fillRect (x1, y1, this.av.getCharWidth (), this.av.getCharHeight ());
+this.graphics.setColor (java.awt.Color.white);
+this.graphics.setColor (java.awt.Color.white);
+var s = seq.getCharAt (res);
+if (this.av.validCharWidth) {
+charOffset = Clazz.doubleToInt ((this.av.getCharWidth () - this.fm.charWidth (s)) / 2);
+this.graphics.drawString (String.valueOf (s), charOffset + x1, (y1 + this.av.getCharHeight ()) - pady);
+}}, "jalview.datamodel.SequenceI,~N,~N,~N");
+});
diff --git a/bin/jalview/appletgui/SliderPanel.class b/bin/jalview/appletgui/SliderPanel.class
index ae2daac..58ba84c 100644
Binary files a/bin/jalview/appletgui/SliderPanel.class and b/bin/jalview/appletgui/SliderPanel.class differ
diff --git a/bin/jalview/appletgui/SliderPanel.js b/bin/jalview/appletgui/SliderPanel.js
index dc38cc2..8ba7a20 100644
--- a/bin/jalview/appletgui/SliderPanel.js
+++ b/bin/jalview/appletgui/SliderPanel.js
@@ -1,270 +1,270 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.MouseListener", "awt2swing.Button", "$.Checkbox", "$.Label", "$.Scrollbar", "$.TextField", "java.awt.BorderLayout", "$.FlowLayout"], "jalview.appletgui.SliderPanel", ["awt2swing.Frame", "jalview.bin.JalviewLite", "jalview.util.MessageManager", "java.awt.Color", "$.Font", "java.awt.event.WindowAdapter"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ap = null;
-this.forConservation = true;
-this.cs = null;
-this.slider = null;
-this.valueField = null;
-this.label = null;
-this.jPanel1 = null;
-this.jPanel2 = null;
-this.applyButton = null;
-this.undoButton = null;
-this.flowLayout1 = null;
-this.allGroupsCheck = null;
-this.borderLayout1 = null;
-this.borderLayout2 = null;
-this.flowLayout2 = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "SliderPanel", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.MouseListener]);
-Clazz.prepareFields (c$, function () {
-this.slider = new awt2swing.Scrollbar ();
-this.valueField = new awt2swing.TextField ();
-this.label = new awt2swing.Label ();
-this.jPanel1 = new awt2swing.Panel ();
-this.jPanel2 = new awt2swing.Panel ();
-this.applyButton = new awt2swing.Button ();
-this.undoButton = new awt2swing.Button ();
-this.flowLayout1 = new java.awt.FlowLayout ();
-this.allGroupsCheck = new awt2swing.Checkbox ();
-this.borderLayout1 = new java.awt.BorderLayout ();
-this.borderLayout2 = new java.awt.BorderLayout ();
-this.flowLayout2 = new java.awt.FlowLayout ();
-});
-c$.setConservationSlider = Clazz.defineMethod (c$, "setConservationSlider",
-function (ap, cs, source) {
-var sp = null;
-if (jalview.appletgui.SliderPanel.conservationSlider == null) {
-sp = new jalview.appletgui.SliderPanel (ap, cs.getConservationInc (), true, cs);
-jalview.appletgui.SliderPanel.conservationSlider = new awt2swing.Frame ();
-jalview.appletgui.SliderPanel.conservationSlider.add (sp);
-} else {
-sp = jalview.appletgui.SliderPanel.conservationSlider.getComponent (0);
-sp.cs = cs;
-}jalview.appletgui.SliderPanel.conservationSlider.setTitle (jalview.util.MessageManager.formatMessage ("label.conservation_colour_increment", Clazz.newArray (-1, [source])));
-if (ap.av.getAlignment ().getGroups () != null) {
-sp.setAllGroupsCheckEnabled (true);
-} else {
-sp.setAllGroupsCheckEnabled (false);
-}return sp.getValue ();
-}, "jalview.appletgui.AlignmentPanel,jalview.schemes.ColourSchemeI,~S");
-c$.showConservationSlider = Clazz.defineMethod (c$, "showConservationSlider",
-function () {
-try {
-jalview.appletgui.SliderPanel.PIDSlider.setVisible (false);
-jalview.appletgui.SliderPanel.PIDSlider = null;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-if (!jalview.appletgui.SliderPanel.conservationSlider.isVisible ()) {
-jalview.bin.JalviewLite.addFrame (jalview.appletgui.SliderPanel.conservationSlider, jalview.appletgui.SliderPanel.conservationSlider.getTitle (), 420, 100);
-jalview.appletgui.SliderPanel.conservationSlider.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.SliderPanel$1") ? 0 : jalview.appletgui.SliderPanel.$SliderPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.SliderPanel$1, this, null)));
-}});
-c$.setPIDSliderSource = Clazz.defineMethod (c$, "setPIDSliderSource",
-function (ap, cs, source) {
-var pid = null;
-if (jalview.appletgui.SliderPanel.PIDSlider == null) {
-pid = new jalview.appletgui.SliderPanel (ap, 50, false, cs);
-jalview.appletgui.SliderPanel.PIDSlider = new awt2swing.Frame ();
-jalview.appletgui.SliderPanel.PIDSlider.add (pid);
-} else {
-pid = jalview.appletgui.SliderPanel.PIDSlider.getComponent (0);
-pid.cs = cs;
-}jalview.appletgui.SliderPanel.PIDSlider.setTitle (jalview.util.MessageManager.formatMessage ("label.percentage_identity_thereshold", Clazz.newArray (-1, [source])));
-if (ap.av.getAlignment ().getGroups () != null) {
-pid.setAllGroupsCheckEnabled (true);
-} else {
-pid.setAllGroupsCheckEnabled (false);
-}return pid.getValue ();
-}, "jalview.appletgui.AlignmentPanel,jalview.schemes.ColourSchemeI,~S");
-c$.showPIDSlider = Clazz.defineMethod (c$, "showPIDSlider",
-function () {
-try {
-jalview.appletgui.SliderPanel.conservationSlider.setVisible (false);
-jalview.appletgui.SliderPanel.conservationSlider = null;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-if (!jalview.appletgui.SliderPanel.PIDSlider.isVisible ()) {
-jalview.bin.JalviewLite.addFrame (jalview.appletgui.SliderPanel.PIDSlider, jalview.appletgui.SliderPanel.PIDSlider.getTitle (), 420, 100);
-jalview.appletgui.SliderPanel.PIDSlider.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.SliderPanel$2") ? 0 : jalview.appletgui.SliderPanel.$SliderPanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.SliderPanel$2, this, null)));
-}});
-Clazz.makeConstructor (c$,
-function (ap, value, forConserve, cs) {
-Clazz.superConstructor (this, jalview.appletgui.SliderPanel, []);
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.ap = ap;
-this.cs = cs;
-this.forConservation = forConserve;
-this.undoButton.setVisible (false);
-this.applyButton.setVisible (false);
-if (this.forConservation) {
-this.label.setText (jalview.util.MessageManager.getString ("label.modify_conservation_visibility"));
-this.slider.setMinimum (0);
-this.slider.setMaximum (50 + this.slider.getVisibleAmount ());
-this.slider.setUnitIncrement (1);
-} else {
-this.label.setText (jalview.util.MessageManager.getString ("label.colour_residues_above_occurence"));
-this.slider.setMinimum (0);
-this.slider.setMaximum (100 + this.slider.getVisibleAmount ());
-this.slider.setBlockIncrement (1);
-}this.slider.addAdjustmentListener (this);
-this.slider.addMouseListener (this);
-this.slider.setValue (value);
-this.valueField.setText (value + "");
-}, "jalview.appletgui.AlignmentPanel,~N,~B,jalview.schemes.ColourSchemeI");
-Clazz.defineMethod (c$, "valueChanged",
-function (i) {
-if (this.cs == null) {
-return;
-}var toChange = this.cs;
-var allGroups = null;
-if (this.allGroupsCheck.getState ()) {
-allGroups = this.ap.av.getAlignment ().getGroups ().listIterator ();
-}while (toChange != null) {
-if (this.forConservation) {
-toChange.setConservationInc (i);
-} else {
-toChange.setThreshold (i, this.ap.av.isIgnoreGapsConsensus ());
-}if (allGroups != null && allGroups.hasNext ()) {
-while ((toChange = allGroups.next ().cs) == null && allGroups.hasNext ()) {
-;}
-} else {
-toChange = null;
-}}
-this.ap.seqPanel.seqCanvas.repaint ();
-}, "~N");
-Clazz.defineMethod (c$, "setAllGroupsCheckEnabled",
-function (b) {
-this.allGroupsCheck.setEnabled (b);
-}, "~B");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.applyButton) {
-this.applyButton_actionPerformed ();
-} else if (evt.getSource () === this.undoButton) {
-this.undoButton_actionPerformed ();
-} else if (evt.getSource () === this.valueField) {
-this.valueField_actionPerformed ();
-}}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-this.valueField.setText (this.slider.getValue () + "");
-this.valueChanged (this.slider.getValue ());
-}, "java.awt.event.AdjustmentEvent");
-Clazz.defineMethod (c$, "valueField_actionPerformed",
-function () {
-try {
-var i = Integer.parseInt (this.valueField.getText ());
-this.slider.setValue (i);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-this.valueField.setText (this.slider.getValue () + "");
-} else {
-throw ex;
-}
-}
-});
-Clazz.defineMethod (c$, "setValue",
-function (value) {
-this.slider.setValue (value);
-}, "~N");
-Clazz.defineMethod (c$, "getValue",
-function () {
-return Integer.parseInt (this.valueField.getText ());
-});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setLayout (this.borderLayout2);
-this.slider.setBackground (java.awt.Color.white);
-this.slider.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.slider.setOrientation (0);
-this.valueField.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.valueField.setText (" ");
-this.valueField.addActionListener (this);
-this.valueField.setColumns (3);
-this.label.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.label.setText (jalview.util.MessageManager.getString ("label.set_this_label_text"));
-this.jPanel1.setLayout (this.borderLayout1);
-this.jPanel2.setLayout (this.flowLayout1);
-this.applyButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.applyButton.setLabel (jalview.util.MessageManager.getString ("action.apply"));
-this.applyButton.addActionListener (this);
-this.undoButton.setEnabled (false);
-this.undoButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.undoButton.setLabel (jalview.util.MessageManager.getString ("action.undo"));
-this.undoButton.addActionListener (this);
-this.allGroupsCheck.setEnabled (false);
-this.allGroupsCheck.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.allGroupsCheck.setLabel (jalview.util.MessageManager.getString ("action.apply_threshold_all_groups"));
-this.allGroupsCheck.setName (jalview.util.MessageManager.getString ("action.apply_all_groups"));
-this.setBackground (java.awt.Color.white);
-this.setForeground (java.awt.Color.black);
-this.jPanel2.add (this.label, null);
-this.jPanel2.add (this.applyButton, null);
-this.jPanel2.add (this.undoButton, null);
-this.jPanel2.add (this.allGroupsCheck);
-this.jPanel1.add (this.valueField, "East");
-this.jPanel1.add (this.slider, "Center");
-this.add (this.jPanel1, "South");
-this.add (this.jPanel2, "Center");
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "applyButton_actionPerformed",
-function () {
-});
-Clazz.defineMethod (c$, "undoButton_actionPerformed",
-function () {
-});
-Clazz.overrideMethod (c$, "mousePressed",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (evt) {
-this.ap.paintAlignment (true);
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-c$.$SliderPanel$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "SliderPanel$1", java.awt.event.WindowAdapter);
-Clazz.overrideMethod (c$, "windowClosing",
-function (e) {
-jalview.appletgui.SliderPanel.conservationSlider = null;
-}, "java.awt.event.WindowEvent");
-c$ = Clazz.p0p ();
-};
-c$.$SliderPanel$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "SliderPanel$2", java.awt.event.WindowAdapter);
-Clazz.overrideMethod (c$, "windowClosing",
-function (e) {
-jalview.appletgui.SliderPanel.PIDSlider = null;
-}, "java.awt.event.WindowEvent");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"conservationSlider", null,
-"PIDSlider", null);
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.MouseListener", "awt2swing.Button", "$.Checkbox", "$.Label", "$.Scrollbar", "$.TextField", "java.awt.BorderLayout", "$.FlowLayout"], "jalview.appletgui.SliderPanel", ["awt2swing.Frame", "jalview.bin.JalviewLite", "jalview.util.MessageManager", "java.awt.Color", "$.Font", "java.awt.event.WindowAdapter"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ap = null;
+this.forConservation = true;
+this.cs = null;
+this.slider = null;
+this.valueField = null;
+this.label = null;
+this.jPanel1 = null;
+this.jPanel2 = null;
+this.applyButton = null;
+this.undoButton = null;
+this.flowLayout1 = null;
+this.allGroupsCheck = null;
+this.borderLayout1 = null;
+this.borderLayout2 = null;
+this.flowLayout2 = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "SliderPanel", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.MouseListener]);
+Clazz.prepareFields (c$, function () {
+this.slider = new awt2swing.Scrollbar ();
+this.valueField = new awt2swing.TextField ();
+this.label = new awt2swing.Label ();
+this.jPanel1 = new awt2swing.Panel ();
+this.jPanel2 = new awt2swing.Panel ();
+this.applyButton = new awt2swing.Button ();
+this.undoButton = new awt2swing.Button ();
+this.flowLayout1 = new java.awt.FlowLayout ();
+this.allGroupsCheck = new awt2swing.Checkbox ();
+this.borderLayout1 = new java.awt.BorderLayout ();
+this.borderLayout2 = new java.awt.BorderLayout ();
+this.flowLayout2 = new java.awt.FlowLayout ();
+});
+c$.setConservationSlider = Clazz.defineMethod (c$, "setConservationSlider",
+function (ap, cs, source) {
+var sp = null;
+if (jalview.appletgui.SliderPanel.conservationSlider == null) {
+sp = new jalview.appletgui.SliderPanel (ap, cs.getConservationInc (), true, cs);
+jalview.appletgui.SliderPanel.conservationSlider = new awt2swing.Frame ();
+jalview.appletgui.SliderPanel.conservationSlider.add (sp);
+} else {
+sp = jalview.appletgui.SliderPanel.conservationSlider.getComponent (0);
+sp.cs = cs;
+}jalview.appletgui.SliderPanel.conservationSlider.setTitle (jalview.util.MessageManager.formatMessage ("label.conservation_colour_increment", Clazz.newArray (-1, [source])));
+if (ap.av.getAlignment ().getGroups () != null) {
+sp.setAllGroupsCheckEnabled (true);
+} else {
+sp.setAllGroupsCheckEnabled (false);
+}return sp.getValue ();
+}, "jalview.appletgui.AlignmentPanel,jalview.schemes.ColourSchemeI,~S");
+c$.showConservationSlider = Clazz.defineMethod (c$, "showConservationSlider",
+function () {
+try {
+jalview.appletgui.SliderPanel.PIDSlider.setVisible (false);
+jalview.appletgui.SliderPanel.PIDSlider = null;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+if (!jalview.appletgui.SliderPanel.conservationSlider.isVisible ()) {
+jalview.bin.JalviewLite.addFrame (jalview.appletgui.SliderPanel.conservationSlider, jalview.appletgui.SliderPanel.conservationSlider.getTitle (), 420, 100);
+jalview.appletgui.SliderPanel.conservationSlider.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.SliderPanel$1") ? 0 : jalview.appletgui.SliderPanel.$SliderPanel$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.SliderPanel$1, this, null)));
+}});
+c$.setPIDSliderSource = Clazz.defineMethod (c$, "setPIDSliderSource",
+function (ap, cs, source) {
+var pid = null;
+if (jalview.appletgui.SliderPanel.PIDSlider == null) {
+pid = new jalview.appletgui.SliderPanel (ap, 50, false, cs);
+jalview.appletgui.SliderPanel.PIDSlider = new awt2swing.Frame ();
+jalview.appletgui.SliderPanel.PIDSlider.add (pid);
+} else {
+pid = jalview.appletgui.SliderPanel.PIDSlider.getComponent (0);
+pid.cs = cs;
+}jalview.appletgui.SliderPanel.PIDSlider.setTitle (jalview.util.MessageManager.formatMessage ("label.percentage_identity_thereshold", Clazz.newArray (-1, [source])));
+if (ap.av.getAlignment ().getGroups () != null) {
+pid.setAllGroupsCheckEnabled (true);
+} else {
+pid.setAllGroupsCheckEnabled (false);
+}return pid.getValue ();
+}, "jalview.appletgui.AlignmentPanel,jalview.schemes.ColourSchemeI,~S");
+c$.showPIDSlider = Clazz.defineMethod (c$, "showPIDSlider",
+function () {
+try {
+jalview.appletgui.SliderPanel.conservationSlider.setVisible (false);
+jalview.appletgui.SliderPanel.conservationSlider = null;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+if (!jalview.appletgui.SliderPanel.PIDSlider.isVisible ()) {
+jalview.bin.JalviewLite.addFrame (jalview.appletgui.SliderPanel.PIDSlider, jalview.appletgui.SliderPanel.PIDSlider.getTitle (), 420, 100);
+jalview.appletgui.SliderPanel.PIDSlider.addWindowListener (((Clazz.isClassDefined ("jalview.appletgui.SliderPanel$2") ? 0 : jalview.appletgui.SliderPanel.$SliderPanel$2$ ()), Clazz.innerTypeInstance (jalview.appletgui.SliderPanel$2, this, null)));
+}});
+Clazz.makeConstructor (c$,
+function (ap, value, forConserve, cs) {
+Clazz.superConstructor (this, jalview.appletgui.SliderPanel, []);
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.ap = ap;
+this.cs = cs;
+this.forConservation = forConserve;
+this.undoButton.setVisible (false);
+this.applyButton.setVisible (false);
+if (this.forConservation) {
+this.label.setText (jalview.util.MessageManager.getString ("label.modify_conservation_visibility"));
+this.slider.setMinimum (0);
+this.slider.setMaximum (50 + this.slider.getVisibleAmount ());
+this.slider.setUnitIncrement (1);
+} else {
+this.label.setText (jalview.util.MessageManager.getString ("label.colour_residues_above_occurence"));
+this.slider.setMinimum (0);
+this.slider.setMaximum (100 + this.slider.getVisibleAmount ());
+this.slider.setBlockIncrement (1);
+}this.slider.addAdjustmentListener (this);
+this.slider.addMouseListener (this);
+this.slider.setValue (value);
+this.valueField.setText (value + "");
+}, "jalview.appletgui.AlignmentPanel,~N,~B,jalview.schemes.ColourSchemeI");
+Clazz.defineMethod (c$, "valueChanged",
+function (i) {
+if (this.cs == null) {
+return;
+}var toChange = this.cs;
+var allGroups = null;
+if (this.allGroupsCheck.getState ()) {
+allGroups = this.ap.av.getAlignment ().getGroups ().listIterator ();
+}while (toChange != null) {
+if (this.forConservation) {
+toChange.setConservationInc (i);
+} else {
+toChange.setThreshold (i, this.ap.av.isIgnoreGapsConsensus ());
+}if (allGroups != null && allGroups.hasNext ()) {
+while ((toChange = allGroups.next ().cs) == null && allGroups.hasNext ()) {
+;}
+} else {
+toChange = null;
+}}
+this.ap.seqPanel.seqCanvas.repaint ();
+}, "~N");
+Clazz.defineMethod (c$, "setAllGroupsCheckEnabled",
+function (b) {
+this.allGroupsCheck.setEnabled (b);
+}, "~B");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.applyButton) {
+this.applyButton_actionPerformed ();
+} else if (evt.getSource () === this.undoButton) {
+this.undoButton_actionPerformed ();
+} else if (evt.getSource () === this.valueField) {
+this.valueField_actionPerformed ();
+}}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+this.valueField.setText (this.slider.getValue () + "");
+this.valueChanged (this.slider.getValue ());
+}, "java.awt.event.AdjustmentEvent");
+Clazz.defineMethod (c$, "valueField_actionPerformed",
+function () {
+try {
+var i = Integer.parseInt (this.valueField.getText ());
+this.slider.setValue (i);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+this.valueField.setText (this.slider.getValue () + "");
+} else {
+throw ex;
+}
+}
+});
+Clazz.defineMethod (c$, "setValue",
+function (value) {
+this.slider.setValue (value);
+}, "~N");
+Clazz.defineMethod (c$, "getValue",
+function () {
+return Integer.parseInt (this.valueField.getText ());
+});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setLayout (this.borderLayout2);
+this.slider.setBackground (java.awt.Color.white);
+this.slider.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.slider.setOrientation (0);
+this.valueField.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.valueField.setText (" ");
+this.valueField.addActionListener (this);
+this.valueField.setColumns (3);
+this.label.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.label.setText (jalview.util.MessageManager.getString ("label.set_this_label_text"));
+this.jPanel1.setLayout (this.borderLayout1);
+this.jPanel2.setLayout (this.flowLayout1);
+this.applyButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.applyButton.setLabel (jalview.util.MessageManager.getString ("action.apply"));
+this.applyButton.addActionListener (this);
+this.undoButton.setEnabled (false);
+this.undoButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.undoButton.setLabel (jalview.util.MessageManager.getString ("action.undo"));
+this.undoButton.addActionListener (this);
+this.allGroupsCheck.setEnabled (false);
+this.allGroupsCheck.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.allGroupsCheck.setLabel (jalview.util.MessageManager.getString ("action.apply_threshold_all_groups"));
+this.allGroupsCheck.setName (jalview.util.MessageManager.getString ("action.apply_all_groups"));
+this.setBackground (java.awt.Color.white);
+this.setForeground (java.awt.Color.black);
+this.jPanel2.add (this.label, null);
+this.jPanel2.add (this.applyButton, null);
+this.jPanel2.add (this.undoButton, null);
+this.jPanel2.add (this.allGroupsCheck);
+this.jPanel1.add (this.valueField, "East");
+this.jPanel1.add (this.slider, "Center");
+this.add (this.jPanel1, "South");
+this.add (this.jPanel2, "Center");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "applyButton_actionPerformed",
+function () {
+});
+Clazz.defineMethod (c$, "undoButton_actionPerformed",
+function () {
+});
+Clazz.overrideMethod (c$, "mousePressed",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (evt) {
+this.ap.paintAlignment (true);
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+c$.$SliderPanel$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "SliderPanel$1", java.awt.event.WindowAdapter);
+Clazz.overrideMethod (c$, "windowClosing",
+function (e) {
+jalview.appletgui.SliderPanel.conservationSlider = null;
+}, "java.awt.event.WindowEvent");
+c$ = Clazz.p0p ();
+};
+c$.$SliderPanel$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "SliderPanel$2", java.awt.event.WindowAdapter);
+Clazz.overrideMethod (c$, "windowClosing",
+function (e) {
+jalview.appletgui.SliderPanel.PIDSlider = null;
+}, "java.awt.event.WindowEvent");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"conservationSlider", null,
+"PIDSlider", null);
+});
diff --git a/bin/jalview/appletgui/SplitFrame.js b/bin/jalview/appletgui/SplitFrame.js
index 7818eaf..eb3570a 100644
--- a/bin/jalview/appletgui/SplitFrame.js
+++ b/bin/jalview/appletgui/SplitFrame.js
@@ -1,108 +1,108 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.appletgui.EmbmenuFrame"], "jalview.appletgui.SplitFrame", ["awt2swing.Panel", "jalview.analysis.AlignmentUtils", "jalview.bin.JalviewLite", "jalview.structure.StructureSelectionManager", "java.awt.BorderLayout", "$.Dimension", "$.GridLayout"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.topFrame = null;
-this.bottomFrame = null;
-this.outermost = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "SplitFrame", jalview.appletgui.EmbmenuFrame);
-Clazz.makeConstructor (c$,
-function (af1, af2) {
-Clazz.superConstructor (this, jalview.appletgui.SplitFrame, []);
-this.topFrame = af1;
-this.bottomFrame = af2;
-this.init ();
-}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "init",
-function () {
-var $private = Clazz.checkPrivateMethod (arguments);
-if ($private != null) {
-return $private.apply (this, arguments);
-}
-this.constructSplit ();
-var topViewport = this.topFrame.viewport;
-var bottomViewport = this.bottomFrame.viewport;
-var topAlignment = topViewport.getAlignment ();
-var bottomAlignment = bottomViewport.getAlignment ();
-var cdna = topAlignment.isNucleotide () ? topViewport : (bottomAlignment.isNucleotide () ? bottomViewport : null);
-var protein = !topAlignment.isNucleotide () ? topViewport : (!bottomAlignment.isNucleotide () ? bottomViewport : null);
-var mapped = jalview.analysis.AlignmentUtils.mapProteinToCdna (protein.getAlignment (), cdna.getAlignment ());
-if (mapped) {
-var ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (topViewport.applet);
-ssm.addMappings (protein.getAlignment ().getCodonFrames ());
-topViewport.setCodingComplement (bottomViewport);
-ssm.addCommandListener (cdna);
-ssm.addCommandListener (protein);
-}protein.initComplementConsensus ();
-var ap = topAlignment.isNucleotide () ? this.bottomFrame.alignPanel : this.topFrame.alignPanel;
-protein.updateConsensus (ap);
-this.adjustLayout ();
-});
-Clazz.defineMethod (c$, "constructSplit",
-function () {
-this.unsetMenuBar ();
-this.outermost = new awt2swing.Panel ( new java.awt.GridLayout (2, 1));
-var topPanel = new awt2swing.Panel ();
-var bottomPanel = new awt2swing.Panel ();
-this.outermost.add (topPanel);
-this.outermost.add (bottomPanel);
-this.addAlignFrameComponents (this.topFrame, topPanel);
-this.addAlignFrameComponents (this.bottomFrame, bottomPanel);
-});
-Clazz.defineMethod (c$, "adjustLayout",
-function () {
-var cdna = this.topFrame.getAlignViewport ().getAlignment ().isNucleotide () ? this.topFrame.viewport : this.bottomFrame.viewport;
-var protein = cdna === this.topFrame.viewport ? this.bottomFrame.viewport : this.topFrame.viewport;
-var w1 = this.topFrame.alignPanel.idPanel.idCanvas.getWidth ();
-var w2 = this.bottomFrame.alignPanel.idPanel.idCanvas.getWidth ();
-var w3 = Math.max (w1, w2);
-if (w1 != w3) {
-var d = this.topFrame.alignPanel.idPanel.idCanvas.getSize ();
-this.topFrame.alignPanel.idPanel.idCanvas.setSize ( new java.awt.Dimension (w3, d.height));
-}if (w2 != w3) {
-var d = this.bottomFrame.alignPanel.idPanel.idCanvas.getSize ();
-this.bottomFrame.alignPanel.idPanel.idCanvas.setSize ( new java.awt.Dimension (w3, d.height));
-}if (protein != null && cdna != null) {
-var vs = protein.getViewStyle ();
-var scale = vs.isScaleProteinAsCdna () ? 3 : 1;
-vs.setCharWidth (scale * cdna.getViewStyle ().getCharWidth ());
-protein.setViewStyle (vs);
-}});
-Clazz.defineMethod (c$, "addAlignFrameComponents",
-($fz = function (af, panel) {
-panel.setLayout ( new java.awt.BorderLayout ());
-var menuPanel = af.makeEmbeddedPopupMenu (af.getJMenuBar (), true, false);
-panel.add (menuPanel, "North");
-panel.add (af.statusBar, "South");
-panel.add (af.alignPanel, "Center");
-af.setSplitFrame (this);
-}, $fz.isPrivate = true, $fz), "jalview.appletgui.AlignFrame,awt2swing.Panel");
-Clazz.defineMethod (c$, "addToDisplay",
-function (embedded, applet) {
-this.createSplitFrameWindow (embedded, applet);
-this.validate ();
-this.topFrame.alignPanel.adjustAnnotationHeight ();
-this.topFrame.alignPanel.paintAlignment (true);
-this.bottomFrame.alignPanel.adjustAnnotationHeight ();
-this.bottomFrame.alignPanel.paintAlignment (true);
-}, "~B,jalview.bin.JalviewLite");
-Clazz.defineMethod (c$, "createSplitFrameWindow",
-function (embed, applet) {
-if (embed) {
-applet.add (this.outermost);
-applet.validate ();
-} else {
-this.add (this.outermost);
-var width = Math.max (this.topFrame.frameWidth, this.bottomFrame.frameWidth);
-var height = this.topFrame.frameHeight + this.bottomFrame.frameHeight;
-jalview.bin.JalviewLite.addFrame (this, this.getTitle (), width, height);
-}}, "~B,jalview.bin.JalviewLite");
-Clazz.defineMethod (c$, "getComplement",
-function (af) {
-if (this.topFrame === af) {
-return this.bottomFrame;
-} else if (this.bottomFrame === af) {
-return this.topFrame;
-}return null;
-}, "jalview.appletgui.AlignFrame");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.appletgui.EmbmenuFrame"], "jalview.appletgui.SplitFrame", ["awt2swing.Panel", "jalview.analysis.AlignmentUtils", "jalview.bin.JalviewLite", "jalview.structure.StructureSelectionManager", "java.awt.BorderLayout", "$.Dimension", "$.GridLayout"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.topFrame = null;
+this.bottomFrame = null;
+this.outermost = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "SplitFrame", jalview.appletgui.EmbmenuFrame);
+Clazz.makeConstructor (c$,
+function (af1, af2) {
+Clazz.superConstructor (this, jalview.appletgui.SplitFrame, []);
+this.topFrame = af1;
+this.bottomFrame = af2;
+this.init ();
+}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "init",
+function () {
+var $private = Clazz.checkPrivateMethod (arguments);
+if ($private != null) {
+return $private.apply (this, arguments);
+}
+this.constructSplit ();
+var topViewport = this.topFrame.viewport;
+var bottomViewport = this.bottomFrame.viewport;
+var topAlignment = topViewport.getAlignment ();
+var bottomAlignment = bottomViewport.getAlignment ();
+var cdna = topAlignment.isNucleotide () ? topViewport : (bottomAlignment.isNucleotide () ? bottomViewport : null);
+var protein = !topAlignment.isNucleotide () ? topViewport : (!bottomAlignment.isNucleotide () ? bottomViewport : null);
+var mapped = jalview.analysis.AlignmentUtils.mapProteinToCdna (protein.getAlignment (), cdna.getAlignment ());
+if (mapped) {
+var ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (topViewport.applet);
+ssm.addMappings (protein.getAlignment ().getCodonFrames ());
+topViewport.setCodingComplement (bottomViewport);
+ssm.addCommandListener (cdna);
+ssm.addCommandListener (protein);
+}protein.initComplementConsensus ();
+var ap = topAlignment.isNucleotide () ? this.bottomFrame.alignPanel : this.topFrame.alignPanel;
+protein.updateConsensus (ap);
+this.adjustLayout ();
+});
+Clazz.defineMethod (c$, "constructSplit",
+function () {
+this.unsetMenuBar ();
+this.outermost = new awt2swing.Panel ( new java.awt.GridLayout (2, 1));
+var topPanel = new awt2swing.Panel ();
+var bottomPanel = new awt2swing.Panel ();
+this.outermost.add (topPanel);
+this.outermost.add (bottomPanel);
+this.addAlignFrameComponents (this.topFrame, topPanel);
+this.addAlignFrameComponents (this.bottomFrame, bottomPanel);
+});
+Clazz.defineMethod (c$, "adjustLayout",
+function () {
+var cdna = this.topFrame.getAlignViewport ().getAlignment ().isNucleotide () ? this.topFrame.viewport : this.bottomFrame.viewport;
+var protein = cdna === this.topFrame.viewport ? this.bottomFrame.viewport : this.topFrame.viewport;
+var w1 = this.topFrame.alignPanel.idPanel.idCanvas.getWidth ();
+var w2 = this.bottomFrame.alignPanel.idPanel.idCanvas.getWidth ();
+var w3 = Math.max (w1, w2);
+if (w1 != w3) {
+var d = this.topFrame.alignPanel.idPanel.idCanvas.getSize ();
+this.topFrame.alignPanel.idPanel.idCanvas.setSize ( new java.awt.Dimension (w3, d.height));
+}if (w2 != w3) {
+var d = this.bottomFrame.alignPanel.idPanel.idCanvas.getSize ();
+this.bottomFrame.alignPanel.idPanel.idCanvas.setSize ( new java.awt.Dimension (w3, d.height));
+}if (protein != null && cdna != null) {
+var vs = protein.getViewStyle ();
+var scale = vs.isScaleProteinAsCdna () ? 3 : 1;
+vs.setCharWidth (scale * cdna.getViewStyle ().getCharWidth ());
+protein.setViewStyle (vs);
+}});
+Clazz.defineMethod (c$, "addAlignFrameComponents",
+($fz = function (af, panel) {
+panel.setLayout ( new java.awt.BorderLayout ());
+var menuPanel = af.makeEmbeddedPopupMenu (af.getJMenuBar (), true, false);
+panel.add (menuPanel, "North");
+panel.add (af.statusBar, "South");
+panel.add (af.alignPanel, "Center");
+af.setSplitFrame (this);
+}, $fz.isPrivate = true, $fz), "jalview.appletgui.AlignFrame,awt2swing.Panel");
+Clazz.defineMethod (c$, "addToDisplay",
+function (embedded, applet) {
+this.createSplitFrameWindow (embedded, applet);
+this.validate ();
+this.topFrame.alignPanel.adjustAnnotationHeight ();
+this.topFrame.alignPanel.paintAlignment (true);
+this.bottomFrame.alignPanel.adjustAnnotationHeight ();
+this.bottomFrame.alignPanel.paintAlignment (true);
+}, "~B,jalview.bin.JalviewLite");
+Clazz.defineMethod (c$, "createSplitFrameWindow",
+function (embed, applet) {
+if (embed) {
+applet.add (this.outermost);
+applet.validate ();
+} else {
+this.add (this.outermost);
+var width = Math.max (this.topFrame.frameWidth, this.bottomFrame.frameWidth);
+var height = this.topFrame.frameHeight + this.bottomFrame.frameHeight;
+jalview.bin.JalviewLite.addFrame (this, this.getTitle (), width, height);
+}}, "~B,jalview.bin.JalviewLite");
+Clazz.defineMethod (c$, "getComplement",
+function (af) {
+if (this.topFrame === af) {
+return this.bottomFrame;
+} else if (this.bottomFrame === af) {
+return this.topFrame;
+}return null;
+}, "jalview.appletgui.AlignFrame");
+});
diff --git a/bin/jalview/appletgui/TitledPanel.js b/bin/jalview/appletgui/TitledPanel.js
index 351c3ff..026a455 100644
--- a/bin/jalview/appletgui/TitledPanel.js
+++ b/bin/jalview/appletgui/TitledPanel.js
@@ -1,43 +1,43 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.Insets"], "jalview.appletgui.TitledPanel", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.title = null;
-this.$insets = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "TitledPanel", awt2swing.Panel);
-Clazz.prepareFields (c$, function () {
-this.$insets = new java.awt.Insets (10, 10, 10, 10);
-});
-Clazz.makeConstructor (c$,
-function () {
-this.construct ("");
-});
-Clazz.makeConstructor (c$,
-function (title) {
-Clazz.superConstructor (this, jalview.appletgui.TitledPanel, []);
-this.setTitle (title);
-}, "~S");
-Clazz.defineMethod (c$, "getInsets",
-function () {
-return this.$insets;
-});
-Clazz.defineMethod (c$, "paintComponent",
-function (g) {
-Clazz.superCall (this, jalview.appletgui.TitledPanel, "paintComponent", [g]);
-g.setColor (this.getForeground ());
-g.drawRect (5, 5, this.getWidth () - 10, this.getHeight () - 10);
-var width = g.getFontMetrics ().stringWidth (this.getTitle ());
-g.setColor (this.getBackground ());
-g.fillRect (10, 0, width, 10);
-g.setColor (this.getForeground ());
-g.drawString (this.getTitle (), 10, 10);
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "getTitle",
-function () {
-return this.title;
-});
-Clazz.defineMethod (c$, "setTitle",
-function (title) {
-this.title = title;
-}, "~S");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.Insets"], "jalview.appletgui.TitledPanel", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.title = null;
+this.$insets = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "TitledPanel", awt2swing.Panel);
+Clazz.prepareFields (c$, function () {
+this.$insets = new java.awt.Insets (10, 10, 10, 10);
+});
+Clazz.makeConstructor (c$,
+function () {
+this.construct ("");
+});
+Clazz.makeConstructor (c$,
+function (title) {
+Clazz.superConstructor (this, jalview.appletgui.TitledPanel, []);
+this.setTitle (title);
+}, "~S");
+Clazz.defineMethod (c$, "getInsets",
+function () {
+return this.$insets;
+});
+Clazz.defineMethod (c$, "paintComponent",
+function (g) {
+Clazz.superCall (this, jalview.appletgui.TitledPanel, "paintComponent", [g]);
+g.setColor (this.getForeground ());
+g.drawRect (5, 5, this.getWidth () - 10, this.getHeight () - 10);
+var width = g.getFontMetrics ().stringWidth (this.getTitle ());
+g.setColor (this.getBackground ());
+g.fillRect (10, 0, width, 10);
+g.setColor (this.getForeground ());
+g.drawString (this.getTitle (), 10, 10);
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "getTitle",
+function () {
+return this.title;
+});
+Clazz.defineMethod (c$, "setTitle",
+function (title) {
+this.title = title;
+}, "~S");
+});
diff --git a/bin/jalview/appletgui/Tooltip.js b/bin/jalview/appletgui/Tooltip.js
index cb48e62..425b8d7 100644
--- a/bin/jalview/appletgui/Tooltip.js
+++ b/bin/jalview/appletgui/Tooltip.js
@@ -1,67 +1,67 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (null, "jalview.appletgui.Tooltip", ["awt2swing.Frame", "java.applet.Applet", "java.awt.Toolkit"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.tip = null;
-this.lastTip = "";
-this.setPosition = false;
-this.owner = null;
-this.mainContainer = null;
-this.mainLayout = null;
-this.shown = false;
-this.VERTICAL_OFFSET = 20;
-this.HORIZONTAL_ENLARGE = 10;
-this.fontHeight = 0;
-this.linkImage = null;
-this.fm = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "Tooltip");
-Clazz.defineMethod (c$, "setVisible",
-function (b) {
-}, "~B");
-Clazz.makeConstructor (c$,
-function (tip, owner) {
-this.owner = owner;
-this.setTip (tip);
-var url = this.getClass ().getResource ("/images/link.gif");
-if (url != null) {
-this.linkImage = java.awt.Toolkit.getDefaultToolkit ().getImage (url);
-}}, "~S,java.awt.Component");
-Clazz.defineMethod (c$, "setTip",
-function (tip) {
-System.err.println ("Tooltip: " + tip);
-}, "~S");
-Clazz.defineMethod (c$, "setTipLocation",
-function (evt) {
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "removeToolTip",
-($fz = function () {
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "mouseEntered",
-function (me) {
-this.setTipLocation (me);
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "mouseExited",
-function (me) {
-this.removeToolTip ();
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "mousePressed",
-function (me) {
-this.removeToolTip ();
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "mouseReleased",
-function (me) {
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "mouseClicked",
-function (me) {
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "mouseMoved",
-function (me) {
-if (!this.shown) {
-this.setTipLocation (me);
-} else if (this.setPosition) {
-this.setTipLocation (me);
-}}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "mouseDragged",
-function (me) {
-}, "java.awt.event.MouseEvent");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (null, "jalview.appletgui.Tooltip", ["awt2swing.Frame", "java.applet.Applet", "java.awt.Toolkit"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.tip = null;
+this.lastTip = "";
+this.setPosition = false;
+this.owner = null;
+this.mainContainer = null;
+this.mainLayout = null;
+this.shown = false;
+this.VERTICAL_OFFSET = 20;
+this.HORIZONTAL_ENLARGE = 10;
+this.fontHeight = 0;
+this.linkImage = null;
+this.fm = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "Tooltip");
+Clazz.defineMethod (c$, "setVisible",
+function (b) {
+}, "~B");
+Clazz.makeConstructor (c$,
+function (tip, owner) {
+this.owner = owner;
+this.setTip (tip);
+var url = this.getClass ().getResource ("/images/link.gif");
+if (url != null) {
+this.linkImage = java.awt.Toolkit.getDefaultToolkit ().getImage (url);
+}}, "~S,java.awt.Component");
+Clazz.defineMethod (c$, "setTip",
+function (tip) {
+System.err.println ("Tooltip: " + tip);
+}, "~S");
+Clazz.defineMethod (c$, "setTipLocation",
+function (evt) {
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "removeToolTip",
+($fz = function () {
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "mouseEntered",
+function (me) {
+this.setTipLocation (me);
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "mouseExited",
+function (me) {
+this.removeToolTip ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "mousePressed",
+function (me) {
+this.removeToolTip ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "mouseReleased",
+function (me) {
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "mouseClicked",
+function (me) {
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "mouseMoved",
+function (me) {
+if (!this.shown) {
+this.setTipLocation (me);
+} else if (this.setPosition) {
+this.setTipLocation (me);
+}}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "mouseDragged",
+function (me) {
+}, "java.awt.event.MouseEvent");
+});
diff --git a/bin/jalview/appletgui/TreeCanvas.class b/bin/jalview/appletgui/TreeCanvas.class
index ee9c1c1..b5cddc1 100644
Binary files a/bin/jalview/appletgui/TreeCanvas.class and b/bin/jalview/appletgui/TreeCanvas.class differ
diff --git a/bin/jalview/appletgui/TreeCanvas.js b/bin/jalview/appletgui/TreeCanvas.js
index da76a3e..69da9f2 100644
--- a/bin/jalview/appletgui/TreeCanvas.js
+++ b/bin/jalview/appletgui/TreeCanvas.js
@@ -1,375 +1,375 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.util.Hashtable"], "jalview.appletgui.TreeCanvas", ["jalview.analysis.Conservation", "jalview.appletgui.PaintRefresher", "jalview.datamodel.SequenceGroup", "$.SequenceI", "$.SequenceNode", "jalview.schemes.ColourSchemeProperty", "$.ResidueProperties", "$.UserColourScheme", "jalview.util.Format", "$.MappingUtils", "java.awt.Color", "$.Dimension", "$.Point", "$.Rectangle", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.tree = null;
-this.scrollPane = null;
-this.av = null;
-this.$font = null;
-this.fitToWindow = true;
-this.showDistances = false;
-this.showBootstrap = false;
-this.markPlaceholders = false;
-this.offx = 20;
-this.offy = 0;
-this.threshold = 0;
-this.longestName = null;
-this.labelLength = -1;
-this.nameHash = null;
-this.nodeHash = null;
-this.highlightNode = null;
-this.ap = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "TreeCanvas", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
-Clazz.prepareFields (c$, function () {
-this.nameHash = new java.util.Hashtable ();
-this.nodeHash = new java.util.Hashtable ();
-});
-Clazz.makeConstructor (c$,
-function (ap, scroller) {
-Clazz.superConstructor (this, jalview.appletgui.TreeCanvas, []);
-this.ap = ap;
-this.av = ap.av;
-this.$font = this.av.getFont ();
-this.scrollPane = scroller;
-this.addMouseListener (this);
-this.addMouseMotionListener (this);
-this.setLayout (null);
-jalview.appletgui.PaintRefresher.Register (this, this.av.getSequenceSetId ());
-}, "jalview.appletgui.AlignmentPanel,awt2swing.ScrollPane");
-Clazz.defineMethod (c$, "treeSelectionChanged",
-function (sequence) {
-var selected = this.av.getSelectionGroup ();
-if (selected == null) {
-selected = new jalview.datamodel.SequenceGroup ();
-this.av.setSelectionGroup (selected);
-}selected.setEndRes (this.av.getAlignment ().getWidth () - 1);
-selected.addOrRemove (sequence, true);
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "setTree",
-function (tree) {
-this.tree = tree;
-tree.findHeight (tree.getTopNode ());
-var leaves = tree.findLeaves (tree.getTopNode (), new java.util.Vector ());
-var has_placeholders = false;
-this.longestName = "";
-for (var i = 0; i < leaves.size (); i++) {
-var lf = leaves.elementAt (i);
-if (lf.isPlaceholder ()) {
-has_placeholders = true;
-}if (this.longestName.length < (lf.element ()).getName ().length) {
-this.longestName = " * " + (lf.element ()).getName ();
-}}
-this.setMarkPlaceholders (has_placeholders);
-}, "jalview.analysis.NJTree");
-Clazz.defineMethod (c$, "drawNode",
-function (g, node, chunk, scale, width, offx, offy) {
-if (node == null) {
-return;
-}if (node.left () == null && node.right () == null) {
-var height = node.height;
-var dist = node.dist;
-var xstart = Clazz.floatToInt ((height - dist) * scale) + offx;
-var xend = Clazz.floatToInt (height * scale) + offx;
-var ypos = Clazz.floatToInt (node.ycount * chunk) + offy;
-if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
-var seq = node.element ();
-if (this.av.getSequenceColour (seq) === java.awt.Color.white) {
-g.setColor (java.awt.Color.black);
-} else {
-g.setColor (this.av.getSequenceColour (seq).darker ());
-}} else {
-g.setColor (java.awt.Color.black);
-}g.drawLine (xstart, ypos, xend, ypos);
-var nodeLabel = "";
-if (this.showDistances && node.dist > 0) {
-nodeLabel = new jalview.util.Format ("%-.2f").formDouble (node.dist);
-}if (this.showBootstrap) {
-var btstrap = node.getBootstrap ();
-if (btstrap > -1) {
-if (this.showDistances) {
-nodeLabel = nodeLabel + " : ";
-}nodeLabel = nodeLabel + String.valueOf (node.getBootstrap ());
-}}if (!nodeLabel.equals ("")) {
-g.drawString (nodeLabel, xstart + 2, ypos - 2);
-}var name = (this.markPlaceholders && node.isPlaceholder ()) ? (" * " + node.getName ()) : node.getName ();
-var fm = g.getFontMetrics (this.$font);
-var charWidth = fm.stringWidth (name) + 3;
-var charHeight = fm.getHeight ();
-var rect = new java.awt.Rectangle (xend + 10, ypos - charHeight, charWidth, charHeight);
-this.nameHash.put (node.element (), rect);
-var selected = this.av.getSelectionGroup ();
-if (selected != null && selected.getSequences (null).contains (node.element ())) {
-g.setColor (java.awt.Color.gray);
-g.fillRect (xend + 10, ypos - charHeight + 3, charWidth, charHeight);
-g.setColor (java.awt.Color.white);
-}g.drawString (name, xend + 10, ypos);
-g.setColor (java.awt.Color.black);
-} else {
-this.drawNode (g, node.left (), chunk, scale, width, offx, offy);
-this.drawNode (g, node.right (), chunk, scale, width, offx, offy);
-var height = node.height;
-var dist = node.dist;
-var xstart = Clazz.floatToInt ((height - dist) * scale) + offx;
-var xend = Clazz.floatToInt (height * scale) + offx;
-var ypos = Clazz.floatToInt (node.ycount * chunk) + offy;
-g.setColor (node.color.darker ());
-g.drawLine (xstart, ypos, xend, ypos);
-if (node === this.highlightNode) {
-g.fillRect (xend - 3, ypos - 3, 6, 6);
-} else {
-g.fillRect (xend - 2, ypos - 2, 4, 4);
-}var ystart = Clazz.floatToInt ((node.left ()).ycount * chunk) + offy;
-var yend = Clazz.floatToInt ((node.right ()).ycount * chunk) + offy;
-var pos = new java.awt.Rectangle (xend - 2, ypos - 2, 5, 5);
-this.nodeHash.put (node, pos);
-g.drawLine (Clazz.floatToInt (height * scale) + offx, ystart, Clazz.floatToInt (height * scale) + offx, yend);
-var nodeLabel = "";
-if (this.showDistances && (node.dist > 0)) {
-nodeLabel = new jalview.util.Format ("%-.2f").formDouble (node.dist);
-}if (this.showBootstrap) {
-var btstrap = node.getBootstrap ();
-if (btstrap > -1) {
-if (this.showDistances) {
-nodeLabel = nodeLabel + " : ";
-}nodeLabel = nodeLabel + String.valueOf (node.getBootstrap ());
-}}if (!nodeLabel.equals ("")) {
-g.drawString (nodeLabel, xstart + 2, ypos - 2);
-}}}, "java.awt.Graphics,jalview.datamodel.SequenceNode,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "findElement",
-function (x, y) {
-var keys = this.nameHash.keys ();
-while (keys.hasMoreElements ()) {
-var ob = keys.nextElement ();
-var rect = this.nameHash.get (ob);
-if (x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= (rect.y + rect.height)) {
-return ob;
-}}
-keys = this.nodeHash.keys ();
-while (keys.hasMoreElements ()) {
-var ob = keys.nextElement ();
-var rect = this.nodeHash.get (ob);
-if (x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= (rect.y + rect.height)) {
-return ob;
-}}
-return null;
-}, "~N,~N");
-Clazz.defineMethod (c$, "pickNodes",
-function (pickBox) {
-var width = this.getSize ().width;
-var height = this.getSize ().height;
-var top = this.tree.getTopNode ();
-var wscale = (width * .8 - this.offx * 2) / this.tree.getMaxHeight ();
-if (top.count == 0) {
-top.count = (top.left ()).count + (top.right ()).count;
-}var chunk = (height - this.offy) / top.count;
-this.pickNode (pickBox, top, chunk, wscale, width, this.offx, this.offy);
-}, "java.awt.Rectangle");
-Clazz.defineMethod (c$, "pickNode",
-function (pickBox, node, chunk, scale, width, offx, offy) {
-if (node == null) {
-return;
-}if (node.left () == null && node.right () == null) {
-var height = node.height;
-var xend = Clazz.floatToInt (height * scale) + offx;
-var ypos = Clazz.floatToInt (node.ycount * chunk) + offy;
-if (pickBox.contains ( new java.awt.Point (xend, ypos))) {
-if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
-var seq = node.element ();
-var sg = this.av.getSelectionGroup ();
-if (sg != null) {
-sg.addOrRemove (seq, true);
-}}}} else {
-this.pickNode (pickBox, node.left (), chunk, scale, width, offx, offy);
-this.pickNode (pickBox, node.right (), chunk, scale, width, offx, offy);
-}}, "java.awt.Rectangle,jalview.datamodel.SequenceNode,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "setColor",
-function (node, c) {
-if (node == null) {
-return;
-}if (node.left () == null && node.right () == null) {
-node.color = c;
-if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
-this.av.setSequenceColour (node.element (), c);
-}} else {
-node.color = c;
-this.setColor (node.left (), c);
-this.setColor (node.right (), c);
-}}, "jalview.datamodel.SequenceNode,java.awt.Color");
-Clazz.overrideMethod (c$, "update",
-function (g) {
-this.paint (g);
-}, "java.awt.Graphics");
-Clazz.overrideMethod (c$, "paintComponent",
-function (g) {
-if (this.tree == null) {
-return;
-}if (this.nameHash.size () == 0) {
-this.repaint ();
-}var width = this.scrollPane.getSize ().width;
-var height = this.scrollPane.getSize ().height;
-if (!this.fitToWindow) {
-height = g.getFontMetrics (this.$font).getHeight () * this.nameHash.size ();
-}if (this.getSize ().width > width) {
-this.setSize ( new java.awt.Dimension (width, height));
-this.scrollPane.validate ();
-return;
-}this.setSize ( new java.awt.Dimension (width, height));
-g.setFont (this.$font);
-this.draw (g, width, height);
-this.validate ();
-}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "draw",
-function (g, width, height) {
-this.offy = this.$font.getSize () + 10;
-g.setColor (java.awt.Color.white);
-g.fillRect (0, 0, width, height);
-this.labelLength = g.getFontMetrics (this.$font).stringWidth (this.longestName) + 20;
-var wscale = (width - this.labelLength - this.offx * 2) / this.tree.getMaxHeight ();
-var top = this.tree.getTopNode ();
-if (top.count == 0) {
-top.count = (top.left ()).count + (top.right ()).count;
-}var chunk = (height - this.offy) / top.count;
-this.drawNode (g, this.tree.getTopNode (), chunk, wscale, width, this.offx, this.offy);
-if (this.threshold != 0) {
-if (this.av.getCurrentTree () === this.tree) {
-g.setColor (java.awt.Color.red);
-} else {
-g.setColor (java.awt.Color.gray);
-}var x = Clazz.floatToInt (this.threshold * (this.getSize ().width - this.labelLength - 2 * this.offx) + this.offx);
-g.drawLine (x, 0, x, this.getSize ().height);
-}}, "java.awt.Graphics,~N,~N");
-Clazz.overrideMethod (c$, "mouseReleased",
-function (e) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseEntered",
-function (e) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseExited",
-function (e) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseClicked",
-function (evt) {
-if (this.highlightNode != null) {
-if (evt.getClickCount () > 1) {
-this.tree.swapNodes (this.highlightNode);
-this.tree.reCount (this.tree.getTopNode ());
-this.tree.findHeight (this.tree.getTopNode ());
-} else {
-var leaves = new java.util.Vector ();
-this.tree.findLeaves (this.highlightNode, leaves);
-for (var i = 0; i < leaves.size (); i++) {
-var seq = (leaves.elementAt (i)).element ();
-this.treeSelectionChanged (seq);
-}
-}jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
-this.repaint ();
-this.av.sendSelection ();
-}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseDragged",
-function (ect) {
-}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mouseMoved",
-function (evt) {
-this.av.setCurrentTree (this.tree);
-var ob = this.findElement (evt.getX (), evt.getY ());
-if (Clazz.instanceOf (ob, jalview.datamodel.SequenceNode)) {
-this.highlightNode = ob;
-this.repaint ();
-} else {
-if (this.highlightNode != null) {
-this.highlightNode = null;
-this.repaint ();
-}}}, "java.awt.event.MouseEvent");
-Clazz.overrideMethod (c$, "mousePressed",
-function (e) {
-this.av.setCurrentTree (this.tree);
-var x = e.getX ();
-var y = e.getY ();
-var ob = this.findElement (x, y);
-if (Clazz.instanceOf (ob, jalview.datamodel.SequenceI)) {
-this.treeSelectionChanged (ob);
-jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
-this.repaint ();
-this.av.sendSelection ();
-return;
-} else if (!(Clazz.instanceOf (ob, jalview.datamodel.SequenceNode))) {
-if (this.tree.getMaxHeight () != 0) {
-this.threshold = (x - this.offx) / (this.getSize ().width - this.labelLength - 2 * this.offx);
-this.tree.getGroups ().removeAllElements ();
-this.tree.groupNodes (this.tree.getTopNode (), this.threshold);
-this.setColor (this.tree.getTopNode (), java.awt.Color.black);
-this.av.setSelectionGroup (null);
-this.av.getAlignment ().deleteAllGroups ();
-this.av.clearSequenceColours ();
-var codingComplement = this.av.getCodingComplement ();
-if (codingComplement != null) {
-codingComplement.setSelectionGroup (null);
-codingComplement.getAlignment ().deleteAllGroups ();
-codingComplement.clearSequenceColours ();
-}this.colourGroups ();
-}}jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
-this.repaint ();
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "colourGroups",
-function () {
-for (var i = 0; i < this.tree.getGroups ().size (); i++) {
-var col = new java.awt.Color (Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255));
-this.setColor (this.tree.getGroups ().elementAt (i), col.brighter ());
-var l = this.tree.findLeaves (this.tree.getGroups ().elementAt (i), new java.util.Vector ());
-var sequences = new java.util.Vector ();
-for (var j = 0; j < l.size (); j++) {
-var s1 = (l.elementAt (j)).element ();
-if (!sequences.contains (s1)) {
-sequences.addElement (s1);
-}}
-var cs = null;
-var sg = new jalview.datamodel.SequenceGroup (sequences, "", cs, true, true, false, 0, this.av.getAlignment ().getWidth () - 1);
-if (this.av.getGlobalColourScheme () != null) {
-if (Clazz.instanceOf (this.av.getGlobalColourScheme (), jalview.schemes.UserColourScheme)) {
-cs = new jalview.schemes.UserColourScheme ((this.av.getGlobalColourScheme ()).getColours ());
-} else {
-cs = jalview.schemes.ColourSchemeProperty.getColour (sg, jalview.schemes.ColourSchemeProperty.getColourName (this.av.getGlobalColourScheme ()));
-}if (cs != null) {
-cs.setThreshold (this.av.getGlobalColourScheme ().getThreshold (), this.av.isIgnoreGapsConsensus ());
-}}sg.cs = cs;
-sg.setName ("JTreeGroup:" + sg.hashCode ());
-sg.setIdColour (col);
-if (this.av.getGlobalColourScheme () != null && this.av.getGlobalColourScheme ().conservationApplied ()) {
-var c = new jalview.analysis.Conservation ("Group", jalview.schemes.ResidueProperties.propHash, 3, sg.getSequences (null), sg.getStartRes (), sg.getEndRes ());
-c.calculate ();
-c.verdict (false, this.av.getConsPercGaps ());
-cs.setConservation (c);
-sg.cs = cs;
-}this.av.getAlignment ().addGroup (sg);
-this.av.getAlignment ().addGroup (sg);
-var codingComplement = this.av.getCodingComplement ();
-if (codingComplement != null) {
-var mappedGroup = jalview.util.MappingUtils.mapSequenceGroup (sg, this.av, codingComplement);
-if (mappedGroup.getSequences ().size () > 0) {
-codingComplement.getAlignment ().addGroup (mappedGroup);
-for (var seq, $seq = mappedGroup.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-codingComplement.setSequenceColour (seq, col);
-}
-}}}
-this.ap.updateAnnotation ();
-if (this.av.getCodingComplement () != null) {
-(this.av.getCodingComplement ()).firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
-}});
-Clazz.defineMethod (c$, "setShowDistances",
-function (state) {
-this.showDistances = state;
-this.repaint ();
-}, "~B");
-Clazz.defineMethod (c$, "setShowBootstrap",
-function (state) {
-this.showBootstrap = state;
-this.repaint ();
-}, "~B");
-Clazz.defineMethod (c$, "setMarkPlaceholders",
-function (state) {
-this.markPlaceholders = state;
-this.repaint ();
-}, "~B");
-Clazz.defineStatics (c$,
-"PLACEHOLDER", " * ");
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.util.Hashtable"], "jalview.appletgui.TreeCanvas", ["jalview.analysis.Conservation", "jalview.appletgui.PaintRefresher", "jalview.datamodel.SequenceGroup", "$.SequenceI", "$.SequenceNode", "jalview.schemes.ColourSchemeProperty", "$.ResidueProperties", "$.UserColourScheme", "jalview.util.Format", "$.MappingUtils", "java.awt.Color", "$.Dimension", "$.Point", "$.Rectangle", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.tree = null;
+this.scrollPane = null;
+this.av = null;
+this.$font = null;
+this.fitToWindow = true;
+this.showDistances = false;
+this.showBootstrap = false;
+this.markPlaceholders = false;
+this.offx = 20;
+this.offy = 0;
+this.threshold = 0;
+this.longestName = null;
+this.labelLength = -1;
+this.nameHash = null;
+this.nodeHash = null;
+this.highlightNode = null;
+this.ap = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "TreeCanvas", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);
+Clazz.prepareFields (c$, function () {
+this.nameHash = new java.util.Hashtable ();
+this.nodeHash = new java.util.Hashtable ();
+});
+Clazz.makeConstructor (c$,
+function (ap, scroller) {
+Clazz.superConstructor (this, jalview.appletgui.TreeCanvas, []);
+this.ap = ap;
+this.av = ap.av;
+this.$font = this.av.getFont ();
+this.scrollPane = scroller;
+this.addMouseListener (this);
+this.addMouseMotionListener (this);
+this.setLayout (null);
+jalview.appletgui.PaintRefresher.Register (this, this.av.getSequenceSetId ());
+}, "jalview.appletgui.AlignmentPanel,awt2swing.ScrollPane");
+Clazz.defineMethod (c$, "treeSelectionChanged",
+function (sequence) {
+var selected = this.av.getSelectionGroup ();
+if (selected == null) {
+selected = new jalview.datamodel.SequenceGroup ();
+this.av.setSelectionGroup (selected);
+}selected.setEndRes (this.av.getAlignment ().getWidth () - 1);
+selected.addOrRemove (sequence, true);
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "setTree",
+function (tree) {
+this.tree = tree;
+tree.findHeight (tree.getTopNode ());
+var leaves = tree.findLeaves (tree.getTopNode (), new java.util.Vector ());
+var has_placeholders = false;
+this.longestName = "";
+for (var i = 0; i < leaves.size (); i++) {
+var lf = leaves.elementAt (i);
+if (lf.isPlaceholder ()) {
+has_placeholders = true;
+}if (this.longestName.length < (lf.element ()).getName ().length) {
+this.longestName = " * " + (lf.element ()).getName ();
+}}
+this.setMarkPlaceholders (has_placeholders);
+}, "jalview.analysis.NJTree");
+Clazz.defineMethod (c$, "drawNode",
+function (g, node, chunk, scale, width, offx, offy) {
+if (node == null) {
+return;
+}if (node.left () == null && node.right () == null) {
+var height = node.height;
+var dist = node.dist;
+var xstart = Clazz.floatToInt ((height - dist) * scale) + offx;
+var xend = Clazz.floatToInt (height * scale) + offx;
+var ypos = Clazz.floatToInt (node.ycount * chunk) + offy;
+if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
+var seq = node.element ();
+if (this.av.getSequenceColour (seq) === java.awt.Color.white) {
+g.setColor (java.awt.Color.black);
+} else {
+g.setColor (this.av.getSequenceColour (seq).darker ());
+}} else {
+g.setColor (java.awt.Color.black);
+}g.drawLine (xstart, ypos, xend, ypos);
+var nodeLabel = "";
+if (this.showDistances && node.dist > 0) {
+nodeLabel = new jalview.util.Format ("%-.2f").formDouble (node.dist);
+}if (this.showBootstrap) {
+var btstrap = node.getBootstrap ();
+if (btstrap > -1) {
+if (this.showDistances) {
+nodeLabel = nodeLabel + " : ";
+}nodeLabel = nodeLabel + String.valueOf (node.getBootstrap ());
+}}if (!nodeLabel.equals ("")) {
+g.drawString (nodeLabel, xstart + 2, ypos - 2);
+}var name = (this.markPlaceholders && node.isPlaceholder ()) ? (" * " + node.getName ()) : node.getName ();
+var fm = g.getFontMetrics (this.$font);
+var charWidth = fm.stringWidth (name) + 3;
+var charHeight = fm.getHeight ();
+var rect = new java.awt.Rectangle (xend + 10, ypos - charHeight, charWidth, charHeight);
+this.nameHash.put (node.element (), rect);
+var selected = this.av.getSelectionGroup ();
+if (selected != null && selected.getSequences (null).contains (node.element ())) {
+g.setColor (java.awt.Color.gray);
+g.fillRect (xend + 10, ypos - charHeight + 3, charWidth, charHeight);
+g.setColor (java.awt.Color.white);
+}g.drawString (name, xend + 10, ypos);
+g.setColor (java.awt.Color.black);
+} else {
+this.drawNode (g, node.left (), chunk, scale, width, offx, offy);
+this.drawNode (g, node.right (), chunk, scale, width, offx, offy);
+var height = node.height;
+var dist = node.dist;
+var xstart = Clazz.floatToInt ((height - dist) * scale) + offx;
+var xend = Clazz.floatToInt (height * scale) + offx;
+var ypos = Clazz.floatToInt (node.ycount * chunk) + offy;
+g.setColor (node.color.darker ());
+g.drawLine (xstart, ypos, xend, ypos);
+if (node === this.highlightNode) {
+g.fillRect (xend - 3, ypos - 3, 6, 6);
+} else {
+g.fillRect (xend - 2, ypos - 2, 4, 4);
+}var ystart = Clazz.floatToInt ((node.left ()).ycount * chunk) + offy;
+var yend = Clazz.floatToInt ((node.right ()).ycount * chunk) + offy;
+var pos = new java.awt.Rectangle (xend - 2, ypos - 2, 5, 5);
+this.nodeHash.put (node, pos);
+g.drawLine (Clazz.floatToInt (height * scale) + offx, ystart, Clazz.floatToInt (height * scale) + offx, yend);
+var nodeLabel = "";
+if (this.showDistances && (node.dist > 0)) {
+nodeLabel = new jalview.util.Format ("%-.2f").formDouble (node.dist);
+}if (this.showBootstrap) {
+var btstrap = node.getBootstrap ();
+if (btstrap > -1) {
+if (this.showDistances) {
+nodeLabel = nodeLabel + " : ";
+}nodeLabel = nodeLabel + String.valueOf (node.getBootstrap ());
+}}if (!nodeLabel.equals ("")) {
+g.drawString (nodeLabel, xstart + 2, ypos - 2);
+}}}, "java.awt.Graphics,jalview.datamodel.SequenceNode,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "findElement",
+function (x, y) {
+var keys = this.nameHash.keys ();
+while (keys.hasMoreElements ()) {
+var ob = keys.nextElement ();
+var rect = this.nameHash.get (ob);
+if (x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= (rect.y + rect.height)) {
+return ob;
+}}
+keys = this.nodeHash.keys ();
+while (keys.hasMoreElements ()) {
+var ob = keys.nextElement ();
+var rect = this.nodeHash.get (ob);
+if (x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= (rect.y + rect.height)) {
+return ob;
+}}
+return null;
+}, "~N,~N");
+Clazz.defineMethod (c$, "pickNodes",
+function (pickBox) {
+var width = this.getSize ().width;
+var height = this.getSize ().height;
+var top = this.tree.getTopNode ();
+var wscale = (width * .8 - this.offx * 2) / this.tree.getMaxHeight ();
+if (top.count == 0) {
+top.count = (top.left ()).count + (top.right ()).count;
+}var chunk = (height - this.offy) / top.count;
+this.pickNode (pickBox, top, chunk, wscale, width, this.offx, this.offy);
+}, "java.awt.Rectangle");
+Clazz.defineMethod (c$, "pickNode",
+function (pickBox, node, chunk, scale, width, offx, offy) {
+if (node == null) {
+return;
+}if (node.left () == null && node.right () == null) {
+var height = node.height;
+var xend = Clazz.floatToInt (height * scale) + offx;
+var ypos = Clazz.floatToInt (node.ycount * chunk) + offy;
+if (pickBox.contains ( new java.awt.Point (xend, ypos))) {
+if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
+var seq = node.element ();
+var sg = this.av.getSelectionGroup ();
+if (sg != null) {
+sg.addOrRemove (seq, true);
+}}}} else {
+this.pickNode (pickBox, node.left (), chunk, scale, width, offx, offy);
+this.pickNode (pickBox, node.right (), chunk, scale, width, offx, offy);
+}}, "java.awt.Rectangle,jalview.datamodel.SequenceNode,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "setColor",
+function (node, c) {
+if (node == null) {
+return;
+}if (node.left () == null && node.right () == null) {
+node.color = c;
+if (Clazz.instanceOf (node.element (), jalview.datamodel.SequenceI)) {
+this.av.setSequenceColour (node.element (), c);
+}} else {
+node.color = c;
+this.setColor (node.left (), c);
+this.setColor (node.right (), c);
+}}, "jalview.datamodel.SequenceNode,java.awt.Color");
+Clazz.overrideMethod (c$, "update",
+function (g) {
+this.paint (g);
+}, "java.awt.Graphics");
+Clazz.overrideMethod (c$, "paintComponent",
+function (g) {
+if (this.tree == null) {
+return;
+}if (this.nameHash.size () == 0) {
+this.repaint ();
+}var width = this.scrollPane.getSize ().width;
+var height = this.scrollPane.getSize ().height;
+if (!this.fitToWindow) {
+height = g.getFontMetrics (this.$font).getHeight () * this.nameHash.size ();
+}if (this.getSize ().width > width) {
+this.setSize ( new java.awt.Dimension (width, height));
+this.scrollPane.validate ();
+return;
+}this.setSize ( new java.awt.Dimension (width, height));
+g.setFont (this.$font);
+this.draw (g, width, height);
+this.validate ();
+}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "draw",
+function (g, width, height) {
+this.offy = this.$font.getSize () + 10;
+g.setColor (java.awt.Color.white);
+g.fillRect (0, 0, width, height);
+this.labelLength = g.getFontMetrics (this.$font).stringWidth (this.longestName) + 20;
+var wscale = (width - this.labelLength - this.offx * 2) / this.tree.getMaxHeight ();
+var top = this.tree.getTopNode ();
+if (top.count == 0) {
+top.count = (top.left ()).count + (top.right ()).count;
+}var chunk = (height - this.offy) / top.count;
+this.drawNode (g, this.tree.getTopNode (), chunk, wscale, width, this.offx, this.offy);
+if (this.threshold != 0) {
+if (this.av.getCurrentTree () === this.tree) {
+g.setColor (java.awt.Color.red);
+} else {
+g.setColor (java.awt.Color.gray);
+}var x = Clazz.floatToInt (this.threshold * (this.getSize ().width - this.labelLength - 2 * this.offx) + this.offx);
+g.drawLine (x, 0, x, this.getSize ().height);
+}}, "java.awt.Graphics,~N,~N");
+Clazz.overrideMethod (c$, "mouseReleased",
+function (e) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseEntered",
+function (e) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseExited",
+function (e) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseClicked",
+function (evt) {
+if (this.highlightNode != null) {
+if (evt.getClickCount () > 1) {
+this.tree.swapNodes (this.highlightNode);
+this.tree.reCount (this.tree.getTopNode ());
+this.tree.findHeight (this.tree.getTopNode ());
+} else {
+var leaves = new java.util.Vector ();
+this.tree.findLeaves (this.highlightNode, leaves);
+for (var i = 0; i < leaves.size (); i++) {
+var seq = (leaves.elementAt (i)).element ();
+this.treeSelectionChanged (seq);
+}
+}jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
+this.repaint ();
+this.av.sendSelection ();
+}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseDragged",
+function (ect) {
+}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mouseMoved",
+function (evt) {
+this.av.setCurrentTree (this.tree);
+var ob = this.findElement (evt.getX (), evt.getY ());
+if (Clazz.instanceOf (ob, jalview.datamodel.SequenceNode)) {
+this.highlightNode = ob;
+this.repaint ();
+} else {
+if (this.highlightNode != null) {
+this.highlightNode = null;
+this.repaint ();
+}}}, "java.awt.event.MouseEvent");
+Clazz.overrideMethod (c$, "mousePressed",
+function (e) {
+this.av.setCurrentTree (this.tree);
+var x = e.getX ();
+var y = e.getY ();
+var ob = this.findElement (x, y);
+if (Clazz.instanceOf (ob, jalview.datamodel.SequenceI)) {
+this.treeSelectionChanged (ob);
+jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
+this.repaint ();
+this.av.sendSelection ();
+return;
+} else if (!(Clazz.instanceOf (ob, jalview.datamodel.SequenceNode))) {
+if (this.tree.getMaxHeight () != 0) {
+this.threshold = (x - this.offx) / (this.getSize ().width - this.labelLength - 2 * this.offx);
+this.tree.getGroups ().removeAllElements ();
+this.tree.groupNodes (this.tree.getTopNode (), this.threshold);
+this.setColor (this.tree.getTopNode (), java.awt.Color.black);
+this.av.setSelectionGroup (null);
+this.av.getAlignment ().deleteAllGroups ();
+this.av.clearSequenceColours ();
+var codingComplement = this.av.getCodingComplement ();
+if (codingComplement != null) {
+codingComplement.setSelectionGroup (null);
+codingComplement.getAlignment ().deleteAllGroups ();
+codingComplement.clearSequenceColours ();
+}this.colourGroups ();
+}}jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());
+this.repaint ();
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "colourGroups",
+function () {
+for (var i = 0; i < this.tree.getGroups ().size (); i++) {
+var col = new java.awt.Color (Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255));
+this.setColor (this.tree.getGroups ().elementAt (i), col.brighter ());
+var l = this.tree.findLeaves (this.tree.getGroups ().elementAt (i), new java.util.Vector ());
+var sequences = new java.util.Vector ();
+for (var j = 0; j < l.size (); j++) {
+var s1 = (l.elementAt (j)).element ();
+if (!sequences.contains (s1)) {
+sequences.addElement (s1);
+}}
+var cs = null;
+var sg = new jalview.datamodel.SequenceGroup (sequences, "", cs, true, true, false, 0, this.av.getAlignment ().getWidth () - 1);
+if (this.av.getGlobalColourScheme () != null) {
+if (Clazz.instanceOf (this.av.getGlobalColourScheme (), jalview.schemes.UserColourScheme)) {
+cs = new jalview.schemes.UserColourScheme ((this.av.getGlobalColourScheme ()).getColours ());
+} else {
+cs = jalview.schemes.ColourSchemeProperty.getColour (sg, jalview.schemes.ColourSchemeProperty.getColourName (this.av.getGlobalColourScheme ()));
+}if (cs != null) {
+cs.setThreshold (this.av.getGlobalColourScheme ().getThreshold (), this.av.isIgnoreGapsConsensus ());
+}}sg.cs = cs;
+sg.setName ("JTreeGroup:" + sg.hashCode ());
+sg.setIdColour (col);
+if (this.av.getGlobalColourScheme () != null && this.av.getGlobalColourScheme ().conservationApplied ()) {
+var c = new jalview.analysis.Conservation ("Group", jalview.schemes.ResidueProperties.propHash, 3, sg.getSequences (null), sg.getStartRes (), sg.getEndRes ());
+c.calculate ();
+c.verdict (false, this.av.getConsPercGaps ());
+cs.setConservation (c);
+sg.cs = cs;
+}this.av.getAlignment ().addGroup (sg);
+this.av.getAlignment ().addGroup (sg);
+var codingComplement = this.av.getCodingComplement ();
+if (codingComplement != null) {
+var mappedGroup = jalview.util.MappingUtils.mapSequenceGroup (sg, this.av, codingComplement);
+if (mappedGroup.getSequences ().size () > 0) {
+codingComplement.getAlignment ().addGroup (mappedGroup);
+for (var seq, $seq = mappedGroup.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+codingComplement.setSequenceColour (seq, col);
+}
+}}}
+this.ap.updateAnnotation ();
+if (this.av.getCodingComplement () != null) {
+(this.av.getCodingComplement ()).firePropertyChange ("alignment", null, this.ap.av.getAlignment ().getSequences ());
+}});
+Clazz.defineMethod (c$, "setShowDistances",
+function (state) {
+this.showDistances = state;
+this.repaint ();
+}, "~B");
+Clazz.defineMethod (c$, "setShowBootstrap",
+function (state) {
+this.showBootstrap = state;
+this.repaint ();
+}, "~B");
+Clazz.defineMethod (c$, "setMarkPlaceholders",
+function (state) {
+this.markPlaceholders = state;
+this.repaint ();
+}, "~B");
+Clazz.defineStatics (c$,
+"PLACEHOLDER", " * ");
+});
diff --git a/bin/jalview/appletgui/TreePanel$TreeLoader.class b/bin/jalview/appletgui/TreePanel$TreeLoader.class
index 9a214e5..cd993a2 100644
Binary files a/bin/jalview/appletgui/TreePanel$TreeLoader.class and b/bin/jalview/appletgui/TreePanel$TreeLoader.class differ
diff --git a/bin/jalview/appletgui/TreePanel.class b/bin/jalview/appletgui/TreePanel.class
index a2409c8..b8a678d 100644
Binary files a/bin/jalview/appletgui/TreePanel.class and b/bin/jalview/appletgui/TreePanel.class differ
diff --git a/bin/jalview/appletgui/TreePanel.js b/bin/jalview/appletgui/TreePanel.js
index 4d0d747..77a1db5 100644
--- a/bin/jalview/appletgui/TreePanel.js
+++ b/bin/jalview/appletgui/TreePanel.js
@@ -1,261 +1,261 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["jalview.appletgui.EmbmenuFrame", "java.awt.event.ActionListener", "$.ItemListener", "java.lang.Thread", "awt2swing.CheckboxMenuItem", "$.Menu", "$.MenuBar", "$.MenuItem", "$.ScrollPane", "java.awt.BorderLayout"], "jalview.appletgui.TreePanel", ["awt2swing.Frame", "jalview.analysis.NJTree", "jalview.api.analysis.ViewBasedAnalysisI", "jalview.appletgui.AlignFrame", "$.CutAndPasteTransfer", "$.FontChooser", "$.TreeCanvas", "jalview.bin.JalviewLite", "jalview.datamodel.Alignment", "jalview.io.NewickFile", "jalview.schemes.ResidueProperties", "jalview.util.MessageManager", "java.awt.Color", "$.Font"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.seq = null;
-this.$type = null;
-this.pwtype = null;
-this.start = 0;
-this.end = 0;
-this.treeCanvas = null;
-this.tree = null;
-this.ap = null;
-this.av = null;
-if (!Clazz.isClassDefined ("jalview.appletgui.TreePanel.TreeLoader")) {
-jalview.appletgui.TreePanel.$TreePanel$TreeLoader$ ();
-}
-this.borderLayout1 = null;
-this.scrollPane = null;
-this.jMenuBar1 = null;
-this.jMenu2 = null;
-this.fontSize = null;
-this.bootstrapMenu = null;
-this.distanceMenu = null;
-this.placeholdersMenu = null;
-this.fitToWindow = null;
-this.fileMenu = null;
-this.newickOutput = null;
-this.inputData = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "TreePanel", jalview.appletgui.EmbmenuFrame, [java.awt.event.ActionListener, java.awt.event.ItemListener]);
-Clazz.prepareFields (c$, function () {
-this.borderLayout1 = new java.awt.BorderLayout ();
-this.scrollPane = new awt2swing.ScrollPane ();
-this.jMenuBar1 = new awt2swing.MenuBar ();
-this.jMenu2 = new awt2swing.Menu ();
-this.fontSize = new awt2swing.MenuItem ();
-this.bootstrapMenu = new awt2swing.CheckboxMenuItem ();
-this.distanceMenu = new awt2swing.CheckboxMenuItem ();
-this.placeholdersMenu = new awt2swing.CheckboxMenuItem ();
-this.fitToWindow = new awt2swing.CheckboxMenuItem ();
-this.fileMenu = new awt2swing.Menu ();
-this.newickOutput = new awt2swing.MenuItem ();
-this.inputData = new awt2swing.MenuItem ();
-});
-Clazz.defineMethod (c$, "getTree",
-function () {
-return this.tree;
-});
-Clazz.defineMethod (c$, "finalize",
-function () {
-this.ap = null;
-this.av = null;
-Clazz.superCall (this, jalview.appletgui.TreePanel, "finalize", []);
-});
-Clazz.makeConstructor (c$,
-function (ap, type, pwtype) {
-Clazz.superConstructor (this, jalview.appletgui.TreePanel, []);
-try {
-this.jbInit ();
-this.setMenuBar (this.jMenuBar1);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-this.initTreePanel (ap, type, pwtype, null);
-}, "jalview.appletgui.AlignmentPanel,~S,~S");
-Clazz.makeConstructor (c$,
-function (ap, type, pwtype, newtree) {
-Clazz.superConstructor (this, jalview.appletgui.TreePanel, []);
-try {
-this.jbInit ();
-this.setMenuBar (this.jMenuBar1);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.initTreePanel (ap, type, pwtype, newtree);
-}, "jalview.appletgui.AlignmentPanel,~S,~S,jalview.io.NewickFile");
-Clazz.defineMethod (c$, "initTreePanel",
-function (ap, type, pwtype, newTree) {
-this.ap = ap;
-this.av = ap.av;
-this.$type = type;
-this.pwtype = pwtype;
-this.treeCanvas = new jalview.appletgui.TreeCanvas (ap, this.scrollPane);
-var tl = Clazz.innerTypeInstance (jalview.appletgui.TreePanel.TreeLoader, this, null, newTree);
-tl.start ();
-this.embedMenuIfNeeded (this.treeCanvas);
-this.scrollPane.add (this.treeCanvas, "Center");
-}, "jalview.appletgui.AlignmentPanel,~S,~S,jalview.io.NewickFile");
-Clazz.defineMethod (c$, "showOriginalData",
-function () {
-if (this.tree.seqData != null) {
-var gc = '-';
-try {
-gc = this.av.getGapCharacter ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-;var alAndColsel = this.tree.seqData.getAlignmentAndColumnSelection (gc);
-if (alAndColsel != null && alAndColsel[0] != null) {
-var al = new jalview.datamodel.Alignment (alAndColsel[0]);
-var af = new jalview.appletgui.AlignFrame (al, this.av.applet, "Original Data for Tree", false);
-af.viewport.setHiddenColumns (alAndColsel[1]);
-}} else {
-System.out.println ("Original Tree Data not available");
-}});
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-if (evt.getSource () === this.newickOutput) {
-this.newickOutput_actionPerformed ();
-} else if (evt.getSource () === this.fontSize) {
-this.fontSize_actionPerformed ();
-} else if (evt.getSource () === this.inputData) {
-this.showOriginalData ();
-}}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "itemStateChanged",
-function (evt) {
-if (evt.getSource () === this.fitToWindow) {
-this.treeCanvas.fitToWindow = this.fitToWindow.getState ();
-} else if (evt.getSource () === this.distanceMenu) {
-this.treeCanvas.setShowDistances (this.distanceMenu.getState ());
-} else if (evt.getSource () === this.bootstrapMenu) {
-this.treeCanvas.setShowBootstrap (this.bootstrapMenu.getState ());
-} else if (evt.getSource () === this.placeholdersMenu) {
-this.treeCanvas.setMarkPlaceholders (this.placeholdersMenu.getState ());
-}this.treeCanvas.repaint ();
-}, "java.awt.event.ItemEvent");
-Clazz.defineMethod (c$, "newickOutput_actionPerformed",
-function () {
-var fout = new jalview.io.NewickFile (this.tree.getTopNode ());
-var output = fout.print (false, true);
-var cap = new jalview.appletgui.CutAndPasteTransfer (false, null);
-cap.setText (output);
-var frame = new awt2swing.Frame ();
-frame.add (cap);
-jalview.bin.JalviewLite.addFrame (frame, this.$type + " " + this.pwtype, 500, 100);
-});
-Clazz.defineMethod (c$, "getTreeFont",
-function () {
-return this.treeCanvas.$font;
-});
-Clazz.defineMethod (c$, "setTreeFont",
-function (font) {
-this.treeCanvas.$font = font;
-this.treeCanvas.repaint ();
-}, "java.awt.Font");
-Clazz.defineMethod (c$, "fontSize_actionPerformed",
-function () {
-if (this.treeCanvas == null) {
-return;
-} new jalview.appletgui.FontChooser (this);
-});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setLayout (this.borderLayout1);
-this.setBackground (java.awt.Color.white);
-this.setFont ( new java.awt.Font ("Verdana", 0, 12));
-this.jMenu2.setLabel (jalview.util.MessageManager.getString ("action.view"));
-this.fontSize.setLabel (jalview.util.MessageManager.getString ("action.font"));
-this.fontSize.addActionListener (this);
-this.bootstrapMenu.setLabel (jalview.util.MessageManager.getString ("label.show_bootstrap_values"));
-this.bootstrapMenu.addItemListener (this);
-this.distanceMenu.setLabel (jalview.util.MessageManager.getString ("label.show_distances"));
-this.distanceMenu.addItemListener (this);
-this.placeholdersMenu.setLabel (jalview.util.MessageManager.getString ("label.mark_unassociated_leaves"));
-this.placeholdersMenu.addItemListener (this);
-this.fitToWindow.setState (true);
-this.fitToWindow.setLabel (jalview.util.MessageManager.getString ("label.fit_to_window"));
-this.fitToWindow.addItemListener (this);
-this.fileMenu.setLabel (jalview.util.MessageManager.getString ("action.file"));
-this.newickOutput.setLabel (jalview.util.MessageManager.getString ("label.newick_format"));
-this.newickOutput.addActionListener (this);
-this.inputData.setLabel (jalview.util.MessageManager.getString ("label.input_data"));
-this.add (this.scrollPane, "Center");
-this.jMenuBar1.add (this.fileMenu);
-this.jMenuBar1.add (this.jMenu2);
-this.jMenu2.add (this.fitToWindow);
-this.jMenu2.add (this.fontSize);
-this.jMenu2.add (this.distanceMenu);
-this.jMenu2.add (this.bootstrapMenu);
-this.jMenu2.add (this.placeholdersMenu);
-this.fileMenu.add (this.newickOutput);
-this.fileMenu.add (this.inputData);
-this.inputData.addActionListener (this);
-}, $fz.isPrivate = true, $fz));
-c$.$TreePanel$TreeLoader$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.newtree = null;
-this.odata = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui.TreePanel, "TreeLoader", Thread);
-Clazz.makeConstructor (c$,
-function (a) {
-Clazz.superConstructor (this, jalview.appletgui.TreePanel.TreeLoader, []);
-this.newtree = a;
-}, "jalview.io.NewickFile");
-Clazz.overrideMethod (c$, "run",
-function () {
-if (this.newtree != null) {
-if (this.odata == null) {
-this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getSequencesArray (), this.newtree);
-} else {
-this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getSequencesArray (), this.odata, this.newtree);
-}} else {
-var a;
-var b;
-var c;
-var d = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup () != null && this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getSize () > 1;
-var e = this.b$["jalview.appletgui.TreePanel"].av.getAlignmentView (d);
-if (!d) {
-a = 0;
-b = this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getWidth ();
-c = this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getSequencesArray ();
-} else {
-a = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getStartRes ();
-b = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getEndRes () + 1;
-c = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getSequencesInOrder (this.b$["jalview.appletgui.TreePanel"].av.getAlignment ());
-}var f = jalview.schemes.ResidueProperties.getScoreModel (this.b$["jalview.appletgui.TreePanel"].pwtype);
-if (Clazz.instanceOf (f, jalview.api.analysis.ViewBasedAnalysisI)) {
-try {
-f = f.getClass ().newInstance ();
-(f).configureFromAlignmentView (this.b$["jalview.appletgui.TreePanel"].treeCanvas.ap);
-} catch (q) {
-if (Clazz.exceptionOf (q, Exception)) {
-System.err.println ("Couldn't create a scoremodel instance for " + f.getName ());
-q.printStackTrace ();
-} else {
-throw q;
-}
-}
-this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (c, e, this.b$["jalview.appletgui.TreePanel"].$type, this.b$["jalview.appletgui.TreePanel"].pwtype, f, a, b);
-} else {
-this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (c, e, this.b$["jalview.appletgui.TreePanel"].$type, this.b$["jalview.appletgui.TreePanel"].pwtype, null, a, b);
-}}this.b$["jalview.appletgui.TreePanel"].tree.reCount (this.b$["jalview.appletgui.TreePanel"].tree.getTopNode ());
-this.b$["jalview.appletgui.TreePanel"].tree.findHeight (this.b$["jalview.appletgui.TreePanel"].tree.getTopNode ());
-this.b$["jalview.appletgui.TreePanel"].treeCanvas.setTree (this.b$["jalview.appletgui.TreePanel"].tree);
-if (this.newtree != null) {
-var a = this.newtree.HasDistances () && this.b$["jalview.appletgui.TreePanel"].av.applet.getDefaultParameter ("showTreeDistances", this.newtree.HasDistances ());
-var b = this.newtree.HasBootstrap () && this.b$["jalview.appletgui.TreePanel"].av.applet.getDefaultParameter ("showTreeBootstraps", this.newtree.HasBootstrap ());
-this.b$["jalview.appletgui.TreePanel"].distanceMenu.setState (a);
-this.b$["jalview.appletgui.TreePanel"].bootstrapMenu.setState (b);
-this.b$["jalview.appletgui.TreePanel"].treeCanvas.setShowBootstrap (b);
-this.b$["jalview.appletgui.TreePanel"].treeCanvas.setShowDistances (a);
-this.b$["jalview.appletgui.TreePanel"].treeCanvas.setMarkPlaceholders (this.b$["jalview.appletgui.TreePanel"].av.applet.getDefaultParameter ("showUnlinkedTreeNodes", false));
-}this.b$["jalview.appletgui.TreePanel"].treeCanvas.repaint ();
-this.b$["jalview.appletgui.TreePanel"].av.setCurrentTree (this.b$["jalview.appletgui.TreePanel"].tree);
-});
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["jalview.appletgui.EmbmenuFrame", "java.awt.event.ActionListener", "$.ItemListener", "java.lang.Thread", "awt2swing.CheckboxMenuItem", "$.Menu", "$.MenuBar", "$.MenuItem", "$.ScrollPane", "java.awt.BorderLayout"], "jalview.appletgui.TreePanel", ["awt2swing.Frame", "jalview.analysis.NJTree", "jalview.api.analysis.ViewBasedAnalysisI", "jalview.appletgui.AlignFrame", "$.CutAndPasteTransfer", "$.FontChooser", "$.TreeCanvas", "jalview.bin.JalviewLite", "jalview.datamodel.Alignment", "jalview.io.NewickFile", "jalview.schemes.ResidueProperties", "jalview.util.MessageManager", "java.awt.Color", "$.Font"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.seq = null;
+this.$type = null;
+this.pwtype = null;
+this.start = 0;
+this.end = 0;
+this.treeCanvas = null;
+this.tree = null;
+this.ap = null;
+this.av = null;
+if (!Clazz.isClassDefined ("jalview.appletgui.TreePanel.TreeLoader")) {
+jalview.appletgui.TreePanel.$TreePanel$TreeLoader$ ();
+}
+this.borderLayout1 = null;
+this.scrollPane = null;
+this.jMenuBar1 = null;
+this.jMenu2 = null;
+this.fontSize = null;
+this.bootstrapMenu = null;
+this.distanceMenu = null;
+this.placeholdersMenu = null;
+this.fitToWindow = null;
+this.fileMenu = null;
+this.newickOutput = null;
+this.inputData = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "TreePanel", jalview.appletgui.EmbmenuFrame, [java.awt.event.ActionListener, java.awt.event.ItemListener]);
+Clazz.prepareFields (c$, function () {
+this.borderLayout1 = new java.awt.BorderLayout ();
+this.scrollPane = new awt2swing.ScrollPane ();
+this.jMenuBar1 = new awt2swing.MenuBar ();
+this.jMenu2 = new awt2swing.Menu ();
+this.fontSize = new awt2swing.MenuItem ();
+this.bootstrapMenu = new awt2swing.CheckboxMenuItem ();
+this.distanceMenu = new awt2swing.CheckboxMenuItem ();
+this.placeholdersMenu = new awt2swing.CheckboxMenuItem ();
+this.fitToWindow = new awt2swing.CheckboxMenuItem ();
+this.fileMenu = new awt2swing.Menu ();
+this.newickOutput = new awt2swing.MenuItem ();
+this.inputData = new awt2swing.MenuItem ();
+});
+Clazz.defineMethod (c$, "getTree",
+function () {
+return this.tree;
+});
+Clazz.defineMethod (c$, "finalize",
+function () {
+this.ap = null;
+this.av = null;
+Clazz.superCall (this, jalview.appletgui.TreePanel, "finalize", []);
+});
+Clazz.makeConstructor (c$,
+function (ap, type, pwtype) {
+Clazz.superConstructor (this, jalview.appletgui.TreePanel, []);
+try {
+this.jbInit ();
+this.setMenuBar (this.jMenuBar1);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+this.initTreePanel (ap, type, pwtype, null);
+}, "jalview.appletgui.AlignmentPanel,~S,~S");
+Clazz.makeConstructor (c$,
+function (ap, type, pwtype, newtree) {
+Clazz.superConstructor (this, jalview.appletgui.TreePanel, []);
+try {
+this.jbInit ();
+this.setMenuBar (this.jMenuBar1);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.initTreePanel (ap, type, pwtype, newtree);
+}, "jalview.appletgui.AlignmentPanel,~S,~S,jalview.io.NewickFile");
+Clazz.defineMethod (c$, "initTreePanel",
+function (ap, type, pwtype, newTree) {
+this.ap = ap;
+this.av = ap.av;
+this.$type = type;
+this.pwtype = pwtype;
+this.treeCanvas = new jalview.appletgui.TreeCanvas (ap, this.scrollPane);
+var tl = Clazz.innerTypeInstance (jalview.appletgui.TreePanel.TreeLoader, this, null, newTree);
+tl.start ();
+this.embedMenuIfNeeded (this.treeCanvas);
+this.scrollPane.add (this.treeCanvas, "Center");
+}, "jalview.appletgui.AlignmentPanel,~S,~S,jalview.io.NewickFile");
+Clazz.defineMethod (c$, "showOriginalData",
+function () {
+if (this.tree.seqData != null) {
+var gc = '-';
+try {
+gc = this.av.getGapCharacter ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+;var alAndColsel = this.tree.seqData.getAlignmentAndColumnSelection (gc);
+if (alAndColsel != null && alAndColsel[0] != null) {
+var al = new jalview.datamodel.Alignment (alAndColsel[0]);
+var af = new jalview.appletgui.AlignFrame (al, this.av.applet, "Original Data for Tree", false);
+af.viewport.setHiddenColumns (alAndColsel[1]);
+}} else {
+System.out.println ("Original Tree Data not available");
+}});
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+if (evt.getSource () === this.newickOutput) {
+this.newickOutput_actionPerformed ();
+} else if (evt.getSource () === this.fontSize) {
+this.fontSize_actionPerformed ();
+} else if (evt.getSource () === this.inputData) {
+this.showOriginalData ();
+}}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "itemStateChanged",
+function (evt) {
+if (evt.getSource () === this.fitToWindow) {
+this.treeCanvas.fitToWindow = this.fitToWindow.getState ();
+} else if (evt.getSource () === this.distanceMenu) {
+this.treeCanvas.setShowDistances (this.distanceMenu.getState ());
+} else if (evt.getSource () === this.bootstrapMenu) {
+this.treeCanvas.setShowBootstrap (this.bootstrapMenu.getState ());
+} else if (evt.getSource () === this.placeholdersMenu) {
+this.treeCanvas.setMarkPlaceholders (this.placeholdersMenu.getState ());
+}this.treeCanvas.repaint ();
+}, "java.awt.event.ItemEvent");
+Clazz.defineMethod (c$, "newickOutput_actionPerformed",
+function () {
+var fout = new jalview.io.NewickFile (this.tree.getTopNode ());
+var output = fout.print (false, true);
+var cap = new jalview.appletgui.CutAndPasteTransfer (false, null);
+cap.setText (output);
+var frame = new awt2swing.Frame ();
+frame.add (cap);
+jalview.bin.JalviewLite.addFrame (frame, this.$type + " " + this.pwtype, 500, 100);
+});
+Clazz.defineMethod (c$, "getTreeFont",
+function () {
+return this.treeCanvas.$font;
+});
+Clazz.defineMethod (c$, "setTreeFont",
+function (font) {
+this.treeCanvas.$font = font;
+this.treeCanvas.repaint ();
+}, "java.awt.Font");
+Clazz.defineMethod (c$, "fontSize_actionPerformed",
+function () {
+if (this.treeCanvas == null) {
+return;
+} new jalview.appletgui.FontChooser (this);
+});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setLayout (this.borderLayout1);
+this.setBackground (java.awt.Color.white);
+this.setFont ( new java.awt.Font ("Verdana", 0, 12));
+this.jMenu2.setLabel (jalview.util.MessageManager.getString ("action.view"));
+this.fontSize.setLabel (jalview.util.MessageManager.getString ("action.font"));
+this.fontSize.addActionListener (this);
+this.bootstrapMenu.setLabel (jalview.util.MessageManager.getString ("label.show_bootstrap_values"));
+this.bootstrapMenu.addItemListener (this);
+this.distanceMenu.setLabel (jalview.util.MessageManager.getString ("label.show_distances"));
+this.distanceMenu.addItemListener (this);
+this.placeholdersMenu.setLabel (jalview.util.MessageManager.getString ("label.mark_unassociated_leaves"));
+this.placeholdersMenu.addItemListener (this);
+this.fitToWindow.setState (true);
+this.fitToWindow.setLabel (jalview.util.MessageManager.getString ("label.fit_to_window"));
+this.fitToWindow.addItemListener (this);
+this.fileMenu.setLabel (jalview.util.MessageManager.getString ("action.file"));
+this.newickOutput.setLabel (jalview.util.MessageManager.getString ("label.newick_format"));
+this.newickOutput.addActionListener (this);
+this.inputData.setLabel (jalview.util.MessageManager.getString ("label.input_data"));
+this.add (this.scrollPane, "Center");
+this.jMenuBar1.add (this.fileMenu);
+this.jMenuBar1.add (this.jMenu2);
+this.jMenu2.add (this.fitToWindow);
+this.jMenu2.add (this.fontSize);
+this.jMenu2.add (this.distanceMenu);
+this.jMenu2.add (this.bootstrapMenu);
+this.jMenu2.add (this.placeholdersMenu);
+this.fileMenu.add (this.newickOutput);
+this.fileMenu.add (this.inputData);
+this.inputData.addActionListener (this);
+}, $fz.isPrivate = true, $fz));
+c$.$TreePanel$TreeLoader$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.newtree = null;
+this.odata = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui.TreePanel, "TreeLoader", Thread);
+Clazz.makeConstructor (c$,
+function (a) {
+Clazz.superConstructor (this, jalview.appletgui.TreePanel.TreeLoader, []);
+this.newtree = a;
+}, "jalview.io.NewickFile");
+Clazz.overrideMethod (c$, "run",
+function () {
+if (this.newtree != null) {
+if (this.odata == null) {
+this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getSequencesArray (), this.newtree);
+} else {
+this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getSequencesArray (), this.odata, this.newtree);
+}} else {
+var a;
+var b;
+var c;
+var d = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup () != null && this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getSize () > 1;
+var e = this.b$["jalview.appletgui.TreePanel"].av.getAlignmentView (d);
+if (!d) {
+a = 0;
+b = this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getWidth ();
+c = this.b$["jalview.appletgui.TreePanel"].av.getAlignment ().getSequencesArray ();
+} else {
+a = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getStartRes ();
+b = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getEndRes () + 1;
+c = this.b$["jalview.appletgui.TreePanel"].av.getSelectionGroup ().getSequencesInOrder (this.b$["jalview.appletgui.TreePanel"].av.getAlignment ());
+}var f = jalview.schemes.ResidueProperties.getScoreModel (this.b$["jalview.appletgui.TreePanel"].pwtype);
+if (Clazz.instanceOf (f, jalview.api.analysis.ViewBasedAnalysisI)) {
+try {
+f = f.getClass ().newInstance ();
+(f).configureFromAlignmentView (this.b$["jalview.appletgui.TreePanel"].treeCanvas.ap);
+} catch (q) {
+if (Clazz.exceptionOf (q, Exception)) {
+System.err.println ("Couldn't create a scoremodel instance for " + f.getName ());
+q.printStackTrace ();
+} else {
+throw q;
+}
+}
+this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (c, e, this.b$["jalview.appletgui.TreePanel"].$type, this.b$["jalview.appletgui.TreePanel"].pwtype, f, a, b);
+} else {
+this.b$["jalview.appletgui.TreePanel"].tree = new jalview.analysis.NJTree (c, e, this.b$["jalview.appletgui.TreePanel"].$type, this.b$["jalview.appletgui.TreePanel"].pwtype, null, a, b);
+}}this.b$["jalview.appletgui.TreePanel"].tree.reCount (this.b$["jalview.appletgui.TreePanel"].tree.getTopNode ());
+this.b$["jalview.appletgui.TreePanel"].tree.findHeight (this.b$["jalview.appletgui.TreePanel"].tree.getTopNode ());
+this.b$["jalview.appletgui.TreePanel"].treeCanvas.setTree (this.b$["jalview.appletgui.TreePanel"].tree);
+if (this.newtree != null) {
+var a = this.newtree.HasDistances () && this.b$["jalview.appletgui.TreePanel"].av.applet.getDefaultParameter ("showTreeDistances", this.newtree.HasDistances ());
+var b = this.newtree.HasBootstrap () && this.b$["jalview.appletgui.TreePanel"].av.applet.getDefaultParameter ("showTreeBootstraps", this.newtree.HasBootstrap ());
+this.b$["jalview.appletgui.TreePanel"].distanceMenu.setState (a);
+this.b$["jalview.appletgui.TreePanel"].bootstrapMenu.setState (b);
+this.b$["jalview.appletgui.TreePanel"].treeCanvas.setShowBootstrap (b);
+this.b$["jalview.appletgui.TreePanel"].treeCanvas.setShowDistances (a);
+this.b$["jalview.appletgui.TreePanel"].treeCanvas.setMarkPlaceholders (this.b$["jalview.appletgui.TreePanel"].av.applet.getDefaultParameter ("showUnlinkedTreeNodes", false));
+}this.b$["jalview.appletgui.TreePanel"].treeCanvas.repaint ();
+this.b$["jalview.appletgui.TreePanel"].av.setCurrentTree (this.b$["jalview.appletgui.TreePanel"].tree);
+});
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/appletgui/UserDefinedColours.class b/bin/jalview/appletgui/UserDefinedColours.class
index c53d7e0..593d23d 100644
Binary files a/bin/jalview/appletgui/UserDefinedColours.class and b/bin/jalview/appletgui/UserDefinedColours.class differ
diff --git a/bin/jalview/appletgui/UserDefinedColours.js b/bin/jalview/appletgui/UserDefinedColours.js
index 2cc0d9b..a1b23f6 100644
--- a/bin/jalview/appletgui/UserDefinedColours.js
+++ b/bin/jalview/appletgui/UserDefinedColours.js
@@ -1,481 +1,481 @@
-Clazz.declarePackage ("jalview.appletgui");
-Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.FocusListener", "awt2swing.Button", "$.Label", "$.Scrollbar", "$.TextField", "java.awt.GridLayout", "java.util.Vector"], "jalview.appletgui.UserDefinedColours", ["awt2swing.Frame", "jalview.appletgui.AnnotationColourChooser", "$.FeatureColourChooser", "$.FeatureRenderer", "$.FeatureSettings", "jalview.bin.JalviewLite", "jalview.schemes.ResidueProperties", "$.UserColourScheme", "jalview.util.MessageManager", "java.awt.Color", "$.Dialog", "$.Font", "$.Rectangle", "java.awt.event.MouseAdapter", "java.lang.Error"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ap = null;
-this.seqGroup = null;
-this.selectedButton = null;
-this.oldColours = null;
-this.oldColourScheme = null;
-this.frame = null;
-this.jmol = null;
-this.dialog = null;
-this.caller = null;
-this.originalLabel = null;
-this.originalColour = null;
-this.R = 0;
-this.G = 0;
-this.B = 0;
-this.buttonPanel = null;
-this.gridLayout = null;
-this.okcancelPanel = null;
-this.okButton = null;
-this.applyButton = null;
-this.cancelButton = null;
-this.rScroller = null;
-this.label1 = null;
-this.rText = null;
-this.label4 = null;
-this.gScroller = null;
-this.gText = null;
-this.label5 = null;
-this.bScroller = null;
-this.bText = null;
-this.target = null;
-Clazz.instantialize (this, arguments);
-}, jalview.appletgui, "UserDefinedColours", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.FocusListener]);
-Clazz.prepareFields (c$, function () {
-this.oldColours = new java.util.Vector ();
-this.buttonPanel = new awt2swing.Panel ();
-this.gridLayout = new java.awt.GridLayout ();
-this.okcancelPanel = new awt2swing.Panel ();
-this.okButton = new awt2swing.Button ();
-this.applyButton = new awt2swing.Button ();
-this.cancelButton = new awt2swing.Button ();
-this.rScroller = new awt2swing.Scrollbar ();
-this.label1 = new awt2swing.Label ();
-this.rText = new awt2swing.TextField ();
-this.label4 = new awt2swing.Label ();
-this.gScroller = new awt2swing.Scrollbar ();
-this.gText = new awt2swing.TextField ();
-this.label5 = new awt2swing.Label ();
-this.bScroller = new awt2swing.Scrollbar ();
-this.bText = new awt2swing.TextField ();
-this.target = new awt2swing.Panel ();
-});
-Clazz.defineMethod (c$, "loadDefaultColours",
-function () {
-return null;
-});
-Clazz.makeConstructor (c$,
-function (ap, sg) {
-Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
-this.ap = ap;
-this.seqGroup = sg;
-if (this.seqGroup != null) {
-this.oldColourScheme = this.seqGroup.cs;
-} else {
-this.oldColourScheme = ap.av.getGlobalColourScheme ();
-}this.init ();
-}, "jalview.appletgui.AlignmentPanel,jalview.datamodel.SequenceGroup");
-Clazz.makeConstructor (c$,
-function (jmol) {
-Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
-this.jmol = jmol;
-this.init ();
-}, "jalview.appletgui.AppletJmol");
-Clazz.makeConstructor (c$,
-function (fr, alignframe) {
-Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
-this.caller = fr;
-this.originalColour = fr.colourPanel.getBackground ();
-this.originalLabel = "Feature Colour";
-this.setForDialog ("Select Feature Colour", alignframe);
-this.setTargetColour (fr.colourPanel.getBackground ());
-this.dialog.setVisible (true);
-}, "jalview.appletgui.FeatureRenderer,awt2swing.Frame");
-Clazz.makeConstructor (c$,
-function (caller, col1, alignframe) {
-this.construct (caller, col1, alignframe, "Select Colour");
-}, "java.awt.Component,java.awt.Color,awt2swing.Frame");
-Clazz.makeConstructor (c$,
-function (caller, col1, alignframe, title) {
-Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
-this.caller = caller;
-this.originalColour = col1;
-this.originalLabel = title;
-this.setForDialog (title, alignframe);
-this.setTargetColour (col1);
-this.dialog.setVisible (true);
-}, "java.awt.Component,java.awt.Color,awt2swing.Frame,~S");
-Clazz.makeConstructor (c$,
-function (caller, label, colour) {
-this.construct (caller, label, colour, colour);
-}, "~O,~S,java.awt.Color");
-Clazz.makeConstructor (c$,
-function (me, type, graduatedColor) {
-this.construct (me, type, graduatedColor, graduatedColor.getMaxColor ());
-}, "jalview.appletgui.FeatureSettings,~S,jalview.schemes.GraduatedColor");
-Clazz.makeConstructor (c$,
-($fz = function (caller, label, ocolour, colour) {
-Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
-this.caller = caller;
-this.originalColour = ocolour;
-this.originalLabel = label;
-this.init ();
-this.remove (this.buttonPanel);
-this.setTargetColour (colour);
-this.okcancelPanel.setBounds ( new java.awt.Rectangle (0, 113, 400, 35));
-this.frame.setTitle (jalview.util.MessageManager.getString ("label.user_defined_colours") + " - " + label);
-this.frame.setSize (420, 200);
-}, $fz.isPrivate = true, $fz), "~O,~S,~O,java.awt.Color");
-Clazz.defineMethod (c$, "setForDialog",
-function (title, alignframe) {
-this.init ();
-this.frame.setVisible (false);
-this.remove (this.buttonPanel);
-if (Clazz.instanceOf (alignframe, awt2swing.Frame)) {
-this.dialog = new java.awt.Dialog (alignframe, title, true);
-} else {
-throw new Error (jalview.util.MessageManager.getString ("label.error_unsupported_owwner_user_colour_scheme"));
-}this.dialog.add (this);
-this.setSize (400, 123);
-this.okcancelPanel.setBounds ( new java.awt.Rectangle (0, 123, 400, 35));
-var height = 160 + alignframe.getInsets ().top + this.getInsets ().bottom;
-var width = 400;
-this.dialog.setBounds (alignframe.getBounds ().x + Clazz.doubleToInt ((alignframe.getSize ().width - width) / 2), alignframe.getBounds ().y + Clazz.doubleToInt ((alignframe.getSize ().height - height) / 2), width, height);
-}, "~S,java.awt.Container");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-var source = evt.getSource ();
-if (source === this.okButton) {
-this.okButton_actionPerformed ();
-} else if (source === this.applyButton) {
-this.applyButton_actionPerformed ();
-} else if (source === this.cancelButton) {
-this.cancelButton_actionPerformed ();
-} else if (source === this.rText) {
-this.rText_actionPerformed ();
-} else if (source === this.gText) {
-this.gText_actionPerformed ();
-} else if (source === this.bText) {
-this.bText_actionPerformed ();
-}}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "adjustmentValueChanged",
-function (evt) {
-if (evt.getSource () === this.rScroller) {
-this.rScroller_adjustmentValueChanged ();
-} else if (evt.getSource () === this.gScroller) {
-this.gScroller_adjustmentValueChanged ();
-} else if (evt.getSource () === this.bScroller) {
-this.bScroller_adjustmentValueChanged ();
-}}, "java.awt.event.AdjustmentEvent");
-Clazz.defineMethod (c$, "init",
-function () {
-try {
-this.jbInit ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.frame = new awt2swing.Frame ();
-this.frame.add (this);
-jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.user_defined_colours"), 420, 345);
-if (this.seqGroup != null) {
-this.frame.setTitle (this.frame.getTitle () + " (" + this.seqGroup.getName () + ")");
-}for (var i = 0; i < 20; i++) {
-this.makeButton (jalview.schemes.ResidueProperties.aa2Triplet.get (jalview.schemes.ResidueProperties.aa[i]) + "", jalview.schemes.ResidueProperties.aa[i]);
-}
-this.makeButton ("B", "B");
-this.makeButton ("Z", "Z");
-this.makeButton ("X", "X");
-this.makeButton ("Gap", "'.','-',' '");
-this.validate ();
-});
-Clazz.defineMethod (c$, "rText_actionPerformed",
-function () {
-try {
-var i = Integer.parseInt (this.rText.getText ());
-this.rScroller.setValue (i);
-this.rScroller_adjustmentValueChanged ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-});
-Clazz.defineMethod (c$, "gText_actionPerformed",
-function () {
-try {
-var i = Integer.parseInt (this.gText.getText ());
-this.gScroller.setValue (i);
-this.gScroller_adjustmentValueChanged ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-});
-Clazz.defineMethod (c$, "bText_actionPerformed",
-function () {
-try {
-var i = Integer.parseInt (this.bText.getText ());
-this.bScroller.setValue (i);
-this.bScroller_adjustmentValueChanged ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-});
-Clazz.defineMethod (c$, "rScroller_adjustmentValueChanged",
-function () {
-this.R = this.rScroller.getValue ();
-this.rText.setText (this.R + "");
-this.colourChanged ();
-});
-Clazz.defineMethod (c$, "gScroller_adjustmentValueChanged",
-function () {
-this.G = this.gScroller.getValue ();
-this.gText.setText (this.G + "");
-this.colourChanged ();
-});
-Clazz.defineMethod (c$, "bScroller_adjustmentValueChanged",
-function () {
-this.B = this.bScroller.getValue ();
-this.bText.setText (this.B + "");
-this.colourChanged ();
-});
-Clazz.defineMethod (c$, "colourChanged",
-function () {
-var col = new java.awt.Color (this.R, this.G, this.B);
-this.target.setBackground (col);
-this.target.repaint ();
-if (this.selectedButton != null) {
-this.selectedButton.setBackground (col);
-this.selectedButton.repaint ();
-}});
-Clazz.defineMethod (c$, "setTargetColour",
-function (col) {
-this.R = col.getRed ();
-this.G = col.getGreen ();
-this.B = col.getBlue ();
-this.rScroller.setValue (this.R);
-this.gScroller.setValue (this.G);
-this.bScroller.setValue (this.B);
-this.rText.setText (this.R + "");
-this.gText.setText (this.G + "");
-this.bText.setText (this.B + "");
-this.colourChanged ();
-}, "java.awt.Color");
-Clazz.defineMethod (c$, "colourButtonPressed",
-function (e) {
-this.selectedButton = e.getSource ();
-this.setTargetColour (this.selectedButton.getBackground ());
-}, "java.awt.event.MouseEvent");
-Clazz.defineMethod (c$, "makeButton",
-function (label, aa) {
-var button = new awt2swing.Button ();
-var col = java.awt.Color.white;
-if (this.oldColourScheme != null) {
-try {
-col = this.oldColourScheme.findColour (aa.charAt (0), -1, null);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-}button.setBackground (col);
-this.oldColours.addElement (col);
-button.setLabel (label);
-button.setForeground (col.darker ().darker ().darker ());
-button.setFont ( new java.awt.Font ("Verdana", 1, 10));
-button.addMouseListener (((Clazz.isClassDefined ("jalview.appletgui.UserDefinedColours$1") ? 0 : jalview.appletgui.UserDefinedColours.$UserDefinedColours$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.UserDefinedColours$1, this, null)));
-this.buttonPanel.add (button, null);
-}, "~S,~S");
-Clazz.defineMethod (c$, "okButton_actionPerformed",
-function () {
-this.applyButton_actionPerformed ();
-if (this.dialog != null) {
-this.dialog.setVisible (false);
-}this.frame.setVisible (false);
-});
-Clazz.defineMethod (c$, "getColor",
-function () {
-return new java.awt.Color (this.R, this.G, this.B);
-});
-Clazz.defineMethod (c$, "applyButton_actionPerformed",
-function () {
-if (this.caller != null) {
-if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureSettings)) {
-(this.caller).setUserColour (this.originalLabel, this.getColor ());
-} else if (Clazz.instanceOf (this.caller, jalview.appletgui.AnnotationColourChooser)) {
-if (this.originalLabel.equals ("Min Colour")) {
-(this.caller).minColour_actionPerformed (this.getColor ());
-} else {
-(this.caller).maxColour_actionPerformed (this.getColor ());
-}} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureRenderer)) {
-(this.caller).colourPanel.updateColor (this.getColor ());
-} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureColourChooser)) {
-if (this.originalLabel.indexOf ("inimum") > -1) {
-(this.caller).minColour_actionPerformed (this.getColor ());
-} else {
-(this.caller).maxColour_actionPerformed (this.getColor ());
-}}return;
-}var newColours = new Array (24);
-for (var i = 0; i < 24; i++) {
-var button = this.buttonPanel.getComponent (i);
-newColours[i] = button.getBackground ();
-}
-var ucs = new jalview.schemes.UserColourScheme (newColours);
-if (this.ap != null) {
-ucs.setThreshold (0, this.ap.av.isIgnoreGapsConsensus ());
-}if (this.ap != null) {
-if (this.seqGroup != null) {
-this.seqGroup.cs = ucs;
-} else {
-this.ap.av.setGlobalColourScheme (ucs);
-}this.ap.seqPanel.seqCanvas.img = null;
-this.ap.paintAlignment (true);
-} else if (this.jmol != null) {
-this.jmol.setJalviewColourScheme (ucs);
-}});
-Clazz.defineMethod (c$, "cancelButton_actionPerformed",
-function () {
-if (this.caller != null) {
-if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureSettings)) {
-(this.caller).setUserColour (this.originalLabel, this.originalColour);
-} else if (Clazz.instanceOf (this.caller, jalview.appletgui.AnnotationColourChooser)) {
-if (this.originalLabel.equals ("Min Colour")) {
-(this.caller).minColour_actionPerformed (this.originalColour);
-} else {
-(this.caller).maxColour_actionPerformed (this.originalColour);
-}} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureRenderer)) {
-(this.caller).colourPanel.updateColor (this.originalColour);
-} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureColourChooser)) {
-if (this.originalLabel.indexOf ("inimum") > -1) {
-(this.caller).minColour_actionPerformed (this.originalColour);
-} else {
-(this.caller).maxColour_actionPerformed (this.originalColour);
-}}if (this.dialog != null) {
-this.dialog.setVisible (false);
-}this.frame.setVisible (false);
-return;
-}var newColours = new Array (24);
-for (var i = 0; i < 24; i++) {
-newColours[i] = this.oldColours.elementAt (i);
-this.buttonPanel.getComponent (i).setBackground (newColours[i]);
-}
-var ucs = new jalview.schemes.UserColourScheme (newColours);
-if (this.ap != null) {
-if (this.seqGroup != null) {
-this.seqGroup.cs = ucs;
-} else {
-this.ap.av.setGlobalColourScheme (ucs);
-}this.ap.paintAlignment (true);
-} else if (this.jmol != null) {
-this.jmol.setJalviewColourScheme (ucs);
-}this.frame.setVisible (false);
-});
-Clazz.defineMethod (c$, "jbInit",
-($fz = function () {
-this.setLayout (null);
-this.buttonPanel.setLayout (this.gridLayout);
-this.gridLayout.setColumns (6);
-this.gridLayout.setRows (4);
-this.okButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.okButton.setLabel (jalview.util.MessageManager.getString ("action.ok"));
-this.okButton.addActionListener (this);
-this.applyButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.applyButton.setLabel (jalview.util.MessageManager.getString ("action.apply"));
-this.applyButton.addActionListener (this);
-this.cancelButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
-this.cancelButton.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
-this.cancelButton.addActionListener (this);
-this.setBackground ( new java.awt.Color (212, 208, 223));
-this.okcancelPanel.setBounds ( new java.awt.Rectangle (0, 265, 400, 35));
-this.buttonPanel.setBounds ( new java.awt.Rectangle (0, 123, 400, 142));
-this.rScroller.setMaximum (256);
-this.rScroller.setMinimum (0);
-this.rScroller.setOrientation (0);
-this.rScroller.setUnitIncrement (1);
-this.rScroller.setVisibleAmount (1);
-this.rScroller.setBounds ( new java.awt.Rectangle (36, 27, 119, 19));
-this.rScroller.addAdjustmentListener (this);
-this.label1.setAlignment (4);
-this.label1.setText ("R");
-this.label1.setBounds ( new java.awt.Rectangle (19, 30, 16, 15));
-this.rText.setFont ( new java.awt.Font ("Dialog", 0, 10));
-this.rText.setText ("0 ");
-this.rText.setBounds ( new java.awt.Rectangle (156, 27, 53, 19));
-this.rText.addActionListener (this);
-this.rText.addFocusListener (this);
-this.label4.setAlignment (4);
-this.label4.setText ("G");
-this.label4.setBounds ( new java.awt.Rectangle (15, 56, 20, 15));
-this.gScroller.setMaximum (256);
-this.gScroller.setMinimum (0);
-this.gScroller.setOrientation (0);
-this.gScroller.setUnitIncrement (1);
-this.gScroller.setVisibleAmount (1);
-this.gScroller.setBounds ( new java.awt.Rectangle (35, 52, 120, 20));
-this.gScroller.addAdjustmentListener (this);
-this.gText.setFont ( new java.awt.Font ("Dialog", 0, 10));
-this.gText.setText ("0 ");
-this.gText.setBounds ( new java.awt.Rectangle (156, 52, 53, 20));
-this.gText.addActionListener (this);
-this.gText.addFocusListener (this);
-this.label5.setAlignment (4);
-this.label5.setText ("B");
-this.label5.setBounds ( new java.awt.Rectangle (14, 82, 20, 15));
-this.bScroller.setMaximum (256);
-this.bScroller.setMinimum (0);
-this.bScroller.setOrientation (0);
-this.bScroller.setUnitIncrement (1);
-this.bScroller.setVisibleAmount (1);
-this.bScroller.setBounds ( new java.awt.Rectangle (35, 78, 120, 20));
-this.bScroller.addAdjustmentListener (this);
-this.bText.setFont ( new java.awt.Font ("Dialog", 0, 10));
-this.bText.setText ("0 ");
-this.bText.setBounds ( new java.awt.Rectangle (157, 78, 52, 20));
-this.bText.addActionListener (this);
-this.bText.addFocusListener (this);
-this.target.setBackground (java.awt.Color.black);
-this.target.setBounds ( new java.awt.Rectangle (229, 26, 134, 79));
-this.add (this.okcancelPanel, null);
-this.okcancelPanel.add (this.okButton, null);
-this.okcancelPanel.add (this.applyButton, null);
-this.okcancelPanel.add (this.cancelButton, null);
-this.add (this.rText);
-this.add (this.gText);
-this.add (this.bText);
-this.add (this.buttonPanel, null);
-this.add (this.target, null);
-this.add (this.gScroller);
-this.add (this.rScroller);
-this.add (this.bScroller);
-this.add (this.label5);
-this.add (this.label4);
-this.add (this.label1);
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "focusGained",
-function (e) {
-}, "java.awt.event.FocusEvent");
-Clazz.overrideMethod (c$, "focusLost",
-function (e) {
-var c = e.getComponent ();
-if (c === this.rText) {
-this.rText_actionPerformed ();
-} else {
-if (c === this.gText) {
-this.gText_actionPerformed ();
-} else {
-if (c === this.bText) {
-this.bText_actionPerformed ();
-}}}}, "java.awt.event.FocusEvent");
-c$.$UserDefinedColours$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.appletgui, "UserDefinedColours$1", java.awt.event.MouseAdapter);
-Clazz.overrideMethod (c$, "mousePressed",
-function (e) {
-this.b$["jalview.appletgui.UserDefinedColours"].colourButtonPressed (e);
-}, "java.awt.event.MouseEvent");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.appletgui");
+Clazz.load (["awt2swing.Panel", "java.awt.event.ActionListener", "$.AdjustmentListener", "$.FocusListener", "awt2swing.Button", "$.Label", "$.Scrollbar", "$.TextField", "java.awt.GridLayout", "java.util.Vector"], "jalview.appletgui.UserDefinedColours", ["awt2swing.Frame", "jalview.appletgui.AnnotationColourChooser", "$.FeatureColourChooser", "$.FeatureRenderer", "$.FeatureSettings", "jalview.bin.JalviewLite", "jalview.schemes.ResidueProperties", "$.UserColourScheme", "jalview.util.MessageManager", "java.awt.Color", "$.Dialog", "$.Font", "$.Rectangle", "java.awt.event.MouseAdapter", "java.lang.Error"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ap = null;
+this.seqGroup = null;
+this.selectedButton = null;
+this.oldColours = null;
+this.oldColourScheme = null;
+this.frame = null;
+this.jmol = null;
+this.dialog = null;
+this.caller = null;
+this.originalLabel = null;
+this.originalColour = null;
+this.R = 0;
+this.G = 0;
+this.B = 0;
+this.buttonPanel = null;
+this.gridLayout = null;
+this.okcancelPanel = null;
+this.okButton = null;
+this.applyButton = null;
+this.cancelButton = null;
+this.rScroller = null;
+this.label1 = null;
+this.rText = null;
+this.label4 = null;
+this.gScroller = null;
+this.gText = null;
+this.label5 = null;
+this.bScroller = null;
+this.bText = null;
+this.target = null;
+Clazz.instantialize (this, arguments);
+}, jalview.appletgui, "UserDefinedColours", awt2swing.Panel, [java.awt.event.ActionListener, java.awt.event.AdjustmentListener, java.awt.event.FocusListener]);
+Clazz.prepareFields (c$, function () {
+this.oldColours = new java.util.Vector ();
+this.buttonPanel = new awt2swing.Panel ();
+this.gridLayout = new java.awt.GridLayout ();
+this.okcancelPanel = new awt2swing.Panel ();
+this.okButton = new awt2swing.Button ();
+this.applyButton = new awt2swing.Button ();
+this.cancelButton = new awt2swing.Button ();
+this.rScroller = new awt2swing.Scrollbar ();
+this.label1 = new awt2swing.Label ();
+this.rText = new awt2swing.TextField ();
+this.label4 = new awt2swing.Label ();
+this.gScroller = new awt2swing.Scrollbar ();
+this.gText = new awt2swing.TextField ();
+this.label5 = new awt2swing.Label ();
+this.bScroller = new awt2swing.Scrollbar ();
+this.bText = new awt2swing.TextField ();
+this.target = new awt2swing.Panel ();
+});
+Clazz.defineMethod (c$, "loadDefaultColours",
+function () {
+return null;
+});
+Clazz.makeConstructor (c$,
+function (ap, sg) {
+Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
+this.ap = ap;
+this.seqGroup = sg;
+if (this.seqGroup != null) {
+this.oldColourScheme = this.seqGroup.cs;
+} else {
+this.oldColourScheme = ap.av.getGlobalColourScheme ();
+}this.init ();
+}, "jalview.appletgui.AlignmentPanel,jalview.datamodel.SequenceGroup");
+Clazz.makeConstructor (c$,
+function (jmol) {
+Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
+this.jmol = jmol;
+this.init ();
+}, "jalview.appletgui.AppletJmol");
+Clazz.makeConstructor (c$,
+function (fr, alignframe) {
+Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
+this.caller = fr;
+this.originalColour = fr.colourPanel.getBackground ();
+this.originalLabel = "Feature Colour";
+this.setForDialog ("Select Feature Colour", alignframe);
+this.setTargetColour (fr.colourPanel.getBackground ());
+this.dialog.setVisible (true);
+}, "jalview.appletgui.FeatureRenderer,awt2swing.Frame");
+Clazz.makeConstructor (c$,
+function (caller, col1, alignframe) {
+this.construct (caller, col1, alignframe, "Select Colour");
+}, "java.awt.Component,java.awt.Color,awt2swing.Frame");
+Clazz.makeConstructor (c$,
+function (caller, col1, alignframe, title) {
+Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
+this.caller = caller;
+this.originalColour = col1;
+this.originalLabel = title;
+this.setForDialog (title, alignframe);
+this.setTargetColour (col1);
+this.dialog.setVisible (true);
+}, "java.awt.Component,java.awt.Color,awt2swing.Frame,~S");
+Clazz.makeConstructor (c$,
+function (caller, label, colour) {
+this.construct (caller, label, colour, colour);
+}, "~O,~S,java.awt.Color");
+Clazz.makeConstructor (c$,
+function (me, type, graduatedColor) {
+this.construct (me, type, graduatedColor, graduatedColor.getMaxColor ());
+}, "jalview.appletgui.FeatureSettings,~S,jalview.schemes.GraduatedColor");
+Clazz.makeConstructor (c$,
+($fz = function (caller, label, ocolour, colour) {
+Clazz.superConstructor (this, jalview.appletgui.UserDefinedColours, []);
+this.caller = caller;
+this.originalColour = ocolour;
+this.originalLabel = label;
+this.init ();
+this.remove (this.buttonPanel);
+this.setTargetColour (colour);
+this.okcancelPanel.setBounds ( new java.awt.Rectangle (0, 113, 400, 35));
+this.frame.setTitle (jalview.util.MessageManager.getString ("label.user_defined_colours") + " - " + label);
+this.frame.setSize (420, 200);
+}, $fz.isPrivate = true, $fz), "~O,~S,~O,java.awt.Color");
+Clazz.defineMethod (c$, "setForDialog",
+function (title, alignframe) {
+this.init ();
+this.frame.setVisible (false);
+this.remove (this.buttonPanel);
+if (Clazz.instanceOf (alignframe, awt2swing.Frame)) {
+this.dialog = new java.awt.Dialog (alignframe, title, true);
+} else {
+throw new Error (jalview.util.MessageManager.getString ("label.error_unsupported_owwner_user_colour_scheme"));
+}this.dialog.add (this);
+this.setSize (400, 123);
+this.okcancelPanel.setBounds ( new java.awt.Rectangle (0, 123, 400, 35));
+var height = 160 + alignframe.getInsets ().top + this.getInsets ().bottom;
+var width = 400;
+this.dialog.setBounds (alignframe.getBounds ().x + Clazz.doubleToInt ((alignframe.getSize ().width - width) / 2), alignframe.getBounds ().y + Clazz.doubleToInt ((alignframe.getSize ().height - height) / 2), width, height);
+}, "~S,java.awt.Container");
+Clazz.overrideMethod (c$, "actionPerformed",
+function (evt) {
+var source = evt.getSource ();
+if (source === this.okButton) {
+this.okButton_actionPerformed ();
+} else if (source === this.applyButton) {
+this.applyButton_actionPerformed ();
+} else if (source === this.cancelButton) {
+this.cancelButton_actionPerformed ();
+} else if (source === this.rText) {
+this.rText_actionPerformed ();
+} else if (source === this.gText) {
+this.gText_actionPerformed ();
+} else if (source === this.bText) {
+this.bText_actionPerformed ();
+}}, "java.awt.event.ActionEvent");
+Clazz.overrideMethod (c$, "adjustmentValueChanged",
+function (evt) {
+if (evt.getSource () === this.rScroller) {
+this.rScroller_adjustmentValueChanged ();
+} else if (evt.getSource () === this.gScroller) {
+this.gScroller_adjustmentValueChanged ();
+} else if (evt.getSource () === this.bScroller) {
+this.bScroller_adjustmentValueChanged ();
+}}, "java.awt.event.AdjustmentEvent");
+Clazz.defineMethod (c$, "init",
+function () {
+try {
+this.jbInit ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.frame = new awt2swing.Frame ();
+this.frame.add (this);
+jalview.bin.JalviewLite.addFrame (this.frame, jalview.util.MessageManager.getString ("label.user_defined_colours"), 420, 345);
+if (this.seqGroup != null) {
+this.frame.setTitle (this.frame.getTitle () + " (" + this.seqGroup.getName () + ")");
+}for (var i = 0; i < 20; i++) {
+this.makeButton (jalview.schemes.ResidueProperties.aa2Triplet.get (jalview.schemes.ResidueProperties.aa[i]) + "", jalview.schemes.ResidueProperties.aa[i]);
+}
+this.makeButton ("B", "B");
+this.makeButton ("Z", "Z");
+this.makeButton ("X", "X");
+this.makeButton ("Gap", "'.','-',' '");
+this.validate ();
+});
+Clazz.defineMethod (c$, "rText_actionPerformed",
+function () {
+try {
+var i = Integer.parseInt (this.rText.getText ());
+this.rScroller.setValue (i);
+this.rScroller_adjustmentValueChanged ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+});
+Clazz.defineMethod (c$, "gText_actionPerformed",
+function () {
+try {
+var i = Integer.parseInt (this.gText.getText ());
+this.gScroller.setValue (i);
+this.gScroller_adjustmentValueChanged ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+});
+Clazz.defineMethod (c$, "bText_actionPerformed",
+function () {
+try {
+var i = Integer.parseInt (this.bText.getText ());
+this.bScroller.setValue (i);
+this.bScroller_adjustmentValueChanged ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+});
+Clazz.defineMethod (c$, "rScroller_adjustmentValueChanged",
+function () {
+this.R = this.rScroller.getValue ();
+this.rText.setText (this.R + "");
+this.colourChanged ();
+});
+Clazz.defineMethod (c$, "gScroller_adjustmentValueChanged",
+function () {
+this.G = this.gScroller.getValue ();
+this.gText.setText (this.G + "");
+this.colourChanged ();
+});
+Clazz.defineMethod (c$, "bScroller_adjustmentValueChanged",
+function () {
+this.B = this.bScroller.getValue ();
+this.bText.setText (this.B + "");
+this.colourChanged ();
+});
+Clazz.defineMethod (c$, "colourChanged",
+function () {
+var col = new java.awt.Color (this.R, this.G, this.B);
+this.target.setBackground (col);
+this.target.repaint ();
+if (this.selectedButton != null) {
+this.selectedButton.setBackground (col);
+this.selectedButton.repaint ();
+}});
+Clazz.defineMethod (c$, "setTargetColour",
+function (col) {
+this.R = col.getRed ();
+this.G = col.getGreen ();
+this.B = col.getBlue ();
+this.rScroller.setValue (this.R);
+this.gScroller.setValue (this.G);
+this.bScroller.setValue (this.B);
+this.rText.setText (this.R + "");
+this.gText.setText (this.G + "");
+this.bText.setText (this.B + "");
+this.colourChanged ();
+}, "java.awt.Color");
+Clazz.defineMethod (c$, "colourButtonPressed",
+function (e) {
+this.selectedButton = e.getSource ();
+this.setTargetColour (this.selectedButton.getBackground ());
+}, "java.awt.event.MouseEvent");
+Clazz.defineMethod (c$, "makeButton",
+function (label, aa) {
+var button = new awt2swing.Button ();
+var col = java.awt.Color.white;
+if (this.oldColourScheme != null) {
+try {
+col = this.oldColourScheme.findColour (aa.charAt (0), -1, null);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}button.setBackground (col);
+this.oldColours.addElement (col);
+button.setLabel (label);
+button.setForeground (col.darker ().darker ().darker ());
+button.setFont ( new java.awt.Font ("Verdana", 1, 10));
+button.addMouseListener (((Clazz.isClassDefined ("jalview.appletgui.UserDefinedColours$1") ? 0 : jalview.appletgui.UserDefinedColours.$UserDefinedColours$1$ ()), Clazz.innerTypeInstance (jalview.appletgui.UserDefinedColours$1, this, null)));
+this.buttonPanel.add (button, null);
+}, "~S,~S");
+Clazz.defineMethod (c$, "okButton_actionPerformed",
+function () {
+this.applyButton_actionPerformed ();
+if (this.dialog != null) {
+this.dialog.setVisible (false);
+}this.frame.setVisible (false);
+});
+Clazz.defineMethod (c$, "getColor",
+function () {
+return new java.awt.Color (this.R, this.G, this.B);
+});
+Clazz.defineMethod (c$, "applyButton_actionPerformed",
+function () {
+if (this.caller != null) {
+if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureSettings)) {
+(this.caller).setUserColour (this.originalLabel, this.getColor ());
+} else if (Clazz.instanceOf (this.caller, jalview.appletgui.AnnotationColourChooser)) {
+if (this.originalLabel.equals ("Min Colour")) {
+(this.caller).minColour_actionPerformed (this.getColor ());
+} else {
+(this.caller).maxColour_actionPerformed (this.getColor ());
+}} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureRenderer)) {
+(this.caller).colourPanel.updateColor (this.getColor ());
+} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureColourChooser)) {
+if (this.originalLabel.indexOf ("inimum") > -1) {
+(this.caller).minColour_actionPerformed (this.getColor ());
+} else {
+(this.caller).maxColour_actionPerformed (this.getColor ());
+}}return;
+}var newColours = new Array (24);
+for (var i = 0; i < 24; i++) {
+var button = this.buttonPanel.getComponent (i);
+newColours[i] = button.getBackground ();
+}
+var ucs = new jalview.schemes.UserColourScheme (newColours);
+if (this.ap != null) {
+ucs.setThreshold (0, this.ap.av.isIgnoreGapsConsensus ());
+}if (this.ap != null) {
+if (this.seqGroup != null) {
+this.seqGroup.cs = ucs;
+} else {
+this.ap.av.setGlobalColourScheme (ucs);
+}this.ap.seqPanel.seqCanvas.img = null;
+this.ap.paintAlignment (true);
+} else if (this.jmol != null) {
+this.jmol.setJalviewColourScheme (ucs);
+}});
+Clazz.defineMethod (c$, "cancelButton_actionPerformed",
+function () {
+if (this.caller != null) {
+if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureSettings)) {
+(this.caller).setUserColour (this.originalLabel, this.originalColour);
+} else if (Clazz.instanceOf (this.caller, jalview.appletgui.AnnotationColourChooser)) {
+if (this.originalLabel.equals ("Min Colour")) {
+(this.caller).minColour_actionPerformed (this.originalColour);
+} else {
+(this.caller).maxColour_actionPerformed (this.originalColour);
+}} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureRenderer)) {
+(this.caller).colourPanel.updateColor (this.originalColour);
+} else if (Clazz.instanceOf (this.caller, jalview.appletgui.FeatureColourChooser)) {
+if (this.originalLabel.indexOf ("inimum") > -1) {
+(this.caller).minColour_actionPerformed (this.originalColour);
+} else {
+(this.caller).maxColour_actionPerformed (this.originalColour);
+}}if (this.dialog != null) {
+this.dialog.setVisible (false);
+}this.frame.setVisible (false);
+return;
+}var newColours = new Array (24);
+for (var i = 0; i < 24; i++) {
+newColours[i] = this.oldColours.elementAt (i);
+this.buttonPanel.getComponent (i).setBackground (newColours[i]);
+}
+var ucs = new jalview.schemes.UserColourScheme (newColours);
+if (this.ap != null) {
+if (this.seqGroup != null) {
+this.seqGroup.cs = ucs;
+} else {
+this.ap.av.setGlobalColourScheme (ucs);
+}this.ap.paintAlignment (true);
+} else if (this.jmol != null) {
+this.jmol.setJalviewColourScheme (ucs);
+}this.frame.setVisible (false);
+});
+Clazz.defineMethod (c$, "jbInit",
+($fz = function () {
+this.setLayout (null);
+this.buttonPanel.setLayout (this.gridLayout);
+this.gridLayout.setColumns (6);
+this.gridLayout.setRows (4);
+this.okButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.okButton.setLabel (jalview.util.MessageManager.getString ("action.ok"));
+this.okButton.addActionListener (this);
+this.applyButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.applyButton.setLabel (jalview.util.MessageManager.getString ("action.apply"));
+this.applyButton.addActionListener (this);
+this.cancelButton.setFont ( new java.awt.Font ("Verdana", 0, 11));
+this.cancelButton.setLabel (jalview.util.MessageManager.getString ("action.cancel"));
+this.cancelButton.addActionListener (this);
+this.setBackground ( new java.awt.Color (212, 208, 223));
+this.okcancelPanel.setBounds ( new java.awt.Rectangle (0, 265, 400, 35));
+this.buttonPanel.setBounds ( new java.awt.Rectangle (0, 123, 400, 142));
+this.rScroller.setMaximum (256);
+this.rScroller.setMinimum (0);
+this.rScroller.setOrientation (0);
+this.rScroller.setUnitIncrement (1);
+this.rScroller.setVisibleAmount (1);
+this.rScroller.setBounds ( new java.awt.Rectangle (36, 27, 119, 19));
+this.rScroller.addAdjustmentListener (this);
+this.label1.setAlignment (4);
+this.label1.setText ("R");
+this.label1.setBounds ( new java.awt.Rectangle (19, 30, 16, 15));
+this.rText.setFont ( new java.awt.Font ("Dialog", 0, 10));
+this.rText.setText ("0 ");
+this.rText.setBounds ( new java.awt.Rectangle (156, 27, 53, 19));
+this.rText.addActionListener (this);
+this.rText.addFocusListener (this);
+this.label4.setAlignment (4);
+this.label4.setText ("G");
+this.label4.setBounds ( new java.awt.Rectangle (15, 56, 20, 15));
+this.gScroller.setMaximum (256);
+this.gScroller.setMinimum (0);
+this.gScroller.setOrientation (0);
+this.gScroller.setUnitIncrement (1);
+this.gScroller.setVisibleAmount (1);
+this.gScroller.setBounds ( new java.awt.Rectangle (35, 52, 120, 20));
+this.gScroller.addAdjustmentListener (this);
+this.gText.setFont ( new java.awt.Font ("Dialog", 0, 10));
+this.gText.setText ("0 ");
+this.gText.setBounds ( new java.awt.Rectangle (156, 52, 53, 20));
+this.gText.addActionListener (this);
+this.gText.addFocusListener (this);
+this.label5.setAlignment (4);
+this.label5.setText ("B");
+this.label5.setBounds ( new java.awt.Rectangle (14, 82, 20, 15));
+this.bScroller.setMaximum (256);
+this.bScroller.setMinimum (0);
+this.bScroller.setOrientation (0);
+this.bScroller.setUnitIncrement (1);
+this.bScroller.setVisibleAmount (1);
+this.bScroller.setBounds ( new java.awt.Rectangle (35, 78, 120, 20));
+this.bScroller.addAdjustmentListener (this);
+this.bText.setFont ( new java.awt.Font ("Dialog", 0, 10));
+this.bText.setText ("0 ");
+this.bText.setBounds ( new java.awt.Rectangle (157, 78, 52, 20));
+this.bText.addActionListener (this);
+this.bText.addFocusListener (this);
+this.target.setBackground (java.awt.Color.black);
+this.target.setBounds ( new java.awt.Rectangle (229, 26, 134, 79));
+this.add (this.okcancelPanel, null);
+this.okcancelPanel.add (this.okButton, null);
+this.okcancelPanel.add (this.applyButton, null);
+this.okcancelPanel.add (this.cancelButton, null);
+this.add (this.rText);
+this.add (this.gText);
+this.add (this.bText);
+this.add (this.buttonPanel, null);
+this.add (this.target, null);
+this.add (this.gScroller);
+this.add (this.rScroller);
+this.add (this.bScroller);
+this.add (this.label5);
+this.add (this.label4);
+this.add (this.label1);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "focusGained",
+function (e) {
+}, "java.awt.event.FocusEvent");
+Clazz.overrideMethod (c$, "focusLost",
+function (e) {
+var c = e.getComponent ();
+if (c === this.rText) {
+this.rText_actionPerformed ();
+} else {
+if (c === this.gText) {
+this.gText_actionPerformed ();
+} else {
+if (c === this.bText) {
+this.bText_actionPerformed ();
+}}}}, "java.awt.event.FocusEvent");
+c$.$UserDefinedColours$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.appletgui, "UserDefinedColours$1", java.awt.event.MouseAdapter);
+Clazz.overrideMethod (c$, "mousePressed",
+function (e) {
+this.b$["jalview.appletgui.UserDefinedColours"].colourButtonPressed (e);
+}, "java.awt.event.MouseEvent");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/bin/Cache.js b/bin/jalview/bin/Cache.js
index b2a7cae..3013f58 100644
--- a/bin/jalview/bin/Cache.js
+++ b/bin/jalview/bin/Cache.js
@@ -1,29 +1,29 @@
-Clazz.declarePackage ("jalview.bin");
-c$ = Clazz.decorateAsClass (function () {
-if (!Clazz.isClassDefined ("jalview.bin.Cache.Log")) {
-jalview.bin.Cache.$Cache$Log$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.bin, "Cache");
-c$.getDefault = Clazz.defineMethod (c$, "getDefault",
-function (string, string2) {
-return null;
-}, "~S,~S");
-c$.$Cache$Log$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-Clazz.instantialize (this, arguments);
-}, jalview.bin.Cache, "Log");
-Clazz.defineMethod (c$, "error",
-function (a) {
-}, "~S");
-Clazz.defineMethod (c$, "isDebugEnabled",
-function () {
-return false;
-});
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"CASTORLOGLEVEL", null,
-"log", null);
+Clazz.declarePackage ("jalview.bin");
+c$ = Clazz.decorateAsClass (function () {
+if (!Clazz.isClassDefined ("jalview.bin.Cache.Log")) {
+jalview.bin.Cache.$Cache$Log$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.bin, "Cache");
+c$.getDefault = Clazz.defineMethod (c$, "getDefault",
+function (string, string2) {
+return null;
+}, "~S,~S");
+c$.$Cache$Log$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+Clazz.instantialize (this, arguments);
+}, jalview.bin.Cache, "Log");
+Clazz.defineMethod (c$, "error",
+function (a) {
+}, "~S");
+Clazz.defineMethod (c$, "isDebugEnabled",
+function () {
+return false;
+});
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"CASTORLOGLEVEL", null,
+"log", null);
diff --git a/bin/jalview/bin/JalviewLite$4.class b/bin/jalview/bin/JalviewLite$4.class
index 09353ff..884af19 100644
Binary files a/bin/jalview/bin/JalviewLite$4.class and b/bin/jalview/bin/JalviewLite$4.class differ
diff --git a/bin/jalview/bin/JalviewLite$LoadJmolThread.class b/bin/jalview/bin/JalviewLite$LoadJmolThread.class
index 17bcf98..94eb08f 100644
Binary files a/bin/jalview/bin/JalviewLite$LoadJmolThread.class and b/bin/jalview/bin/JalviewLite$LoadJmolThread.class differ
diff --git a/bin/jalview/bin/JalviewLite$LoadingThread.class b/bin/jalview/bin/JalviewLite$LoadingThread.class
index 6ffac37..4dc6751 100644
Binary files a/bin/jalview/bin/JalviewLite$LoadingThread.class and b/bin/jalview/bin/JalviewLite$LoadingThread.class differ
diff --git a/bin/jalview/bin/JalviewLite.class b/bin/jalview/bin/JalviewLite.class
index ae19296..7d70007 100644
Binary files a/bin/jalview/bin/JalviewLite.class and b/bin/jalview/bin/JalviewLite.class differ
diff --git a/bin/jalview/bin/JalviewLite.js b/bin/jalview/bin/JalviewLite.js
index 23d66b7..1049dcb 100644
--- a/bin/jalview/bin/JalviewLite.js
+++ b/bin/jalview/bin/JalviewLite.js
@@ -1,1617 +1,1617 @@
-Clazz.declarePackage ("jalview.bin");
-Clazz.load (["jalview.api.StructureSelectionManagerProvider", "jalview.javascript.JalviewLiteJsApi", "java.lang.Thread", "javax.swing.JApplet", "jalview.util.MessageManager", "java.util.Hashtable", "$.Vector", "javax.swing.JButton"], "jalview.bin.JalviewLite", ["jalview.analysis.SequenceIdMatcher", "jalview.appletgui.AlignFrame", "$.EmbmenuFrame", "$.FeatureSettings", "$.SplitFrame", "jalview.datamodel.Alignment", "$.AlignmentOrder", "$.ColumnSelection", "$.PDBEntry", "$.SequenceGroup", "jalview.io.AnnotationFile", "$.AppletFormatAdapter", "$.FileParse", "$.IdentifyFile", "$.JnetAnnotationMaker", "$.NewickFile", "jalview.javascript.JSFunctionExec", "$.JsSelectionSender", "$.MouseOverListener", "$.MouseOverStructureListener", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.ColourSchemeProperty", "$.UserColourScheme", "jalview.structure.SelectionListener", "$.StructureSelectionManager", "java.awt.Color", "$.EventQueue", "$.Font", "java.awt.event.ActionListener", "$.WindowAdapter", "java.io.BufferedReader", "$.InputStreamReader", "java.lang.Error", "$.StringBuffer", "java.net.URL", "java.util.StringTokenizer", "netscape.javascript.JSObject"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.embedded = false;
-this.enableSplitFrame = false;
-this.showButton = true;
-this.checkForJmol = true;
-this.jalviewServletURL = null;
-this.startupFile = "No file";
-this.helpUrl = null;
-this.externalstructureviewer = null;
-this.sep = null;
-this.rgb = null;
-this.labelColour = null;
-this.initjscallback = null;
-this.pdbFile = null;
-this.sequence = null;
-this.jnetFile = null;
-this.annotations = null;
-this.hideFeatureGroups = null;
-this.showFeatureGroups = null;
-this.features = null;
-this.showFeatureSettings = null;
-this.scoreFile = null;
-this.treeFile = null;
-this.windowWidth = null;
-this.windowHeight = null;
-this.defaultColour = null;
-this.sortBy = null;
-this.wrap = null;
-this.centrecolumnlabels = null;
-this.userDefinedColour = null;
-this.widthScale = null;
-this.heightScale = null;
-this.upperCase = null;
-this.file2 = null;
-this.javascriptListeners = null;
-this.jsFunctionExec = null;
-this.fileFound = true;
-this.launcher = null;
-this.currentAlignFrame = null;
-this.initialAlignFrame = null;
-this.checkedForJmol = false;
-this.jmolAvailable = false;
-this.alignPdbStructures = false;
-this.useXtrnalSviewer = false;
-this.haveShownLoadMessage = false;
-if (!Clazz.isClassDefined ("jalview.bin.JalviewLite.LoadJmolThread")) {
-jalview.bin.JalviewLite.$JalviewLite$LoadJmolThread$ ();
-}
-if (!Clazz.isClassDefined ("jalview.bin.JalviewLite.LoadingThread")) {
-jalview.bin.JalviewLite.$JalviewLite$LoadingThread$ ();
-}
-this.separator = "\u00ac";
-this.jsfallbackEnabled = false;
-this.jshashes = null;
-this.jsmessages = null;
-this.jsExecQueue = null;
-Clazz.instantialize (this, arguments);
-}, jalview.bin, "JalviewLite", javax.swing.JApplet, [jalview.api.StructureSelectionManagerProvider, jalview.javascript.JalviewLiteJsApi]);
-Clazz.prepareFields (c$, function () {
-this.javascriptListeners = new java.util.Vector ();
-this.launcher = new javax.swing.JButton (jalview.util.MessageManager.getString ("label.start_jalview"));
-this.jshashes = new java.util.Hashtable ();
-this.jsmessages = new java.util.Hashtable ();
-this.jsExecQueue = new java.util.Vector ();
-});
-Clazz.defineMethod (c$, "setParams",
-($fz = function () {
-jalview.bin.JalviewLite.debug = "true".equalsIgnoreCase (this.getParameter ("debug"));
-this.enableSplitFrame = "true".equalsIgnoreCase (this.getParameter ("enableSplitFrame"));
-this.embedded = "true".equalsIgnoreCase (this.getParameter ("embedded"));
-this.showButton = !"false".equalsIgnoreCase (this.getParameter ("showbutton"));
-this.jalviewServletURL = this.getParameter ("APPLICATION_URL");
-this.startupFile = this.getParameter ("file");
-this.helpUrl = this.getParameter ("jalviewhelpurl");
-this.externalstructureviewer = this.getParameter ("externalstructureviewer");
-this.checkForJmol = !"true".equals (this.getParameter ("nojmol"));
-this.sep = this.getParameter ("separator");
-this.rgb = this.getParameter ("RGB");
-this.labelColour = this.getParameter ("label");
-this.initjscallback = this.getParameter ("oninit");
-this.pdbFile = this.getParameter ("PDBFILE");
-this.sequence = this.getParameter ("PDBSEQ");
-this.jnetFile = this.getParameter ("jnetfile");
-this.annotations = this.getParameter ("annotations");
-this.hideFeatureGroups = this.getParameter ("hidefeaturegroups");
-this.showFeatureGroups = this.getParameter ("showfeaturegroups");
-this.features = this.getParameter ("features");
-this.showFeatureSettings = this.getParameter ("showFeatureSettings");
-this.scoreFile = this.getParameter ("scoreFile");
-this.treeFile = this.getParameter ("tree");
-if (this.treeFile == null) this.treeFile = this.getParameter ("treeFile");
-this.windowWidth = this.getParameter ("windowWidth");
-this.windowHeight = this.getParameter ("windowHeight");
-this.defaultColour = this.getParameter ("defaultColour");
-this.sortBy = this.getParameter ("sortBy");
-this.wrap = this.getParameter ("wrap");
-this.centrecolumnlabels = this.getParameter ("centrecolumnlabels");
-this.userDefinedColour = this.getParameter ("userDefinedColour");
-this.widthScale = this.getParameter ("widthScale");
-this.heightScale = this.getParameter ("heightScale");
-this.upperCase = this.getParameter ("upperCase");
-this.file2 = this.getParameter ("file2");
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getDefaultParameter",
-function (name, def) {
-var stn;
-if ((stn = this.getParameter (name)) == null) {
-return def;
-}if (stn.toLowerCase ().equals ("true")) {
-return true;
-}return false;
-}, "~S,~B");
-Clazz.defineMethod (c$, "getLinkParams",
-function (links) {
-var label;
-var url;
-for (var i = 1; i < 10; i++) {
-label = this.getParameter ("linkLabel_" + i);
-url = this.getParameter ("linkURL_" + i);
-if (label != null && url != null) {
-links.addElement (label + "|" + url);
-}}
-}, "java.util.Vector");
-Clazz.defineMethod (c$, "getStructureSelectionManager",
-function () {
-return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this);
-});
-Clazz.defineMethod (c$, "getSelectedSequences",
-function () {
-return this.getSelectedSequencesFrom (this.getDefaultTargetFrame ());
-});
-Clazz.defineMethod (c$, "getSelectedSequences",
-function (sep) {
-return this.getSelectedSequencesFrom (this.getDefaultTargetFrame (), sep);
-}, "~S");
-Clazz.defineMethod (c$, "getSelectedSequencesFrom",
-function (alf) {
-return this.getSelectedSequencesFrom (alf, this.separator);
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "getSelectedSequencesFrom",
-function (alf, sep) {
-var result = new StringBuffer ("");
-if (sep == null || sep.length == 0) {
-sep = this.separator;
-}if (alf.viewport.getSelectionGroup () != null) {
-var seqs = alf.viewport.getSelectionGroup ().getSequencesInOrder (alf.viewport.getAlignment ());
-for (var i = 0; i < seqs.length; i++) {
-result.append (seqs[i].getName ());
-result.append (sep);
-}
-}return result.toString ();
-}, "jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "highlight",
-function (sequenceId, position, alignedPosition) {
-this.highlightIn (this.getDefaultTargetFrame (), sequenceId, position, alignedPosition);
-}, "~S,~S,~S");
-Clazz.overrideMethod (c$, "highlightIn",
-function (alf, sequenceId, position, alignedPosition) {
-var matcher = new jalview.analysis.SequenceIdMatcher (alf.viewport.getAlignment ().getSequencesArray ());
-var sq = matcher.findIdMatch (sequenceId);
-if (sq != null) {
-var apos = -1;
-try {
-apos = new Integer (position).intValue ();
-apos--;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-return;
-} else {
-throw ex;
-}
-}
-var me = this;
-var pos = apos;
-if (alignedPosition != null && (alignedPosition.trim ().length == 0 || alignedPosition.toLowerCase ().indexOf ("false") > -1)) {
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$1") ? 0 : jalview.bin.JalviewLite.$JalviewLite$1$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$1, this, Clazz.cloneFinals ("me", me, "sq", sq, "pos", pos))));
-} else {
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$2") ? 0 : jalview.bin.JalviewLite.$JalviewLite$2$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$2, this, Clazz.cloneFinals ("me", me, "sq", sq, "pos", pos))));
-}}}, "jalview.appletgui.AlignFrame,~S,~S,~S");
-Clazz.defineMethod (c$, "select",
-function (sequenceIds, columns) {
-this.selectIn (this.getDefaultTargetFrame (), sequenceIds, columns, this.separator);
-}, "~S,~S");
-Clazz.defineMethod (c$, "select",
-function (sequenceIds, columns, sep) {
-this.selectIn (this.getDefaultTargetFrame (), sequenceIds, columns, sep);
-}, "~S,~S,~S");
-Clazz.defineMethod (c$, "selectIn",
-function (alf, sequenceIds, columns) {
-this.selectIn (alf, sequenceIds, columns, this.separator);
-}, "jalview.appletgui.AlignFrame,~S,~S");
-Clazz.defineMethod (c$, "selectIn",
-function (alf, sequenceIds, columns, sep) {
-if (sep == null || sep.length == 0) {
-sep = this.separator;
-} else {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Selecting region using separator string '" + this.separator + "'");
-}}var ids = this.separatorListToArray (sequenceIds, sep);
-var cols = this.separatorListToArray (columns, sep);
-var sel = new jalview.datamodel.SequenceGroup ();
-var csel = new jalview.datamodel.ColumnSelection ();
-var al = alf.viewport.getAlignment ();
-var matcher = new jalview.analysis.SequenceIdMatcher (alf.viewport.getAlignment ().getSequencesArray ());
-var start = 0;
-var end = al.getWidth ();
-var alw = al.getWidth ();
-var seqsfound = true;
-if (ids != null && ids.length > 0) {
-seqsfound = false;
-for (var i = 0; i < ids.length; i++) {
-if (ids[i].trim ().length == 0) {
-continue;
-}var sq = matcher.findIdMatch (ids[i]);
-if (sq != null) {
-seqsfound = true;
-sel.addSequence (sq, false);
-}}
-}var inseqpos = false;
-if (cols != null && cols.length > 0) {
-var seset = false;
-for (var i = 0; i < cols.length; i++) {
-var cl = cols[i].trim ();
-if (cl.length == 0) {
-continue;
-}var p;
-if ((p = cl.indexOf ("-")) > -1) {
-var from = -1;
-var to = -1;
-try {
-from = new Integer (cl.substring (0, p)).intValue ();
-from--;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-System.err.println ("ERROR: Couldn't parse first integer in range element column selection string '" + cl + "' - format is 'from-to'");
-return;
-} else {
-throw ex;
-}
-}
-try {
-to = new Integer (cl.substring (p + 1)).intValue ();
-to--;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-System.err.println ("ERROR: Couldn't parse second integer in range element column selection string '" + cl + "' - format is 'from-to'");
-return;
-} else {
-throw ex;
-}
-}
-if (from >= 0 && to >= 0) {
-if (from < to) {
-var t = to;
-to = from;
-to = t;
-}if (!seset) {
-start = from;
-end = to;
-seset = true;
-} else {
-if (start > from) {
-start = from;
-}if (end < to) {
-end = to;
-}}for (var r = from; r <= to; r++) {
-if (r >= 0 && r < alw) {
-csel.addElement (r);
-}}
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Range '" + cl + "' deparsed as [" + from + "," + to + "]");
-}} else {
-System.err.println ("ERROR: Invalid Range '" + cl + "' deparsed as [" + from + "," + to + "]");
-}} else {
-var r = -1;
-try {
-r = new Integer (cl).intValue ();
-r--;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-if (cl.toLowerCase ().equals ("sequence")) {
-inseqpos = true;
-} else {
-System.err.println ("ERROR: Couldn't parse integer from point selection element of column selection string '" + cl + "'");
-return;
-}} else {
-throw ex;
-}
-}
-if (r >= 0 && r <= alw) {
-if (!seset) {
-start = r;
-end = r;
-seset = true;
-} else {
-if (start > r) {
-start = r;
-}if (end < r) {
-end = r;
-}}csel.addElement (r);
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Point selection '" + cl + "' deparsed as [" + r + "]");
-}} else {
-System.err.println ("ERROR: Invalid Point selection '" + cl + "' deparsed as [" + r + "]");
-}}}
-}if (seqsfound) {
-if (inseqpos && sel.getSize () > 0) {
-var rs = sel.getSequenceAt (0);
-start = rs.findIndex (start);
-end = rs.findIndex (end);
-if (csel != null) {
-var cs = csel.getSelected ();
-csel.clear ();
-for (var selectedCol, $selectedCol = cs.iterator (); $selectedCol.hasNext () && ((selectedCol = $selectedCol.next ()) || true);) {
-csel.addElement (rs.findIndex ((selectedCol).intValue ()));
-}
-}}sel.setStartRes (start);
-sel.setEndRes (end);
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$3") ? 0 : jalview.bin.JalviewLite.$JalviewLite$3$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$3, this, Clazz.cloneFinals ("alf", alf, "sel", sel, "csel", csel))));
-}}, "jalview.appletgui.AlignFrame,~S,~S,~S");
-Clazz.overrideMethod (c$, "getSelectedSequencesAsAlignment",
-function (format, suffix) {
-return this.getSelectedSequencesAsAlignmentFrom (this.getDefaultTargetFrame (), format, suffix);
-}, "~S,~S");
-Clazz.overrideMethod (c$, "getSelectedSequencesAsAlignmentFrom",
-function (alf, format, suffix) {
-try {
-var seqlimits = suffix.equalsIgnoreCase ("true");
-if (alf.viewport.getSelectionGroup () != null) {
-var reply = new jalview.io.AppletFormatAdapter ().formatSequences (format, new jalview.datamodel.Alignment (alf.viewport.getSelectionAsNewSequence ()), seqlimits);
-return reply;
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-return "Error retrieving alignment in " + format + " format. ";
-} else {
-throw ex;
-}
-}
-return "";
-}, "jalview.appletgui.AlignFrame,~S,~S");
-Clazz.overrideMethod (c$, "getAlignmentOrder",
-function () {
-return this.getAlignmentOrderFrom (this.getDefaultTargetFrame ());
-});
-Clazz.defineMethod (c$, "getAlignmentOrderFrom",
-function (alf) {
-return this.getAlignmentOrderFrom (alf, this.separator);
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "getAlignmentOrderFrom",
-function (alf, sep) {
-var alorder = alf.getAlignViewport ().getAlignment ();
-var order = new Array (alorder.getHeight ());
-for (var i = 0; i < order.length; i++) {
-order[i] = alorder.getSequenceAt (i).getName ();
-}
-return this.arrayToSeparatorList (order);
-}, "jalview.appletgui.AlignFrame,~S");
-Clazz.defineMethod (c$, "orderBy",
-function (order, undoName) {
-return this.orderBy (order, undoName, this.separator);
-}, "~S,~S");
-Clazz.defineMethod (c$, "orderBy",
-function (order, undoName, sep) {
-return this.orderAlignmentBy (this.getDefaultTargetFrame (), order, undoName, sep);
-}, "~S,~S,~S");
-Clazz.overrideMethod (c$, "orderAlignmentBy",
-function (alf, order, undoName, sep) {
-var ids = this.separatorListToArray (order, sep);
-var sqs = null;
-if (ids != null && ids.length > 0) {
-var matcher = new jalview.analysis.SequenceIdMatcher (alf.viewport.getAlignment ().getSequencesArray ());
-var s = 0;
-sqs = new Array (ids.length);
-for (var i = 0; i < ids.length; i++) {
-if (ids[i].trim ().length == 0) {
-continue;
-}var sq = matcher.findIdMatch (ids[i]);
-if (sq != null) {
-sqs[s++] = sq;
-}}
-if (s > 0) {
-var sqq = new Array (s);
-System.arraycopy (sqs, 0, sqq, 0, s);
-sqs = sqq;
-} else {
-sqs = null;
-}}if (sqs == null) {
-return "";
-};var aorder = new jalview.datamodel.AlignmentOrder (sqs);
-if (undoName != null && undoName.trim ().length == 0) {
-undoName = null;
-}var _undoName = undoName;
-return alf.sortBy (aorder, _undoName) ? "true" : "";
-}, "jalview.appletgui.AlignFrame,~S,~S,~S");
-Clazz.defineMethod (c$, "getAlignment",
-function (format) {
-return this.getAlignmentFrom (this.getDefaultTargetFrame (), format, "true");
-}, "~S");
-Clazz.defineMethod (c$, "getAlignmentFrom",
-function (alf, format) {
-return this.getAlignmentFrom (alf, format, "true");
-}, "jalview.appletgui.AlignFrame,~S");
-Clazz.defineMethod (c$, "getAlignment",
-function (format, suffix) {
-return this.getAlignmentFrom (this.getDefaultTargetFrame (), format, suffix);
-}, "~S,~S");
-Clazz.defineMethod (c$, "getAlignmentFrom",
-function (alf, format, suffix) {
-try {
-var seqlimits = suffix.equalsIgnoreCase ("true");
-var reply = new jalview.io.AppletFormatAdapter ().formatSequences (format, alf.viewport.getAlignment (), seqlimits);
-return reply;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-return "Error retrieving alignment in " + format + " format. ";
-} else {
-throw ex;
-}
-}
-}, "jalview.appletgui.AlignFrame,~S,~S");
-Clazz.overrideMethod (c$, "loadAnnotation",
-function (annotation) {
-this.loadAnnotationFrom (this.getDefaultTargetFrame (), annotation);
-}, "~S");
-Clazz.overrideMethod (c$, "loadAnnotationFrom",
-function (alf, annotation) {
-if ( new jalview.io.AnnotationFile ().annotateAlignmentView (alf.getAlignViewport (), annotation, jalview.io.AppletFormatAdapter.PASTE)) {
-alf.alignPanel.fontChanged ();
-alf.alignPanel.setScrollValues (0, 0);
-} else {
-alf.parseFeaturesFile (annotation, jalview.io.AppletFormatAdapter.PASTE);
-}}, "jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "loadFeatures",
-function (features, autoenabledisplay) {
-this.loadFeaturesFrom (this.getDefaultTargetFrame (), features, autoenabledisplay);
-}, "~S,~B");
-Clazz.overrideMethod (c$, "loadFeaturesFrom",
-function (alf, features, autoenabledisplay) {
-return alf.parseFeaturesFile (features, jalview.io.AppletFormatAdapter.PASTE, autoenabledisplay);
-}, "jalview.appletgui.AlignFrame,~S,~B");
-Clazz.overrideMethod (c$, "getFeatures",
-function (format) {
-return this.getFeaturesFrom (this.getDefaultTargetFrame (), format);
-}, "~S");
-Clazz.overrideMethod (c$, "getFeaturesFrom",
-function (alf, format) {
-return alf.outputFeatures (false, format);
-}, "jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "getAnnotation",
-function () {
-return this.getAnnotationFrom (this.getDefaultTargetFrame ());
-});
-Clazz.overrideMethod (c$, "getAnnotationFrom",
-function (alf) {
-return alf.outputAnnotations (false);
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "newView",
-function () {
-return this.newViewFrom (this.getDefaultTargetFrame ());
-});
-Clazz.defineMethod (c$, "newView",
-function (name) {
-return this.newViewFrom (this.getDefaultTargetFrame (), name);
-}, "~S");
-Clazz.defineMethod (c$, "newViewFrom",
-function (alf) {
-return alf.newView (null);
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "newViewFrom",
-function (alf, name) {
-return alf.newView (name);
-}, "jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "loadAlignment",
-function (text, title) {
-var al = null;
-var format = new jalview.io.IdentifyFile ().Identify (text, jalview.io.AppletFormatAdapter.PASTE);
-try {
-al = new jalview.io.AppletFormatAdapter ().readFile (text, jalview.io.AppletFormatAdapter.PASTE, format);
-if (al.getHeight () > 0) {
-return new jalview.appletgui.AlignFrame (al, this, title, false);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, java.io.IOException)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-return null;
-}, "~S,~S");
-Clazz.defineMethod (c$, "setMouseoverListener",
-function (listener) {
-this.setMouseoverListener (this.currentAlignFrame, listener);
-}, "~S");
-Clazz.defineMethod (c$, "setMouseoverListener",
-function (af, listener) {
-if (listener != null) {
-listener = listener.trim ();
-if (listener.length == 0) {
-System.err.println ("jalview Javascript error: Ignoring empty function for mouseover listener.");
-return;
-}}var mol = new jalview.javascript.MouseOverListener (this, af, listener);
-this.javascriptListeners.addElement (mol);
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).addStructureViewerListener (mol);
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Added a mouseover listener for " + ((af == null) ? "All frames" : "Just views for " + af.getAlignViewport ().getSequenceSetId ()));
-System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
-}}, "jalview.appletgui.AlignFrame,~S");
-Clazz.defineMethod (c$, "setSelectionListener",
-function (listener) {
-this.setSelectionListener (null, listener);
-}, "~S");
-Clazz.defineMethod (c$, "setSelectionListener",
-function (af, listener) {
-if (listener != null) {
-listener = listener.trim ();
-if (listener.length == 0) {
-System.err.println ("jalview Javascript error: Ignoring empty function for selection listener.");
-return;
-}}var mol = new jalview.javascript.JsSelectionSender (this, af, listener);
-this.javascriptListeners.addElement (mol);
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).addSelectionListener (mol);
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Added a selection listener for " + ((af == null) ? "All frames" : "Just views for " + af.getAlignViewport ().getSequenceSetId ()));
-System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
-}}, "jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "setStructureListener",
-function (listener, modelSet) {
-if (listener != null) {
-listener = listener.trim ();
-if (listener.length == 0) {
-System.err.println ("jalview Javascript error: Ignoring empty function for selection listener.");
-return;
-}}var mol = new jalview.javascript.MouseOverStructureListener (this, listener, this.separatorListToArray (modelSet));
-this.javascriptListeners.addElement (mol);
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).addStructureViewerListener (mol);
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Added a javascript structure viewer listener '" + listener + "'");
-System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
-}}, "~S,~S");
-Clazz.overrideMethod (c$, "removeJavascriptListener",
-function (af, listener) {
-if (listener != null) {
-listener = listener.trim ();
-if (listener.length == 0) {
-listener = null;
-}}var rprt = false;
-for (var ms = 0, msSize = this.javascriptListeners.size (); ms < msSize; ) {
-var lstn = this.javascriptListeners.elementAt (ms);
-var lstner = lstn;
-if ((af == null || lstner.getAlignFrame () === af) && (listener == null || lstner.getListenerFunction ().equals (listener))) {
-this.javascriptListeners.removeElement (lstner);
-msSize--;
-if (Clazz.instanceOf (lstner, jalview.structure.SelectionListener)) {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeSelectionListener (lstner);
-} else {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeStructureViewerListener (lstner, null);
-}rprt = jalview.bin.JalviewLite.debug;
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Removed listener '" + listener + "'");
-}} else {
-ms++;
-}}
-if (rprt) {
-System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
-}}, "jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "stop",
-function () {
-System.err.println ("Applet " + this.getName () + " stop().");
-this.tidyUp ();
-});
-Clazz.overrideMethod (c$, "destroy",
-function () {
-System.err.println ("Applet " + this.getName () + " destroy().");
-this.tidyUp ();
-});
-Clazz.defineMethod (c$, "tidyUp",
-($fz = function () {
-this.removeAll ();
-if (this.currentAlignFrame != null && this.currentAlignFrame.viewport != null && this.currentAlignFrame.viewport.applet != null) {
-var av = this.currentAlignFrame.viewport;
-this.currentAlignFrame.closeMenuItem_actionPerformed ();
-av.applet = null;
-this.currentAlignFrame = null;
-}if (this.javascriptListeners != null) {
-while (this.javascriptListeners.size () > 0) {
-var mol = this.javascriptListeners.elementAt (0);
-this.javascriptListeners.removeElement (mol);
-if (Clazz.instanceOf (mol, jalview.structure.SelectionListener)) {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeSelectionListener (mol);
-} else {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeStructureViewerListener (mol, null);
-}mol.jvlite = null;
-}
-}if (this.jsFunctionExec != null) {
-this.jsFunctionExec.stopQueue ();
-this.jsFunctionExec.jvlite = null;
-}this.initialAlignFrame = null;
-this.jsFunctionExec = null;
-this.javascriptListeners = null;
-jalview.structure.StructureSelectionManager.release (this);
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "mouseOverStructure",
-function (pdbResNum, chain, pdbfile) {
-var me = this;
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$4") ? 0 : jalview.bin.JalviewLite.$JalviewLite$4$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$4, this, Clazz.cloneFinals ("me", me, "pdbResNum", pdbResNum, "chain", chain, "pdbfile", pdbfile))));
-}, "~S,~S,~S");
-Clazz.overrideMethod (c$, "scrollViewToIn",
-function (alf, topRow, leftHandColumn) {
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$5") ? 0 : jalview.bin.JalviewLite.$JalviewLite$5$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$5, this, Clazz.cloneFinals ("alf", alf, "topRow", topRow, "leftHandColumn", leftHandColumn))));
-}, "jalview.appletgui.AlignFrame,~S,~S");
-Clazz.overrideMethod (c$, "scrollViewToRowIn",
-function (alf, topRow) {
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$6") ? 0 : jalview.bin.JalviewLite.$JalviewLite$6$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$6, this, Clazz.cloneFinals ("alf", alf, "topRow", topRow))));
-}, "jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "scrollViewToColumnIn",
-function (alf, leftHandColumn) {
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$7") ? 0 : jalview.bin.JalviewLite.$JalviewLite$7$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$7, this, Clazz.cloneFinals ("alf", alf, "leftHandColumn", leftHandColumn))));
-}, "jalview.appletgui.AlignFrame,~S");
-c$.initBuildDetails = Clazz.defineMethod (c$, "initBuildDetails",
-($fz = function () {
-if (jalview.bin.JalviewLite.builddate == null) {
-jalview.bin.JalviewLite.builddate = "unknown";
-jalview.bin.JalviewLite.version = "test";
-jalview.bin.JalviewLite.installation = "Webstart";
-var url = jalview.bin.JalviewLite.getResource ("/.build_properties");
-if (url != null) {
-try {
-var reader = new java.io.BufferedReader ( new java.io.InputStreamReader (url.openStream ()));
-var line;
-while ((line = reader.readLine ()) != null) {
-if (line.indexOf ("VERSION") > -1) {
-jalview.bin.JalviewLite.version = line.substring (line.indexOf ("=") + 1);
-}if (line.indexOf ("BUILD_DATE") > -1) {
-jalview.bin.JalviewLite.builddate = line.substring (line.indexOf ("=") + 1);
-}if (line.indexOf ("INSTALLATION") > -1) {
-jalview.bin.JalviewLite.installation = line.substring (line.indexOf ("=") + 1);
-}}
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}}}, $fz.isPrivate = true, $fz));
-c$.getBuildDate = Clazz.defineMethod (c$, "getBuildDate",
-function () {
-jalview.bin.JalviewLite.initBuildDetails ();
-return jalview.bin.JalviewLite.builddate;
-});
-c$.getInstallation = Clazz.defineMethod (c$, "getInstallation",
-function () {
-jalview.bin.JalviewLite.initBuildDetails ();
-return jalview.bin.JalviewLite.installation;
-});
-c$.getVersion = Clazz.defineMethod (c$, "getVersion",
-function () {
-jalview.bin.JalviewLite.initBuildDetails ();
-return jalview.bin.JalviewLite.version;
-});
-Clazz.overrideMethod (c$, "init",
-function () {
-this.setParams ();
-try {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Applet context is '" + this.getAppletContext ().getClass ().toString () + "'");
-}var scriptObject = netscape.javascript.JSObject.getWindow (this);
-if (jalview.bin.JalviewLite.debug && scriptObject != null) {
-System.err.println ("Applet has Javascript callback support.");
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Warning: No JalviewLite javascript callbacks available.");
-if (jalview.bin.JalviewLite.debug) {
-ex.printStackTrace ();
-}} else {
-throw ex;
-}
-}
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("JalviewLite Version " + jalview.bin.JalviewLite.getVersion ());
-System.err.println ("Build Date : " + jalview.bin.JalviewLite.getBuildDate ());
-System.err.println ("Installation : " + jalview.bin.JalviewLite.getInstallation ());
-}if (this.externalstructureviewer != null) {
-this.useXtrnalSviewer = this.externalstructureviewer.trim ().toLowerCase ().equals ("true");
-}if (this.sep != null) {
-if (this.sep.length > 0) {
-this.separator = this.sep;
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Separator set to '" + this.separator + "'");
-}} else {
-throw new Error (jalview.util.MessageManager.getString ("error.invalid_separator_parameter"));
-}}var r = 255;
-var g = 255;
-var b = 255;
-if (this.rgb != null) {
-try {
-r = Integer.parseInt (this.rgb.substring (0, 2), 16);
-g = Integer.parseInt (this.rgb.substring (2, 4), 16);
-b = Integer.parseInt (this.rgb.substring (4, 6), 16);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-r = 255;
-g = 255;
-b = 255;
-} else {
-throw ex;
-}
-}
-}this.rgb = this.labelColour;
-if (this.rgb != null) {
-this.launcher.setLabel (this.rgb);
-}this.setBackground ( new java.awt.Color (r, g, b));
-if (this.startupFile == null) {
-var data = new StringBuffer ("PASTE");
-var i = 1;
-while ((this.startupFile = this.getParameter ("sequence" + i)) != null) {
-data.append (this.startupFile.toString () + "\n");
-i++;
-}
-if (data.length () > 5) {
-this.startupFile = data.toString ();
-}}if (!this.enableSplitFrame) {
-this.file2 = null;
-}if (this.embedded) {
-var loader = Clazz.innerTypeInstance (jalview.bin.JalviewLite.LoadingThread, this, null, this.startupFile, this.file2, this);
-{
-loader.run();
-}} else if (this.startupFile != null) {
-if (!this.showButton) {
-var loader = Clazz.innerTypeInstance (jalview.bin.JalviewLite.LoadingThread, this, null, this.startupFile, this.file2, this);
-loader.start ();
-} else {
-this.add (this.launcher);
-this.launcher.addActionListener (((Clazz.isClassDefined ("jalview.bin.JalviewLite$8") ? 0 : jalview.bin.JalviewLite.$JalviewLite$8$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$8, this, null)));
-}} else {
-this.startupFile = "NO FILE";
-this.fileFound = false;
-this.callInitCallback ();
-}});
-Clazz.defineMethod (c$, "initLiveConnect",
-($fz = function () {
-var notFailed = false;
-var tries = 0;
-while (!notFailed && tries < 10) {
-if (tries > 0) {
-System.err.println ("LiveConnect request thread going to sleep.");
-}try {
-Thread.sleep (700 * (1 + tries));
-} catch (q) {
-if (Clazz.exceptionOf (q, InterruptedException)) {
-} else {
-throw q;
-}
-}
-;if (tries++ > 0) {
-System.err.println ("LiveConnect request thread woken up.");
-}try {
-var scriptObject = netscape.javascript.JSObject.getWindow (this);
-if (scriptObject.eval ("navigator") != null) {
-notFailed = true;
-}} catch (jsex) {
-if (Clazz.exceptionOf (jsex, Exception)) {
-System.err.println ("Attempt " + tries + " to access LiveConnect javascript failed.");
-} else {
-throw jsex;
-}
-}
-}
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "callInitCallback",
-($fz = function () {
-if (this.initjscallback == null) {
-return;
-}this.initjscallback = this.initjscallback.trim ();
-if (this.initjscallback.length > 0) {
-var scriptObject = null;
-try {
-scriptObject = netscape.javascript.JSObject.getWindow (this);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-;this.initLiveConnect ();
-if (scriptObject != null) {
-try {
- new jalview.javascript.JSFunctionExec (this).executeJavascriptFunction (true, this.initjscallback, null, "Calling oninit callback '" + this.initjscallback + "'.");
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Exception when executing _oninit callback '" + this.initjscallback + "'.");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-} else {
-System.err.println ("Not executing _oninit callback '" + this.initjscallback + "' - no scripting allowed.");
-}}}, $fz.isPrivate = true, $fz));
-c$.addFrame = Clazz.defineMethod (c$, "addFrame",
-function (frame, title, width, height) {
-frame.setLocation (jalview.bin.JalviewLite.lastFrameX, jalview.bin.JalviewLite.lastFrameY);
-jalview.bin.JalviewLite.lastFrameX += 40;
-jalview.bin.JalviewLite.lastFrameY += 40;
-frame.setSize (width, height);
-frame.setTitle (title);
-frame.addWindowListener (((Clazz.isClassDefined ("jalview.bin.JalviewLite$9") ? 0 : jalview.bin.JalviewLite.$JalviewLite$9$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$9, this, Clazz.cloneFinals ("frame", frame))));
-frame.setVisible (true);
-}, "javax.swing.JFrame,~S,~N,~N");
-Clazz.defineMethod (c$, "paintComponent",
-function (g) {
-if (!this.fileFound) {
-g.setColor ( new java.awt.Color (200, 200, 200));
-g.setColor (java.awt.Color.cyan);
-g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
-g.setColor (java.awt.Color.red);
-g.drawString (jalview.util.MessageManager.getString ("label.jalview_cannot_open_file"), 5, 15);
-g.drawString ("\"" + this.startupFile + "\"", 5, 30);
-} else if (this.embedded && !this.haveShownLoadMessage) {
-g.setColor (java.awt.Color.black);
-g.setFont ( new java.awt.Font ("Arial", 1, 24));
-g.drawString (jalview.util.MessageManager.getString ("label.jalview_applet"), 50, Clazz.doubleToInt (this.getSize ().height / 2) - 30);
-g.drawString (jalview.util.MessageManager.getString ("label.loading_data") + "...", 50, Clazz.doubleToInt (this.getSize ().height / 2));
-this.haveShownLoadMessage = true;
-}}, "java.awt.Graphics");
-Clazz.defineMethod (c$, "getAppletWindow",
-function (class1) {
-var wnds = new java.util.Vector ();
-var cmp = this.getComponents ();
-if (cmp != null) {
-for (var i = 0; i < cmp.length; i++) {
-if (class1.isAssignableFrom (cmp[i].getClass ())) {
-wnds.addElement (cmp);
-}}
-}return wnds;
-}, "Class");
-Clazz.defineMethod (c$, "getDefaultTargetFrame",
-function () {
-if (this.currentAlignFrame != null) {
-return this.currentAlignFrame;
-}if (this.initialAlignFrame != null) {
-return this.initialAlignFrame;
-}System.err.println ("Implementation error: Jalview Applet API cannot work out which AlignFrame to use.");
-return null;
-});
-Clazz.defineMethod (c$, "separatorListToArray",
-function (list) {
-return this.separatorListToArray (list, this.separator);
-}, "~S");
-Clazz.defineMethod (c$, "separatorListToArray",
-function (list, separator) {
-var seplen = separator.length;
-if (list == null || list.equals ("") || list.equals (separator)) {
-return null;
-}var jv = new java.util.Vector ();
-var cp = 0;
-var pos;
-while ((pos = list.indexOf (separator, cp)) > cp) {
-jv.addElement (list.substring (cp, pos));
-cp = pos + seplen;
-}
-if (cp < list.length) {
-var c = list.substring (cp);
-if (!c.equals (separator)) {
-jv.addElement (c);
-}}if (jv.size () > 0) {
-var v = new Array (jv.size ());
-for (var i = 0; i < v.length; i++) {
-v[i] = jv.elementAt (i);
-}
-jv.removeAllElements ();
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Array from '" + separator + "' separated List:\n" + v.length);
-for (var i = 0; i < v.length; i++) {
-System.err.println ("item " + i + " '" + v[i] + "'");
-}
-}return v;
-}if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Empty Array from '" + separator + "' separated List");
-}return null;
-}, "~S,~S");
-Clazz.defineMethod (c$, "arrayToSeparatorList",
-function (list) {
-return this.arrayToSeparatorList (list, this.separator);
-}, "~A");
-Clazz.defineMethod (c$, "arrayToSeparatorList",
-function (list, separator) {
-var v = new StringBuffer ();
-if (list != null && list.length > 0) {
-for (var i = 0, iSize = list.length; i < iSize; i++) {
-if (list[i] != null) {
-if (i > 0) {
-v.append (separator);
-}v.append (list[i]);
-}}
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Returning '" + separator + "' separated List:\n");
-System.err.println (v);
-}return v.toString ();
-}if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Returning empty '" + separator + "' separated List\n");
-}return "" + separator;
-}, "~A,~S");
-Clazz.overrideMethod (c$, "getFeatureGroups",
-function () {
-var lst = this.arrayToSeparatorList (this.getDefaultTargetFrame ().getFeatureGroups ());
-return lst;
-});
-Clazz.overrideMethod (c$, "getFeatureGroupsOn",
-function (alf) {
-var lst = this.arrayToSeparatorList (alf.getFeatureGroups ());
-return lst;
-}, "jalview.appletgui.AlignFrame");
-Clazz.overrideMethod (c$, "getFeatureGroupsOfState",
-function (visible) {
-return this.arrayToSeparatorList (this.getDefaultTargetFrame ().getFeatureGroupsOfState (visible));
-}, "~B");
-Clazz.overrideMethod (c$, "getFeatureGroupsOfStateOn",
-function (alf, visible) {
-return this.arrayToSeparatorList (alf.getFeatureGroupsOfState (visible));
-}, "jalview.appletgui.AlignFrame,~B");
-Clazz.overrideMethod (c$, "setFeatureGroupStateOn",
-function (alf, groups, state) {
-var st = state;
-java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$10") ? 0 : jalview.bin.JalviewLite.$JalviewLite$10$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$10, this, Clazz.cloneFinals ("alf", alf, "groups", groups, "st", st))));
-}, "jalview.appletgui.AlignFrame,~S,~B");
-Clazz.overrideMethod (c$, "setFeatureGroupState",
-function (groups, state) {
-this.setFeatureGroupStateOn (this.getDefaultTargetFrame (), groups, state);
-}, "~S,~B");
-Clazz.overrideMethod (c$, "getSeparator",
-function () {
-return this.separator;
-});
-Clazz.overrideMethod (c$, "setSeparator",
-function (separator) {
-if (separator == null || separator.length < 1) {
-separator = "\u00ac";
-}this.separator = separator;
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Default Separator now: '" + separator + "'");
-}}, "~S");
-Clazz.overrideMethod (c$, "addPdbFile",
-function (alFrame, sequenceId, pdbEntryString, pdbFile) {
-return alFrame.addPdbFile (sequenceId, pdbEntryString, pdbFile);
-}, "jalview.appletgui.AlignFrame,~S,~S,~S");
-Clazz.defineMethod (c$, "setAlignPdbStructures",
-function (alignPdbStructures) {
-this.alignPdbStructures = alignPdbStructures;
-}, "~B");
-Clazz.defineMethod (c$, "isAlignPdbStructures",
-function () {
-return this.alignPdbStructures;
-});
-Clazz.overrideMethod (c$, "start",
-function () {
-});
-Clazz.defineMethod (c$, "setJsMessageSet",
-function (messageclass, viewId, colcommands) {
-var msgset = this.jsmessages.get (messageclass);
-if (msgset == null) {
-msgset = new java.util.Hashtable ();
-this.jsmessages.put (messageclass, msgset);
-}msgset.put (viewId, colcommands);
-var l = Clazz.newLongArray (colcommands.length, 0);
-for (var i = 0; i < colcommands.length; i++) {
-l[i] = colcommands[i].hashCode ();
-}
-this.jshashes.put (messageclass + "|" + viewId, l);
-}, "~S,~S,~A");
-Clazz.overrideMethod (c$, "getJsMessage",
-function (messageclass, viewId) {
-var msgset = this.jsmessages.get (messageclass);
-if (msgset != null) {
-var msgs = msgset.get (viewId);
-if (msgs != null) {
-for (var i = 0; i < msgs.length; i++) {
-if (msgs[i] != null) {
-var m = msgs[i];
-msgs[i] = null;
-return m;
-}}
-}}return "";
-}, "~S,~S");
-Clazz.defineMethod (c$, "isJsMessageSetChanged",
-function (string, string2, colcommands) {
-var l = this.jshashes.get (string + "|" + string2);
-if (l == null && colcommands != null) {
-return true;
-}for (var i = 0; i < colcommands.length; i++) {
-if (l[i] != colcommands[i].hashCode ()) {
-return true;
-}}
-return false;
-}, "~S,~S,~A");
-Clazz.defineMethod (c$, "getJsExecQueue",
-function () {
-return this.jsExecQueue;
-});
-Clazz.defineMethod (c$, "setExecutor",
-function (jsFunctionExec2) {
-this.jsFunctionExec = jsFunctionExec2;
-}, "jalview.javascript.JSFunctionExec");
-Clazz.defineMethod (c$, "getDefaultColourParameter",
-function (colparam, defcolour) {
-var colprop = this.getParameter (colparam);
-if (colprop == null || colprop.trim ().length == 0) {
-return defcolour;
-}var col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName (colprop);
-if (col == null) {
-try {
-col = new jalview.schemes.UserColourScheme (colprop).findColour ('A');
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Couldn't parse '" + colprop + "' as a colour for " + colparam);
-col = null;
-} else {
-throw ex;
-}
-}
-}return (col == null) ? defcolour : col;
-}, "~S,java.awt.Color");
-Clazz.defineMethod (c$, "openJalviewHelpUrl",
-function () {
-if (this.helpUrl == null || this.helpUrl.trim ().length < 5) {
-this.helpUrl = "http://www.jalview.org/help.html";
-}this.showURL (this.helpUrl, "HELP");
-});
-Clazz.defineMethod (c$, "resolveUrlForLocalOrAbsolute",
-($fz = function (url, localref) {
-var codebase = localref.toString ();
-var pt = codebase.indexOf ("?");
-if (pt < 0) pt = codebase.length;
-codebase = codebase.substring (0, pt);
-codebase = codebase.substring (0, codebase.lastIndexOf ("/") + 1);
-if (url.indexOf ("/") == 0 && !localref.getProtocol ().equals ("file")) {
-pt = codebase.indexOf ("/", 8);
-return codebase.substring (0, pt) + url;
-}return codebase + url;
-}, $fz.isPrivate = true, $fz), "~S,java.net.URL");
-Clazz.defineMethod (c$, "showURL",
-function (url, target) {
-try {
-if (url.indexOf (":") == -1) {
-var prepend;
-url = this.resolveUrlForLocalOrAbsolute (url, prepend = this.getDefaultParameter ("resolvetocodebase", false) ? this.getDocumentBase () : this.getCodeBase ());
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Show url (prepended " + prepend + " - toggle resolvetocodebase if code/docbase resolution is wrong): " + url);
-}} else {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Show url: " + url);
-}}if (url.indexOf ("javascript:") == 0) {
-this.getAppletContext ().showDocument ( new java.net.URL (url));
-} else {
-this.getAppletContext ().showDocument ( new java.net.URL (url), target);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}, "~S,~S");
-c$.$JalviewLite$LoadJmolThread$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.running = false;
-Clazz.instantialize (this, arguments);
-}, jalview.bin.JalviewLite, "LoadJmolThread", Thread);
-Clazz.overrideMethod (c$, "run",
-function () {
-if (this.running || this.b$["jalview.bin.JalviewLite"].checkedForJmol) {
-return;
-}this.running = true;
-if (this.b$["jalview.bin.JalviewLite"].checkForJmol) {
-try {
-if (!System.getProperty ("java.version").startsWith ("1.1")) {
-Class.forName ("org.jmol.adapter.smarter.SmarterJmolAdapter");
-this.b$["jalview.bin.JalviewLite"].jmolAvailable = true;
-}if (!this.b$["jalview.bin.JalviewLite"].jmolAvailable) {
-System.out.println ("Jmol not available - Using MCview for structures");
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, ClassNotFoundException)) {
-} else {
-throw ex;
-}
-}
-} else {
-this.b$["jalview.bin.JalviewLite"].jmolAvailable = false;
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Skipping Jmol check. Will use MCView (probably)");
-}}this.b$["jalview.bin.JalviewLite"].checkedForJmol = true;
-this.running = false;
-});
-Clazz.defineMethod (c$, "notFinished",
-function () {
-return this.running || !this.b$["jalview.bin.JalviewLite"].checkedForJmol;
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$LoadingThread$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.protocol = null;
-this._file = null;
-this._file2 = null;
-this.applet = null;
-Clazz.instantialize (this, arguments);
-}, jalview.bin.JalviewLite, "LoadingThread", Thread);
-Clazz.defineMethod (c$, "dbgMsg",
-($fz = function (a) {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println (a);
-}}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "setProtocolState",
-function (a) {
-if (a.startsWith ("PASTE")) {
-a = a.substring (5);
-this.protocol = jalview.io.AppletFormatAdapter.PASTE;
-} else if (this.inArchive (a)) {
-this.protocol = jalview.io.AppletFormatAdapter.CLASSLOADER;
-} else {
-a = this.addProtocol (a);
-this.protocol = jalview.io.AppletFormatAdapter.URL;
-}this.dbgMsg ("Protocol identified as '" + this.protocol + "'");
-return a;
-}, "~S");
-Clazz.makeConstructor (c$,
-function (a, b, c) {
-Clazz.superConstructor (this, jalview.bin.JalviewLite.LoadingThread, []);
-this._file = a;
-this._file2 = b;
-this.applet = c;
-}, "~S,~S,jalview.bin.JalviewLite");
-Clazz.overrideMethod (c$, "run",
-function () {
-{
-System.out.println("BYPASSING JMOL LOADING FOR NOW. THIS WILL BE DONE ANOTHER WAY")
-}this.startLoading ();
-});
-Clazz.defineMethod (c$, "startLoading",
-($fz = function () {
-this.dbgMsg ("Loading thread started with:\n>>file\n" + this._file + ">>endfile");
-this.dbgMsg ("Loading started.");
-var a = this.readAlignment (this._file);
-var b = this.readAlignment (this._file2);
-if (a != null) {
-this.addToDisplay (a, b);
-this.loadTree (a);
-this.loadScoreFile (a);
-this.loadFeatures (a);
-this.loadAnnotations (a);
-this.loadJnetFile (a);
-this.loadPdbFiles (a);
-} else {
-this.b$["jalview.bin.JalviewLite"].fileFound = false;
-this.applet.remove (this.b$["jalview.bin.JalviewLite"].launcher);
-this.applet.repaint ();
-}this.b$["jalview.bin.JalviewLite"].callInitCallback ();
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "addToDisplay",
-function (a, b) {
-if (b == null) {
-a.addToDisplay (this.b$["jalview.bin.JalviewLite"].embedded);
-} else {
-var c = new jalview.appletgui.SplitFrame (a, b);
-c.addToDisplay (this.b$["jalview.bin.JalviewLite"].embedded, this.b$["jalview.bin.JalviewLite"]);
-}}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "readAlignment",
-function (a) {
-if (a == null) {
-return null;
-}var b = this.setProtocolState (a);
-var c = new jalview.io.IdentifyFile ().Identify (b, this.protocol);
-this.dbgMsg ("File identified as '" + c + "'");
-var d = null;
-try {
-d = new jalview.io.AppletFormatAdapter ().readFile (b, this.protocol, c);
-if ((d != null) && (d.getHeight () > 0)) {
-this.dbgMsg ("Successfully loaded file.");
-d.setDataset (null);
-var e = new jalview.appletgui.AlignFrame (d, this.applet, b, this.b$["jalview.bin.JalviewLite"].embedded, false);
-e.setTitle (b);
-if (this.b$["jalview.bin.JalviewLite"].initialAlignFrame == null) {
-this.b$["jalview.bin.JalviewLite"].initialAlignFrame = e;
-}this.b$["jalview.bin.JalviewLite"].currentAlignFrame = e;
-if (this.protocol === jalview.io.AppletFormatAdapter.PASTE) {
-e.setTitle (jalview.util.MessageManager.formatMessage ("label.sequences_from", Clazz.newArray (-1, [this.applet.getDocumentBase ().toString ()])));
-}e.setStatus (jalview.util.MessageManager.formatMessage ("label.successfully_loaded_file", Clazz.newArray (-1, [b])));
-return e;
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, java.io.IOException)) {
-this.dbgMsg ("File load exception.");
-ex.printStackTrace ();
-if (jalview.bin.JalviewLite.debug) {
-try {
-var e = new jalview.io.FileParse (b, this.protocol);
-var f = null;
-this.dbgMsg (">>>Dumping contents of '" + b + "' " + "(" + this.protocol + ")");
-while ((f = e.nextLine ()) != null) {
-this.dbgMsg (f);
-}
-this.dbgMsg (">>>Dump finished.");
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Exception when trying to dump the content of the file parameter.");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-}} else {
-throw ex;
-}
-}
-return null;
-}, "~S");
-Clazz.defineMethod (c$, "loadPdbFiles",
-function (a) {
-var b = false;
-this.applet.setAlignPdbStructures (this.b$["jalview.bin.JalviewLite"].getDefaultParameter ("alignpdbfiles", false));
-var c = 0;
-var d = new java.util.Vector ();
-var e = (this.applet.getDefaultParameter ("relaxedidmatch", false)) ? new jalview.analysis.SequenceIdMatcher (a.getAlignViewport ().getAlignment ().getSequencesArray ()) : null;
-var f;
-do {
-if (c > 0) {
-f = this.applet.getParameter ("PDBFILE" + c);
-} else {
-f = this.b$["jalview.bin.JalviewLite"].pdbFile;
-}if (f != null) {
-var g = new jalview.datamodel.PDBEntry ();
-var h;
-var i = null;
-var j = null;
-var k = new java.util.StringTokenizer (f, " ");
-if (k.countTokens () < 2) {
-if (this.b$["jalview.bin.JalviewLite"].sequence != null) {
-i = Clazz.newArray (-1, [e == null ? a.getAlignViewport ().getAlignment ().findName (this.b$["jalview.bin.JalviewLite"].sequence) : e.findIdMatch (this.b$["jalview.bin.JalviewLite"].sequence)]);
-}} else {
-f = k.nextToken ();
-var l = new java.util.Vector ();
-var m = new java.util.Vector ();
-while (k.hasMoreTokens ()) {
-h = k.nextToken ();
-var n = new java.util.StringTokenizer (h, "=");
-if (n.countTokens () > 1) {
-m.addElement (n.nextToken ());
-h = n.nextToken ();
-}l.addElement (e == null ? a.getAlignViewport ().getAlignment ().findName (h) : e.findIdMatch (h));
-}
-i = new Array (l.size ());
-l.copyInto (i);
-if (m.size () == l.size ()) {
-j = new Array (m.size ());
-m.copyInto (j);
-}}f = this.setProtocolState (f);
-if (this.protocol === jalview.io.AppletFormatAdapter.CLASSLOADER && !this.b$["jalview.bin.JalviewLite"].useXtrnalSviewer) {
-this.protocol = jalview.io.AppletFormatAdapter.URL;
-f = this.addProtocol (f);
-}g.setFile (f);
-if (i != null) {
-for (var l = 0; l < i.length; l++) {
-if (i[l] != null) {
-(i[l]).addPDBId (g);
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.applet).registerPDBEntry (g);
-} else {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Warning: Possible input parsing error: Null sequence for attachment of PDB (sequence " + l + ")");
-}}}
-if (!this.b$["jalview.bin.JalviewLite"].alignPdbStructures) {
-a.newStructureView (this.applet, g, i, j, this.protocol);
-} else {
-d.addElement ( Clazz.newArray (-1, [g, i, j, String.instantialize (this.protocol)]));
-}}}c++;
-} while (f != null || c < 10);
-if (d.size () > 0) {
-var g = new Array (d.size ());
-var h = new Array (d.size ());
-var i = new Array (d.size ());
-var j = new Array (d.size ());
-for (var k = 0, l = d.size (); k < l; k++) {
-var m = d.elementAt (k);
-h[k] = m[0];
-g[k] = m[1];
-i[k] = m[2];
-j[k] = m[3];
-}
-a.alignedStructureView (this.applet, h, g, i, j);
-b = true;
-}return b;
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "loadJnetFile",
-function (a) {
-var b = false;
-var c = this.b$["jalview.bin.JalviewLite"].jnetFile;
-if (c != null) {
-try {
-c = this.setProtocolState (c);
-var d = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [c, this.protocol]);
-jalview.io.JnetAnnotationMaker.add_annotation (d, a.viewport.getAlignment (), 0, false);
-var e = a.viewport.getAlignment ().getSequenceAt (0);
-a.viewport.getAlignment ().setSeqrep (e);
-var f = new jalview.datamodel.ColumnSelection ();
-f.hideInsertionsFor (e);
-a.viewport.setColumnSelection (f);
-a.alignPanel.fontChanged ();
-a.alignPanel.setScrollValues (0, 0);
-b = true;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}return b;
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "loadAnnotations",
-function (a) {
-var b = false;
-var c = this.b$["jalview.bin.JalviewLite"].annotations;
-if (c != null) {
-c = this.setProtocolState (c);
-if ( new jalview.io.AnnotationFile ().annotateAlignmentView (a.viewport, c, this.protocol)) {
-a.alignPanel.fontChanged ();
-a.alignPanel.setScrollValues (0, 0);
-b = true;
-} else {
-System.err.println ("Annotations were not added from annotation file '" + c + "'");
-}}return b;
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "loadFeatures",
-function (a) {
-var b = false;
-var c = this.b$["jalview.bin.JalviewLite"].hideFeatureGroups;
-if (c != null) {
-a.setFeatureGroupState (this.b$["jalview.bin.JalviewLite"].separatorListToArray (c), false);
-}c = this.b$["jalview.bin.JalviewLite"].showFeatureGroups;
-if (c != null) {
-a.setFeatureGroupState (this.b$["jalview.bin.JalviewLite"].separatorListToArray (c), true);
-}c = this.b$["jalview.bin.JalviewLite"].features;
-if (c != null) {
-c = this.setProtocolState (c);
-b = a.parseFeaturesFile (c, this.protocol);
-}c = this.b$["jalview.bin.JalviewLite"].showFeatureSettings;
-if (c != null && c.equalsIgnoreCase ("true")) {
-a.viewport.setShowSequenceFeatures (true);
- new jalview.appletgui.FeatureSettings (a.alignPanel);
-}return b;
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "loadScoreFile",
-function (a) {
-var b = false;
-if (this.b$["jalview.bin.JalviewLite"].scoreFile != null && !"".equals (this.b$["jalview.bin.JalviewLite"].scoreFile)) {
-try {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Attempting to load T-COFFEE score file from the scoreFile parameter");
-}b = a.loadScoreFile (this.b$["jalview.bin.JalviewLite"].scoreFile);
-if (!b) {
-System.err.println ("Failed to parse T-COFFEE parameter as a valid score file ('" + this.b$["jalview.bin.JalviewLite"].scoreFile + "')");
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.printf ("Cannot read score file: '%s'. Cause: %s \n", [this.b$["jalview.bin.JalviewLite"].scoreFile, e.getMessage ()]);
-} else {
-throw e;
-}
-}
-}return b;
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "loadTree",
-function (a) {
-var b = false;
-if (this.b$["jalview.bin.JalviewLite"].treeFile == null) {
-this.b$["jalview.bin.JalviewLite"].treeFile = this.applet.getParameter ("treeFile");
-}if (this.b$["jalview.bin.JalviewLite"].treeFile != null) {
-try {
-this.b$["jalview.bin.JalviewLite"].treeFile = this.setProtocolState (this.b$["jalview.bin.JalviewLite"].treeFile);
-var c = new jalview.io.NewickFile (this.b$["jalview.bin.JalviewLite"].treeFile, this.protocol);
-c.parse ();
-if (c.getTree () != null) {
-a.loadTree (c, this.b$["jalview.bin.JalviewLite"].treeFile);
-b = true;
-this.dbgMsg ("Successfully imported tree.");
-} else {
-this.dbgMsg ("Tree parameter did not resolve to a valid tree.");
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}return b;
-}, "jalview.appletgui.AlignFrame");
-Clazz.defineMethod (c$, "inArchive",
-function (a) {
-try {
-var b = (this.getClass ().getResourceAsStream ("/" + a) != null);
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Resource '" + a + "' was " + (b ? "" : "not") + " located by classloader.");
-}return b;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.out.println ("Exception checking resources: " + a + " " + ex);
-return false;
-} else {
-throw ex;
-}
-}
-}, "~S");
-Clazz.defineMethod (c$, "addProtocol",
-function (a) {
-if (a.indexOf ("://") == -1) {
-var b = this.applet.resolveUrlForLocalOrAbsolute (a, this.b$["jalview.bin.JalviewLite"].getDocumentBase ());
-if (this.urlExists (b)) {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Prepended document base for resource: '" + a + "'");
-}return b;
-}b = this.applet.resolveUrlForLocalOrAbsolute (a, this.b$["jalview.bin.JalviewLite"].getCodeBase ());
-if (this.urlExists (b)) {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Prepended codebase for resource: '" + a + "'");
-}return b;
-}}return a;
-}, "~S");
-Clazz.defineMethod (c$, "urlExists",
-($fz = function (a) {
-var b = null;
-try {
-b = new java.net.URL (a).openStream ();
-if (b != null) {
-return true;
-}} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-} else {
-throw x;
-}
-} finally {
-if (b != null) {
-try {
-b.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-} else {
-throw e;
-}
-}
-}}
-return false;
-}, $fz.isPrivate = true, $fz), "~S");
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$1", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.f$.me).mouseOverVamsasSequence (this.f$.sq, this.f$.sq.findIndex (this.f$.pos), null);
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$2", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.f$.me).mouseOverVamsasSequence (this.f$.sq, this.f$.pos, null);
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$3", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-this.f$.alf.select (this.f$.sel, this.f$.csel);
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$4$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$4", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-try {
-jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.f$.me).mouseOverStructure ( new Integer (this.f$.pdbResNum).intValue (), this.f$.chain, this.f$.pdbfile);
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("mouseOver for '" + this.f$.pdbResNum + "' in chain '" + this.f$.chain + "' in structure '" + this.f$.pdbfile + "'");
-}} catch (e) {
-if (Clazz.exceptionOf (e, NumberFormatException)) {
-System.err.println ("Ignoring invalid residue number string '" + this.f$.pdbResNum + "'");
-} else {
-throw e;
-}
-}
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$5$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$5", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-try {
-this.f$.alf.scrollTo ( new Integer (this.f$.topRow).intValue (), new Integer (this.f$.leftHandColumn).intValue ());
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Couldn't parse integer arguments (topRow='" + this.f$.topRow + "' and leftHandColumn='" + this.f$.leftHandColumn + "')");
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$6$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$6", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-try {
-this.f$.alf.scrollToRow ( new Integer (this.f$.topRow).intValue ());
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Couldn't parse integer arguments (topRow='" + this.f$.topRow + "')");
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$7$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$7", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-try {
-this.f$.alf.scrollToColumn ( new Integer (this.f$.leftHandColumn).intValue ());
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Couldn't parse integer arguments (leftHandColumn='" + this.f$.leftHandColumn + "')");
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-});
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$8$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$8", null, java.awt.event.ActionListener);
-Clazz.overrideMethod (c$, "actionPerformed",
-function (e) {
-var loader = Clazz.innerTypeInstance (jalview.bin.JalviewLite.LoadingThread, this, null, this.b$["jalview.bin.JalviewLite"].startupFile, this.b$["jalview.bin.JalviewLite"].file2, this.b$["jalview.bin.JalviewLite"]);
-loader.start ();
-}, "java.awt.event.ActionEvent");
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$9$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$9", java.awt.event.WindowAdapter);
-Clazz.overrideMethod (c$, "windowClosing",
-function (e) {
-if (Clazz.instanceOf (this.f$.frame, jalview.appletgui.AlignFrame)) {
-var vp = (this.f$.frame).viewport;
-(this.f$.frame).closeMenuItem_actionPerformed ();
-if (vp.applet.currentAlignFrame === this.f$.frame) {
-vp.applet.currentAlignFrame = null;
-}vp.applet = null;
-vp = null;
-}jalview.bin.JalviewLite.lastFrameX -= 40;
-jalview.bin.JalviewLite.lastFrameY -= 40;
-if (Clazz.instanceOf (this.f$.frame, jalview.appletgui.EmbmenuFrame)) {
-(this.f$.frame).destroyMenus ();
-}this.f$.frame.setMenuBar (null);
-this.f$.frame.dispose ();
-}, "java.awt.event.WindowEvent");
-Clazz.defineMethod (c$, "windowActivated",
-function (e) {
-if (Clazz.instanceOf (this.f$.frame, jalview.appletgui.AlignFrame)) {
-(this.f$.frame).viewport.applet.currentAlignFrame = this.f$.frame;
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Activated window " + this.f$.frame);
-}}Clazz.superCall (this, jalview.bin.JalviewLite$9, "windowActivated", [e]);
-}, "java.awt.event.WindowEvent");
-c$ = Clazz.p0p ();
-};
-c$.$JalviewLite$10$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$10", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-this.f$.alf.setFeatureGroupState (this.b$["jalview.bin.JalviewLite"].separatorListToArray (this.f$.groups), this.f$.st);
-});
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"TRUE", "true",
-"FALSE", "false",
-"debug", false,
-"lastFrameX", 200,
-"lastFrameY", 200,
-"builddate", null,
-"version", null,
-"installation", null);
-});
+Clazz.declarePackage ("jalview.bin");
+Clazz.load (["jalview.api.StructureSelectionManagerProvider", "jalview.javascript.JalviewLiteJsApi", "java.lang.Thread", "javax.swing.JApplet", "jalview.util.MessageManager", "java.util.Hashtable", "$.Vector", "javax.swing.JButton"], "jalview.bin.JalviewLite", ["jalview.analysis.SequenceIdMatcher", "jalview.appletgui.AlignFrame", "$.EmbmenuFrame", "$.FeatureSettings", "$.SplitFrame", "jalview.datamodel.Alignment", "$.AlignmentOrder", "$.ColumnSelection", "$.PDBEntry", "$.SequenceGroup", "jalview.io.AnnotationFile", "$.AppletFormatAdapter", "$.FileParse", "$.IdentifyFile", "$.JnetAnnotationMaker", "$.NewickFile", "jalview.javascript.JSFunctionExec", "$.JsSelectionSender", "$.MouseOverListener", "$.MouseOverStructureListener", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.ColourSchemeProperty", "$.UserColourScheme", "jalview.structure.SelectionListener", "$.StructureSelectionManager", "java.awt.Color", "$.EventQueue", "$.Font", "java.awt.event.ActionListener", "$.WindowAdapter", "java.io.BufferedReader", "$.InputStreamReader", "java.lang.Error", "$.StringBuffer", "java.net.URL", "java.util.StringTokenizer", "netscape.javascript.JSObject"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.embedded = false;
+this.enableSplitFrame = false;
+this.showButton = true;
+this.checkForJmol = true;
+this.jalviewServletURL = null;
+this.startupFile = "No file";
+this.helpUrl = null;
+this.externalstructureviewer = null;
+this.sep = null;
+this.rgb = null;
+this.labelColour = null;
+this.initjscallback = null;
+this.pdbFile = null;
+this.sequence = null;
+this.jnetFile = null;
+this.annotations = null;
+this.hideFeatureGroups = null;
+this.showFeatureGroups = null;
+this.features = null;
+this.showFeatureSettings = null;
+this.scoreFile = null;
+this.treeFile = null;
+this.windowWidth = null;
+this.windowHeight = null;
+this.defaultColour = null;
+this.sortBy = null;
+this.wrap = null;
+this.centrecolumnlabels = null;
+this.userDefinedColour = null;
+this.widthScale = null;
+this.heightScale = null;
+this.upperCase = null;
+this.file2 = null;
+this.javascriptListeners = null;
+this.jsFunctionExec = null;
+this.fileFound = true;
+this.launcher = null;
+this.currentAlignFrame = null;
+this.initialAlignFrame = null;
+this.checkedForJmol = false;
+this.jmolAvailable = false;
+this.alignPdbStructures = false;
+this.useXtrnalSviewer = false;
+this.haveShownLoadMessage = false;
+if (!Clazz.isClassDefined ("jalview.bin.JalviewLite.LoadJmolThread")) {
+jalview.bin.JalviewLite.$JalviewLite$LoadJmolThread$ ();
+}
+if (!Clazz.isClassDefined ("jalview.bin.JalviewLite.LoadingThread")) {
+jalview.bin.JalviewLite.$JalviewLite$LoadingThread$ ();
+}
+this.separator = "\u00ac";
+this.jsfallbackEnabled = false;
+this.jshashes = null;
+this.jsmessages = null;
+this.jsExecQueue = null;
+Clazz.instantialize (this, arguments);
+}, jalview.bin, "JalviewLite", javax.swing.JApplet, [jalview.api.StructureSelectionManagerProvider, jalview.javascript.JalviewLiteJsApi]);
+Clazz.prepareFields (c$, function () {
+this.javascriptListeners = new java.util.Vector ();
+this.launcher = new javax.swing.JButton (jalview.util.MessageManager.getString ("label.start_jalview"));
+this.jshashes = new java.util.Hashtable ();
+this.jsmessages = new java.util.Hashtable ();
+this.jsExecQueue = new java.util.Vector ();
+});
+Clazz.defineMethod (c$, "setParams",
+($fz = function () {
+jalview.bin.JalviewLite.debug = "true".equalsIgnoreCase (this.getParameter ("debug"));
+this.enableSplitFrame = "true".equalsIgnoreCase (this.getParameter ("enableSplitFrame"));
+this.embedded = "true".equalsIgnoreCase (this.getParameter ("embedded"));
+this.showButton = !"false".equalsIgnoreCase (this.getParameter ("showbutton"));
+this.jalviewServletURL = this.getParameter ("APPLICATION_URL");
+this.startupFile = this.getParameter ("file");
+this.helpUrl = this.getParameter ("jalviewhelpurl");
+this.externalstructureviewer = this.getParameter ("externalstructureviewer");
+this.checkForJmol = !"true".equals (this.getParameter ("nojmol"));
+this.sep = this.getParameter ("separator");
+this.rgb = this.getParameter ("RGB");
+this.labelColour = this.getParameter ("label");
+this.initjscallback = this.getParameter ("oninit");
+this.pdbFile = this.getParameter ("PDBFILE");
+this.sequence = this.getParameter ("PDBSEQ");
+this.jnetFile = this.getParameter ("jnetfile");
+this.annotations = this.getParameter ("annotations");
+this.hideFeatureGroups = this.getParameter ("hidefeaturegroups");
+this.showFeatureGroups = this.getParameter ("showfeaturegroups");
+this.features = this.getParameter ("features");
+this.showFeatureSettings = this.getParameter ("showFeatureSettings");
+this.scoreFile = this.getParameter ("scoreFile");
+this.treeFile = this.getParameter ("tree");
+if (this.treeFile == null) this.treeFile = this.getParameter ("treeFile");
+this.windowWidth = this.getParameter ("windowWidth");
+this.windowHeight = this.getParameter ("windowHeight");
+this.defaultColour = this.getParameter ("defaultColour");
+this.sortBy = this.getParameter ("sortBy");
+this.wrap = this.getParameter ("wrap");
+this.centrecolumnlabels = this.getParameter ("centrecolumnlabels");
+this.userDefinedColour = this.getParameter ("userDefinedColour");
+this.widthScale = this.getParameter ("widthScale");
+this.heightScale = this.getParameter ("heightScale");
+this.upperCase = this.getParameter ("upperCase");
+this.file2 = this.getParameter ("file2");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getDefaultParameter",
+function (name, def) {
+var stn;
+if ((stn = this.getParameter (name)) == null) {
+return def;
+}if (stn.toLowerCase ().equals ("true")) {
+return true;
+}return false;
+}, "~S,~B");
+Clazz.defineMethod (c$, "getLinkParams",
+function (links) {
+var label;
+var url;
+for (var i = 1; i < 10; i++) {
+label = this.getParameter ("linkLabel_" + i);
+url = this.getParameter ("linkURL_" + i);
+if (label != null && url != null) {
+links.addElement (label + "|" + url);
+}}
+}, "java.util.Vector");
+Clazz.defineMethod (c$, "getStructureSelectionManager",
+function () {
+return jalview.structure.StructureSelectionManager.getStructureSelectionManager (this);
+});
+Clazz.defineMethod (c$, "getSelectedSequences",
+function () {
+return this.getSelectedSequencesFrom (this.getDefaultTargetFrame ());
+});
+Clazz.defineMethod (c$, "getSelectedSequences",
+function (sep) {
+return this.getSelectedSequencesFrom (this.getDefaultTargetFrame (), sep);
+}, "~S");
+Clazz.defineMethod (c$, "getSelectedSequencesFrom",
+function (alf) {
+return this.getSelectedSequencesFrom (alf, this.separator);
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "getSelectedSequencesFrom",
+function (alf, sep) {
+var result = new StringBuffer ("");
+if (sep == null || sep.length == 0) {
+sep = this.separator;
+}if (alf.viewport.getSelectionGroup () != null) {
+var seqs = alf.viewport.getSelectionGroup ().getSequencesInOrder (alf.viewport.getAlignment ());
+for (var i = 0; i < seqs.length; i++) {
+result.append (seqs[i].getName ());
+result.append (sep);
+}
+}return result.toString ();
+}, "jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "highlight",
+function (sequenceId, position, alignedPosition) {
+this.highlightIn (this.getDefaultTargetFrame (), sequenceId, position, alignedPosition);
+}, "~S,~S,~S");
+Clazz.overrideMethod (c$, "highlightIn",
+function (alf, sequenceId, position, alignedPosition) {
+var matcher = new jalview.analysis.SequenceIdMatcher (alf.viewport.getAlignment ().getSequencesArray ());
+var sq = matcher.findIdMatch (sequenceId);
+if (sq != null) {
+var apos = -1;
+try {
+apos = new Integer (position).intValue ();
+apos--;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+return;
+} else {
+throw ex;
+}
+}
+var me = this;
+var pos = apos;
+if (alignedPosition != null && (alignedPosition.trim ().length == 0 || alignedPosition.toLowerCase ().indexOf ("false") > -1)) {
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$1") ? 0 : jalview.bin.JalviewLite.$JalviewLite$1$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$1, this, Clazz.cloneFinals ("me", me, "sq", sq, "pos", pos))));
+} else {
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$2") ? 0 : jalview.bin.JalviewLite.$JalviewLite$2$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$2, this, Clazz.cloneFinals ("me", me, "sq", sq, "pos", pos))));
+}}}, "jalview.appletgui.AlignFrame,~S,~S,~S");
+Clazz.defineMethod (c$, "select",
+function (sequenceIds, columns) {
+this.selectIn (this.getDefaultTargetFrame (), sequenceIds, columns, this.separator);
+}, "~S,~S");
+Clazz.defineMethod (c$, "select",
+function (sequenceIds, columns, sep) {
+this.selectIn (this.getDefaultTargetFrame (), sequenceIds, columns, sep);
+}, "~S,~S,~S");
+Clazz.defineMethod (c$, "selectIn",
+function (alf, sequenceIds, columns) {
+this.selectIn (alf, sequenceIds, columns, this.separator);
+}, "jalview.appletgui.AlignFrame,~S,~S");
+Clazz.defineMethod (c$, "selectIn",
+function (alf, sequenceIds, columns, sep) {
+if (sep == null || sep.length == 0) {
+sep = this.separator;
+} else {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Selecting region using separator string '" + this.separator + "'");
+}}var ids = this.separatorListToArray (sequenceIds, sep);
+var cols = this.separatorListToArray (columns, sep);
+var sel = new jalview.datamodel.SequenceGroup ();
+var csel = new jalview.datamodel.ColumnSelection ();
+var al = alf.viewport.getAlignment ();
+var matcher = new jalview.analysis.SequenceIdMatcher (alf.viewport.getAlignment ().getSequencesArray ());
+var start = 0;
+var end = al.getWidth ();
+var alw = al.getWidth ();
+var seqsfound = true;
+if (ids != null && ids.length > 0) {
+seqsfound = false;
+for (var i = 0; i < ids.length; i++) {
+if (ids[i].trim ().length == 0) {
+continue;
+}var sq = matcher.findIdMatch (ids[i]);
+if (sq != null) {
+seqsfound = true;
+sel.addSequence (sq, false);
+}}
+}var inseqpos = false;
+if (cols != null && cols.length > 0) {
+var seset = false;
+for (var i = 0; i < cols.length; i++) {
+var cl = cols[i].trim ();
+if (cl.length == 0) {
+continue;
+}var p;
+if ((p = cl.indexOf ("-")) > -1) {
+var from = -1;
+var to = -1;
+try {
+from = new Integer (cl.substring (0, p)).intValue ();
+from--;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+System.err.println ("ERROR: Couldn't parse first integer in range element column selection string '" + cl + "' - format is 'from-to'");
+return;
+} else {
+throw ex;
+}
+}
+try {
+to = new Integer (cl.substring (p + 1)).intValue ();
+to--;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+System.err.println ("ERROR: Couldn't parse second integer in range element column selection string '" + cl + "' - format is 'from-to'");
+return;
+} else {
+throw ex;
+}
+}
+if (from >= 0 && to >= 0) {
+if (from < to) {
+var t = to;
+to = from;
+to = t;
+}if (!seset) {
+start = from;
+end = to;
+seset = true;
+} else {
+if (start > from) {
+start = from;
+}if (end < to) {
+end = to;
+}}for (var r = from; r <= to; r++) {
+if (r >= 0 && r < alw) {
+csel.addElement (r);
+}}
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Range '" + cl + "' deparsed as [" + from + "," + to + "]");
+}} else {
+System.err.println ("ERROR: Invalid Range '" + cl + "' deparsed as [" + from + "," + to + "]");
+}} else {
+var r = -1;
+try {
+r = new Integer (cl).intValue ();
+r--;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+if (cl.toLowerCase ().equals ("sequence")) {
+inseqpos = true;
+} else {
+System.err.println ("ERROR: Couldn't parse integer from point selection element of column selection string '" + cl + "'");
+return;
+}} else {
+throw ex;
+}
+}
+if (r >= 0 && r <= alw) {
+if (!seset) {
+start = r;
+end = r;
+seset = true;
+} else {
+if (start > r) {
+start = r;
+}if (end < r) {
+end = r;
+}}csel.addElement (r);
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Point selection '" + cl + "' deparsed as [" + r + "]");
+}} else {
+System.err.println ("ERROR: Invalid Point selection '" + cl + "' deparsed as [" + r + "]");
+}}}
+}if (seqsfound) {
+if (inseqpos && sel.getSize () > 0) {
+var rs = sel.getSequenceAt (0);
+start = rs.findIndex (start);
+end = rs.findIndex (end);
+if (csel != null) {
+var cs = csel.getSelected ();
+csel.clear ();
+for (var selectedCol, $selectedCol = cs.iterator (); $selectedCol.hasNext () && ((selectedCol = $selectedCol.next ()) || true);) {
+csel.addElement (rs.findIndex ((selectedCol).intValue ()));
+}
+}}sel.setStartRes (start);
+sel.setEndRes (end);
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$3") ? 0 : jalview.bin.JalviewLite.$JalviewLite$3$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$3, this, Clazz.cloneFinals ("alf", alf, "sel", sel, "csel", csel))));
+}}, "jalview.appletgui.AlignFrame,~S,~S,~S");
+Clazz.overrideMethod (c$, "getSelectedSequencesAsAlignment",
+function (format, suffix) {
+return this.getSelectedSequencesAsAlignmentFrom (this.getDefaultTargetFrame (), format, suffix);
+}, "~S,~S");
+Clazz.overrideMethod (c$, "getSelectedSequencesAsAlignmentFrom",
+function (alf, format, suffix) {
+try {
+var seqlimits = suffix.equalsIgnoreCase ("true");
+if (alf.viewport.getSelectionGroup () != null) {
+var reply = new jalview.io.AppletFormatAdapter ().formatSequences (format, new jalview.datamodel.Alignment (alf.viewport.getSelectionAsNewSequence ()), seqlimits);
+return reply;
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+return "Error retrieving alignment in " + format + " format. ";
+} else {
+throw ex;
+}
+}
+return "";
+}, "jalview.appletgui.AlignFrame,~S,~S");
+Clazz.overrideMethod (c$, "getAlignmentOrder",
+function () {
+return this.getAlignmentOrderFrom (this.getDefaultTargetFrame ());
+});
+Clazz.defineMethod (c$, "getAlignmentOrderFrom",
+function (alf) {
+return this.getAlignmentOrderFrom (alf, this.separator);
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "getAlignmentOrderFrom",
+function (alf, sep) {
+var alorder = alf.getAlignViewport ().getAlignment ();
+var order = new Array (alorder.getHeight ());
+for (var i = 0; i < order.length; i++) {
+order[i] = alorder.getSequenceAt (i).getName ();
+}
+return this.arrayToSeparatorList (order);
+}, "jalview.appletgui.AlignFrame,~S");
+Clazz.defineMethod (c$, "orderBy",
+function (order, undoName) {
+return this.orderBy (order, undoName, this.separator);
+}, "~S,~S");
+Clazz.defineMethod (c$, "orderBy",
+function (order, undoName, sep) {
+return this.orderAlignmentBy (this.getDefaultTargetFrame (), order, undoName, sep);
+}, "~S,~S,~S");
+Clazz.overrideMethod (c$, "orderAlignmentBy",
+function (alf, order, undoName, sep) {
+var ids = this.separatorListToArray (order, sep);
+var sqs = null;
+if (ids != null && ids.length > 0) {
+var matcher = new jalview.analysis.SequenceIdMatcher (alf.viewport.getAlignment ().getSequencesArray ());
+var s = 0;
+sqs = new Array (ids.length);
+for (var i = 0; i < ids.length; i++) {
+if (ids[i].trim ().length == 0) {
+continue;
+}var sq = matcher.findIdMatch (ids[i]);
+if (sq != null) {
+sqs[s++] = sq;
+}}
+if (s > 0) {
+var sqq = new Array (s);
+System.arraycopy (sqs, 0, sqq, 0, s);
+sqs = sqq;
+} else {
+sqs = null;
+}}if (sqs == null) {
+return "";
+};var aorder = new jalview.datamodel.AlignmentOrder (sqs);
+if (undoName != null && undoName.trim ().length == 0) {
+undoName = null;
+}var _undoName = undoName;
+return alf.sortBy (aorder, _undoName) ? "true" : "";
+}, "jalview.appletgui.AlignFrame,~S,~S,~S");
+Clazz.defineMethod (c$, "getAlignment",
+function (format) {
+return this.getAlignmentFrom (this.getDefaultTargetFrame (), format, "true");
+}, "~S");
+Clazz.defineMethod (c$, "getAlignmentFrom",
+function (alf, format) {
+return this.getAlignmentFrom (alf, format, "true");
+}, "jalview.appletgui.AlignFrame,~S");
+Clazz.defineMethod (c$, "getAlignment",
+function (format, suffix) {
+return this.getAlignmentFrom (this.getDefaultTargetFrame (), format, suffix);
+}, "~S,~S");
+Clazz.defineMethod (c$, "getAlignmentFrom",
+function (alf, format, suffix) {
+try {
+var seqlimits = suffix.equalsIgnoreCase ("true");
+var reply = new jalview.io.AppletFormatAdapter ().formatSequences (format, alf.viewport.getAlignment (), seqlimits);
+return reply;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+return "Error retrieving alignment in " + format + " format. ";
+} else {
+throw ex;
+}
+}
+}, "jalview.appletgui.AlignFrame,~S,~S");
+Clazz.overrideMethod (c$, "loadAnnotation",
+function (annotation) {
+this.loadAnnotationFrom (this.getDefaultTargetFrame (), annotation);
+}, "~S");
+Clazz.overrideMethod (c$, "loadAnnotationFrom",
+function (alf, annotation) {
+if ( new jalview.io.AnnotationFile ().annotateAlignmentView (alf.getAlignViewport (), annotation, jalview.io.AppletFormatAdapter.PASTE)) {
+alf.alignPanel.fontChanged ();
+alf.alignPanel.setScrollValues (0, 0);
+} else {
+alf.parseFeaturesFile (annotation, jalview.io.AppletFormatAdapter.PASTE);
+}}, "jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "loadFeatures",
+function (features, autoenabledisplay) {
+this.loadFeaturesFrom (this.getDefaultTargetFrame (), features, autoenabledisplay);
+}, "~S,~B");
+Clazz.overrideMethod (c$, "loadFeaturesFrom",
+function (alf, features, autoenabledisplay) {
+return alf.parseFeaturesFile (features, jalview.io.AppletFormatAdapter.PASTE, autoenabledisplay);
+}, "jalview.appletgui.AlignFrame,~S,~B");
+Clazz.overrideMethod (c$, "getFeatures",
+function (format) {
+return this.getFeaturesFrom (this.getDefaultTargetFrame (), format);
+}, "~S");
+Clazz.overrideMethod (c$, "getFeaturesFrom",
+function (alf, format) {
+return alf.outputFeatures (false, format);
+}, "jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "getAnnotation",
+function () {
+return this.getAnnotationFrom (this.getDefaultTargetFrame ());
+});
+Clazz.overrideMethod (c$, "getAnnotationFrom",
+function (alf) {
+return alf.outputAnnotations (false);
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "newView",
+function () {
+return this.newViewFrom (this.getDefaultTargetFrame ());
+});
+Clazz.defineMethod (c$, "newView",
+function (name) {
+return this.newViewFrom (this.getDefaultTargetFrame (), name);
+}, "~S");
+Clazz.defineMethod (c$, "newViewFrom",
+function (alf) {
+return alf.newView (null);
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "newViewFrom",
+function (alf, name) {
+return alf.newView (name);
+}, "jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "loadAlignment",
+function (text, title) {
+var al = null;
+var format = new jalview.io.IdentifyFile ().Identify (text, jalview.io.AppletFormatAdapter.PASTE);
+try {
+al = new jalview.io.AppletFormatAdapter ().readFile (text, jalview.io.AppletFormatAdapter.PASTE, format);
+if (al.getHeight () > 0) {
+return new jalview.appletgui.AlignFrame (al, this, title, false);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, java.io.IOException)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+return null;
+}, "~S,~S");
+Clazz.defineMethod (c$, "setMouseoverListener",
+function (listener) {
+this.setMouseoverListener (this.currentAlignFrame, listener);
+}, "~S");
+Clazz.defineMethod (c$, "setMouseoverListener",
+function (af, listener) {
+if (listener != null) {
+listener = listener.trim ();
+if (listener.length == 0) {
+System.err.println ("jalview Javascript error: Ignoring empty function for mouseover listener.");
+return;
+}}var mol = new jalview.javascript.MouseOverListener (this, af, listener);
+this.javascriptListeners.addElement (mol);
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).addStructureViewerListener (mol);
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Added a mouseover listener for " + ((af == null) ? "All frames" : "Just views for " + af.getAlignViewport ().getSequenceSetId ()));
+System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
+}}, "jalview.appletgui.AlignFrame,~S");
+Clazz.defineMethod (c$, "setSelectionListener",
+function (listener) {
+this.setSelectionListener (null, listener);
+}, "~S");
+Clazz.defineMethod (c$, "setSelectionListener",
+function (af, listener) {
+if (listener != null) {
+listener = listener.trim ();
+if (listener.length == 0) {
+System.err.println ("jalview Javascript error: Ignoring empty function for selection listener.");
+return;
+}}var mol = new jalview.javascript.JsSelectionSender (this, af, listener);
+this.javascriptListeners.addElement (mol);
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).addSelectionListener (mol);
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Added a selection listener for " + ((af == null) ? "All frames" : "Just views for " + af.getAlignViewport ().getSequenceSetId ()));
+System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
+}}, "jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "setStructureListener",
+function (listener, modelSet) {
+if (listener != null) {
+listener = listener.trim ();
+if (listener.length == 0) {
+System.err.println ("jalview Javascript error: Ignoring empty function for selection listener.");
+return;
+}}var mol = new jalview.javascript.MouseOverStructureListener (this, listener, this.separatorListToArray (modelSet));
+this.javascriptListeners.addElement (mol);
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).addStructureViewerListener (mol);
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Added a javascript structure viewer listener '" + listener + "'");
+System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
+}}, "~S,~S");
+Clazz.overrideMethod (c$, "removeJavascriptListener",
+function (af, listener) {
+if (listener != null) {
+listener = listener.trim ();
+if (listener.length == 0) {
+listener = null;
+}}var rprt = false;
+for (var ms = 0, msSize = this.javascriptListeners.size (); ms < msSize; ) {
+var lstn = this.javascriptListeners.elementAt (ms);
+var lstner = lstn;
+if ((af == null || lstner.getAlignFrame () === af) && (listener == null || lstner.getListenerFunction ().equals (listener))) {
+this.javascriptListeners.removeElement (lstner);
+msSize--;
+if (Clazz.instanceOf (lstner, jalview.structure.SelectionListener)) {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeSelectionListener (lstner);
+} else {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeStructureViewerListener (lstner, null);
+}rprt = jalview.bin.JalviewLite.debug;
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Removed listener '" + listener + "'");
+}} else {
+ms++;
+}}
+if (rprt) {
+System.err.println ("There are now " + this.javascriptListeners.size () + " listeners in total.");
+}}, "jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "stop",
+function () {
+System.err.println ("Applet " + this.getName () + " stop().");
+this.tidyUp ();
+});
+Clazz.overrideMethod (c$, "destroy",
+function () {
+System.err.println ("Applet " + this.getName () + " destroy().");
+this.tidyUp ();
+});
+Clazz.defineMethod (c$, "tidyUp",
+($fz = function () {
+this.removeAll ();
+if (this.currentAlignFrame != null && this.currentAlignFrame.viewport != null && this.currentAlignFrame.viewport.applet != null) {
+var av = this.currentAlignFrame.viewport;
+this.currentAlignFrame.closeMenuItem_actionPerformed ();
+av.applet = null;
+this.currentAlignFrame = null;
+}if (this.javascriptListeners != null) {
+while (this.javascriptListeners.size () > 0) {
+var mol = this.javascriptListeners.elementAt (0);
+this.javascriptListeners.removeElement (mol);
+if (Clazz.instanceOf (mol, jalview.structure.SelectionListener)) {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeSelectionListener (mol);
+} else {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this).removeStructureViewerListener (mol, null);
+}mol.jvlite = null;
+}
+}if (this.jsFunctionExec != null) {
+this.jsFunctionExec.stopQueue ();
+this.jsFunctionExec.jvlite = null;
+}this.initialAlignFrame = null;
+this.jsFunctionExec = null;
+this.javascriptListeners = null;
+jalview.structure.StructureSelectionManager.release (this);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "mouseOverStructure",
+function (pdbResNum, chain, pdbfile) {
+var me = this;
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$4") ? 0 : jalview.bin.JalviewLite.$JalviewLite$4$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$4, this, Clazz.cloneFinals ("me", me, "pdbResNum", pdbResNum, "chain", chain, "pdbfile", pdbfile))));
+}, "~S,~S,~S");
+Clazz.overrideMethod (c$, "scrollViewToIn",
+function (alf, topRow, leftHandColumn) {
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$5") ? 0 : jalview.bin.JalviewLite.$JalviewLite$5$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$5, this, Clazz.cloneFinals ("alf", alf, "topRow", topRow, "leftHandColumn", leftHandColumn))));
+}, "jalview.appletgui.AlignFrame,~S,~S");
+Clazz.overrideMethod (c$, "scrollViewToRowIn",
+function (alf, topRow) {
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$6") ? 0 : jalview.bin.JalviewLite.$JalviewLite$6$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$6, this, Clazz.cloneFinals ("alf", alf, "topRow", topRow))));
+}, "jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "scrollViewToColumnIn",
+function (alf, leftHandColumn) {
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$7") ? 0 : jalview.bin.JalviewLite.$JalviewLite$7$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$7, this, Clazz.cloneFinals ("alf", alf, "leftHandColumn", leftHandColumn))));
+}, "jalview.appletgui.AlignFrame,~S");
+c$.initBuildDetails = Clazz.defineMethod (c$, "initBuildDetails",
+($fz = function () {
+if (jalview.bin.JalviewLite.builddate == null) {
+jalview.bin.JalviewLite.builddate = "unknown";
+jalview.bin.JalviewLite.version = "test";
+jalview.bin.JalviewLite.installation = "Webstart";
+var url = jalview.bin.JalviewLite.getResource ("/.build_properties");
+if (url != null) {
+try {
+var reader = new java.io.BufferedReader ( new java.io.InputStreamReader (url.openStream ()));
+var line;
+while ((line = reader.readLine ()) != null) {
+if (line.indexOf ("VERSION") > -1) {
+jalview.bin.JalviewLite.version = line.substring (line.indexOf ("=") + 1);
+}if (line.indexOf ("BUILD_DATE") > -1) {
+jalview.bin.JalviewLite.builddate = line.substring (line.indexOf ("=") + 1);
+}if (line.indexOf ("INSTALLATION") > -1) {
+jalview.bin.JalviewLite.installation = line.substring (line.indexOf ("=") + 1);
+}}
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}}}, $fz.isPrivate = true, $fz));
+c$.getBuildDate = Clazz.defineMethod (c$, "getBuildDate",
+function () {
+jalview.bin.JalviewLite.initBuildDetails ();
+return jalview.bin.JalviewLite.builddate;
+});
+c$.getInstallation = Clazz.defineMethod (c$, "getInstallation",
+function () {
+jalview.bin.JalviewLite.initBuildDetails ();
+return jalview.bin.JalviewLite.installation;
+});
+c$.getVersion = Clazz.defineMethod (c$, "getVersion",
+function () {
+jalview.bin.JalviewLite.initBuildDetails ();
+return jalview.bin.JalviewLite.version;
+});
+Clazz.overrideMethod (c$, "init",
+function () {
+this.setParams ();
+try {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Applet context is '" + this.getAppletContext ().getClass ().toString () + "'");
+}var scriptObject = netscape.javascript.JSObject.getWindow (this);
+if (jalview.bin.JalviewLite.debug && scriptObject != null) {
+System.err.println ("Applet has Javascript callback support.");
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Warning: No JalviewLite javascript callbacks available.");
+if (jalview.bin.JalviewLite.debug) {
+ex.printStackTrace ();
+}} else {
+throw ex;
+}
+}
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("JalviewLite Version " + jalview.bin.JalviewLite.getVersion ());
+System.err.println ("Build Date : " + jalview.bin.JalviewLite.getBuildDate ());
+System.err.println ("Installation : " + jalview.bin.JalviewLite.getInstallation ());
+}if (this.externalstructureviewer != null) {
+this.useXtrnalSviewer = this.externalstructureviewer.trim ().toLowerCase ().equals ("true");
+}if (this.sep != null) {
+if (this.sep.length > 0) {
+this.separator = this.sep;
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Separator set to '" + this.separator + "'");
+}} else {
+throw new Error (jalview.util.MessageManager.getString ("error.invalid_separator_parameter"));
+}}var r = 255;
+var g = 255;
+var b = 255;
+if (this.rgb != null) {
+try {
+r = Integer.parseInt (this.rgb.substring (0, 2), 16);
+g = Integer.parseInt (this.rgb.substring (2, 4), 16);
+b = Integer.parseInt (this.rgb.substring (4, 6), 16);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+r = 255;
+g = 255;
+b = 255;
+} else {
+throw ex;
+}
+}
+}this.rgb = this.labelColour;
+if (this.rgb != null) {
+this.launcher.setLabel (this.rgb);
+}this.setBackground ( new java.awt.Color (r, g, b));
+if (this.startupFile == null) {
+var data = new StringBuffer ("PASTE");
+var i = 1;
+while ((this.startupFile = this.getParameter ("sequence" + i)) != null) {
+data.append (this.startupFile.toString () + "\n");
+i++;
+}
+if (data.length () > 5) {
+this.startupFile = data.toString ();
+}}if (!this.enableSplitFrame) {
+this.file2 = null;
+}if (this.embedded) {
+var loader = Clazz.innerTypeInstance (jalview.bin.JalviewLite.LoadingThread, this, null, this.startupFile, this.file2, this);
+{
+loader.run();
+}} else if (this.startupFile != null) {
+if (!this.showButton) {
+var loader = Clazz.innerTypeInstance (jalview.bin.JalviewLite.LoadingThread, this, null, this.startupFile, this.file2, this);
+loader.start ();
+} else {
+this.add (this.launcher);
+this.launcher.addActionListener (((Clazz.isClassDefined ("jalview.bin.JalviewLite$8") ? 0 : jalview.bin.JalviewLite.$JalviewLite$8$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$8, this, null)));
+}} else {
+this.startupFile = "NO FILE";
+this.fileFound = false;
+this.callInitCallback ();
+}});
+Clazz.defineMethod (c$, "initLiveConnect",
+($fz = function () {
+var notFailed = false;
+var tries = 0;
+while (!notFailed && tries < 10) {
+if (tries > 0) {
+System.err.println ("LiveConnect request thread going to sleep.");
+}try {
+Thread.sleep (700 * (1 + tries));
+} catch (q) {
+if (Clazz.exceptionOf (q, InterruptedException)) {
+} else {
+throw q;
+}
+}
+;if (tries++ > 0) {
+System.err.println ("LiveConnect request thread woken up.");
+}try {
+var scriptObject = netscape.javascript.JSObject.getWindow (this);
+if (scriptObject.eval ("navigator") != null) {
+notFailed = true;
+}} catch (jsex) {
+if (Clazz.exceptionOf (jsex, Exception)) {
+System.err.println ("Attempt " + tries + " to access LiveConnect javascript failed.");
+} else {
+throw jsex;
+}
+}
+}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "callInitCallback",
+($fz = function () {
+if (this.initjscallback == null) {
+return;
+}this.initjscallback = this.initjscallback.trim ();
+if (this.initjscallback.length > 0) {
+var scriptObject = null;
+try {
+scriptObject = netscape.javascript.JSObject.getWindow (this);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+;this.initLiveConnect ();
+if (scriptObject != null) {
+try {
+ new jalview.javascript.JSFunctionExec (this).executeJavascriptFunction (true, this.initjscallback, null, "Calling oninit callback '" + this.initjscallback + "'.");
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Exception when executing _oninit callback '" + this.initjscallback + "'.");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+} else {
+System.err.println ("Not executing _oninit callback '" + this.initjscallback + "' - no scripting allowed.");
+}}}, $fz.isPrivate = true, $fz));
+c$.addFrame = Clazz.defineMethod (c$, "addFrame",
+function (frame, title, width, height) {
+frame.setLocation (jalview.bin.JalviewLite.lastFrameX, jalview.bin.JalviewLite.lastFrameY);
+jalview.bin.JalviewLite.lastFrameX += 40;
+jalview.bin.JalviewLite.lastFrameY += 40;
+frame.setSize (width, height);
+frame.setTitle (title);
+frame.addWindowListener (((Clazz.isClassDefined ("jalview.bin.JalviewLite$9") ? 0 : jalview.bin.JalviewLite.$JalviewLite$9$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$9, this, Clazz.cloneFinals ("frame", frame))));
+frame.setVisible (true);
+}, "javax.swing.JFrame,~S,~N,~N");
+Clazz.defineMethod (c$, "paintComponent",
+function (g) {
+if (!this.fileFound) {
+g.setColor ( new java.awt.Color (200, 200, 200));
+g.setColor (java.awt.Color.cyan);
+g.fillRect (0, 0, this.getSize ().width, this.getSize ().height);
+g.setColor (java.awt.Color.red);
+g.drawString (jalview.util.MessageManager.getString ("label.jalview_cannot_open_file"), 5, 15);
+g.drawString ("\"" + this.startupFile + "\"", 5, 30);
+} else if (this.embedded && !this.haveShownLoadMessage) {
+g.setColor (java.awt.Color.black);
+g.setFont ( new java.awt.Font ("Arial", 1, 24));
+g.drawString (jalview.util.MessageManager.getString ("label.jalview_applet"), 50, Clazz.doubleToInt (this.getSize ().height / 2) - 30);
+g.drawString (jalview.util.MessageManager.getString ("label.loading_data") + "...", 50, Clazz.doubleToInt (this.getSize ().height / 2));
+this.haveShownLoadMessage = true;
+}}, "java.awt.Graphics");
+Clazz.defineMethod (c$, "getAppletWindow",
+function (class1) {
+var wnds = new java.util.Vector ();
+var cmp = this.getComponents ();
+if (cmp != null) {
+for (var i = 0; i < cmp.length; i++) {
+if (class1.isAssignableFrom (cmp[i].getClass ())) {
+wnds.addElement (cmp);
+}}
+}return wnds;
+}, "Class");
+Clazz.defineMethod (c$, "getDefaultTargetFrame",
+function () {
+if (this.currentAlignFrame != null) {
+return this.currentAlignFrame;
+}if (this.initialAlignFrame != null) {
+return this.initialAlignFrame;
+}System.err.println ("Implementation error: Jalview Applet API cannot work out which AlignFrame to use.");
+return null;
+});
+Clazz.defineMethod (c$, "separatorListToArray",
+function (list) {
+return this.separatorListToArray (list, this.separator);
+}, "~S");
+Clazz.defineMethod (c$, "separatorListToArray",
+function (list, separator) {
+var seplen = separator.length;
+if (list == null || list.equals ("") || list.equals (separator)) {
+return null;
+}var jv = new java.util.Vector ();
+var cp = 0;
+var pos;
+while ((pos = list.indexOf (separator, cp)) > cp) {
+jv.addElement (list.substring (cp, pos));
+cp = pos + seplen;
+}
+if (cp < list.length) {
+var c = list.substring (cp);
+if (!c.equals (separator)) {
+jv.addElement (c);
+}}if (jv.size () > 0) {
+var v = new Array (jv.size ());
+for (var i = 0; i < v.length; i++) {
+v[i] = jv.elementAt (i);
+}
+jv.removeAllElements ();
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Array from '" + separator + "' separated List:\n" + v.length);
+for (var i = 0; i < v.length; i++) {
+System.err.println ("item " + i + " '" + v[i] + "'");
+}
+}return v;
+}if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Empty Array from '" + separator + "' separated List");
+}return null;
+}, "~S,~S");
+Clazz.defineMethod (c$, "arrayToSeparatorList",
+function (list) {
+return this.arrayToSeparatorList (list, this.separator);
+}, "~A");
+Clazz.defineMethod (c$, "arrayToSeparatorList",
+function (list, separator) {
+var v = new StringBuffer ();
+if (list != null && list.length > 0) {
+for (var i = 0, iSize = list.length; i < iSize; i++) {
+if (list[i] != null) {
+if (i > 0) {
+v.append (separator);
+}v.append (list[i]);
+}}
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Returning '" + separator + "' separated List:\n");
+System.err.println (v);
+}return v.toString ();
+}if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Returning empty '" + separator + "' separated List\n");
+}return "" + separator;
+}, "~A,~S");
+Clazz.overrideMethod (c$, "getFeatureGroups",
+function () {
+var lst = this.arrayToSeparatorList (this.getDefaultTargetFrame ().getFeatureGroups ());
+return lst;
+});
+Clazz.overrideMethod (c$, "getFeatureGroupsOn",
+function (alf) {
+var lst = this.arrayToSeparatorList (alf.getFeatureGroups ());
+return lst;
+}, "jalview.appletgui.AlignFrame");
+Clazz.overrideMethod (c$, "getFeatureGroupsOfState",
+function (visible) {
+return this.arrayToSeparatorList (this.getDefaultTargetFrame ().getFeatureGroupsOfState (visible));
+}, "~B");
+Clazz.overrideMethod (c$, "getFeatureGroupsOfStateOn",
+function (alf, visible) {
+return this.arrayToSeparatorList (alf.getFeatureGroupsOfState (visible));
+}, "jalview.appletgui.AlignFrame,~B");
+Clazz.overrideMethod (c$, "setFeatureGroupStateOn",
+function (alf, groups, state) {
+var st = state;
+java.awt.EventQueue.invokeLater (((Clazz.isClassDefined ("jalview.bin.JalviewLite$10") ? 0 : jalview.bin.JalviewLite.$JalviewLite$10$ ()), Clazz.innerTypeInstance (jalview.bin.JalviewLite$10, this, Clazz.cloneFinals ("alf", alf, "groups", groups, "st", st))));
+}, "jalview.appletgui.AlignFrame,~S,~B");
+Clazz.overrideMethod (c$, "setFeatureGroupState",
+function (groups, state) {
+this.setFeatureGroupStateOn (this.getDefaultTargetFrame (), groups, state);
+}, "~S,~B");
+Clazz.overrideMethod (c$, "getSeparator",
+function () {
+return this.separator;
+});
+Clazz.overrideMethod (c$, "setSeparator",
+function (separator) {
+if (separator == null || separator.length < 1) {
+separator = "\u00ac";
+}this.separator = separator;
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Default Separator now: '" + separator + "'");
+}}, "~S");
+Clazz.overrideMethod (c$, "addPdbFile",
+function (alFrame, sequenceId, pdbEntryString, pdbFile) {
+return alFrame.addPdbFile (sequenceId, pdbEntryString, pdbFile);
+}, "jalview.appletgui.AlignFrame,~S,~S,~S");
+Clazz.defineMethod (c$, "setAlignPdbStructures",
+function (alignPdbStructures) {
+this.alignPdbStructures = alignPdbStructures;
+}, "~B");
+Clazz.defineMethod (c$, "isAlignPdbStructures",
+function () {
+return this.alignPdbStructures;
+});
+Clazz.overrideMethod (c$, "start",
+function () {
+});
+Clazz.defineMethod (c$, "setJsMessageSet",
+function (messageclass, viewId, colcommands) {
+var msgset = this.jsmessages.get (messageclass);
+if (msgset == null) {
+msgset = new java.util.Hashtable ();
+this.jsmessages.put (messageclass, msgset);
+}msgset.put (viewId, colcommands);
+var l = Clazz.newLongArray (colcommands.length, 0);
+for (var i = 0; i < colcommands.length; i++) {
+l[i] = colcommands[i].hashCode ();
+}
+this.jshashes.put (messageclass + "|" + viewId, l);
+}, "~S,~S,~A");
+Clazz.overrideMethod (c$, "getJsMessage",
+function (messageclass, viewId) {
+var msgset = this.jsmessages.get (messageclass);
+if (msgset != null) {
+var msgs = msgset.get (viewId);
+if (msgs != null) {
+for (var i = 0; i < msgs.length; i++) {
+if (msgs[i] != null) {
+var m = msgs[i];
+msgs[i] = null;
+return m;
+}}
+}}return "";
+}, "~S,~S");
+Clazz.defineMethod (c$, "isJsMessageSetChanged",
+function (string, string2, colcommands) {
+var l = this.jshashes.get (string + "|" + string2);
+if (l == null && colcommands != null) {
+return true;
+}for (var i = 0; i < colcommands.length; i++) {
+if (l[i] != colcommands[i].hashCode ()) {
+return true;
+}}
+return false;
+}, "~S,~S,~A");
+Clazz.defineMethod (c$, "getJsExecQueue",
+function () {
+return this.jsExecQueue;
+});
+Clazz.defineMethod (c$, "setExecutor",
+function (jsFunctionExec2) {
+this.jsFunctionExec = jsFunctionExec2;
+}, "jalview.javascript.JSFunctionExec");
+Clazz.defineMethod (c$, "getDefaultColourParameter",
+function (colparam, defcolour) {
+var colprop = this.getParameter (colparam);
+if (colprop == null || colprop.trim ().length == 0) {
+return defcolour;
+}var col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName (colprop);
+if (col == null) {
+try {
+col = new jalview.schemes.UserColourScheme (colprop).findColour ('A');
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Couldn't parse '" + colprop + "' as a colour for " + colparam);
+col = null;
+} else {
+throw ex;
+}
+}
+}return (col == null) ? defcolour : col;
+}, "~S,java.awt.Color");
+Clazz.defineMethod (c$, "openJalviewHelpUrl",
+function () {
+if (this.helpUrl == null || this.helpUrl.trim ().length < 5) {
+this.helpUrl = "http://www.jalview.org/help.html";
+}this.showURL (this.helpUrl, "HELP");
+});
+Clazz.defineMethod (c$, "resolveUrlForLocalOrAbsolute",
+($fz = function (url, localref) {
+var codebase = localref.toString ();
+var pt = codebase.indexOf ("?");
+if (pt < 0) pt = codebase.length;
+codebase = codebase.substring (0, pt);
+codebase = codebase.substring (0, codebase.lastIndexOf ("/") + 1);
+if (url.indexOf ("/") == 0 && !localref.getProtocol ().equals ("file")) {
+pt = codebase.indexOf ("/", 8);
+return codebase.substring (0, pt) + url;
+}return codebase + url;
+}, $fz.isPrivate = true, $fz), "~S,java.net.URL");
+Clazz.defineMethod (c$, "showURL",
+function (url, target) {
+try {
+if (url.indexOf (":") == -1) {
+var prepend;
+url = this.resolveUrlForLocalOrAbsolute (url, prepend = this.getDefaultParameter ("resolvetocodebase", false) ? this.getDocumentBase () : this.getCodeBase ());
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Show url (prepended " + prepend + " - toggle resolvetocodebase if code/docbase resolution is wrong): " + url);
+}} else {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Show url: " + url);
+}}if (url.indexOf ("javascript:") == 0) {
+this.getAppletContext ().showDocument ( new java.net.URL (url));
+} else {
+this.getAppletContext ().showDocument ( new java.net.URL (url), target);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}, "~S,~S");
+c$.$JalviewLite$LoadJmolThread$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.running = false;
+Clazz.instantialize (this, arguments);
+}, jalview.bin.JalviewLite, "LoadJmolThread", Thread);
+Clazz.overrideMethod (c$, "run",
+function () {
+if (this.running || this.b$["jalview.bin.JalviewLite"].checkedForJmol) {
+return;
+}this.running = true;
+if (this.b$["jalview.bin.JalviewLite"].checkForJmol) {
+try {
+if (!System.getProperty ("java.version").startsWith ("1.1")) {
+Class.forName ("org.jmol.adapter.smarter.SmarterJmolAdapter");
+this.b$["jalview.bin.JalviewLite"].jmolAvailable = true;
+}if (!this.b$["jalview.bin.JalviewLite"].jmolAvailable) {
+System.out.println ("Jmol not available - Using MCview for structures");
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, ClassNotFoundException)) {
+} else {
+throw ex;
+}
+}
+} else {
+this.b$["jalview.bin.JalviewLite"].jmolAvailable = false;
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Skipping Jmol check. Will use MCView (probably)");
+}}this.b$["jalview.bin.JalviewLite"].checkedForJmol = true;
+this.running = false;
+});
+Clazz.defineMethod (c$, "notFinished",
+function () {
+return this.running || !this.b$["jalview.bin.JalviewLite"].checkedForJmol;
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$LoadingThread$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.protocol = null;
+this._file = null;
+this._file2 = null;
+this.applet = null;
+Clazz.instantialize (this, arguments);
+}, jalview.bin.JalviewLite, "LoadingThread", Thread);
+Clazz.defineMethod (c$, "dbgMsg",
+($fz = function (a) {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println (a);
+}}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "setProtocolState",
+function (a) {
+if (a.startsWith ("PASTE")) {
+a = a.substring (5);
+this.protocol = jalview.io.AppletFormatAdapter.PASTE;
+} else if (this.inArchive (a)) {
+this.protocol = jalview.io.AppletFormatAdapter.CLASSLOADER;
+} else {
+a = this.addProtocol (a);
+this.protocol = jalview.io.AppletFormatAdapter.URL;
+}this.dbgMsg ("Protocol identified as '" + this.protocol + "'");
+return a;
+}, "~S");
+Clazz.makeConstructor (c$,
+function (a, b, c) {
+Clazz.superConstructor (this, jalview.bin.JalviewLite.LoadingThread, []);
+this._file = a;
+this._file2 = b;
+this.applet = c;
+}, "~S,~S,jalview.bin.JalviewLite");
+Clazz.overrideMethod (c$, "run",
+function () {
+{
+System.out.println("BYPASSING JMOL LOADING FOR NOW. THIS WILL BE DONE ANOTHER WAY")
+}this.startLoading ();
+});
+Clazz.defineMethod (c$, "startLoading",
+($fz = function () {
+this.dbgMsg ("Loading thread started with:\n>>file\n" + this._file + ">>endfile");
+this.dbgMsg ("Loading started.");
+var a = this.readAlignment (this._file);
+var b = this.readAlignment (this._file2);
+if (a != null) {
+this.addToDisplay (a, b);
+this.loadTree (a);
+this.loadScoreFile (a);
+this.loadFeatures (a);
+this.loadAnnotations (a);
+this.loadJnetFile (a);
+this.loadPdbFiles (a);
+} else {
+this.b$["jalview.bin.JalviewLite"].fileFound = false;
+this.applet.remove (this.b$["jalview.bin.JalviewLite"].launcher);
+this.applet.repaint ();
+}this.b$["jalview.bin.JalviewLite"].callInitCallback ();
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "addToDisplay",
+function (a, b) {
+if (b == null) {
+a.addToDisplay (this.b$["jalview.bin.JalviewLite"].embedded);
+} else {
+var c = new jalview.appletgui.SplitFrame (a, b);
+c.addToDisplay (this.b$["jalview.bin.JalviewLite"].embedded, this.b$["jalview.bin.JalviewLite"]);
+}}, "jalview.appletgui.AlignFrame,jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "readAlignment",
+function (a) {
+if (a == null) {
+return null;
+}var b = this.setProtocolState (a);
+var c = new jalview.io.IdentifyFile ().Identify (b, this.protocol);
+this.dbgMsg ("File identified as '" + c + "'");
+var d = null;
+try {
+d = new jalview.io.AppletFormatAdapter ().readFile (b, this.protocol, c);
+if ((d != null) && (d.getHeight () > 0)) {
+this.dbgMsg ("Successfully loaded file.");
+d.setDataset (null);
+var e = new jalview.appletgui.AlignFrame (d, this.applet, b, this.b$["jalview.bin.JalviewLite"].embedded, false);
+e.setTitle (b);
+if (this.b$["jalview.bin.JalviewLite"].initialAlignFrame == null) {
+this.b$["jalview.bin.JalviewLite"].initialAlignFrame = e;
+}this.b$["jalview.bin.JalviewLite"].currentAlignFrame = e;
+if (this.protocol === jalview.io.AppletFormatAdapter.PASTE) {
+e.setTitle (jalview.util.MessageManager.formatMessage ("label.sequences_from", Clazz.newArray (-1, [this.applet.getDocumentBase ().toString ()])));
+}e.setStatus (jalview.util.MessageManager.formatMessage ("label.successfully_loaded_file", Clazz.newArray (-1, [b])));
+return e;
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, java.io.IOException)) {
+this.dbgMsg ("File load exception.");
+ex.printStackTrace ();
+if (jalview.bin.JalviewLite.debug) {
+try {
+var e = new jalview.io.FileParse (b, this.protocol);
+var f = null;
+this.dbgMsg (">>>Dumping contents of '" + b + "' " + "(" + this.protocol + ")");
+while ((f = e.nextLine ()) != null) {
+this.dbgMsg (f);
+}
+this.dbgMsg (">>>Dump finished.");
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Exception when trying to dump the content of the file parameter.");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+}} else {
+throw ex;
+}
+}
+return null;
+}, "~S");
+Clazz.defineMethod (c$, "loadPdbFiles",
+function (a) {
+var b = false;
+this.applet.setAlignPdbStructures (this.b$["jalview.bin.JalviewLite"].getDefaultParameter ("alignpdbfiles", false));
+var c = 0;
+var d = new java.util.Vector ();
+var e = (this.applet.getDefaultParameter ("relaxedidmatch", false)) ? new jalview.analysis.SequenceIdMatcher (a.getAlignViewport ().getAlignment ().getSequencesArray ()) : null;
+var f;
+do {
+if (c > 0) {
+f = this.applet.getParameter ("PDBFILE" + c);
+} else {
+f = this.b$["jalview.bin.JalviewLite"].pdbFile;
+}if (f != null) {
+var g = new jalview.datamodel.PDBEntry ();
+var h;
+var i = null;
+var j = null;
+var k = new java.util.StringTokenizer (f, " ");
+if (k.countTokens () < 2) {
+if (this.b$["jalview.bin.JalviewLite"].sequence != null) {
+i = Clazz.newArray (-1, [e == null ? a.getAlignViewport ().getAlignment ().findName (this.b$["jalview.bin.JalviewLite"].sequence) : e.findIdMatch (this.b$["jalview.bin.JalviewLite"].sequence)]);
+}} else {
+f = k.nextToken ();
+var l = new java.util.Vector ();
+var m = new java.util.Vector ();
+while (k.hasMoreTokens ()) {
+h = k.nextToken ();
+var n = new java.util.StringTokenizer (h, "=");
+if (n.countTokens () > 1) {
+m.addElement (n.nextToken ());
+h = n.nextToken ();
+}l.addElement (e == null ? a.getAlignViewport ().getAlignment ().findName (h) : e.findIdMatch (h));
+}
+i = new Array (l.size ());
+l.copyInto (i);
+if (m.size () == l.size ()) {
+j = new Array (m.size ());
+m.copyInto (j);
+}}f = this.setProtocolState (f);
+if (this.protocol === jalview.io.AppletFormatAdapter.CLASSLOADER && !this.b$["jalview.bin.JalviewLite"].useXtrnalSviewer) {
+this.protocol = jalview.io.AppletFormatAdapter.URL;
+f = this.addProtocol (f);
+}g.setFile (f);
+if (i != null) {
+for (var l = 0; l < i.length; l++) {
+if (i[l] != null) {
+(i[l]).addPDBId (g);
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.applet).registerPDBEntry (g);
+} else {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Warning: Possible input parsing error: Null sequence for attachment of PDB (sequence " + l + ")");
+}}}
+if (!this.b$["jalview.bin.JalviewLite"].alignPdbStructures) {
+a.newStructureView (this.applet, g, i, j, this.protocol);
+} else {
+d.addElement ( Clazz.newArray (-1, [g, i, j, String.instantialize (this.protocol)]));
+}}}c++;
+} while (f != null || c < 10);
+if (d.size () > 0) {
+var g = new Array (d.size ());
+var h = new Array (d.size ());
+var i = new Array (d.size ());
+var j = new Array (d.size ());
+for (var k = 0, l = d.size (); k < l; k++) {
+var m = d.elementAt (k);
+h[k] = m[0];
+g[k] = m[1];
+i[k] = m[2];
+j[k] = m[3];
+}
+a.alignedStructureView (this.applet, h, g, i, j);
+b = true;
+}return b;
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "loadJnetFile",
+function (a) {
+var b = false;
+var c = this.b$["jalview.bin.JalviewLite"].jnetFile;
+if (c != null) {
+try {
+c = this.setProtocolState (c);
+var d = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [c, this.protocol]);
+jalview.io.JnetAnnotationMaker.add_annotation (d, a.viewport.getAlignment (), 0, false);
+var e = a.viewport.getAlignment ().getSequenceAt (0);
+a.viewport.getAlignment ().setSeqrep (e);
+var f = new jalview.datamodel.ColumnSelection ();
+f.hideInsertionsFor (e);
+a.viewport.setColumnSelection (f);
+a.alignPanel.fontChanged ();
+a.alignPanel.setScrollValues (0, 0);
+b = true;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}return b;
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "loadAnnotations",
+function (a) {
+var b = false;
+var c = this.b$["jalview.bin.JalviewLite"].annotations;
+if (c != null) {
+c = this.setProtocolState (c);
+if ( new jalview.io.AnnotationFile ().annotateAlignmentView (a.viewport, c, this.protocol)) {
+a.alignPanel.fontChanged ();
+a.alignPanel.setScrollValues (0, 0);
+b = true;
+} else {
+System.err.println ("Annotations were not added from annotation file '" + c + "'");
+}}return b;
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "loadFeatures",
+function (a) {
+var b = false;
+var c = this.b$["jalview.bin.JalviewLite"].hideFeatureGroups;
+if (c != null) {
+a.setFeatureGroupState (this.b$["jalview.bin.JalviewLite"].separatorListToArray (c), false);
+}c = this.b$["jalview.bin.JalviewLite"].showFeatureGroups;
+if (c != null) {
+a.setFeatureGroupState (this.b$["jalview.bin.JalviewLite"].separatorListToArray (c), true);
+}c = this.b$["jalview.bin.JalviewLite"].features;
+if (c != null) {
+c = this.setProtocolState (c);
+b = a.parseFeaturesFile (c, this.protocol);
+}c = this.b$["jalview.bin.JalviewLite"].showFeatureSettings;
+if (c != null && c.equalsIgnoreCase ("true")) {
+a.viewport.setShowSequenceFeatures (true);
+ new jalview.appletgui.FeatureSettings (a.alignPanel);
+}return b;
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "loadScoreFile",
+function (a) {
+var b = false;
+if (this.b$["jalview.bin.JalviewLite"].scoreFile != null && !"".equals (this.b$["jalview.bin.JalviewLite"].scoreFile)) {
+try {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Attempting to load T-COFFEE score file from the scoreFile parameter");
+}b = a.loadScoreFile (this.b$["jalview.bin.JalviewLite"].scoreFile);
+if (!b) {
+System.err.println ("Failed to parse T-COFFEE parameter as a valid score file ('" + this.b$["jalview.bin.JalviewLite"].scoreFile + "')");
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.printf ("Cannot read score file: '%s'. Cause: %s \n", [this.b$["jalview.bin.JalviewLite"].scoreFile, e.getMessage ()]);
+} else {
+throw e;
+}
+}
+}return b;
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "loadTree",
+function (a) {
+var b = false;
+if (this.b$["jalview.bin.JalviewLite"].treeFile == null) {
+this.b$["jalview.bin.JalviewLite"].treeFile = this.applet.getParameter ("treeFile");
+}if (this.b$["jalview.bin.JalviewLite"].treeFile != null) {
+try {
+this.b$["jalview.bin.JalviewLite"].treeFile = this.setProtocolState (this.b$["jalview.bin.JalviewLite"].treeFile);
+var c = new jalview.io.NewickFile (this.b$["jalview.bin.JalviewLite"].treeFile, this.protocol);
+c.parse ();
+if (c.getTree () != null) {
+a.loadTree (c, this.b$["jalview.bin.JalviewLite"].treeFile);
+b = true;
+this.dbgMsg ("Successfully imported tree.");
+} else {
+this.dbgMsg ("Tree parameter did not resolve to a valid tree.");
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}return b;
+}, "jalview.appletgui.AlignFrame");
+Clazz.defineMethod (c$, "inArchive",
+function (a) {
+try {
+var b = (this.getClass ().getResourceAsStream ("/" + a) != null);
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Resource '" + a + "' was " + (b ? "" : "not") + " located by classloader.");
+}return b;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.out.println ("Exception checking resources: " + a + " " + ex);
+return false;
+} else {
+throw ex;
+}
+}
+}, "~S");
+Clazz.defineMethod (c$, "addProtocol",
+function (a) {
+if (a.indexOf ("://") == -1) {
+var b = this.applet.resolveUrlForLocalOrAbsolute (a, this.b$["jalview.bin.JalviewLite"].getDocumentBase ());
+if (this.urlExists (b)) {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Prepended document base for resource: '" + a + "'");
+}return b;
+}b = this.applet.resolveUrlForLocalOrAbsolute (a, this.b$["jalview.bin.JalviewLite"].getCodeBase ());
+if (this.urlExists (b)) {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Prepended codebase for resource: '" + a + "'");
+}return b;
+}}return a;
+}, "~S");
+Clazz.defineMethod (c$, "urlExists",
+($fz = function (a) {
+var b = null;
+try {
+b = new java.net.URL (a).openStream ();
+if (b != null) {
+return true;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+} finally {
+if (b != null) {
+try {
+b.close ();
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+} else {
+throw e;
+}
+}
+}}
+return false;
+}, $fz.isPrivate = true, $fz), "~S");
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$1", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.f$.me).mouseOverVamsasSequence (this.f$.sq, this.f$.sq.findIndex (this.f$.pos), null);
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$2", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.f$.me).mouseOverVamsasSequence (this.f$.sq, this.f$.pos, null);
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$3", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+this.f$.alf.select (this.f$.sel, this.f$.csel);
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$4$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$4", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+try {
+jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.f$.me).mouseOverStructure ( new Integer (this.f$.pdbResNum).intValue (), this.f$.chain, this.f$.pdbfile);
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("mouseOver for '" + this.f$.pdbResNum + "' in chain '" + this.f$.chain + "' in structure '" + this.f$.pdbfile + "'");
+}} catch (e) {
+if (Clazz.exceptionOf (e, NumberFormatException)) {
+System.err.println ("Ignoring invalid residue number string '" + this.f$.pdbResNum + "'");
+} else {
+throw e;
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$5$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$5", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+try {
+this.f$.alf.scrollTo ( new Integer (this.f$.topRow).intValue (), new Integer (this.f$.leftHandColumn).intValue ());
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Couldn't parse integer arguments (topRow='" + this.f$.topRow + "' and leftHandColumn='" + this.f$.leftHandColumn + "')");
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$6$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$6", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+try {
+this.f$.alf.scrollToRow ( new Integer (this.f$.topRow).intValue ());
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Couldn't parse integer arguments (topRow='" + this.f$.topRow + "')");
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$7$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$7", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+try {
+this.f$.alf.scrollToColumn ( new Integer (this.f$.leftHandColumn).intValue ());
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Couldn't parse integer arguments (leftHandColumn='" + this.f$.leftHandColumn + "')");
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$8$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$8", null, java.awt.event.ActionListener);
+Clazz.overrideMethod (c$, "actionPerformed",
+function (e) {
+var loader = Clazz.innerTypeInstance (jalview.bin.JalviewLite.LoadingThread, this, null, this.b$["jalview.bin.JalviewLite"].startupFile, this.b$["jalview.bin.JalviewLite"].file2, this.b$["jalview.bin.JalviewLite"]);
+loader.start ();
+}, "java.awt.event.ActionEvent");
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$9$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$9", java.awt.event.WindowAdapter);
+Clazz.overrideMethod (c$, "windowClosing",
+function (e) {
+if (Clazz.instanceOf (this.f$.frame, jalview.appletgui.AlignFrame)) {
+var vp = (this.f$.frame).viewport;
+(this.f$.frame).closeMenuItem_actionPerformed ();
+if (vp.applet.currentAlignFrame === this.f$.frame) {
+vp.applet.currentAlignFrame = null;
+}vp.applet = null;
+vp = null;
+}jalview.bin.JalviewLite.lastFrameX -= 40;
+jalview.bin.JalviewLite.lastFrameY -= 40;
+if (Clazz.instanceOf (this.f$.frame, jalview.appletgui.EmbmenuFrame)) {
+(this.f$.frame).destroyMenus ();
+}this.f$.frame.setMenuBar (null);
+this.f$.frame.dispose ();
+}, "java.awt.event.WindowEvent");
+Clazz.defineMethod (c$, "windowActivated",
+function (e) {
+if (Clazz.instanceOf (this.f$.frame, jalview.appletgui.AlignFrame)) {
+(this.f$.frame).viewport.applet.currentAlignFrame = this.f$.frame;
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Activated window " + this.f$.frame);
+}}Clazz.superCall (this, jalview.bin.JalviewLite$9, "windowActivated", [e]);
+}, "java.awt.event.WindowEvent");
+c$ = Clazz.p0p ();
+};
+c$.$JalviewLite$10$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.bin, "JalviewLite$10", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+this.f$.alf.setFeatureGroupState (this.b$["jalview.bin.JalviewLite"].separatorListToArray (this.f$.groups), this.f$.st);
+});
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"TRUE", "true",
+"FALSE", "false",
+"debug", false,
+"lastFrameX", 200,
+"lastFrameY", 200,
+"builddate", null,
+"version", null,
+"installation", null);
+});
diff --git a/bin/jalview/commands/ChangeCaseCommand.js b/bin/jalview/commands/ChangeCaseCommand.js
index fb085d6..0ebfc96 100644
--- a/bin/jalview/commands/ChangeCaseCommand.js
+++ b/bin/jalview/commands/ChangeCaseCommand.js
@@ -1,74 +1,74 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.load (["jalview.commands.CommandI"], "jalview.commands.ChangeCaseCommand", ["java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.description = null;
-this.caseChange = -1;
-this.seqs = null;
-this.regions = null;
-Clazz.instantialize (this, arguments);
-}, jalview.commands, "ChangeCaseCommand", null, jalview.commands.CommandI);
-Clazz.makeConstructor (c$,
-function (description, seqs, regions, caseChange) {
-this.description = description;
-this.seqs = seqs;
-this.regions = regions;
-this.caseChange = caseChange;
-this.doCommand (null);
-}, "~S,~A,java.util.List,~N");
-Clazz.overrideMethod (c$, "getDescription",
-function () {
-return this.description;
-});
-Clazz.overrideMethod (c$, "getSize",
-function () {
-return 1;
-});
-Clazz.overrideMethod (c$, "doCommand",
-function (views) {
-this.changeCase (true);
-}, "~A");
-Clazz.overrideMethod (c$, "undoCommand",
-function (views) {
-this.changeCase (false);
-}, "~A");
-Clazz.defineMethod (c$, "changeCase",
-function (doCommand) {
-var sequence;
-var start;
-var end;
-var nextChar;
-for (var r, $r = this.regions.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
-start = r[0];
-for (var s = 0; s < this.seqs.length; s++) {
-sequence = this.seqs[s].getSequenceAsString ();
-var newSeq = new StringBuffer ();
-if (r[1] > sequence.length) {
-end = sequence.length;
-} else {
-end = r[1];
-}if (start > 0) {
-newSeq.append (sequence.substring (0, start));
-}if ((this.caseChange == jalview.commands.ChangeCaseCommand.TO_UPPER && doCommand) || (this.caseChange == jalview.commands.ChangeCaseCommand.TO_LOWER && !doCommand)) {
-newSeq.append (sequence.substring (start, end).toUpperCase ());
-} else if ((this.caseChange == jalview.commands.ChangeCaseCommand.TO_LOWER && doCommand) || (this.caseChange == jalview.commands.ChangeCaseCommand.TO_UPPER && !doCommand)) {
-newSeq.append (sequence.substring (start, end).toLowerCase ());
-} else {
-for (var c = start; c < end; c++) {
-nextChar = sequence.charAt (c);
-if ('a' <= nextChar && nextChar <= 'z') {
-nextChar = String.fromCharCode (nextChar.charCodeAt (0) - (32));
-} else if ('A' <= nextChar && nextChar <= 'Z') {
-nextChar = String.fromCharCode (nextChar.charCodeAt (0) + (32));
-}newSeq.append (nextChar);
-}
-}if (end < sequence.length) {
-newSeq.append (sequence.substring (end));
-}this.seqs[s].setSequence (newSeq.toString ());
-}
-}
-}, "~B");
-Clazz.defineStatics (c$,
-"TO_LOWER", 0,
-"TO_UPPER", 1,
-"TOGGLE_CASE", 2);
-});
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.CommandI"], "jalview.commands.ChangeCaseCommand", ["java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.description = null;
+this.caseChange = -1;
+this.seqs = null;
+this.regions = null;
+Clazz.instantialize (this, arguments);
+}, jalview.commands, "ChangeCaseCommand", null, jalview.commands.CommandI);
+Clazz.makeConstructor (c$,
+function (description, seqs, regions, caseChange) {
+this.description = description;
+this.seqs = seqs;
+this.regions = regions;
+this.caseChange = caseChange;
+this.doCommand (null);
+}, "~S,~A,java.util.List,~N");
+Clazz.overrideMethod (c$, "getDescription",
+function () {
+return this.description;
+});
+Clazz.overrideMethod (c$, "getSize",
+function () {
+return 1;
+});
+Clazz.overrideMethod (c$, "doCommand",
+function (views) {
+this.changeCase (true);
+}, "~A");
+Clazz.overrideMethod (c$, "undoCommand",
+function (views) {
+this.changeCase (false);
+}, "~A");
+Clazz.defineMethod (c$, "changeCase",
+function (doCommand) {
+var sequence;
+var start;
+var end;
+var nextChar;
+for (var r, $r = this.regions.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
+start = r[0];
+for (var s = 0; s < this.seqs.length; s++) {
+sequence = this.seqs[s].getSequenceAsString ();
+var newSeq = new StringBuffer ();
+if (r[1] > sequence.length) {
+end = sequence.length;
+} else {
+end = r[1];
+}if (start > 0) {
+newSeq.append (sequence.substring (0, start));
+}if ((this.caseChange == jalview.commands.ChangeCaseCommand.TO_UPPER && doCommand) || (this.caseChange == jalview.commands.ChangeCaseCommand.TO_LOWER && !doCommand)) {
+newSeq.append (sequence.substring (start, end).toUpperCase ());
+} else if ((this.caseChange == jalview.commands.ChangeCaseCommand.TO_LOWER && doCommand) || (this.caseChange == jalview.commands.ChangeCaseCommand.TO_UPPER && !doCommand)) {
+newSeq.append (sequence.substring (start, end).toLowerCase ());
+} else {
+for (var c = start; c < end; c++) {
+nextChar = sequence.charAt (c);
+if ('a' <= nextChar && nextChar <= 'z') {
+nextChar = String.fromCharCode (nextChar.charCodeAt (0) - (32));
+} else if ('A' <= nextChar && nextChar <= 'Z') {
+nextChar = String.fromCharCode (nextChar.charCodeAt (0) + (32));
+}newSeq.append (nextChar);
+}
+}if (end < sequence.length) {
+newSeq.append (sequence.substring (end));
+}this.seqs[s].setSequence (newSeq.toString ());
+}
+}
+}, "~B");
+Clazz.defineStatics (c$,
+"TO_LOWER", 0,
+"TO_UPPER", 1,
+"TOGGLE_CASE", 2);
+});
diff --git a/bin/jalview/commands/CommandI.js b/bin/jalview/commands/CommandI.js
index 792918f..598c931 100644
--- a/bin/jalview/commands/CommandI.js
+++ b/bin/jalview/commands/CommandI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.declareInterface (jalview.commands, "CommandI");
+Clazz.declarePackage ("jalview.commands");
+Clazz.declareInterface (jalview.commands, "CommandI");
diff --git a/bin/jalview/commands/EditCommand.class b/bin/jalview/commands/EditCommand.class
index 21a6161..8e6645e 100644
Binary files a/bin/jalview/commands/EditCommand.class and b/bin/jalview/commands/EditCommand.class differ
diff --git a/bin/jalview/commands/EditCommand.js b/bin/jalview/commands/EditCommand.js
index b556231..0839473 100644
--- a/bin/jalview/commands/EditCommand.js
+++ b/bin/jalview/commands/EditCommand.js
@@ -1,661 +1,661 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.load (["jalview.commands.CommandI", "java.lang.Enum", "java.util.ArrayList"], "jalview.commands.EditCommand", ["jalview.analysis.AlignSeq", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.Sequence", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "$.ReverseListIterator", "$.StringUtils", "java.lang.StringBuffer", "java.util.HashMap", "$.Hashtable"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.edits = null;
-this.description = null;
-if (!Clazz.isClassDefined ("jalview.commands.EditCommand.Edit")) {
-jalview.commands.EditCommand.$EditCommand$Edit$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.commands, "EditCommand", null, jalview.commands.CommandI);
-Clazz.prepareFields (c$, function () {
-this.edits = new java.util.ArrayList ();
-});
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (description) {
-this.description = description;
-}, "~S");
-Clazz.makeConstructor (c$,
-function (description, command, seqs, position, number, al) {
-this.description = description;
-if (command === jalview.commands.EditCommand.Action.CUT || command === jalview.commands.EditCommand.Action.PASTE) {
-this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al));
-}this.performEdit (0, null);
-}, "~S,jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI");
-Clazz.makeConstructor (c$,
-function (description, command, replace, seqs, position, number, al) {
-this.description = description;
-if (command === jalview.commands.EditCommand.Action.REPLACE) {
-this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al, replace));
-}this.performEdit (0, null);
-}, "~S,jalview.commands.EditCommand.Action,~S,~A,~N,~N,jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "setEdit",
-function (e) {
-this.edits.clear ();
-this.edits.add (e);
-}, "jalview.commands.EditCommand.Edit");
-Clazz.defineMethod (c$, "addEdit",
-function (e) {
-if (!jalview.commands.EditCommand.expandEdit (this.edits, e)) {
-this.edits.add (e);
-}}, "jalview.commands.EditCommand.Edit");
-c$.expandEdit = Clazz.defineMethod (c$, "expandEdit",
-function (edits, e) {
-if (edits == null || edits.isEmpty ()) {
-return false;
-}var lastEdit = edits.get (edits.size () - 1);
-var action = e.command;
-if (lastEdit.command !== action) {
-return false;
-}if (lastEdit.seqs.length != e.seqs.length) {
-return false;
-}for (var i = 0; i < e.seqs.length; i++) {
-if (lastEdit.seqs[i].getDatasetSequence () !== e.seqs[i].getDatasetSequence ()) {
-return false;
-}}
-var contiguous = (action === jalview.commands.EditCommand.Action.INSERT_GAP && e.position == lastEdit.position + lastEdit.number) || (action === jalview.commands.EditCommand.Action.DELETE_GAP && e.position + e.number == lastEdit.position);
-if (contiguous) {
-lastEdit.number += e.number;
-lastEdit.seqs = e.seqs;
-if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
-lastEdit.position--;
-}return true;
-}return false;
-}, "java.util.List,jalview.commands.EditCommand.Edit");
-Clazz.defineMethod (c$, "clearEdits",
-function () {
-this.edits.clear ();
-});
-Clazz.defineMethod (c$, "getEdit",
-function (i) {
-if (i >= 0 && i < this.edits.size ()) {
-return this.edits.get (i);
-}return null;
-}, "~N");
-Clazz.overrideMethod (c$, "getDescription",
-function () {
-return this.description;
-});
-Clazz.overrideMethod (c$, "getSize",
-function () {
-return this.edits.size ();
-});
-Clazz.defineMethod (c$, "getAlignment",
-function () {
-return (this.edits.isEmpty () ? null : this.edits.get (0).al);
-});
-Clazz.defineMethod (c$, "appendEdit",
-function (command, seqs, position, number, al, performEdit) {
-this.appendEdit (command, seqs, position, number, al, performEdit, null);
-}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~B");
-Clazz.defineMethod (c$, "appendEdit",
-function (command, seqs, position, number, al, performEdit, views) {
-var edit = Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al.getGapCharacter ());
-if (al.getHeight () == seqs.length) {
-edit.al = al;
-edit.fullAlignmentHeight = true;
-}this.addEdit (edit);
-if (performEdit) {
-jalview.commands.EditCommand.performEdit (edit, views);
-}}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~B,~A");
-Clazz.defineMethod (c$, "appendEdit",
-function (edit, al, performEdit, views) {
-if (al.getHeight () == edit.seqs.length) {
-edit.al = al;
-edit.fullAlignmentHeight = true;
-}this.addEdit (edit);
-if (performEdit) {
-jalview.commands.EditCommand.performEdit (edit, views);
-}}, "jalview.commands.EditCommand.Edit,jalview.datamodel.AlignmentI,~B,~A");
-Clazz.defineMethod (c$, "performEdit",
-function (commandIndex, views) {
-var iterator = this.edits.listIterator (commandIndex);
-while (iterator.hasNext ()) {
-var edit = iterator.next ();
-jalview.commands.EditCommand.performEdit (edit, views);
-}
-}, "~N,~A");
-c$.performEdit = Clazz.defineMethod (c$, "performEdit",
-function (edit, views) {
-switch (edit.command) {
-case jalview.commands.EditCommand.Action.INSERT_GAP:
-jalview.commands.EditCommand.insertGap (edit);
-break;
-case jalview.commands.EditCommand.Action.DELETE_GAP:
-jalview.commands.EditCommand.deleteGap (edit);
-break;
-case jalview.commands.EditCommand.Action.CUT:
-jalview.commands.EditCommand.cut (edit, views);
-break;
-case jalview.commands.EditCommand.Action.PASTE:
-jalview.commands.EditCommand.paste (edit, views);
-break;
-case jalview.commands.EditCommand.Action.REPLACE:
-jalview.commands.EditCommand.replace (edit);
-break;
-case jalview.commands.EditCommand.Action.INSERT_NUC:
-break;
-default:
-break;
-}
-}, "jalview.commands.EditCommand.Edit,~A");
-Clazz.overrideMethod (c$, "doCommand",
-function (views) {
-this.performEdit (0, views);
-}, "~A");
-Clazz.overrideMethod (c$, "undoCommand",
-function (views) {
-var iterator = this.edits.listIterator (this.edits.size ());
-while (iterator.hasPrevious ()) {
-var e = iterator.previous ();
-switch (e.command) {
-case jalview.commands.EditCommand.Action.INSERT_GAP:
-jalview.commands.EditCommand.deleteGap (e);
-break;
-case jalview.commands.EditCommand.Action.DELETE_GAP:
-jalview.commands.EditCommand.insertGap (e);
-break;
-case jalview.commands.EditCommand.Action.CUT:
-jalview.commands.EditCommand.paste (e, views);
-break;
-case jalview.commands.EditCommand.Action.PASTE:
-jalview.commands.EditCommand.cut (e, views);
-break;
-case jalview.commands.EditCommand.Action.REPLACE:
-jalview.commands.EditCommand.replace (e);
-break;
-case jalview.commands.EditCommand.Action.INSERT_NUC:
-break;
-default:
-break;
-}
-}
-}, "~A");
-c$.insertGap = Clazz.defineMethod (c$, "insertGap",
-($fz = function (command) {
-for (var s = 0; s < command.seqs.length; s++) {
-command.seqs[s].insertCharAt (command.position, command.number, command.gapChar);
-}
-jalview.commands.EditCommand.adjustAnnotations (command, true, false, null);
-}, $fz.isPrivate = true, $fz), "jalview.commands.EditCommand.Edit");
-c$.deleteGap = Clazz.defineMethod (c$, "deleteGap",
-($fz = function (command) {
-for (var s = 0; s < command.seqs.length; s++) {
-command.seqs[s].deleteChars (command.position, command.position + command.number);
-}
-jalview.commands.EditCommand.adjustAnnotations (command, false, false, null);
-}, $fz.isPrivate = true, $fz), "jalview.commands.EditCommand.Edit");
-c$.cut = Clazz.defineMethod (c$, "cut",
-function (command, views) {
-var seqDeleted = false;
-command.string = Clazz.newCharArray (command.seqs.length, '\0');
-for (var i = 0; i < command.seqs.length; i++) {
-var sequence = command.seqs[i];
-if (sequence.getLength () > command.position) {
-command.string[i] = sequence.getSequence (command.position, command.position + command.number);
-var oldds = sequence.getDatasetSequence ();
-if (command.oldds != null && command.oldds[i] != null) {
-sequence.setDatasetSequence (null);
-}sequence.deleteChars (command.position, command.position + command.number);
-if (command.oldds != null && command.oldds[i] != null) {
-sequence.setDatasetSequence (command.oldds[i]);
-command.oldds[i] = oldds;
-} else {
-if (oldds !== sequence.getDatasetSequence () || sequence.getSequenceFeatures () != null) {
-if (command.oldds == null) {
-command.oldds = new Array (command.seqs.length);
-}command.oldds[i] = oldds;
-jalview.commands.EditCommand.adjustFeatures (command, i, sequence.findPosition (command.position), sequence.findPosition (command.position + command.number), false);
-}}}if (sequence.getLength () < 1) {
-command.al.deleteSequence (sequence);
-seqDeleted = true;
-}}
-jalview.commands.EditCommand.adjustAnnotations (command, false, seqDeleted, views);
-}, "jalview.commands.EditCommand.Edit,~A");
-c$.paste = Clazz.defineMethod (c$, "paste",
-function (command, views) {
-var tmp;
-var newDSNeeded;
-var newDSWasNeeded;
-var newstart;
-var newend;
-var seqWasDeleted = false;
-var start = 0;
-var end = 0;
-for (var i = 0; i < command.seqs.length; i++) {
-newDSNeeded = false;
-newDSWasNeeded = command.oldds != null && command.oldds[i] != null;
-if (command.seqs[i].getLength () < 1) {
-if (command.alIndex[i] < command.al.getHeight ()) {
-var sequences;
-{
-if (!(command.alIndex[i] < 0)) {
-sequences.add (command.alIndex[i], command.seqs[i]);
-}}} else {
-command.al.addSequence (command.seqs[i]);
-}seqWasDeleted = true;
-}newstart = command.seqs[i].getStart ();
-newend = command.seqs[i].getEnd ();
-tmp = new StringBuffer ();
-tmp.append (command.seqs[i].getSequence ());
-if (command.string != null && command.string[i] != null) {
-if (command.position >= tmp.length ()) {
-var length = command.position - tmp.length ();
-while (length > 0) {
-tmp.append (command.gapChar);
-length--;
-}
-}tmp.insert (command.position, command.string[i]);
-for (var s = 0; s < command.string[i].length; s++) {
-if (jalview.schemes.ResidueProperties.aaIndex[command.string[i][s].charCodeAt (0)] != 23) {
-if (!newDSNeeded) {
-newDSNeeded = true;
-start = command.seqs[i].findPosition (command.position);
-end = command.seqs[i].findPosition (command.position + command.number);
-}if (command.seqs[i].getStart () == start) {
-newstart--;
-} else {
-newend++;
-}}}
-command.string[i] = null;
-}command.seqs[i].setSequence (tmp.toString ());
-command.seqs[i].setStart (newstart);
-command.seqs[i].setEnd (newend);
-if (newDSNeeded) {
-if (command.seqs[i].getDatasetSequence () != null) {
-var ds;
-if (newDSWasNeeded) {
-ds = command.oldds[i];
-} else {
-ds = new jalview.datamodel.Sequence (command.seqs[i].getName (), jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, command.seqs[i].getSequenceAsString ()), command.seqs[i].getStart (), command.seqs[i].getEnd ());
-ds.setDescription (command.seqs[i].getDescription ());
-}if (command.oldds == null) {
-command.oldds = new Array (command.seqs.length);
-}command.oldds[i] = command.seqs[i].getDatasetSequence ();
-command.seqs[i].setDatasetSequence (ds);
-}jalview.commands.EditCommand.adjustFeatures (command, i, start, end, true);
-}}
-jalview.commands.EditCommand.adjustAnnotations (command, true, seqWasDeleted, views);
-command.string = null;
-}, "jalview.commands.EditCommand.Edit,~A");
-c$.replace = Clazz.defineMethod (c$, "replace",
-function (command) {
-var tmp;
-var oldstring;
-var start = command.position;
-var end = command.number;
-command.number = start + command.string[0].length;
-for (var i = 0; i < command.seqs.length; i++) {
-var newDSWasNeeded = command.oldds != null && command.oldds[i] != null;
-oldstring = command.seqs[i].getSequenceAsString ();
-tmp = new StringBuffer (oldstring.substring (0, start));
-tmp.append (command.string[i]);
-var nogaprep = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (command.string[i]));
-var ipos = command.seqs[i].findPosition (start) - command.seqs[i].getStart ();
-tmp.append (oldstring.substring (end));
-command.seqs[i].setSequence (tmp.toString ());
-command.string[i] = oldstring.substring (start, end).toCharArray ();
-var nogapold = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (command.string[i]));
-if (!nogaprep.toLowerCase ().equals (nogapold.toLowerCase ())) {
-if (newDSWasNeeded) {
-var oldds = command.seqs[i].getDatasetSequence ();
-command.seqs[i].setDatasetSequence (command.oldds[i]);
-command.oldds[i] = oldds;
-} else {
-if (command.oldds == null) {
-command.oldds = new Array (command.seqs.length);
-}command.oldds[i] = command.seqs[i].getDatasetSequence ();
-var newds = new jalview.datamodel.Sequence (command.seqs[i].getDatasetSequence ());
-var fullseq;
-var osp = newds.getSequenceAsString ();
-fullseq = osp.substring (0, ipos) + nogaprep + osp.substring (ipos + nogaprep.length);
-newds.setSequence (fullseq.toUpperCase ());
-command.seqs[i].setDatasetSequence (newds);
-}}tmp = null;
-oldstring = null;
-}
-}, "jalview.commands.EditCommand.Edit");
-c$.adjustAnnotations = Clazz.defineMethod (c$, "adjustAnnotations",
-function (command, insert, modifyVisibility, views) {
-var annotations = null;
-if (modifyVisibility && !insert) {
-command.deletedAnnotationRows = new java.util.Hashtable ();
-}if (command.fullAlignmentHeight) {
-annotations = command.al.getAlignmentAnnotation ();
-} else {
-var aSize = 0;
-var tmp;
-for (var s = 0; s < command.seqs.length; s++) {
-if (modifyVisibility) {
-if (!insert) {
-tmp = command.seqs[s].getAnnotation ();
-if (tmp != null) {
-var alen = tmp.length;
-for (var aa = 0; aa < tmp.length; aa++) {
-if (!command.al.deleteAnnotation (tmp[aa])) {
-tmp[aa] = null;
-alen--;
-}}
-command.seqs[s].setAlignmentAnnotation (null);
-if (alen != tmp.length) {
-var saved = new Array (alen);
-for (var aa = 0, aapos = 0; aa < tmp.length; aa++) {
-if (tmp[aa] != null) {
-saved[aapos++] = tmp[aa];
-tmp[aa] = null;
-}}
-tmp = saved;
-command.deletedAnnotationRows.put (command.seqs[s], saved);
-for (var alview = 0; views != null && alview < views.length; alview++) {
-if (views[alview] !== command.al) {
-var toremove = views[alview].getAlignmentAnnotation ();
-if (toremove == null || toremove.length == 0) {
-continue;
-}for (var aa = 0; aa < toremove.length; aa++) {
-if (toremove[aa].sequenceRef === command.seqs[s]) {
-views[alview].deleteAnnotation (toremove[aa]);
-}}
-}}
-} else {
-command.deletedAnnotationRows.put (command.seqs[s], tmp);
-}}} else {
-if (command.deletedAnnotationRows != null && command.deletedAnnotationRows.containsKey (command.seqs[s])) {
-var revealed = command.deletedAnnotationRows.get (command.seqs[s]);
-command.seqs[s].setAlignmentAnnotation (revealed);
-if (revealed != null) {
-for (var aa = 0; aa < revealed.length; aa++) {
-command.al.addAnnotation (revealed[aa]);
-}
-for (var aa = 0; aa < revealed.length; aa++) {
-command.al.setAnnotationIndex (revealed[aa], aa);
-}
-for (var vnum = 0; views != null && vnum < views.length; vnum++) {
-if (views[vnum] !== command.al) {
-var avwidth = views[vnum].getWidth () + 1;
-for (var a = 0; a < revealed.length; a++) {
-var newann = new jalview.datamodel.AlignmentAnnotation (revealed[a]);
-command.seqs[s].addAlignmentAnnotation (newann);
-newann.padAnnotation (avwidth);
-views[vnum].addAnnotation (newann);
-views[vnum].setAnnotationIndex (newann, a);
-}
-}}
-}}}continue;
-}if (command.seqs[s].getAnnotation () == null) {
-continue;
-}if (aSize == 0) {
-annotations = command.seqs[s].getAnnotation ();
-} else {
-tmp = new Array (aSize + command.seqs[s].getAnnotation ().length);
-System.arraycopy (annotations, 0, tmp, 0, aSize);
-System.arraycopy (command.seqs[s].getAnnotation (), 0, tmp, aSize, command.seqs[s].getAnnotation ().length);
-annotations = tmp;
-}aSize = annotations.length;
-}
-}if (annotations == null) {
-return;
-}if (!insert) {
-command.deletedAnnotations = new java.util.Hashtable ();
-}var aSize;
-var temp;
-for (var a = 0; a < annotations.length; a++) {
-if (annotations[a].autoCalculated || annotations[a].annotations == null) {
-continue;
-}var tSize = 0;
-aSize = annotations[a].annotations.length;
-if (insert) {
-temp = new Array (aSize + command.number);
-if (annotations[a].padGaps) {
-for (var aa = 0; aa < temp.length; aa++) {
-temp[aa] = new jalview.datamodel.Annotation (command.gapChar + "", null, ' ', 0);
-}
-}} else {
-if (command.position < aSize) {
-if (command.position + command.number >= aSize) {
-tSize = aSize;
-} else {
-tSize = aSize - command.number;
-}} else {
-tSize = aSize;
-}if (tSize < 0) {
-tSize = aSize;
-}temp = new Array (tSize);
-}if (insert) {
-if (command.position < annotations[a].annotations.length) {
-System.arraycopy (annotations[a].annotations, 0, temp, 0, command.position);
-if (command.deletedAnnotations != null && command.deletedAnnotations.containsKey (annotations[a].annotationId)) {
-var restore = command.deletedAnnotations.get (annotations[a].annotationId);
-System.arraycopy (restore, 0, temp, command.position, command.number);
-}System.arraycopy (annotations[a].annotations, command.position, temp, command.position + command.number, aSize - command.position);
-} else {
-if (command.deletedAnnotations != null && command.deletedAnnotations.containsKey (annotations[a].annotationId)) {
-var restore = command.deletedAnnotations.get (annotations[a].annotationId);
-temp = new Array (annotations[a].annotations.length + restore.length);
-System.arraycopy (annotations[a].annotations, 0, temp, 0, annotations[a].annotations.length);
-System.arraycopy (restore, 0, temp, annotations[a].annotations.length, restore.length);
-} else {
-temp = annotations[a].annotations;
-}}} else {
-if (tSize != aSize || command.position < 2) {
-var copylen = Math.min (command.position, annotations[a].annotations.length);
-if (copylen > 0) {
-System.arraycopy (annotations[a].annotations, 0, temp, 0, copylen);
-}var deleted = new Array (command.number);
-if (copylen >= command.position) {
-copylen = Math.min (command.number, annotations[a].annotations.length - command.position);
-if (copylen > 0) {
-System.arraycopy (annotations[a].annotations, command.position, deleted, 0, copylen);
-}}command.deletedAnnotations.put (annotations[a].annotationId, deleted);
-if (annotations[a].annotations.length > command.position + command.number) {
-System.arraycopy (annotations[a].annotations, command.position + command.number, temp, command.position, annotations[a].annotations.length - command.position - command.number);
-}} else {
-var dSize = aSize - command.position;
-if (dSize > 0) {
-var deleted = new Array (command.number);
-System.arraycopy (annotations[a].annotations, command.position, deleted, 0, dSize);
-command.deletedAnnotations.put (annotations[a].annotationId, deleted);
-tSize = Math.min (annotations[a].annotations.length, command.position);
-temp = new Array (tSize);
-System.arraycopy (annotations[a].annotations, 0, temp, 0, tSize);
-} else {
-temp = annotations[a].annotations;
-}}}annotations[a].annotations = temp;
-}
-}, "jalview.commands.EditCommand.Edit,~B,~B,~A");
-c$.adjustFeatures = Clazz.defineMethod (c$, "adjustFeatures",
-function (command, index, i, j, insert) {
-var seq = command.seqs[index];
-var sequence = seq.getDatasetSequence ();
-if (sequence == null) {
-sequence = seq;
-}if (insert) {
-if (command.editedFeatures != null && command.editedFeatures.containsKey (seq)) {
-sequence.setSequenceFeatures (command.editedFeatures.get (seq));
-}return;
-}var sf = sequence.getSequenceFeatures ();
-if (sf == null) {
-return;
-}var oldsf = new Array (sf.length);
-var cSize = j - i;
-for (var s = 0; s < sf.length; s++) {
-var copy = new jalview.datamodel.SequenceFeature (sf[s]);
-oldsf[s] = copy;
-if (sf[s].getEnd () < i) {
-continue;
-}if (sf[s].getBegin () > j) {
-sf[s].setBegin (copy.getBegin () - cSize);
-sf[s].setEnd (copy.getEnd () - cSize);
-continue;
-}if (sf[s].getBegin () >= i) {
-sf[s].setBegin (i);
-}if (sf[s].getEnd () < j) {
-sf[s].setEnd (j - 1);
-}sf[s].setEnd (sf[s].getEnd () - (cSize));
-if (sf[s].getBegin () > sf[s].getEnd ()) {
-sequence.deleteFeature (sf[s]);
-}}
-if (command.editedFeatures == null) {
-command.editedFeatures = new java.util.Hashtable ();
-}command.editedFeatures.put (seq, oldsf);
-}, "jalview.commands.EditCommand.Edit,~N,~N,~N,~B");
-Clazz.defineMethod (c$, "getEdits",
-function () {
-return this.edits;
-});
-Clazz.defineMethod (c$, "priorState",
-function (forUndo) {
-var result = new java.util.HashMap ();
-if (this.getEdits () == null) {
-return result;
-}if (forUndo) {
-for (var e, $e = this.getEdits ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
-for (var seq, $seq = 0, $$seq = e.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
-var ds = seq.getDatasetSequence ();
-var preEdit = result.get (ds);
-if (preEdit == null) {
-preEdit = new jalview.datamodel.Sequence ("", seq.getSequenceAsString ());
-preEdit.setDatasetSequence (ds);
-result.put (ds, preEdit);
-}}
-}
-return result;
-}var edits = new jalview.util.ReverseListIterator (this.getEdits ());
-while (edits.hasNext ()) {
-var oldEdit = edits.next ();
-var action = oldEdit.getAction ();
-var position = oldEdit.getPosition ();
-var number = oldEdit.getNumber ();
-var gap = oldEdit.getGapCharacter ();
-for (var seq, $seq = 0, $$seq = oldEdit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
-var ds = seq.getDatasetSequence ();
-var preEdit = result.get (ds);
-if (preEdit == null) {
-preEdit = new jalview.datamodel.Sequence ("", seq.getSequenceAsString ());
-preEdit.setDatasetSequence (ds);
-result.put (ds, preEdit);
-}if (ds != null) {
-if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
-preEdit.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (preEdit.getSequence (), position, number, gap)));
-} else if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
-preEdit.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (preEdit.getSequence (), position, position + number)));
-} else {
-System.err.println ("Can't undo edit action " + action);
-}}}
-}
-return result;
-}, "~B");
-Clazz.defineMethod (c$, "getEditIterator",
-function (forwards) {
-if (forwards) {
-return this.getEdits ().iterator ();
-} else {
-return new jalview.util.ReverseListIterator (this.getEdits ());
-}}, "~B");
-c$.$EditCommand$Edit$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.oldds = null;
-this.fullAlignmentHeight = false;
-this.deletedAnnotationRows = null;
-this.deletedAnnotations = null;
-this.editedFeatures = null;
-this.al = null;
-this.command = null;
-this.string = null;
-this.seqs = null;
-this.alIndex = null;
-this.position = 0;
-this.number = 0;
-this.gapChar = '\0';
-Clazz.instantialize (this, arguments);
-}, jalview.commands.EditCommand, "Edit");
-Clazz.makeConstructor (c$,
-function (a, b, c, d, e) {
-this.command = a;
-this.seqs = b;
-this.position = c;
-this.number = d;
-this.gapChar = e;
-}, "jalview.commands.EditCommand.Action,~A,~N,~N,~S");
-Clazz.makeConstructor (c$,
-function (a, b, c, d, e) {
-this.gapChar = e.getGapCharacter ();
-this.command = a;
-this.seqs = b;
-this.position = c;
-this.number = d;
-this.al = e;
-this.alIndex = Clazz.newIntArray (b.length, 0);
-for (var f = 0; f < b.length; f++) {
-this.alIndex[f] = e.findIndex (b[f]);
-}
-this.fullAlignmentHeight = (e.getHeight () == b.length);
-}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI");
-Clazz.makeConstructor (c$,
-function (a, b, c, d, e, f) {
-this.command = a;
-this.seqs = b;
-this.position = c;
-this.number = d;
-this.al = e;
-this.gapChar = e.getGapCharacter ();
-this.string = Clazz.newCharArray (b.length, '\0');
-for (var g = 0; g < b.length; g++) {
-this.string[g] = f.toCharArray ();
-}
-this.fullAlignmentHeight = (e.getHeight () == b.length);
-}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~S");
-Clazz.defineMethod (c$, "getSequences",
-function () {
-return this.seqs;
-});
-Clazz.defineMethod (c$, "getPosition",
-function () {
-return this.position;
-});
-Clazz.defineMethod (c$, "getAction",
-function () {
-return this.command;
-});
-Clazz.defineMethod (c$, "getNumber",
-function () {
-return this.number;
-});
-Clazz.defineMethod (c$, "getGapCharacter",
-function () {
-return this.gapChar;
-});
-c$ = Clazz.p0p ();
-};
-Clazz.pu$h ();
-c$ = Clazz.declareType (jalview.commands.EditCommand, "Action", Enum);
-Clazz.defineMethod (c$, "getUndoAction",
-function () {
-switch (this) {
-case jalview.commands.EditCommand.Action.INSERT_GAP:
-return jalview.commands.EditCommand.Action.DELETE_GAP;
-case jalview.commands.EditCommand.Action.CUT:
-return jalview.commands.EditCommand.Action.PASTE;
-case jalview.commands.EditCommand.Action.DELETE_GAP:
-return jalview.commands.EditCommand.Action.INSERT_GAP;
-case jalview.commands.EditCommand.Action.INSERT_NUC:
-return null;
-case jalview.commands.EditCommand.Action.PASTE:
-return jalview.commands.EditCommand.Action.CUT;
-case jalview.commands.EditCommand.Action.REPLACE:
-return jalview.commands.EditCommand.Action.REPLACE;
-}
-return null;
-});
-Clazz.defineEnumConstant (c$, "INSERT_GAP", 0, []);
-Clazz.defineEnumConstant (c$, "DELETE_GAP", 1, []);
-Clazz.defineEnumConstant (c$, "CUT", 2, []);
-Clazz.defineEnumConstant (c$, "PASTE", 3, []);
-Clazz.defineEnumConstant (c$, "REPLACE", 4, []);
-Clazz.defineEnumConstant (c$, "INSERT_NUC", 5, []);
-c$ = Clazz.p0p ();
-});
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.CommandI", "java.lang.Enum", "java.util.ArrayList"], "jalview.commands.EditCommand", ["jalview.analysis.AlignSeq", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.Sequence", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "$.ReverseListIterator", "$.StringUtils", "java.lang.StringBuffer", "java.util.HashMap", "$.Hashtable"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.edits = null;
+this.description = null;
+if (!Clazz.isClassDefined ("jalview.commands.EditCommand.Edit")) {
+jalview.commands.EditCommand.$EditCommand$Edit$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.commands, "EditCommand", null, jalview.commands.CommandI);
+Clazz.prepareFields (c$, function () {
+this.edits = new java.util.ArrayList ();
+});
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (description) {
+this.description = description;
+}, "~S");
+Clazz.makeConstructor (c$,
+function (description, command, seqs, position, number, al) {
+this.description = description;
+if (command === jalview.commands.EditCommand.Action.CUT || command === jalview.commands.EditCommand.Action.PASTE) {
+this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al));
+}this.performEdit (0, null);
+}, "~S,jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$,
+function (description, command, replace, seqs, position, number, al) {
+this.description = description;
+if (command === jalview.commands.EditCommand.Action.REPLACE) {
+this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al, replace));
+}this.performEdit (0, null);
+}, "~S,jalview.commands.EditCommand.Action,~S,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "setEdit",
+function (e) {
+this.edits.clear ();
+this.edits.add (e);
+}, "jalview.commands.EditCommand.Edit");
+Clazz.defineMethod (c$, "addEdit",
+function (e) {
+if (!jalview.commands.EditCommand.expandEdit (this.edits, e)) {
+this.edits.add (e);
+}}, "jalview.commands.EditCommand.Edit");
+c$.expandEdit = Clazz.defineMethod (c$, "expandEdit",
+function (edits, e) {
+if (edits == null || edits.isEmpty ()) {
+return false;
+}var lastEdit = edits.get (edits.size () - 1);
+var action = e.command;
+if (lastEdit.command !== action) {
+return false;
+}if (lastEdit.seqs.length != e.seqs.length) {
+return false;
+}for (var i = 0; i < e.seqs.length; i++) {
+if (lastEdit.seqs[i].getDatasetSequence () !== e.seqs[i].getDatasetSequence ()) {
+return false;
+}}
+var contiguous = (action === jalview.commands.EditCommand.Action.INSERT_GAP && e.position == lastEdit.position + lastEdit.number) || (action === jalview.commands.EditCommand.Action.DELETE_GAP && e.position + e.number == lastEdit.position);
+if (contiguous) {
+lastEdit.number += e.number;
+lastEdit.seqs = e.seqs;
+if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+lastEdit.position--;
+}return true;
+}return false;
+}, "java.util.List,jalview.commands.EditCommand.Edit");
+Clazz.defineMethod (c$, "clearEdits",
+function () {
+this.edits.clear ();
+});
+Clazz.defineMethod (c$, "getEdit",
+function (i) {
+if (i >= 0 && i < this.edits.size ()) {
+return this.edits.get (i);
+}return null;
+}, "~N");
+Clazz.overrideMethod (c$, "getDescription",
+function () {
+return this.description;
+});
+Clazz.overrideMethod (c$, "getSize",
+function () {
+return this.edits.size ();
+});
+Clazz.defineMethod (c$, "getAlignment",
+function () {
+return (this.edits.isEmpty () ? null : this.edits.get (0).al);
+});
+Clazz.defineMethod (c$, "appendEdit",
+function (command, seqs, position, number, al, performEdit) {
+this.appendEdit (command, seqs, position, number, al, performEdit, null);
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~B");
+Clazz.defineMethod (c$, "appendEdit",
+function (command, seqs, position, number, al, performEdit, views) {
+var edit = Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al.getGapCharacter ());
+if (al.getHeight () == seqs.length) {
+edit.al = al;
+edit.fullAlignmentHeight = true;
+}this.addEdit (edit);
+if (performEdit) {
+jalview.commands.EditCommand.performEdit (edit, views);
+}}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~B,~A");
+Clazz.defineMethod (c$, "appendEdit",
+function (edit, al, performEdit, views) {
+if (al.getHeight () == edit.seqs.length) {
+edit.al = al;
+edit.fullAlignmentHeight = true;
+}this.addEdit (edit);
+if (performEdit) {
+jalview.commands.EditCommand.performEdit (edit, views);
+}}, "jalview.commands.EditCommand.Edit,jalview.datamodel.AlignmentI,~B,~A");
+Clazz.defineMethod (c$, "performEdit",
+function (commandIndex, views) {
+var iterator = this.edits.listIterator (commandIndex);
+while (iterator.hasNext ()) {
+var edit = iterator.next ();
+jalview.commands.EditCommand.performEdit (edit, views);
+}
+}, "~N,~A");
+c$.performEdit = Clazz.defineMethod (c$, "performEdit",
+function (edit, views) {
+switch (edit.command) {
+case jalview.commands.EditCommand.Action.INSERT_GAP:
+jalview.commands.EditCommand.insertGap (edit);
+break;
+case jalview.commands.EditCommand.Action.DELETE_GAP:
+jalview.commands.EditCommand.deleteGap (edit);
+break;
+case jalview.commands.EditCommand.Action.CUT:
+jalview.commands.EditCommand.cut (edit, views);
+break;
+case jalview.commands.EditCommand.Action.PASTE:
+jalview.commands.EditCommand.paste (edit, views);
+break;
+case jalview.commands.EditCommand.Action.REPLACE:
+jalview.commands.EditCommand.replace (edit);
+break;
+case jalview.commands.EditCommand.Action.INSERT_NUC:
+break;
+default:
+break;
+}
+}, "jalview.commands.EditCommand.Edit,~A");
+Clazz.overrideMethod (c$, "doCommand",
+function (views) {
+this.performEdit (0, views);
+}, "~A");
+Clazz.overrideMethod (c$, "undoCommand",
+function (views) {
+var iterator = this.edits.listIterator (this.edits.size ());
+while (iterator.hasPrevious ()) {
+var e = iterator.previous ();
+switch (e.command) {
+case jalview.commands.EditCommand.Action.INSERT_GAP:
+jalview.commands.EditCommand.deleteGap (e);
+break;
+case jalview.commands.EditCommand.Action.DELETE_GAP:
+jalview.commands.EditCommand.insertGap (e);
+break;
+case jalview.commands.EditCommand.Action.CUT:
+jalview.commands.EditCommand.paste (e, views);
+break;
+case jalview.commands.EditCommand.Action.PASTE:
+jalview.commands.EditCommand.cut (e, views);
+break;
+case jalview.commands.EditCommand.Action.REPLACE:
+jalview.commands.EditCommand.replace (e);
+break;
+case jalview.commands.EditCommand.Action.INSERT_NUC:
+break;
+default:
+break;
+}
+}
+}, "~A");
+c$.insertGap = Clazz.defineMethod (c$, "insertGap",
+($fz = function (command) {
+for (var s = 0; s < command.seqs.length; s++) {
+command.seqs[s].insertCharAt (command.position, command.number, command.gapChar);
+}
+jalview.commands.EditCommand.adjustAnnotations (command, true, false, null);
+}, $fz.isPrivate = true, $fz), "jalview.commands.EditCommand.Edit");
+c$.deleteGap = Clazz.defineMethod (c$, "deleteGap",
+($fz = function (command) {
+for (var s = 0; s < command.seqs.length; s++) {
+command.seqs[s].deleteChars (command.position, command.position + command.number);
+}
+jalview.commands.EditCommand.adjustAnnotations (command, false, false, null);
+}, $fz.isPrivate = true, $fz), "jalview.commands.EditCommand.Edit");
+c$.cut = Clazz.defineMethod (c$, "cut",
+function (command, views) {
+var seqDeleted = false;
+command.string = Clazz.newCharArray (command.seqs.length, '\0');
+for (var i = 0; i < command.seqs.length; i++) {
+var sequence = command.seqs[i];
+if (sequence.getLength () > command.position) {
+command.string[i] = sequence.getSequence (command.position, command.position + command.number);
+var oldds = sequence.getDatasetSequence ();
+if (command.oldds != null && command.oldds[i] != null) {
+sequence.setDatasetSequence (null);
+}sequence.deleteChars (command.position, command.position + command.number);
+if (command.oldds != null && command.oldds[i] != null) {
+sequence.setDatasetSequence (command.oldds[i]);
+command.oldds[i] = oldds;
+} else {
+if (oldds !== sequence.getDatasetSequence () || sequence.getSequenceFeatures () != null) {
+if (command.oldds == null) {
+command.oldds = new Array (command.seqs.length);
+}command.oldds[i] = oldds;
+jalview.commands.EditCommand.adjustFeatures (command, i, sequence.findPosition (command.position), sequence.findPosition (command.position + command.number), false);
+}}}if (sequence.getLength () < 1) {
+command.al.deleteSequence (sequence);
+seqDeleted = true;
+}}
+jalview.commands.EditCommand.adjustAnnotations (command, false, seqDeleted, views);
+}, "jalview.commands.EditCommand.Edit,~A");
+c$.paste = Clazz.defineMethod (c$, "paste",
+function (command, views) {
+var tmp;
+var newDSNeeded;
+var newDSWasNeeded;
+var newstart;
+var newend;
+var seqWasDeleted = false;
+var start = 0;
+var end = 0;
+for (var i = 0; i < command.seqs.length; i++) {
+newDSNeeded = false;
+newDSWasNeeded = command.oldds != null && command.oldds[i] != null;
+if (command.seqs[i].getLength () < 1) {
+if (command.alIndex[i] < command.al.getHeight ()) {
+var sequences;
+{
+if (!(command.alIndex[i] < 0)) {
+sequences.add (command.alIndex[i], command.seqs[i]);
+}}} else {
+command.al.addSequence (command.seqs[i]);
+}seqWasDeleted = true;
+}newstart = command.seqs[i].getStart ();
+newend = command.seqs[i].getEnd ();
+tmp = new StringBuffer ();
+tmp.append (command.seqs[i].getSequence ());
+if (command.string != null && command.string[i] != null) {
+if (command.position >= tmp.length ()) {
+var length = command.position - tmp.length ();
+while (length > 0) {
+tmp.append (command.gapChar);
+length--;
+}
+}tmp.insert (command.position, command.string[i]);
+for (var s = 0; s < command.string[i].length; s++) {
+if (jalview.schemes.ResidueProperties.aaIndex[command.string[i][s].charCodeAt (0)] != 23) {
+if (!newDSNeeded) {
+newDSNeeded = true;
+start = command.seqs[i].findPosition (command.position);
+end = command.seqs[i].findPosition (command.position + command.number);
+}if (command.seqs[i].getStart () == start) {
+newstart--;
+} else {
+newend++;
+}}}
+command.string[i] = null;
+}command.seqs[i].setSequence (tmp.toString ());
+command.seqs[i].setStart (newstart);
+command.seqs[i].setEnd (newend);
+if (newDSNeeded) {
+if (command.seqs[i].getDatasetSequence () != null) {
+var ds;
+if (newDSWasNeeded) {
+ds = command.oldds[i];
+} else {
+ds = new jalview.datamodel.Sequence (command.seqs[i].getName (), jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, command.seqs[i].getSequenceAsString ()), command.seqs[i].getStart (), command.seqs[i].getEnd ());
+ds.setDescription (command.seqs[i].getDescription ());
+}if (command.oldds == null) {
+command.oldds = new Array (command.seqs.length);
+}command.oldds[i] = command.seqs[i].getDatasetSequence ();
+command.seqs[i].setDatasetSequence (ds);
+}jalview.commands.EditCommand.adjustFeatures (command, i, start, end, true);
+}}
+jalview.commands.EditCommand.adjustAnnotations (command, true, seqWasDeleted, views);
+command.string = null;
+}, "jalview.commands.EditCommand.Edit,~A");
+c$.replace = Clazz.defineMethod (c$, "replace",
+function (command) {
+var tmp;
+var oldstring;
+var start = command.position;
+var end = command.number;
+command.number = start + command.string[0].length;
+for (var i = 0; i < command.seqs.length; i++) {
+var newDSWasNeeded = command.oldds != null && command.oldds[i] != null;
+oldstring = command.seqs[i].getSequenceAsString ();
+tmp = new StringBuffer (oldstring.substring (0, start));
+tmp.append (command.string[i]);
+var nogaprep = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (command.string[i]));
+var ipos = command.seqs[i].findPosition (start) - command.seqs[i].getStart ();
+tmp.append (oldstring.substring (end));
+command.seqs[i].setSequence (tmp.toString ());
+command.string[i] = oldstring.substring (start, end).toCharArray ();
+var nogapold = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (command.string[i]));
+if (!nogaprep.toLowerCase ().equals (nogapold.toLowerCase ())) {
+if (newDSWasNeeded) {
+var oldds = command.seqs[i].getDatasetSequence ();
+command.seqs[i].setDatasetSequence (command.oldds[i]);
+command.oldds[i] = oldds;
+} else {
+if (command.oldds == null) {
+command.oldds = new Array (command.seqs.length);
+}command.oldds[i] = command.seqs[i].getDatasetSequence ();
+var newds = new jalview.datamodel.Sequence (command.seqs[i].getDatasetSequence ());
+var fullseq;
+var osp = newds.getSequenceAsString ();
+fullseq = osp.substring (0, ipos) + nogaprep + osp.substring (ipos + nogaprep.length);
+newds.setSequence (fullseq.toUpperCase ());
+command.seqs[i].setDatasetSequence (newds);
+}}tmp = null;
+oldstring = null;
+}
+}, "jalview.commands.EditCommand.Edit");
+c$.adjustAnnotations = Clazz.defineMethod (c$, "adjustAnnotations",
+function (command, insert, modifyVisibility, views) {
+var annotations = null;
+if (modifyVisibility && !insert) {
+command.deletedAnnotationRows = new java.util.Hashtable ();
+}if (command.fullAlignmentHeight) {
+annotations = command.al.getAlignmentAnnotation ();
+} else {
+var aSize = 0;
+var tmp;
+for (var s = 0; s < command.seqs.length; s++) {
+if (modifyVisibility) {
+if (!insert) {
+tmp = command.seqs[s].getAnnotation ();
+if (tmp != null) {
+var alen = tmp.length;
+for (var aa = 0; aa < tmp.length; aa++) {
+if (!command.al.deleteAnnotation (tmp[aa])) {
+tmp[aa] = null;
+alen--;
+}}
+command.seqs[s].setAlignmentAnnotation (null);
+if (alen != tmp.length) {
+var saved = new Array (alen);
+for (var aa = 0, aapos = 0; aa < tmp.length; aa++) {
+if (tmp[aa] != null) {
+saved[aapos++] = tmp[aa];
+tmp[aa] = null;
+}}
+tmp = saved;
+command.deletedAnnotationRows.put (command.seqs[s], saved);
+for (var alview = 0; views != null && alview < views.length; alview++) {
+if (views[alview] !== command.al) {
+var toremove = views[alview].getAlignmentAnnotation ();
+if (toremove == null || toremove.length == 0) {
+continue;
+}for (var aa = 0; aa < toremove.length; aa++) {
+if (toremove[aa].sequenceRef === command.seqs[s]) {
+views[alview].deleteAnnotation (toremove[aa]);
+}}
+}}
+} else {
+command.deletedAnnotationRows.put (command.seqs[s], tmp);
+}}} else {
+if (command.deletedAnnotationRows != null && command.deletedAnnotationRows.containsKey (command.seqs[s])) {
+var revealed = command.deletedAnnotationRows.get (command.seqs[s]);
+command.seqs[s].setAlignmentAnnotation (revealed);
+if (revealed != null) {
+for (var aa = 0; aa < revealed.length; aa++) {
+command.al.addAnnotation (revealed[aa]);
+}
+for (var aa = 0; aa < revealed.length; aa++) {
+command.al.setAnnotationIndex (revealed[aa], aa);
+}
+for (var vnum = 0; views != null && vnum < views.length; vnum++) {
+if (views[vnum] !== command.al) {
+var avwidth = views[vnum].getWidth () + 1;
+for (var a = 0; a < revealed.length; a++) {
+var newann = new jalview.datamodel.AlignmentAnnotation (revealed[a]);
+command.seqs[s].addAlignmentAnnotation (newann);
+newann.padAnnotation (avwidth);
+views[vnum].addAnnotation (newann);
+views[vnum].setAnnotationIndex (newann, a);
+}
+}}
+}}}continue;
+}if (command.seqs[s].getAnnotation () == null) {
+continue;
+}if (aSize == 0) {
+annotations = command.seqs[s].getAnnotation ();
+} else {
+tmp = new Array (aSize + command.seqs[s].getAnnotation ().length);
+System.arraycopy (annotations, 0, tmp, 0, aSize);
+System.arraycopy (command.seqs[s].getAnnotation (), 0, tmp, aSize, command.seqs[s].getAnnotation ().length);
+annotations = tmp;
+}aSize = annotations.length;
+}
+}if (annotations == null) {
+return;
+}if (!insert) {
+command.deletedAnnotations = new java.util.Hashtable ();
+}var aSize;
+var temp;
+for (var a = 0; a < annotations.length; a++) {
+if (annotations[a].autoCalculated || annotations[a].annotations == null) {
+continue;
+}var tSize = 0;
+aSize = annotations[a].annotations.length;
+if (insert) {
+temp = new Array (aSize + command.number);
+if (annotations[a].padGaps) {
+for (var aa = 0; aa < temp.length; aa++) {
+temp[aa] = new jalview.datamodel.Annotation (command.gapChar + "", null, ' ', 0);
+}
+}} else {
+if (command.position < aSize) {
+if (command.position + command.number >= aSize) {
+tSize = aSize;
+} else {
+tSize = aSize - command.number;
+}} else {
+tSize = aSize;
+}if (tSize < 0) {
+tSize = aSize;
+}temp = new Array (tSize);
+}if (insert) {
+if (command.position < annotations[a].annotations.length) {
+System.arraycopy (annotations[a].annotations, 0, temp, 0, command.position);
+if (command.deletedAnnotations != null && command.deletedAnnotations.containsKey (annotations[a].annotationId)) {
+var restore = command.deletedAnnotations.get (annotations[a].annotationId);
+System.arraycopy (restore, 0, temp, command.position, command.number);
+}System.arraycopy (annotations[a].annotations, command.position, temp, command.position + command.number, aSize - command.position);
+} else {
+if (command.deletedAnnotations != null && command.deletedAnnotations.containsKey (annotations[a].annotationId)) {
+var restore = command.deletedAnnotations.get (annotations[a].annotationId);
+temp = new Array (annotations[a].annotations.length + restore.length);
+System.arraycopy (annotations[a].annotations, 0, temp, 0, annotations[a].annotations.length);
+System.arraycopy (restore, 0, temp, annotations[a].annotations.length, restore.length);
+} else {
+temp = annotations[a].annotations;
+}}} else {
+if (tSize != aSize || command.position < 2) {
+var copylen = Math.min (command.position, annotations[a].annotations.length);
+if (copylen > 0) {
+System.arraycopy (annotations[a].annotations, 0, temp, 0, copylen);
+}var deleted = new Array (command.number);
+if (copylen >= command.position) {
+copylen = Math.min (command.number, annotations[a].annotations.length - command.position);
+if (copylen > 0) {
+System.arraycopy (annotations[a].annotations, command.position, deleted, 0, copylen);
+}}command.deletedAnnotations.put (annotations[a].annotationId, deleted);
+if (annotations[a].annotations.length > command.position + command.number) {
+System.arraycopy (annotations[a].annotations, command.position + command.number, temp, command.position, annotations[a].annotations.length - command.position - command.number);
+}} else {
+var dSize = aSize - command.position;
+if (dSize > 0) {
+var deleted = new Array (command.number);
+System.arraycopy (annotations[a].annotations, command.position, deleted, 0, dSize);
+command.deletedAnnotations.put (annotations[a].annotationId, deleted);
+tSize = Math.min (annotations[a].annotations.length, command.position);
+temp = new Array (tSize);
+System.arraycopy (annotations[a].annotations, 0, temp, 0, tSize);
+} else {
+temp = annotations[a].annotations;
+}}}annotations[a].annotations = temp;
+}
+}, "jalview.commands.EditCommand.Edit,~B,~B,~A");
+c$.adjustFeatures = Clazz.defineMethod (c$, "adjustFeatures",
+function (command, index, i, j, insert) {
+var seq = command.seqs[index];
+var sequence = seq.getDatasetSequence ();
+if (sequence == null) {
+sequence = seq;
+}if (insert) {
+if (command.editedFeatures != null && command.editedFeatures.containsKey (seq)) {
+sequence.setSequenceFeatures (command.editedFeatures.get (seq));
+}return;
+}var sf = sequence.getSequenceFeatures ();
+if (sf == null) {
+return;
+}var oldsf = new Array (sf.length);
+var cSize = j - i;
+for (var s = 0; s < sf.length; s++) {
+var copy = new jalview.datamodel.SequenceFeature (sf[s]);
+oldsf[s] = copy;
+if (sf[s].getEnd () < i) {
+continue;
+}if (sf[s].getBegin () > j) {
+sf[s].setBegin (copy.getBegin () - cSize);
+sf[s].setEnd (copy.getEnd () - cSize);
+continue;
+}if (sf[s].getBegin () >= i) {
+sf[s].setBegin (i);
+}if (sf[s].getEnd () < j) {
+sf[s].setEnd (j - 1);
+}sf[s].setEnd (sf[s].getEnd () - (cSize));
+if (sf[s].getBegin () > sf[s].getEnd ()) {
+sequence.deleteFeature (sf[s]);
+}}
+if (command.editedFeatures == null) {
+command.editedFeatures = new java.util.Hashtable ();
+}command.editedFeatures.put (seq, oldsf);
+}, "jalview.commands.EditCommand.Edit,~N,~N,~N,~B");
+Clazz.defineMethod (c$, "getEdits",
+function () {
+return this.edits;
+});
+Clazz.defineMethod (c$, "priorState",
+function (forUndo) {
+var result = new java.util.HashMap ();
+if (this.getEdits () == null) {
+return result;
+}if (forUndo) {
+for (var e, $e = this.getEdits ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
+for (var seq, $seq = 0, $$seq = e.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+var ds = seq.getDatasetSequence ();
+var preEdit = result.get (ds);
+if (preEdit == null) {
+preEdit = new jalview.datamodel.Sequence ("", seq.getSequenceAsString ());
+preEdit.setDatasetSequence (ds);
+result.put (ds, preEdit);
+}}
+}
+return result;
+}var edits = new jalview.util.ReverseListIterator (this.getEdits ());
+while (edits.hasNext ()) {
+var oldEdit = edits.next ();
+var action = oldEdit.getAction ();
+var position = oldEdit.getPosition ();
+var number = oldEdit.getNumber ();
+var gap = oldEdit.getGapCharacter ();
+for (var seq, $seq = 0, $$seq = oldEdit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+var ds = seq.getDatasetSequence ();
+var preEdit = result.get (ds);
+if (preEdit == null) {
+preEdit = new jalview.datamodel.Sequence ("", seq.getSequenceAsString ());
+preEdit.setDatasetSequence (ds);
+result.put (ds, preEdit);
+}if (ds != null) {
+if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+preEdit.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (preEdit.getSequence (), position, number, gap)));
+} else if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
+preEdit.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (preEdit.getSequence (), position, position + number)));
+} else {
+System.err.println ("Can't undo edit action " + action);
+}}}
+}
+return result;
+}, "~B");
+Clazz.defineMethod (c$, "getEditIterator",
+function (forwards) {
+if (forwards) {
+return this.getEdits ().iterator ();
+} else {
+return new jalview.util.ReverseListIterator (this.getEdits ());
+}}, "~B");
+c$.$EditCommand$Edit$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.oldds = null;
+this.fullAlignmentHeight = false;
+this.deletedAnnotationRows = null;
+this.deletedAnnotations = null;
+this.editedFeatures = null;
+this.al = null;
+this.command = null;
+this.string = null;
+this.seqs = null;
+this.alIndex = null;
+this.position = 0;
+this.number = 0;
+this.gapChar = '\0';
+Clazz.instantialize (this, arguments);
+}, jalview.commands.EditCommand, "Edit");
+Clazz.makeConstructor (c$,
+function (a, b, c, d, e) {
+this.command = a;
+this.seqs = b;
+this.position = c;
+this.number = d;
+this.gapChar = e;
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,~S");
+Clazz.makeConstructor (c$,
+function (a, b, c, d, e) {
+this.gapChar = e.getGapCharacter ();
+this.command = a;
+this.seqs = b;
+this.position = c;
+this.number = d;
+this.al = e;
+this.alIndex = Clazz.newIntArray (b.length, 0);
+for (var f = 0; f < b.length; f++) {
+this.alIndex[f] = e.findIndex (b[f]);
+}
+this.fullAlignmentHeight = (e.getHeight () == b.length);
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$,
+function (a, b, c, d, e, f) {
+this.command = a;
+this.seqs = b;
+this.position = c;
+this.number = d;
+this.al = e;
+this.gapChar = e.getGapCharacter ();
+this.string = Clazz.newCharArray (b.length, '\0');
+for (var g = 0; g < b.length; g++) {
+this.string[g] = f.toCharArray ();
+}
+this.fullAlignmentHeight = (e.getHeight () == b.length);
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~S");
+Clazz.defineMethod (c$, "getSequences",
+function () {
+return this.seqs;
+});
+Clazz.defineMethod (c$, "getPosition",
+function () {
+return this.position;
+});
+Clazz.defineMethod (c$, "getAction",
+function () {
+return this.command;
+});
+Clazz.defineMethod (c$, "getNumber",
+function () {
+return this.number;
+});
+Clazz.defineMethod (c$, "getGapCharacter",
+function () {
+return this.gapChar;
+});
+c$ = Clazz.p0p ();
+};
+Clazz.pu$h ();
+c$ = Clazz.declareType (jalview.commands.EditCommand, "Action", Enum);
+Clazz.defineMethod (c$, "getUndoAction",
+function () {
+switch (this) {
+case jalview.commands.EditCommand.Action.INSERT_GAP:
+return jalview.commands.EditCommand.Action.DELETE_GAP;
+case jalview.commands.EditCommand.Action.CUT:
+return jalview.commands.EditCommand.Action.PASTE;
+case jalview.commands.EditCommand.Action.DELETE_GAP:
+return jalview.commands.EditCommand.Action.INSERT_GAP;
+case jalview.commands.EditCommand.Action.INSERT_NUC:
+return null;
+case jalview.commands.EditCommand.Action.PASTE:
+return jalview.commands.EditCommand.Action.CUT;
+case jalview.commands.EditCommand.Action.REPLACE:
+return jalview.commands.EditCommand.Action.REPLACE;
+}
+return null;
+});
+Clazz.defineEnumConstant (c$, "INSERT_GAP", 0, []);
+Clazz.defineEnumConstant (c$, "DELETE_GAP", 1, []);
+Clazz.defineEnumConstant (c$, "CUT", 2, []);
+Clazz.defineEnumConstant (c$, "PASTE", 3, []);
+Clazz.defineEnumConstant (c$, "REPLACE", 4, []);
+Clazz.defineEnumConstant (c$, "INSERT_NUC", 5, []);
+c$ = Clazz.p0p ();
+});
diff --git a/bin/jalview/commands/OrderCommand.js b/bin/jalview/commands/OrderCommand.js
index c85c70b..8939653 100644
--- a/bin/jalview/commands/OrderCommand.js
+++ b/bin/jalview/commands/OrderCommand.js
@@ -1,38 +1,38 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.load (["jalview.commands.CommandI"], "jalview.commands.OrderCommand", ["jalview.analysis.AlignmentSorter"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.description = null;
-this.seqs = null;
-this.seqs2 = null;
-this.al = null;
-Clazz.instantialize (this, arguments);
-}, jalview.commands, "OrderCommand", null, jalview.commands.CommandI);
-Clazz.makeConstructor (c$,
-function (description, seqs, al) {
-this.description = description;
-this.seqs = seqs;
-this.seqs2 = al.getSequencesArray ();
-this.al = al;
-this.doCommand (null);
-}, "~S,~A,jalview.datamodel.AlignmentI");
-Clazz.overrideMethod (c$, "getDescription",
-function () {
-return this.description;
-});
-Clazz.overrideMethod (c$, "getSize",
-function () {
-return 1;
-});
-Clazz.overrideMethod (c$, "doCommand",
-function (views) {
-jalview.analysis.AlignmentSorter.setOrder (this.al, this.seqs2);
-}, "~A");
-Clazz.overrideMethod (c$, "undoCommand",
-function (views) {
-jalview.analysis.AlignmentSorter.setOrder (this.al, this.seqs);
-}, "~A");
-Clazz.defineMethod (c$, "getSequenceOrder",
-function (undo) {
-return undo ? this.seqs : this.seqs2;
-}, "~B");
-});
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.CommandI"], "jalview.commands.OrderCommand", ["jalview.analysis.AlignmentSorter"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.description = null;
+this.seqs = null;
+this.seqs2 = null;
+this.al = null;
+Clazz.instantialize (this, arguments);
+}, jalview.commands, "OrderCommand", null, jalview.commands.CommandI);
+Clazz.makeConstructor (c$,
+function (description, seqs, al) {
+this.description = description;
+this.seqs = seqs;
+this.seqs2 = al.getSequencesArray ();
+this.al = al;
+this.doCommand (null);
+}, "~S,~A,jalview.datamodel.AlignmentI");
+Clazz.overrideMethod (c$, "getDescription",
+function () {
+return this.description;
+});
+Clazz.overrideMethod (c$, "getSize",
+function () {
+return 1;
+});
+Clazz.overrideMethod (c$, "doCommand",
+function (views) {
+jalview.analysis.AlignmentSorter.setOrder (this.al, this.seqs2);
+}, "~A");
+Clazz.overrideMethod (c$, "undoCommand",
+function (views) {
+jalview.analysis.AlignmentSorter.setOrder (this.al, this.seqs);
+}, "~A");
+Clazz.defineMethod (c$, "getSequenceOrder",
+function (undo) {
+return undo ? this.seqs : this.seqs2;
+}, "~B");
+});
diff --git a/bin/jalview/commands/RemoveGapColCommand.js b/bin/jalview/commands/RemoveGapColCommand.js
index a41e76e..511279b 100644
--- a/bin/jalview/commands/RemoveGapColCommand.js
+++ b/bin/jalview/commands/RemoveGapColCommand.js
@@ -1,45 +1,45 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.RemoveGapColCommand", ["jalview.util.Comparison"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.columnsDeleted = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.commands, "RemoveGapColCommand", jalview.commands.EditCommand);
-Clazz.makeConstructor (c$,
-function (description, seqs, start, end, al) {
-Clazz.superConstructor (this, jalview.commands.RemoveGapColCommand, []);
-this.description = description;
-var j;
-var jSize = seqs.length;
-var startCol = -1;
-var endCol = -1;
-this.columnsDeleted = 0;
-this.clearEdits ();
-var $delete = true;
-for (var i = start; i <= end; i++) {
-$delete = true;
-for (j = 0; j < jSize; j++) {
-if (seqs[j].getLength () > i) {
-if (!jalview.util.Comparison.isGap (seqs[j].getCharAt (i))) {
-if ($delete) {
-endCol = i;
-}$delete = false;
-break;
-}}}
-if ($delete && startCol == -1) {
-startCol = i;
-}if (!$delete && startCol > -1) {
-this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seqs, startCol - this.columnsDeleted, endCol - startCol, al, false, null);
-this.columnsDeleted += (endCol - startCol);
-startCol = -1;
-endCol = -1;
-}}
-if ($delete && startCol > -1) {
-this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seqs, startCol - this.columnsDeleted, end - startCol + 1, al, false, null);
-this.columnsDeleted += (end - startCol + 1);
-}this.performEdit (0, null);
-}, "~S,~A,~N,~N,jalview.datamodel.AlignmentI");
-Clazz.overrideMethod (c$, "getSize",
-function () {
-return this.columnsDeleted;
-});
-});
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.RemoveGapColCommand", ["jalview.util.Comparison"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.columnsDeleted = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.commands, "RemoveGapColCommand", jalview.commands.EditCommand);
+Clazz.makeConstructor (c$,
+function (description, seqs, start, end, al) {
+Clazz.superConstructor (this, jalview.commands.RemoveGapColCommand, []);
+this.description = description;
+var j;
+var jSize = seqs.length;
+var startCol = -1;
+var endCol = -1;
+this.columnsDeleted = 0;
+this.clearEdits ();
+var $delete = true;
+for (var i = start; i <= end; i++) {
+$delete = true;
+for (j = 0; j < jSize; j++) {
+if (seqs[j].getLength () > i) {
+if (!jalview.util.Comparison.isGap (seqs[j].getCharAt (i))) {
+if ($delete) {
+endCol = i;
+}$delete = false;
+break;
+}}}
+if ($delete && startCol == -1) {
+startCol = i;
+}if (!$delete && startCol > -1) {
+this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seqs, startCol - this.columnsDeleted, endCol - startCol, al, false, null);
+this.columnsDeleted += (endCol - startCol);
+startCol = -1;
+endCol = -1;
+}}
+if ($delete && startCol > -1) {
+this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, seqs, startCol - this.columnsDeleted, end - startCol + 1, al, false, null);
+this.columnsDeleted += (end - startCol + 1);
+}this.performEdit (0, null);
+}, "~S,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.overrideMethod (c$, "getSize",
+function () {
+return this.columnsDeleted;
+});
+});
diff --git a/bin/jalview/commands/RemoveGapsCommand.js b/bin/jalview/commands/RemoveGapsCommand.js
index 7097db3..3cc233d 100644
--- a/bin/jalview/commands/RemoveGapsCommand.js
+++ b/bin/jalview/commands/RemoveGapsCommand.js
@@ -1,56 +1,56 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.RemoveGapsCommand", ["jalview.util.Comparison"], function () {
-c$ = Clazz.declareType (jalview.commands, "RemoveGapsCommand", jalview.commands.EditCommand);
-Clazz.makeConstructor (c$,
-function (description, seqs, al) {
-Clazz.superConstructor (this, jalview.commands.RemoveGapsCommand, []);
-this.description = description;
-var width = 0;
-for (var i = 0; i < seqs.length; i++) {
-if (seqs[i].getLength () > width) {
-width = seqs[i].getLength ();
-}}
-this.findGaps (seqs, 0, width, al);
-}, "~S,~A,jalview.datamodel.AlignmentI");
-Clazz.makeConstructor (c$,
-function (description, seqs, start, end, al) {
-Clazz.superConstructor (this, jalview.commands.RemoveGapsCommand, []);
-this.description = description;
-this.findGaps (seqs, start, end, al);
-}, "~S,~A,~N,~N,jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "findGaps",
-function (seqs, start, end, al) {
-var startCol = -1;
-var endCol = -1;
-var deletedCols = 0;
-var j;
-var jSize;
-this.clearEdits ();
-var $delete = true;
-var sequence;
-for (var s = 0; s < seqs.length; s++) {
-deletedCols = 0;
-startCol = -1;
-endCol = -1;
-sequence = seqs[s].getSequence (start, end + 1);
-jSize = sequence.length;
-for (j = 0; j < jSize; j++) {
-$delete = true;
-if (!jalview.util.Comparison.isGap (sequence[j])) {
-if ($delete) {
-endCol = j;
-}$delete = false;
-}if ($delete && startCol == -1) {
-startCol = j;
-}if (!$delete && startCol > -1) {
-this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, Clazz.newArray (-1, [seqs[s]]), start + startCol - deletedCols, endCol - startCol, al, false, null);
-deletedCols += (endCol - startCol);
-startCol = -1;
-endCol = -1;
-}}
-if ($delete && startCol > -1) {
-this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, Clazz.newArray (-1, [seqs[s]]), start + startCol - deletedCols, jSize - startCol, al, false, null);
-}}
-this.performEdit (0, null);
-}, "~A,~N,~N,jalview.datamodel.AlignmentI");
-});
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.RemoveGapsCommand", ["jalview.util.Comparison"], function () {
+c$ = Clazz.declareType (jalview.commands, "RemoveGapsCommand", jalview.commands.EditCommand);
+Clazz.makeConstructor (c$,
+function (description, seqs, al) {
+Clazz.superConstructor (this, jalview.commands.RemoveGapsCommand, []);
+this.description = description;
+var width = 0;
+for (var i = 0; i < seqs.length; i++) {
+if (seqs[i].getLength () > width) {
+width = seqs[i].getLength ();
+}}
+this.findGaps (seqs, 0, width, al);
+}, "~S,~A,jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$,
+function (description, seqs, start, end, al) {
+Clazz.superConstructor (this, jalview.commands.RemoveGapsCommand, []);
+this.description = description;
+this.findGaps (seqs, start, end, al);
+}, "~S,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "findGaps",
+function (seqs, start, end, al) {
+var startCol = -1;
+var endCol = -1;
+var deletedCols = 0;
+var j;
+var jSize;
+this.clearEdits ();
+var $delete = true;
+var sequence;
+for (var s = 0; s < seqs.length; s++) {
+deletedCols = 0;
+startCol = -1;
+endCol = -1;
+sequence = seqs[s].getSequence (start, end + 1);
+jSize = sequence.length;
+for (j = 0; j < jSize; j++) {
+$delete = true;
+if (!jalview.util.Comparison.isGap (sequence[j])) {
+if ($delete) {
+endCol = j;
+}$delete = false;
+}if ($delete && startCol == -1) {
+startCol = j;
+}if (!$delete && startCol > -1) {
+this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, Clazz.newArray (-1, [seqs[s]]), start + startCol - deletedCols, endCol - startCol, al, false, null);
+deletedCols += (endCol - startCol);
+startCol = -1;
+endCol = -1;
+}}
+if ($delete && startCol > -1) {
+this.appendEdit (jalview.commands.EditCommand.Action.DELETE_GAP, Clazz.newArray (-1, [seqs[s]]), start + startCol - deletedCols, jSize - startCol, al, false, null);
+}}
+this.performEdit (0, null);
+}, "~A,~N,~N,jalview.datamodel.AlignmentI");
+});
diff --git a/bin/jalview/commands/SlideSequencesCommand.js b/bin/jalview/commands/SlideSequencesCommand.js
index 125c732..5a79b67 100644
--- a/bin/jalview/commands/SlideSequencesCommand.js
+++ b/bin/jalview/commands/SlideSequencesCommand.js
@@ -1,48 +1,48 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.SlideSequencesCommand", ["jalview.util.Comparison"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.gapsInsertedBegin = false;
-Clazz.instantialize (this, arguments);
-}, jalview.commands, "SlideSequencesCommand", jalview.commands.EditCommand);
-Clazz.makeConstructor (c$,
-function (description, seqsLeft, seqsRight, slideSize, gapChar) {
-Clazz.superConstructor (this, jalview.commands.SlideSequencesCommand, []);
-this.description = description;
-var lSize = seqsLeft.length;
-this.gapsInsertedBegin = false;
-var i;
-var j;
-for (i = 0; i < lSize; i++) {
-for (j = 0; j < slideSize; j++) {
-if (!jalview.util.Comparison.isGap (seqsLeft[i].getCharAt (j))) {
-this.gapsInsertedBegin = true;
-break;
-}}
-}
-var e = null;
-if (!this.gapsInsertedBegin) {
-e = Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.DELETE_GAP, seqsLeft, 0, slideSize, gapChar);
-this.setEdit (e);
-} else {
-e = Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.INSERT_GAP, seqsRight, 0, slideSize, gapChar);
-this.setEdit (e);
-}jalview.commands.EditCommand.performEdit (e, null);
-}, "~S,~A,~A,~N,~S");
-Clazz.defineMethod (c$, "getGapsInsertedBegin",
-function () {
-return this.gapsInsertedBegin;
-});
-Clazz.defineMethod (c$, "appendSlideCommand",
-function (command) {
-var same = false;
-if (command.getEdit (0).seqs.length == this.getEdit (0).seqs.length) {
-same = true;
-for (var i = 0; i < command.getEdit (0).seqs.length; i++) {
-if (this.getEdit (0).seqs[i] !== command.getEdit (0).seqs[i]) {
-same = false;
-}}
-}if (same) {
-command.addEdit (this.getEdit (0));
-}return same;
-}, "jalview.commands.SlideSequencesCommand");
-});
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.SlideSequencesCommand", ["jalview.util.Comparison"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.gapsInsertedBegin = false;
+Clazz.instantialize (this, arguments);
+}, jalview.commands, "SlideSequencesCommand", jalview.commands.EditCommand);
+Clazz.makeConstructor (c$,
+function (description, seqsLeft, seqsRight, slideSize, gapChar) {
+Clazz.superConstructor (this, jalview.commands.SlideSequencesCommand, []);
+this.description = description;
+var lSize = seqsLeft.length;
+this.gapsInsertedBegin = false;
+var i;
+var j;
+for (i = 0; i < lSize; i++) {
+for (j = 0; j < slideSize; j++) {
+if (!jalview.util.Comparison.isGap (seqsLeft[i].getCharAt (j))) {
+this.gapsInsertedBegin = true;
+break;
+}}
+}
+var e = null;
+if (!this.gapsInsertedBegin) {
+e = Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.DELETE_GAP, seqsLeft, 0, slideSize, gapChar);
+this.setEdit (e);
+} else {
+e = Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.INSERT_GAP, seqsRight, 0, slideSize, gapChar);
+this.setEdit (e);
+}jalview.commands.EditCommand.performEdit (e, null);
+}, "~S,~A,~A,~N,~S");
+Clazz.defineMethod (c$, "getGapsInsertedBegin",
+function () {
+return this.gapsInsertedBegin;
+});
+Clazz.defineMethod (c$, "appendSlideCommand",
+function (command) {
+var same = false;
+if (command.getEdit (0).seqs.length == this.getEdit (0).seqs.length) {
+same = true;
+for (var i = 0; i < command.getEdit (0).seqs.length; i++) {
+if (this.getEdit (0).seqs[i] !== command.getEdit (0).seqs[i]) {
+same = false;
+}}
+}if (same) {
+command.addEdit (this.getEdit (0));
+}return same;
+}, "jalview.commands.SlideSequencesCommand");
+});
diff --git a/bin/jalview/commands/TrimRegionCommand.class b/bin/jalview/commands/TrimRegionCommand.class
index aace60c..5e4d0bb 100644
Binary files a/bin/jalview/commands/TrimRegionCommand.class and b/bin/jalview/commands/TrimRegionCommand.class differ
diff --git a/bin/jalview/commands/TrimRegionCommand.js b/bin/jalview/commands/TrimRegionCommand.js
index ff06747..2732ca0 100644
--- a/bin/jalview/commands/TrimRegionCommand.js
+++ b/bin/jalview/commands/TrimRegionCommand.js
@@ -1,91 +1,91 @@
-Clazz.declarePackage ("jalview.commands");
-Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.TrimRegionCommand", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.colSel = null;
-this.start = null;
-this.shiftList = null;
-this.selectionGroup = null;
-this.deletedHiddenColumns = null;
-this.columnsDeleted = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.commands, "TrimRegionCommand", jalview.commands.EditCommand);
-Clazz.makeConstructor (c$,
-function (description, command, seqs, column, al, colSel, selectedRegion) {
-Clazz.superConstructor (this, jalview.commands.TrimRegionCommand, []);
-this.description = description;
-this.selectionGroup = selectedRegion;
-this.colSel = colSel;
-if (command.equalsIgnoreCase (jalview.commands.TrimRegionCommand.TRIM_LEFT)) {
-if (column == 0) {
-return;
-}this.columnsDeleted = column;
-this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.CUT, seqs, 0, column, al));
-} else if (command.equalsIgnoreCase (jalview.commands.TrimRegionCommand.TRIM_RIGHT)) {
-var width = al.getWidth () - column - 1;
-if (width < 2) {
-return;
-}this.columnsDeleted = width - 1;
-this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.CUT, seqs, column + 1, width, al));
-}var i;
-var isize = this.getEdit (0).seqs.length;
-this.start = Clazz.newIntArray (isize, 0);
-for (i = 0; i < isize; i++) {
-this.start[i] = this.getEdit (0).seqs[i].getStart ();
-}
-this.performEdit (0, null);
-}, "~S,~S,~A,~N,jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "cut",
-function (command) {
-var column;
-var j;
-var jSize = command.seqs.length;
-for (j = 0; j < jSize; j++) {
-if (command.position == 0) {
-column = command.seqs[j].findPosition (command.number);
-command.seqs[j].setStart (column);
-} else {
-column = command.seqs[j].findPosition (command.position) - 1;
-command.seqs[j].setEnd (column);
-}}
-Clazz.superCall (this, jalview.commands.TrimRegionCommand, "cut", [command, null]);
-if (command.position == 0) {
-this.deletedHiddenColumns = this.colSel.compensateForEdit (0, command.number);
-if (this.selectionGroup != null) {
-this.selectionGroup.adjustForRemoveLeft (command.number);
-}} else {
-this.deletedHiddenColumns = this.colSel.compensateForEdit (command.position, command.number);
-if (this.selectionGroup != null) {
-this.selectionGroup.adjustForRemoveRight (command.position);
-}}}, "jalview.commands.EditCommand.Edit");
-Clazz.defineMethod (c$, "paste",
-function (command) {
-Clazz.superCall (this, jalview.commands.TrimRegionCommand, "paste", [command, null]);
-var column;
-var j;
-var jSize = command.seqs.length;
-for (j = 0; j < jSize; j++) {
-if (command.position == 0) {
-command.seqs[j].setStart (this.start[j]);
-} else {
-column = command.seqs[j].findPosition (command.number + command.position) - 1;
-command.seqs[j].setEnd (column);
-}}
-if (command.position == 0) {
-this.colSel.compensateForEdit (0, -command.number);
-if (this.selectionGroup != null) {
-this.selectionGroup.adjustForRemoveLeft (-command.number);
-}}if (this.deletedHiddenColumns != null) {
-var region;
-for (var i = 0; i < this.deletedHiddenColumns.size (); i++) {
-region = this.deletedHiddenColumns.get (i);
-this.colSel.hideColumns (region[0], region[1]);
-}
-}}, "jalview.commands.EditCommand.Edit");
-Clazz.overrideMethod (c$, "getSize",
-function () {
-return this.columnsDeleted;
-});
-Clazz.defineStatics (c$,
-"TRIM_LEFT", "TrimLeft",
-"TRIM_RIGHT", "TrimRight");
-});
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.EditCommand"], "jalview.commands.TrimRegionCommand", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.colSel = null;
+this.start = null;
+this.shiftList = null;
+this.selectionGroup = null;
+this.deletedHiddenColumns = null;
+this.columnsDeleted = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.commands, "TrimRegionCommand", jalview.commands.EditCommand);
+Clazz.makeConstructor (c$,
+function (description, command, seqs, column, al, colSel, selectedRegion) {
+Clazz.superConstructor (this, jalview.commands.TrimRegionCommand, []);
+this.description = description;
+this.selectionGroup = selectedRegion;
+this.colSel = colSel;
+if (command.equalsIgnoreCase (jalview.commands.TrimRegionCommand.TRIM_LEFT)) {
+if (column == 0) {
+return;
+}this.columnsDeleted = column;
+this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.CUT, seqs, 0, column, al));
+} else if (command.equalsIgnoreCase (jalview.commands.TrimRegionCommand.TRIM_RIGHT)) {
+var width = al.getWidth () - column - 1;
+if (width < 2) {
+return;
+}this.columnsDeleted = width - 1;
+this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, jalview.commands.EditCommand.Action.CUT, seqs, column + 1, width, al));
+}var i;
+var isize = this.getEdit (0).seqs.length;
+this.start = Clazz.newIntArray (isize, 0);
+for (i = 0; i < isize; i++) {
+this.start[i] = this.getEdit (0).seqs[i].getStart ();
+}
+this.performEdit (0, null);
+}, "~S,~S,~A,~N,jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "cut",
+function (command) {
+var column;
+var j;
+var jSize = command.seqs.length;
+for (j = 0; j < jSize; j++) {
+if (command.position == 0) {
+column = command.seqs[j].findPosition (command.number);
+command.seqs[j].setStart (column);
+} else {
+column = command.seqs[j].findPosition (command.position) - 1;
+command.seqs[j].setEnd (column);
+}}
+Clazz.superCall (this, jalview.commands.TrimRegionCommand, "cut", [command, null]);
+if (command.position == 0) {
+this.deletedHiddenColumns = this.colSel.compensateForEdit (0, command.number);
+if (this.selectionGroup != null) {
+this.selectionGroup.adjustForRemoveLeft (command.number);
+}} else {
+this.deletedHiddenColumns = this.colSel.compensateForEdit (command.position, command.number);
+if (this.selectionGroup != null) {
+this.selectionGroup.adjustForRemoveRight (command.position);
+}}}, "jalview.commands.EditCommand.Edit");
+Clazz.defineMethod (c$, "paste",
+function (command) {
+Clazz.superCall (this, jalview.commands.TrimRegionCommand, "paste", [command, null]);
+var column;
+var j;
+var jSize = command.seqs.length;
+for (j = 0; j < jSize; j++) {
+if (command.position == 0) {
+command.seqs[j].setStart (this.start[j]);
+} else {
+column = command.seqs[j].findPosition (command.number + command.position) - 1;
+command.seqs[j].setEnd (column);
+}}
+if (command.position == 0) {
+this.colSel.compensateForEdit (0, -command.number);
+if (this.selectionGroup != null) {
+this.selectionGroup.adjustForRemoveLeft (-command.number);
+}}if (this.deletedHiddenColumns != null) {
+var region;
+for (var i = 0; i < this.deletedHiddenColumns.size (); i++) {
+region = this.deletedHiddenColumns.get (i);
+this.colSel.hideColumns (region[0], region[1]);
+}
+}}, "jalview.commands.EditCommand.Edit");
+Clazz.overrideMethod (c$, "getSize",
+function () {
+return this.columnsDeleted;
+});
+Clazz.defineStatics (c$,
+"TRIM_LEFT", "TrimLeft",
+"TRIM_RIGHT", "TrimRight");
+});
diff --git a/bin/jalview/controller/AlignViewController.class b/bin/jalview/controller/AlignViewController.class
index c9c4b78..7507fec 100644
Binary files a/bin/jalview/controller/AlignViewController.class and b/bin/jalview/controller/AlignViewController.class differ
diff --git a/bin/jalview/controller/AlignViewController.js b/bin/jalview/controller/AlignViewController.js
index 966223d..c773729 100644
--- a/bin/jalview/controller/AlignViewController.js
+++ b/bin/jalview/controller/AlignViewController.js
@@ -1,219 +1,219 @@
-Clazz.declarePackage ("jalview.controller");
-Clazz.load (["jalview.api.AlignViewControllerI"], "jalview.controller.AlignViewController", ["jalview.analysis.AlignmentSorter", "$.Grouping", "jalview.commands.OrderCommand", "jalview.datamodel.ColumnSelection", "jalview.io.FeaturesFile", "jalview.util.MessageManager", "java.awt.Color", "java.util.ArrayList", "$.BitSet"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.viewport = null;
-this.alignPanel = null;
-this.avcg = null;
-Clazz.instantialize (this, arguments);
-}, jalview.controller, "AlignViewController", null, jalview.api.AlignViewControllerI);
-Clazz.overrideMethod (c$, "finalize",
-function () {
-this.viewport = null;
-this.alignPanel = null;
-this.avcg = null;
-});
-Clazz.makeConstructor (c$,
-function (alignFrame, viewport, alignPanel) {
-this.avcg = alignFrame;
-this.viewport = viewport;
-this.alignPanel = alignPanel;
-}, "jalview.api.AlignViewControllerGuiI,jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
-Clazz.overrideMethod (c$, "setViewportAndAlignmentPanel",
-function (viewport, alignPanel) {
-this.alignPanel = alignPanel;
-this.viewport = viewport;
-}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
-Clazz.overrideMethod (c$, "makeGroupsFromSelection",
-function () {
-var sg = this.viewport.getSelectionGroup ();
-var cs = this.viewport.getColumnSelection ();
-var gps = null;
-if (sg != null && (cs == null || cs.getSelected () == null || cs.size () == 0)) {
-gps = jalview.analysis.Grouping.makeGroupsFrom (this.viewport.getSequenceSelection (), this.viewport.getAlignmentView (true).getSequenceStrings (this.viewport.getGapCharacter ()), this.viewport.getAlignment ().getGroups ());
-} else {
-if (cs != null) {
-gps = jalview.analysis.Grouping.makeGroupsFromCols ((sg == null) ? this.viewport.getAlignment ().getSequencesArray () : sg.getSequences ().toArray ( new Array (0)), cs, this.viewport.getAlignment ().getGroups ());
-}}if (gps != null) {
-this.viewport.getAlignment ().deleteAllGroups ();
-this.viewport.clearSequenceColours ();
-this.viewport.setSelectionGroup (null);
-for (var g = 0; g < gps.length; g++) {
-gps[g].setshowSequenceLogo (this.viewport.isShowSequenceLogo ());
-this.viewport.getAlignment ().addGroup (gps[g]);
-var col = new java.awt.Color (Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255));
-col = col.brighter ();
-for (var sq, $sq = gps[g].getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-this.viewport.setSequenceColour (sq, col);
-}
-}
-return true;
-}return false;
-});
-Clazz.overrideMethod (c$, "createGroup",
-function () {
-var sg = this.viewport.getSelectionGroup ();
-if (sg != null) {
-this.viewport.getAlignment ().addGroup (sg);
-return true;
-}return false;
-});
-Clazz.overrideMethod (c$, "unGroup",
-function () {
-var sg = this.viewport.getSelectionGroup ();
-if (sg != null) {
-this.viewport.getAlignment ().deleteGroup (sg);
-return true;
-}return false;
-});
-Clazz.overrideMethod (c$, "deleteGroups",
-function () {
-if (this.viewport.getAlignment ().getGroups () != null && this.viewport.getAlignment ().getGroups ().size () > 0) {
-this.viewport.getAlignment ().deleteAllGroups ();
-this.viewport.clearSequenceColours ();
-this.viewport.setSelectionGroup (null);
-return true;
-}return false;
-});
-Clazz.overrideMethod (c$, "markColumnsContainingFeatures",
-function (invert, extendCurrent, toggle, featureType) {
-var bs = new java.util.BitSet ();
-var alw;
-var alStart;
-var sqcol = (this.viewport.getSelectionGroup () == null ? this.viewport.getAlignment () : this.viewport.getSelectionGroup ());
-alStart = sqcol.getStartRes ();
-alw = sqcol.getEndRes () + 1;
-var seqs = sqcol.getSequences ();
-var nseq = 0;
-for (var sq, $sq = seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-var tfeat = 0;
-if (sq != null) {
-var sf = sq.getSequenceFeatures ();
-if (sf != null) {
-var ist = sq.findIndex (sq.getStart ());
-var iend = sq.findIndex (sq.getEnd ());
-if (iend < alStart || ist > alw) {
-continue;
-}for (var sfpos, $sfpos = 0, $$sfpos = sf; $sfpos < $$sfpos.length && ((sfpos = $$sfpos[$sfpos]) || true); $sfpos++) {
-if (sfpos != null && (featureType.equals (sfpos.getType ()))) {
-tfeat++;
-var i = sq.findIndex (sfpos.getBegin ());
-var j = sq.findIndex (sfpos.getEnd ());
-if (j < alStart || i > alw) {
-continue;
-}if (i < alStart) {
-i = alStart;
-}if (i < ist) {
-i = ist;
-}if (j > alw) {
-j = alw;
-}for (; i <= j; i++) {
-bs.set (i - 1);
-}
-}}
-}if (tfeat > 0) {
-nseq++;
-}}}
-var cs = this.viewport.getColumnSelection ();
-if (bs.cardinality () > 0 || invert) {
-if (cs == null) {
-cs = new jalview.datamodel.ColumnSelection ();
-} else {
-if (!extendCurrent) {
-cs.clear ();
-}}if (invert) {
-for (var i = bs.nextClearBit (alStart), ibs = bs.nextSetBit (alStart); i >= alStart && i < (alw); ) {
-if (ibs < 0 || i < ibs) {
-if (toggle && cs.contains (i)) {
-cs.removeElement (i++);
-} else {
-cs.addElement (i++);
-}} else {
-i = bs.nextClearBit (ibs);
-ibs = bs.nextSetBit (i);
-}}
-} else {
-for (var i = bs.nextSetBit (alStart); i >= alStart; i = bs.nextSetBit (i + 1)) {
-if (toggle && cs.contains (i)) {
-cs.removeElement (i);
-} else {
-cs.addElement (i);
-}}
-}this.viewport.setColumnSelection (cs);
-this.alignPanel.paintAlignment (true);
-this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.view_controller_toggled_marked", Clazz.newArray (-1, [(toggle ? jalview.util.MessageManager.getString ("label.toggled") : jalview.util.MessageManager.getString ("label.marked")), (invert ? (Integer.$valueOf ((alw - alStart) - bs.cardinality ()).toString ()) : (Integer.$valueOf (bs.cardinality ()).toString ())), featureType, Integer.$valueOf (nseq).toString ()])));
-return true;
-} else {
-this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.no_feature_of_type_found", Clazz.newArray (-1, [featureType])));
-if (!extendCurrent && cs != null) {
-cs.clear ();
-this.alignPanel.paintAlignment (true);
-}return false;
-}}, "~B,~B,~B,~S");
-Clazz.overrideMethod (c$, "sortAlignmentByFeatureDensity",
-function (typ) {
-this.sortBy (typ, "Sort by Density", jalview.analysis.AlignmentSorter.FEATURE_DENSITY);
-}, "~A");
-Clazz.defineMethod (c$, "sortBy",
-function (typ, methodText, method) {
-var fr = this.alignPanel.getFeatureRenderer ();
-if (typ == null) {
-typ = fr == null ? null : fr.getDisplayedFeatureTypes ();
-}var gps = null;
-gps = fr == null ? null : fr.getDisplayedFeatureGroups ();
-if (typ != null) {
-var types = new java.util.ArrayList ();
-for (var i = 0; i < typ.length; i++) {
-if (typ[i] != null) {
-types.add (typ[i]);
-}typ = new Array (types.size ());
-types.toArray (typ);
-}
-}if (gps != null) {
-var grps = new java.util.ArrayList ();
-for (var i = 0; i < gps.length; i++) {
-if (gps[i] != null) {
-grps.add (gps[i]);
-}}
-gps = new Array (grps.size ());
-grps.toArray (gps);
-}var al = this.viewport.getAlignment ();
-var start;
-var stop;
-var sg = this.viewport.getSelectionGroup ();
-if (sg != null) {
-start = sg.getStartRes ();
-stop = sg.getEndRes ();
-} else {
-start = 0;
-stop = al.getWidth ();
-}var oldOrder = al.getSequencesArray ();
-jalview.analysis.AlignmentSorter.sortByFeature (typ, gps, start, stop, al, method);
-this.avcg.addHistoryItem ( new jalview.commands.OrderCommand (methodText, oldOrder, this.viewport.getAlignment ()));
-this.alignPanel.paintAlignment (true);
-}, "~A,~S,~S");
-Clazz.overrideMethod (c$, "sortAlignmentByFeatureScore",
-function (typ) {
-this.sortBy (typ, "Sort by Feature Score", jalview.analysis.AlignmentSorter.FEATURE_SCORE);
-}, "~A");
-Clazz.overrideMethod (c$, "parseFeaturesFile",
-function (file, protocol, relaxedIdMatching) {
-var featuresFile = false;
-try {
-featuresFile = new jalview.io.FeaturesFile (file, protocol).parse (this.viewport.getAlignment ().getDataset (), this.alignPanel.getFeatureRenderer ().getFeatureColours (), false, relaxedIdMatching);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-if (featuresFile) {
-this.avcg.refreshFeatureUI (true);
-if (this.alignPanel.getFeatureRenderer () != null) {
-this.alignPanel.getFeatureRenderer ().findAllFeatures (true);
-}if (this.avcg.getFeatureSettingsUI () != null) {
-this.avcg.getFeatureSettingsUI ().discoverAllFeatureData ();
-}this.alignPanel.paintAlignment (true);
-}return featuresFile;
-}, "~S,~S,~B");
-});
+Clazz.declarePackage ("jalview.controller");
+Clazz.load (["jalview.api.AlignViewControllerI"], "jalview.controller.AlignViewController", ["jalview.analysis.AlignmentSorter", "$.Grouping", "jalview.commands.OrderCommand", "jalview.datamodel.ColumnSelection", "jalview.io.FeaturesFile", "jalview.util.MessageManager", "java.awt.Color", "java.util.ArrayList", "$.BitSet"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.viewport = null;
+this.alignPanel = null;
+this.avcg = null;
+Clazz.instantialize (this, arguments);
+}, jalview.controller, "AlignViewController", null, jalview.api.AlignViewControllerI);
+Clazz.overrideMethod (c$, "finalize",
+function () {
+this.viewport = null;
+this.alignPanel = null;
+this.avcg = null;
+});
+Clazz.makeConstructor (c$,
+function (alignFrame, viewport, alignPanel) {
+this.avcg = alignFrame;
+this.viewport = viewport;
+this.alignPanel = alignPanel;
+}, "jalview.api.AlignViewControllerGuiI,jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
+Clazz.overrideMethod (c$, "setViewportAndAlignmentPanel",
+function (viewport, alignPanel) {
+this.alignPanel = alignPanel;
+this.viewport = viewport;
+}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
+Clazz.overrideMethod (c$, "makeGroupsFromSelection",
+function () {
+var sg = this.viewport.getSelectionGroup ();
+var cs = this.viewport.getColumnSelection ();
+var gps = null;
+if (sg != null && (cs == null || cs.getSelected () == null || cs.size () == 0)) {
+gps = jalview.analysis.Grouping.makeGroupsFrom (this.viewport.getSequenceSelection (), this.viewport.getAlignmentView (true).getSequenceStrings (this.viewport.getGapCharacter ()), this.viewport.getAlignment ().getGroups ());
+} else {
+if (cs != null) {
+gps = jalview.analysis.Grouping.makeGroupsFromCols ((sg == null) ? this.viewport.getAlignment ().getSequencesArray () : sg.getSequences ().toArray ( new Array (0)), cs, this.viewport.getAlignment ().getGroups ());
+}}if (gps != null) {
+this.viewport.getAlignment ().deleteAllGroups ();
+this.viewport.clearSequenceColours ();
+this.viewport.setSelectionGroup (null);
+for (var g = 0; g < gps.length; g++) {
+gps[g].setshowSequenceLogo (this.viewport.isShowSequenceLogo ());
+this.viewport.getAlignment ().addGroup (gps[g]);
+var col = new java.awt.Color (Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255), Clazz.doubleToInt (Math.random () * 255));
+col = col.brighter ();
+for (var sq, $sq = gps[g].getSequences (null).iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+this.viewport.setSequenceColour (sq, col);
+}
+}
+return true;
+}return false;
+});
+Clazz.overrideMethod (c$, "createGroup",
+function () {
+var sg = this.viewport.getSelectionGroup ();
+if (sg != null) {
+this.viewport.getAlignment ().addGroup (sg);
+return true;
+}return false;
+});
+Clazz.overrideMethod (c$, "unGroup",
+function () {
+var sg = this.viewport.getSelectionGroup ();
+if (sg != null) {
+this.viewport.getAlignment ().deleteGroup (sg);
+return true;
+}return false;
+});
+Clazz.overrideMethod (c$, "deleteGroups",
+function () {
+if (this.viewport.getAlignment ().getGroups () != null && this.viewport.getAlignment ().getGroups ().size () > 0) {
+this.viewport.getAlignment ().deleteAllGroups ();
+this.viewport.clearSequenceColours ();
+this.viewport.setSelectionGroup (null);
+return true;
+}return false;
+});
+Clazz.overrideMethod (c$, "markColumnsContainingFeatures",
+function (invert, extendCurrent, toggle, featureType) {
+var bs = new java.util.BitSet ();
+var alw;
+var alStart;
+var sqcol = (this.viewport.getSelectionGroup () == null ? this.viewport.getAlignment () : this.viewport.getSelectionGroup ());
+alStart = sqcol.getStartRes ();
+alw = sqcol.getEndRes () + 1;
+var seqs = sqcol.getSequences ();
+var nseq = 0;
+for (var sq, $sq = seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+var tfeat = 0;
+if (sq != null) {
+var sf = sq.getSequenceFeatures ();
+if (sf != null) {
+var ist = sq.findIndex (sq.getStart ());
+var iend = sq.findIndex (sq.getEnd ());
+if (iend < alStart || ist > alw) {
+continue;
+}for (var sfpos, $sfpos = 0, $$sfpos = sf; $sfpos < $$sfpos.length && ((sfpos = $$sfpos[$sfpos]) || true); $sfpos++) {
+if (sfpos != null && (featureType.equals (sfpos.getType ()))) {
+tfeat++;
+var i = sq.findIndex (sfpos.getBegin ());
+var j = sq.findIndex (sfpos.getEnd ());
+if (j < alStart || i > alw) {
+continue;
+}if (i < alStart) {
+i = alStart;
+}if (i < ist) {
+i = ist;
+}if (j > alw) {
+j = alw;
+}for (; i <= j; i++) {
+bs.set (i - 1);
+}
+}}
+}if (tfeat > 0) {
+nseq++;
+}}}
+var cs = this.viewport.getColumnSelection ();
+if (bs.cardinality () > 0 || invert) {
+if (cs == null) {
+cs = new jalview.datamodel.ColumnSelection ();
+} else {
+if (!extendCurrent) {
+cs.clear ();
+}}if (invert) {
+for (var i = bs.nextClearBit (alStart), ibs = bs.nextSetBit (alStart); i >= alStart && i < (alw); ) {
+if (ibs < 0 || i < ibs) {
+if (toggle && cs.contains (i)) {
+cs.removeElement (i++);
+} else {
+cs.addElement (i++);
+}} else {
+i = bs.nextClearBit (ibs);
+ibs = bs.nextSetBit (i);
+}}
+} else {
+for (var i = bs.nextSetBit (alStart); i >= alStart; i = bs.nextSetBit (i + 1)) {
+if (toggle && cs.contains (i)) {
+cs.removeElement (i);
+} else {
+cs.addElement (i);
+}}
+}this.viewport.setColumnSelection (cs);
+this.alignPanel.paintAlignment (true);
+this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.view_controller_toggled_marked", Clazz.newArray (-1, [(toggle ? jalview.util.MessageManager.getString ("label.toggled") : jalview.util.MessageManager.getString ("label.marked")), (invert ? (Integer.$valueOf ((alw - alStart) - bs.cardinality ()).toString ()) : (Integer.$valueOf (bs.cardinality ()).toString ())), featureType, Integer.$valueOf (nseq).toString ()])));
+return true;
+} else {
+this.avcg.setStatus (jalview.util.MessageManager.formatMessage ("label.no_feature_of_type_found", Clazz.newArray (-1, [featureType])));
+if (!extendCurrent && cs != null) {
+cs.clear ();
+this.alignPanel.paintAlignment (true);
+}return false;
+}}, "~B,~B,~B,~S");
+Clazz.overrideMethod (c$, "sortAlignmentByFeatureDensity",
+function (typ) {
+this.sortBy (typ, "Sort by Density", jalview.analysis.AlignmentSorter.FEATURE_DENSITY);
+}, "~A");
+Clazz.defineMethod (c$, "sortBy",
+function (typ, methodText, method) {
+var fr = this.alignPanel.getFeatureRenderer ();
+if (typ == null) {
+typ = fr == null ? null : fr.getDisplayedFeatureTypes ();
+}var gps = null;
+gps = fr == null ? null : fr.getDisplayedFeatureGroups ();
+if (typ != null) {
+var types = new java.util.ArrayList ();
+for (var i = 0; i < typ.length; i++) {
+if (typ[i] != null) {
+types.add (typ[i]);
+}typ = new Array (types.size ());
+types.toArray (typ);
+}
+}if (gps != null) {
+var grps = new java.util.ArrayList ();
+for (var i = 0; i < gps.length; i++) {
+if (gps[i] != null) {
+grps.add (gps[i]);
+}}
+gps = new Array (grps.size ());
+grps.toArray (gps);
+}var al = this.viewport.getAlignment ();
+var start;
+var stop;
+var sg = this.viewport.getSelectionGroup ();
+if (sg != null) {
+start = sg.getStartRes ();
+stop = sg.getEndRes ();
+} else {
+start = 0;
+stop = al.getWidth ();
+}var oldOrder = al.getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortByFeature (typ, gps, start, stop, al, method);
+this.avcg.addHistoryItem ( new jalview.commands.OrderCommand (methodText, oldOrder, this.viewport.getAlignment ()));
+this.alignPanel.paintAlignment (true);
+}, "~A,~S,~S");
+Clazz.overrideMethod (c$, "sortAlignmentByFeatureScore",
+function (typ) {
+this.sortBy (typ, "Sort by Feature Score", jalview.analysis.AlignmentSorter.FEATURE_SCORE);
+}, "~A");
+Clazz.overrideMethod (c$, "parseFeaturesFile",
+function (file, protocol, relaxedIdMatching) {
+var featuresFile = false;
+try {
+featuresFile = new jalview.io.FeaturesFile (file, protocol).parse (this.viewport.getAlignment ().getDataset (), this.alignPanel.getFeatureRenderer ().getFeatureColours (), false, relaxedIdMatching);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+if (featuresFile) {
+this.avcg.refreshFeatureUI (true);
+if (this.alignPanel.getFeatureRenderer () != null) {
+this.alignPanel.getFeatureRenderer ().findAllFeatures (true);
+}if (this.avcg.getFeatureSettingsUI () != null) {
+this.avcg.getFeatureSettingsUI ().discoverAllFeatureData ();
+}this.alignPanel.paintAlignment (true);
+}return featuresFile;
+}, "~S,~S,~B");
+});
diff --git a/bin/jalview/controller/FeatureSettingsController.js b/bin/jalview/controller/FeatureSettingsController.js
index 1a3acab..8a9666e 100644
--- a/bin/jalview/controller/FeatureSettingsController.js
+++ b/bin/jalview/controller/FeatureSettingsController.js
@@ -1,7 +1,7 @@
-Clazz.declarePackage ("jalview.controller");
-c$ = Clazz.decorateAsClass (function () {
-this.settingUI = null;
-this.fr = null;
-this.fsettings = null;
-Clazz.instantialize (this, arguments);
-}, jalview.controller, "FeatureSettingsController");
+Clazz.declarePackage ("jalview.controller");
+c$ = Clazz.decorateAsClass (function () {
+this.settingUI = null;
+this.fr = null;
+this.fsettings = null;
+Clazz.instantialize (this, arguments);
+}, jalview.controller, "FeatureSettingsController");
diff --git a/bin/jalview/controller/FeatureSettingsControllerGuiI.js b/bin/jalview/controller/FeatureSettingsControllerGuiI.js
index ec98397..c092514 100644
--- a/bin/jalview/controller/FeatureSettingsControllerGuiI.js
+++ b/bin/jalview/controller/FeatureSettingsControllerGuiI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.controller");
-Clazz.declareInterface (jalview.controller, "FeatureSettingsControllerGuiI");
+Clazz.declarePackage ("jalview.controller");
+Clazz.declareInterface (jalview.controller, "FeatureSettingsControllerGuiI");
diff --git a/bin/jalview/datamodel/ASequence.js b/bin/jalview/datamodel/ASequence.js
index 1c80545..76a4493 100644
--- a/bin/jalview/datamodel/ASequence.js
+++ b/bin/jalview/datamodel/ASequence.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.ASequenceI"], "jalview.datamodel.ASequence", null, function () {
-c$ = Clazz.declareType (jalview.datamodel, "ASequence", null, jalview.datamodel.ASequenceI);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.ASequenceI"], "jalview.datamodel.ASequence", null, function () {
+c$ = Clazz.declareType (jalview.datamodel, "ASequence", null, jalview.datamodel.ASequenceI);
+});
diff --git a/bin/jalview/datamodel/ASequenceI.js b/bin/jalview/datamodel/ASequenceI.js
index 91b3544..3d17914 100644
--- a/bin/jalview/datamodel/ASequenceI.js
+++ b/bin/jalview/datamodel/ASequenceI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.declareInterface (jalview.datamodel, "ASequenceI");
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.declareInterface (jalview.datamodel, "ASequenceI");
diff --git a/bin/jalview/datamodel/AlignedCodon.js b/bin/jalview/datamodel/AlignedCodon.js
index d02ac8a..3b95647 100644
--- a/bin/jalview/datamodel/AlignedCodon.js
+++ b/bin/jalview/datamodel/AlignedCodon.js
@@ -1,42 +1,42 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.AlignedCodon", ["java.lang.IllegalArgumentException", "$.StringBuilder"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.pos1 = 0;
-this.pos2 = 0;
-this.pos3 = 0;
-this.product = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "AlignedCodon");
-Clazz.makeConstructor (c$,
-function (i, j, k) {
-this.construct (i, j, k, null);
-}, "~N,~N,~N");
-Clazz.makeConstructor (c$,
-function (i, j, k, prod) {
-this.pos1 = i;
-this.pos2 = j;
-this.pos3 = k;
-this.product = prod;
-}, "~N,~N,~N,~S");
-Clazz.defineMethod (c$, "getBaseColumn",
-function (base) {
-if (base < 1 || base > 3) {
-throw new IllegalArgumentException (Integer.toString (base));
-}return base == 1 ? this.pos1 : (base == 2 ? this.pos2 : this.pos3);
-}, "~N");
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (o == null) {
-return true;
-}if (!(Clazz.instanceOf (o, jalview.datamodel.AlignedCodon))) {
-return false;
-}var ac = o;
-return (this.pos1 == ac.pos1 && this.pos2 == ac.pos2 && this.pos3 == ac.pos3);
-}, "~O");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var sb = new StringBuilder ();
-sb.append ("[").append (this.pos1).append (", ").append (this.pos2).append (", ").append (this.pos3).append ("]");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.AlignedCodon", ["java.lang.IllegalArgumentException", "$.StringBuilder"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.pos1 = 0;
+this.pos2 = 0;
+this.pos3 = 0;
+this.product = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "AlignedCodon");
+Clazz.makeConstructor (c$,
+function (i, j, k) {
+this.construct (i, j, k, null);
+}, "~N,~N,~N");
+Clazz.makeConstructor (c$,
+function (i, j, k, prod) {
+this.pos1 = i;
+this.pos2 = j;
+this.pos3 = k;
+this.product = prod;
+}, "~N,~N,~N,~S");
+Clazz.defineMethod (c$, "getBaseColumn",
+function (base) {
+if (base < 1 || base > 3) {
+throw new IllegalArgumentException (Integer.toString (base));
+}return base == 1 ? this.pos1 : (base == 2 ? this.pos2 : this.pos3);
+}, "~N");
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (o == null) {
+return true;
+}if (!(Clazz.instanceOf (o, jalview.datamodel.AlignedCodon))) {
+return false;
+}var ac = o;
+return (this.pos1 == ac.pos1 && this.pos2 == ac.pos2 && this.pos3 == ac.pos3);
+}, "~O");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var sb = new StringBuilder ();
+sb.append ("[").append (this.pos1).append (", ").append (this.pos2).append (", ").append (this.pos3).append ("]");
+return sb.toString ();
+});
+});
diff --git a/bin/jalview/datamodel/AlignedCodonFrame.class b/bin/jalview/datamodel/AlignedCodonFrame.class
index dcb271c..071822f 100644
Binary files a/bin/jalview/datamodel/AlignedCodonFrame.class and b/bin/jalview/datamodel/AlignedCodonFrame.class differ
diff --git a/bin/jalview/datamodel/AlignedCodonFrame.js b/bin/jalview/datamodel/AlignedCodonFrame.js
index 8d854b4..043b032 100644
--- a/bin/jalview/datamodel/AlignedCodonFrame.js
+++ b/bin/jalview/datamodel/AlignedCodonFrame.js
@@ -1,198 +1,198 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.AlignedCodonFrame", ["jalview.datamodel.Mapping", "jalview.util.MappingUtils", "java.util.ArrayList"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.dnaSeqs = null;
-this.dnaToProt = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "AlignedCodonFrame");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "addMap",
-function (dnaseq, aaseq, map) {
-var nlen = 1;
-if (this.dnaSeqs != null) {
-nlen = this.dnaSeqs.length + 1;
-}var ndna = new Array (nlen);
-var ndtp = new Array (nlen);
-if (this.dnaSeqs != null) {
-System.arraycopy (this.dnaSeqs, 0, ndna, 0, this.dnaSeqs.length);
-System.arraycopy (this.dnaToProt, 0, ndtp, 0, this.dnaSeqs.length);
-}this.dnaSeqs = ndna;
-this.dnaToProt = ndtp;
-nlen--;
-this.dnaSeqs[nlen] = (dnaseq.getDatasetSequence () == null) ? dnaseq : dnaseq.getDatasetSequence ();
-var mp = new jalview.datamodel.Mapping (map);
-mp.to = (aaseq.getDatasetSequence () == null) ? aaseq : aaseq.getDatasetSequence ();
-this.dnaToProt[nlen] = mp;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.util.MapList");
-Clazz.defineMethod (c$, "getdnaSeqs",
-function () {
-return this.dnaSeqs;
-});
-Clazz.defineMethod (c$, "getAaSeqs",
-function () {
-if (this.dnaToProt == null) {
-return null;
-}var sqs = new Array (this.dnaToProt.length);
-for (var sz = 0; sz < this.dnaToProt.length; sz++) {
-sqs[sz] = this.dnaToProt[sz].to;
-}
-return sqs;
-});
-Clazz.defineMethod (c$, "getdnaToProt",
-function () {
-if (this.dnaToProt == null) {
-return null;
-}var sqs = new Array (this.dnaToProt.length);
-for (var sz = 0; sz < this.dnaToProt.length; sz++) {
-sqs[sz] = this.dnaToProt[sz].map;
-}
-return sqs;
-});
-Clazz.defineMethod (c$, "getProtMappings",
-function () {
-return this.dnaToProt;
-});
-Clazz.defineMethod (c$, "getMappingForSequence",
-function (seq) {
-if (this.dnaSeqs == null) {
-return null;
-}var seqDs = seq.getDatasetSequence ();
-seqDs = seqDs != null ? seqDs : seq;
-for (var ds = 0; ds < this.dnaSeqs.length; ds++) {
-if (this.dnaSeqs[ds] === seqDs || this.dnaToProt[ds].to === seqDs) {
-return this.dnaToProt[ds];
-}}
-return null;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getAaForDnaSeq",
-function (dnaSeqRef) {
-if (this.dnaSeqs == null) {
-return null;
-}var dnads = dnaSeqRef.getDatasetSequence ();
-for (var ds = 0; ds < this.dnaSeqs.length; ds++) {
-if (this.dnaSeqs[ds] === dnaSeqRef || this.dnaSeqs[ds] === dnads) {
-return this.dnaToProt[ds].to;
-}}
-return null;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getDnaForAaSeq",
-function (aaSeqRef) {
-if (this.dnaToProt == null) {
-return null;
-}var aads = aaSeqRef.getDatasetSequence ();
-for (var as = 0; as < this.dnaToProt.length; as++) {
-if (this.dnaToProt[as].to === aaSeqRef || this.dnaToProt[as].to === aads) {
-return this.dnaSeqs[as];
-}}
-return null;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "involvesSequence",
-function (seq) {
-return this.getAaForDnaSeq (seq) != null || this.getDnaForAaSeq (seq) != null;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "markMappedRegion",
-function (seq, index, results) {
-if (this.dnaToProt == null) {
-return;
-}var codon;
-var ds = seq.getDatasetSequence ();
-for (var mi = 0; mi < this.dnaToProt.length; mi++) {
-if (this.dnaSeqs[mi] === seq || this.dnaSeqs[mi] === ds) {
-codon = this.dnaToProt[mi].map.locateInTo (index, index);
-if (codon != null) {
-for (var i = 0; i < codon.length; i += 2) {
-results.addResult (this.dnaToProt[mi].to, codon[i], codon[i + 1]);
-}
-}} else if (this.dnaToProt[mi].to === seq || this.dnaToProt[mi].to === ds) {
-{
-codon = this.dnaToProt[mi].map.locateInFrom (index, index);
-if (codon != null) {
-for (var i = 0; i < codon.length; i += 2) {
-results.addResult (this.dnaSeqs[mi], codon[i], codon[i + 1]);
-}
-}}}}
-}, "jalview.datamodel.SequenceI,~N,jalview.datamodel.SearchResults");
-Clazz.defineMethod (c$, "getDnaPosition",
-function (seq, aaPos) {
-var ml = null;
-for (var i = 0; i < this.dnaToProt.length; i++) {
-if (this.dnaSeqs[i] === seq) {
-ml = this.getdnaToProt ()[i];
-break;
-}}
-return ml == null ? null : ml.locateInFrom (aaPos, aaPos);
-}, "jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "findAlignedSequence",
-function (seq, al) {
-if (this.dnaToProt != null) {
-for (var i = 0; i < this.dnaToProt.length; i++) {
-if (this.dnaSeqs[i] === seq) {
-for (var sourceAligned, $sourceAligned = al.getSequences ().iterator (); $sourceAligned.hasNext () && ((sourceAligned = $sourceAligned.next ()) || true);) {
-if (this.dnaToProt[i].to === sourceAligned.getDatasetSequence ()) {
-return sourceAligned;
-}}
-}}
-}if (this.dnaToProt != null) {
-for (var i = 0; i < this.dnaToProt.length; i++) {
-if (this.dnaToProt[i].to === seq) {
-for (var sourceAligned, $sourceAligned = al.getSequences ().iterator (); $sourceAligned.hasNext () && ((sourceAligned = $sourceAligned.next ()) || true);) {
-if (this.dnaSeqs[i] === sourceAligned.getDatasetSequence ()) {
-return sourceAligned;
-}}
-}}
-}return null;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "getMappedRegion",
-function (mappedFrom, mappedTo, pos) {
-var targetDs = mappedFrom.getDatasetSequence () == null ? mappedFrom : mappedFrom.getDatasetSequence ();
-var sourceDs = mappedTo.getDatasetSequence () == null ? mappedTo : mappedTo.getDatasetSequence ();
-if (targetDs == null || sourceDs == null || this.dnaToProt == null) {
-return null;
-}for (var mi = 0; mi < this.dnaToProt.length; mi++) {
-if (this.dnaSeqs[mi] === targetDs && this.dnaToProt[mi].to === sourceDs) {
-var codon = this.dnaToProt[mi].map.locateInFrom (pos, pos);
-if (codon != null) {
-return codon;
-}}}
-return null;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "getMappedCodon",
-function (protein, aaPos) {
-if (this.dnaToProt == null) {
-return null;
-}var ml = null;
-var dnaSeq = null;
-for (var i = 0; i < this.dnaToProt.length; i++) {
-if (this.dnaToProt[i].to === protein) {
-ml = this.getdnaToProt ()[i];
-dnaSeq = this.dnaSeqs[i].getSequence ();
-break;
-}}
-if (ml == null) {
-return null;
-}var codonPos = ml.locateInFrom (aaPos, aaPos);
-if (codonPos == null) {
-return null;
-}codonPos = jalview.util.MappingUtils.flattenRanges (codonPos);
-return Clazz.newCharArray (-1, [dnaSeq[codonPos[0] - 1], dnaSeq[codonPos[1] - 1], dnaSeq[codonPos[2] - 1]]);
-}, "jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "getMappingsForSequence",
-function (seq) {
-var result = new java.util.ArrayList ();
-if (this.dnaSeqs == null) {
-return result;
-}var related = new java.util.ArrayList ();
-var seqDs = seq.getDatasetSequence ();
-seqDs = seqDs != null ? seqDs : seq;
-for (var ds = 0; ds < this.dnaSeqs.length; ds++) {
-var mapping = this.dnaToProt[ds];
-if (this.dnaSeqs[ds] === seqDs || mapping.to === seqDs) {
-if (!related.contains (mapping.to)) {
-result.add (mapping);
-related.add (mapping.to);
-}}}
-return result;
-}, "jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.AlignedCodonFrame", ["jalview.datamodel.Mapping", "jalview.util.MappingUtils", "java.util.ArrayList"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.dnaSeqs = null;
+this.dnaToProt = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "AlignedCodonFrame");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "addMap",
+function (dnaseq, aaseq, map) {
+var nlen = 1;
+if (this.dnaSeqs != null) {
+nlen = this.dnaSeqs.length + 1;
+}var ndna = new Array (nlen);
+var ndtp = new Array (nlen);
+if (this.dnaSeqs != null) {
+System.arraycopy (this.dnaSeqs, 0, ndna, 0, this.dnaSeqs.length);
+System.arraycopy (this.dnaToProt, 0, ndtp, 0, this.dnaSeqs.length);
+}this.dnaSeqs = ndna;
+this.dnaToProt = ndtp;
+nlen--;
+this.dnaSeqs[nlen] = (dnaseq.getDatasetSequence () == null) ? dnaseq : dnaseq.getDatasetSequence ();
+var mp = new jalview.datamodel.Mapping (map);
+mp.to = (aaseq.getDatasetSequence () == null) ? aaseq : aaseq.getDatasetSequence ();
+this.dnaToProt[nlen] = mp;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,jalview.util.MapList");
+Clazz.defineMethod (c$, "getdnaSeqs",
+function () {
+return this.dnaSeqs;
+});
+Clazz.defineMethod (c$, "getAaSeqs",
+function () {
+if (this.dnaToProt == null) {
+return null;
+}var sqs = new Array (this.dnaToProt.length);
+for (var sz = 0; sz < this.dnaToProt.length; sz++) {
+sqs[sz] = this.dnaToProt[sz].to;
+}
+return sqs;
+});
+Clazz.defineMethod (c$, "getdnaToProt",
+function () {
+if (this.dnaToProt == null) {
+return null;
+}var sqs = new Array (this.dnaToProt.length);
+for (var sz = 0; sz < this.dnaToProt.length; sz++) {
+sqs[sz] = this.dnaToProt[sz].map;
+}
+return sqs;
+});
+Clazz.defineMethod (c$, "getProtMappings",
+function () {
+return this.dnaToProt;
+});
+Clazz.defineMethod (c$, "getMappingForSequence",
+function (seq) {
+if (this.dnaSeqs == null) {
+return null;
+}var seqDs = seq.getDatasetSequence ();
+seqDs = seqDs != null ? seqDs : seq;
+for (var ds = 0; ds < this.dnaSeqs.length; ds++) {
+if (this.dnaSeqs[ds] === seqDs || this.dnaToProt[ds].to === seqDs) {
+return this.dnaToProt[ds];
+}}
+return null;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getAaForDnaSeq",
+function (dnaSeqRef) {
+if (this.dnaSeqs == null) {
+return null;
+}var dnads = dnaSeqRef.getDatasetSequence ();
+for (var ds = 0; ds < this.dnaSeqs.length; ds++) {
+if (this.dnaSeqs[ds] === dnaSeqRef || this.dnaSeqs[ds] === dnads) {
+return this.dnaToProt[ds].to;
+}}
+return null;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getDnaForAaSeq",
+function (aaSeqRef) {
+if (this.dnaToProt == null) {
+return null;
+}var aads = aaSeqRef.getDatasetSequence ();
+for (var as = 0; as < this.dnaToProt.length; as++) {
+if (this.dnaToProt[as].to === aaSeqRef || this.dnaToProt[as].to === aads) {
+return this.dnaSeqs[as];
+}}
+return null;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "involvesSequence",
+function (seq) {
+return this.getAaForDnaSeq (seq) != null || this.getDnaForAaSeq (seq) != null;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "markMappedRegion",
+function (seq, index, results) {
+if (this.dnaToProt == null) {
+return;
+}var codon;
+var ds = seq.getDatasetSequence ();
+for (var mi = 0; mi < this.dnaToProt.length; mi++) {
+if (this.dnaSeqs[mi] === seq || this.dnaSeqs[mi] === ds) {
+codon = this.dnaToProt[mi].map.locateInTo (index, index);
+if (codon != null) {
+for (var i = 0; i < codon.length; i += 2) {
+results.addResult (this.dnaToProt[mi].to, codon[i], codon[i + 1]);
+}
+}} else if (this.dnaToProt[mi].to === seq || this.dnaToProt[mi].to === ds) {
+{
+codon = this.dnaToProt[mi].map.locateInFrom (index, index);
+if (codon != null) {
+for (var i = 0; i < codon.length; i += 2) {
+results.addResult (this.dnaSeqs[mi], codon[i], codon[i + 1]);
+}
+}}}}
+}, "jalview.datamodel.SequenceI,~N,jalview.datamodel.SearchResults");
+Clazz.defineMethod (c$, "getDnaPosition",
+function (seq, aaPos) {
+var ml = null;
+for (var i = 0; i < this.dnaToProt.length; i++) {
+if (this.dnaSeqs[i] === seq) {
+ml = this.getdnaToProt ()[i];
+break;
+}}
+return ml == null ? null : ml.locateInFrom (aaPos, aaPos);
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "findAlignedSequence",
+function (seq, al) {
+if (this.dnaToProt != null) {
+for (var i = 0; i < this.dnaToProt.length; i++) {
+if (this.dnaSeqs[i] === seq) {
+for (var sourceAligned, $sourceAligned = al.getSequences ().iterator (); $sourceAligned.hasNext () && ((sourceAligned = $sourceAligned.next ()) || true);) {
+if (this.dnaToProt[i].to === sourceAligned.getDatasetSequence ()) {
+return sourceAligned;
+}}
+}}
+}if (this.dnaToProt != null) {
+for (var i = 0; i < this.dnaToProt.length; i++) {
+if (this.dnaToProt[i].to === seq) {
+for (var sourceAligned, $sourceAligned = al.getSequences ().iterator (); $sourceAligned.hasNext () && ((sourceAligned = $sourceAligned.next ()) || true);) {
+if (this.dnaSeqs[i] === sourceAligned.getDatasetSequence ()) {
+return sourceAligned;
+}}
+}}
+}return null;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "getMappedRegion",
+function (mappedFrom, mappedTo, pos) {
+var targetDs = mappedFrom.getDatasetSequence () == null ? mappedFrom : mappedFrom.getDatasetSequence ();
+var sourceDs = mappedTo.getDatasetSequence () == null ? mappedTo : mappedTo.getDatasetSequence ();
+if (targetDs == null || sourceDs == null || this.dnaToProt == null) {
+return null;
+}for (var mi = 0; mi < this.dnaToProt.length; mi++) {
+if (this.dnaSeqs[mi] === targetDs && this.dnaToProt[mi].to === sourceDs) {
+var codon = this.dnaToProt[mi].map.locateInFrom (pos, pos);
+if (codon != null) {
+return codon;
+}}}
+return null;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "getMappedCodon",
+function (protein, aaPos) {
+if (this.dnaToProt == null) {
+return null;
+}var ml = null;
+var dnaSeq = null;
+for (var i = 0; i < this.dnaToProt.length; i++) {
+if (this.dnaToProt[i].to === protein) {
+ml = this.getdnaToProt ()[i];
+dnaSeq = this.dnaSeqs[i].getSequence ();
+break;
+}}
+if (ml == null) {
+return null;
+}var codonPos = ml.locateInFrom (aaPos, aaPos);
+if (codonPos == null) {
+return null;
+}codonPos = jalview.util.MappingUtils.flattenRanges (codonPos);
+return Clazz.newCharArray (-1, [dnaSeq[codonPos[0] - 1], dnaSeq[codonPos[1] - 1], dnaSeq[codonPos[2] - 1]]);
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "getMappingsForSequence",
+function (seq) {
+var result = new java.util.ArrayList ();
+if (this.dnaSeqs == null) {
+return result;
+}var related = new java.util.ArrayList ();
+var seqDs = seq.getDatasetSequence ();
+seqDs = seqDs != null ? seqDs : seq;
+for (var ds = 0; ds < this.dnaSeqs.length; ds++) {
+var mapping = this.dnaToProt[ds];
+if (this.dnaSeqs[ds] === seqDs || mapping.to === seqDs) {
+if (!related.contains (mapping.to)) {
+result.add (mapping);
+related.add (mapping.to);
+}}}
+return result;
+}, "jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/datamodel/Alignment.class b/bin/jalview/datamodel/Alignment.class
index 5ed53fa..c65b99e 100644
Binary files a/bin/jalview/datamodel/Alignment.class and b/bin/jalview/datamodel/Alignment.class differ
diff --git a/bin/jalview/datamodel/Alignment.js b/bin/jalview/datamodel/Alignment.js
index f70f6ce..a4d45ee 100644
--- a/bin/jalview/datamodel/Alignment.js
+++ b/bin/jalview/datamodel/Alignment.js
@@ -1,815 +1,815 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.AlignmentI", "$.HiddenSequences", "java.util.ArrayList", "$.Collections", "$.LinkedHashSet"], "jalview.datamodel.Alignment", ["jalview.analysis.AlignmentUtils", "jalview.datamodel.AlignmentAnnotation", "$.CigarArray", "$.SeqCigar", "$.Sequence", "jalview.util.Comparison", "$.MessageManager", "java.lang.Error", "java.util.HashSet", "$.Hashtable", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.dataset = null;
-this.sequences = null;
-this.groups = null;
-this.gapCharacter = '-';
-this.type = 1;
-this.$hasRNAStructure = false;
-this.annotations = null;
-this.hiddenSequences = null;
-this.alignmentProperties = null;
-this.codonFrameList = null;
-this.alignmentRefs = 0;
-this.seqrep = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "Alignment", null, jalview.datamodel.AlignmentI);
-Clazz.prepareFields (c$, function () {
-this.groups = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
-this.hiddenSequences = new jalview.datamodel.HiddenSequences (this);
-this.codonFrameList = new java.util.LinkedHashSet ();
-});
-Clazz.defineMethod (c$, "initAlignment",
-($fz = function (seqs) {
-var i = 0;
-if (jalview.util.Comparison.isNucleotide (seqs)) {
-this.type = 1;
-} else {
-this.type = 0;
-}this.sequences = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
-for (i = 0; i < seqs.length; i++) {
-this.sequences.add (seqs[i]);
-}
-}, $fz.isPrivate = true, $fz), "~A");
-Clazz.makeConstructor (c$,
-function (al) {
-var seqs = al.getSequencesArray ();
-for (var i = 0; i < seqs.length; i++) {
-seqs[i] = new jalview.datamodel.Sequence (seqs[i]);
-}
-this.codonFrameList = (al).codonFrameList;
-this.initAlignment (seqs);
-}, "jalview.datamodel.AlignmentI");
-Clazz.makeConstructor (c$,
-function (seqs) {
-this.initAlignment (seqs);
-}, "~A");
-c$.createAlignment = Clazz.defineMethod (c$, "createAlignment",
-function (compactAlignment) {
-throw new Error (jalview.util.MessageManager.getString ("error.alignment_cigararray_not_implemented"));
-}, "jalview.datamodel.CigarArray");
-Clazz.defineMethod (c$, "getSequences",
-function () {
-return this.sequences;
-});
-Clazz.defineMethod (c$, "getSequences",
-function (hiddenReps) {
-return this.sequences;
-}, "java.util.Map");
-Clazz.defineMethod (c$, "getSequencesArray",
-function () {
-if (this.sequences == null) {
-return null;
-}{
-return this.sequences.toArray ( new Array (this.sequences.size ()));
-}});
-Clazz.overrideMethod (c$, "getSequencesByName",
-function () {
-return jalview.analysis.AlignmentUtils.getSequencesByName (this);
-});
-Clazz.overrideMethod (c$, "getSequenceAt",
-function (i) {
-{
-if (i > -1 && i < this.sequences.size ()) {
-return this.sequences.get (i);
-}}return null;
-}, "~N");
-Clazz.overrideMethod (c$, "addSequence",
-function (snew) {
-if (this.dataset != null) {
-if (snew.getDatasetSequence () != null) {
-this.getDataset ().addSequence (snew.getDatasetSequence ());
-} else {
-var adding = snew.deriveSequence ();
-this.getDataset ().addSequence (adding.getDatasetSequence ());
-snew = adding;
-}}if (this.sequences == null) {
-this.initAlignment ( Clazz.newArray (-1, [snew]));
-} else {
-{
-this.sequences.add (snew);
-}}if (this.hiddenSequences != null) {
-this.hiddenSequences.adjustHeightSequenceAdded ();
-}}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "setSequenceAt",
-function (i, snew) {
-{
-this.deleteSequence (i);
-this.sequences.set (i, snew);
-}}, "~N,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getGroups",
-function () {
-return this.groups;
-});
-Clazz.overrideMethod (c$, "finalize",
-function () {
-if (this.getDataset () != null) {
-this.getDataset ().removeAlignmentRef ();
-}this.dataset = null;
-this.sequences = null;
-this.groups = null;
-this.annotations = null;
-this.hiddenSequences = null;
-});
-Clazz.defineMethod (c$, "removeAlignmentRef",
-($fz = function () {
-if (--this.alignmentRefs == 0) {
-this.finalize ();
-}}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "deleteSequence",
-function (s) {
-this.deleteSequence (this.findIndex (s));
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "deleteSequence",
-function (i) {
-if (i > -1 && i < this.getHeight ()) {
-{
-this.sequences.remove (i);
-this.hiddenSequences.adjustHeightSequenceDeleted (i);
-}}}, "~N");
-Clazz.overrideMethod (c$, "findGroup",
-function (s) {
-{
-for (var i = 0; i < this.groups.size (); i++) {
-var sg = this.groups.get (i);
-if (sg.getSequences (null).contains (s)) {
-return sg;
-}}
-}return null;
-}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "findAllGroups",
-function (s) {
-var temp = new java.util.ArrayList ();
-{
-var gSize = this.groups.size ();
-for (var i = 0; i < gSize; i++) {
-var sg = this.groups.get (i);
-if (sg == null || sg.getSequences () == null) {
-this.deleteGroup (sg);
-gSize--;
-continue;
-}if (sg.getSequences ().contains (s)) {
-temp.add (sg);
-}}
-}var ret = new Array (temp.size ());
-return temp.toArray (ret);
-}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "addGroup",
-function (sg) {
-{
-if (!this.groups.contains (sg)) {
-if (this.hiddenSequences.getSize () > 0) {
-var i;
-var iSize = sg.getSize ();
-for (i = 0; i < iSize; i++) {
-if (!this.sequences.contains (sg.getSequenceAt (i))) {
-sg.deleteSequence (sg.getSequenceAt (i), false);
-iSize--;
-i--;
-}}
-if (sg.getSize () < 1) {
-return;
-}}sg.setContext (this);
-this.groups.add (sg);
-}}}, "jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "removeAnnotationForGroup",
-($fz = function (gp) {
-if (this.annotations == null || this.annotations.length == 0) {
-return;
-}var t;
-var todelete = new Array (this.annotations.length);
-var tokeep = new Array (this.annotations.length);
-var i;
-var p;
-var k;
-if (gp == null) {
-for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {
-if (this.annotations[i].groupRef != null) {
-todelete[p++] = this.annotations[i];
-} else {
-tokeep[k++] = this.annotations[i];
-}}
-} else {
-for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {
-if (this.annotations[i].groupRef === gp) {
-todelete[p++] = this.annotations[i];
-} else {
-tokeep[k++] = this.annotations[i];
-}}
-}if (p > 0) {
-for (i = 0; i < p; i++) {
-this.unhookAnnotation (todelete[i]);
-todelete[i] = null;
-}
-t = new Array (k);
-for (i = 0; i < k; i++) {
-t[i] = tokeep[i];
-}
-this.annotations = t;
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceGroup");
-Clazz.overrideMethod (c$, "deleteAllGroups",
-function () {
-{
-if (this.annotations != null) {
-this.removeAnnotationForGroup (null);
-}for (var sg, $sg = this.groups.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-sg.setContext (null);
-}
-this.groups.clear ();
-}});
-Clazz.overrideMethod (c$, "deleteGroup",
-function (g) {
-{
-if (this.groups.contains (g)) {
-this.removeAnnotationForGroup (g);
-this.groups.remove (g);
-g.setContext (null);
-}}}, "jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "findName",
-function (name) {
-return this.findName (name, false);
-}, "~S");
-Clazz.defineMethod (c$, "findName",
-function (token, b) {
-return this.findName (null, token, b);
-}, "~S,~B");
-Clazz.defineMethod (c$, "findName",
-function (startAfter, token, b) {
-var i = 0;
-var sq = null;
-var sqname = null;
-if (startAfter != null) {
-var matched = false;
-while (i < this.sequences.size ()) {
-if (this.getSequenceAt (i++) === startAfter) {
-matched = true;
-break;
-}}
-if (!matched) {
-i = 0;
-}}while (i < this.sequences.size ()) {
-sq = this.getSequenceAt (i);
-sqname = sq.getName ();
-if (sqname.equals (token) || (b && (sqname.equalsIgnoreCase (token)))) {
-return this.getSequenceAt (i);
-}i++;
-}
-return null;
-}, "jalview.datamodel.SequenceI,~S,~B");
-Clazz.overrideMethod (c$, "findSequenceMatch",
-function (name) {
-var matches = new java.util.Vector ();
-var i = 0;
-while (i < this.sequences.size ()) {
-if (this.getSequenceAt (i).getName ().equals (name)) {
-matches.addElement (this.getSequenceAt (i));
-}i++;
-}
-var result = new Array (matches.size ());
-for (i = 0; i < result.length; i++) {
-result[i] = matches.elementAt (i);
-}
-return result;
-}, "~S");
-Clazz.defineMethod (c$, "findIndex",
-function (s) {
-var i = 0;
-while (i < this.sequences.size ()) {
-if (s === this.getSequenceAt (i)) {
-return i;
-}i++;
-}
-return -1;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "findIndex",
-function (results) {
-var i = 0;
-while (i < this.sequences.size ()) {
-if (results.involvesSequence (this.getSequenceAt (i))) {
-return i;
-}i++;
-}
-return -1;
-}, "jalview.datamodel.SearchResults");
-Clazz.overrideMethod (c$, "getHeight",
-function () {
-return this.sequences.size ();
-});
-Clazz.overrideMethod (c$, "getWidth",
-function () {
-var maxLength = -1;
-for (var i = 0; i < this.sequences.size (); i++) {
-if (this.getSequenceAt (i).getLength () > maxLength) {
-maxLength = this.getSequenceAt (i).getLength ();
-}}
-return maxLength;
-});
-Clazz.overrideMethod (c$, "setGapCharacter",
-function (gc) {
-this.gapCharacter = gc;
-{
-for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-seq.setSequence (seq.getSequenceAsString ().$replace ('.', gc).$replace ('-', gc).$replace (' ', gc));
-}
-}}, "~S");
-Clazz.defineMethod (c$, "getGapCharacter",
-function () {
-return this.gapCharacter;
-});
-Clazz.defineMethod (c$, "isAligned",
-function () {
-return this.isAligned (false);
-});
-Clazz.defineMethod (c$, "isAligned",
-function (includeHidden) {
-var width = this.getWidth ();
-if (this.hiddenSequences == null || this.hiddenSequences.getSize () == 0) {
-includeHidden = true;
-}for (var i = 0; i < this.sequences.size (); i++) {
-if (includeHidden || !this.hiddenSequences.isHidden (this.getSequenceAt (i))) {
-if (this.getSequenceAt (i).getLength () != width) {
-return false;
-}}}
-return true;
-}, "~B");
-Clazz.overrideMethod (c$, "deleteAllAnnotations",
-function (includingAutoCalculated) {
-var result = false;
-for (var alan, $alan = 0, $$alan = this.getAlignmentAnnotation (); $alan < $$alan.length && ((alan = $$alan[$alan]) || true); $alan++) {
-if (!alan.autoCalculated || includingAutoCalculated) {
-this.deleteAnnotation (alan);
-result = true;
-}}
-return result;
-}, "~B");
-Clazz.defineMethod (c$, "deleteAnnotation",
-function (aa) {
-return this.deleteAnnotation (aa, true);
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "deleteAnnotation",
-function (aa, unhook) {
-var aSize = 1;
-if (this.annotations != null) {
-aSize = this.annotations.length;
-}if (aSize < 1) {
-return false;
-}var temp = new Array (aSize - 1);
-var swap = false;
-var tIndex = 0;
-for (var i = 0; i < aSize; i++) {
-if (this.annotations[i] === aa) {
-swap = true;
-continue;
-}if (tIndex < temp.length) {
-temp[tIndex++] = this.annotations[i];
-}}
-if (swap) {
-this.annotations = temp;
-if (unhook) {
-this.unhookAnnotation (aa);
-}}return swap;
-}, "jalview.datamodel.AlignmentAnnotation,~B");
-Clazz.defineMethod (c$, "unhookAnnotation",
-($fz = function (aa) {
-if (aa.sequenceRef != null) {
-aa.sequenceRef.removeAlignmentAnnotation (aa);
-}if (aa.groupRef != null) {
-aa.groupRef = null;
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "addAnnotation",
-function (aa) {
-this.addAnnotation (aa, -1);
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "addAnnotation",
-function (aa, pos) {
-if (aa.getRNAStruc () != null) {
-this.$hasRNAStructure = true;
-}var aSize = 1;
-if (this.annotations != null) {
-aSize = this.annotations.length + 1;
-}var temp = new Array (aSize);
-var i = 0;
-if (pos == -1 || pos >= aSize) {
-temp[aSize - 1] = aa;
-} else {
-temp[pos] = aa;
-}if (aSize > 1) {
-var p = 0;
-for (i = 0; i < (aSize - 1); i++, p++) {
-if (p == pos) {
-p++;
-}if (p < temp.length) {
-temp[p] = this.annotations[i];
-}}
-}this.annotations = temp;
-}, "jalview.datamodel.AlignmentAnnotation,~N");
-Clazz.overrideMethod (c$, "setAnnotationIndex",
-function (aa, index) {
-if (aa == null || this.annotations == null || this.annotations.length - 1 < index) {
-return;
-}var aSize = this.annotations.length;
-var temp = new Array (aSize);
-temp[index] = aa;
-for (var i = 0; i < aSize; i++) {
-if (i == index) {
-continue;
-}if (i < index) {
-temp[i] = this.annotations[i];
-} else {
-temp[i] = this.annotations[i - 1];
-}}
-this.annotations = temp;
-}, "jalview.datamodel.AlignmentAnnotation,~N");
-Clazz.defineMethod (c$, "getAlignmentAnnotation",
-function () {
-return this.annotations;
-});
-Clazz.overrideMethod (c$, "setNucleotide",
-function (b) {
-if (b) {
-this.type = 1;
-} else {
-this.type = 0;
-}}, "~B");
-Clazz.defineMethod (c$, "isNucleotide",
-function () {
-if (this.type == 1) {
-return true;
-} else {
-return false;
-}});
-Clazz.overrideMethod (c$, "hasRNAStructure",
-function () {
-return this.$hasRNAStructure;
-});
-Clazz.overrideMethod (c$, "setDataset",
-function (data) {
-if (this.dataset == null && data == null) {
-var seqs = new Array (this.getHeight ());
-var currentSeq;
-for (var i = 0; i < this.getHeight (); i++) {
-currentSeq = this.getSequenceAt (i);
-if (currentSeq.getDatasetSequence () != null) {
-seqs[i] = currentSeq.getDatasetSequence ();
-} else {
-seqs[i] = currentSeq.createDatasetSequence ();
-}}
-this.dataset = new jalview.datamodel.Alignment (seqs);
-} else if (this.dataset == null && data != null) {
-this.dataset = data;
-for (var i = 0; i < this.getHeight (); i++) {
-var currentSeq = this.getSequenceAt (i);
-var dsq = currentSeq.getDatasetSequence ();
-if (dsq == null) {
-dsq = currentSeq.createDatasetSequence ();
-this.dataset.addSequence (dsq);
-} else {
-while (dsq.getDatasetSequence () != null) {
-dsq = dsq.getDatasetSequence ();
-}
-if (this.dataset.findIndex (dsq) == -1) {
-this.dataset.addSequence (dsq);
-}}}
-}this.dataset.addAlignmentRef ();
-}, "jalview.datamodel.Alignment");
-Clazz.defineMethod (c$, "addAlignmentRef",
-($fz = function () {
-this.alignmentRefs++;
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "getDataset",
-function () {
-return this.dataset;
-});
-Clazz.overrideMethod (c$, "padGaps",
-function () {
-var modified = false;
-var maxLength = -1;
-var current;
-for (var i = 0; i < this.sequences.size (); i++) {
-current = this.getSequenceAt (i);
-for (var j = current.getLength (); j > maxLength; j--) {
-if (j > maxLength && !jalview.util.Comparison.isGap (current.getCharAt (j))) {
-maxLength = j;
-break;
-}}
-}
-maxLength++;
-var cLength;
-for (var i = 0; i < this.sequences.size (); i++) {
-current = this.getSequenceAt (i);
-cLength = current.getLength ();
-if (cLength < maxLength) {
-current.insertCharAt (cLength, maxLength - cLength, this.gapCharacter);
-modified = true;
-} else if (current.getLength () > maxLength) {
-current.deleteChars (maxLength, current.getLength ());
-}}
-return modified;
-});
-Clazz.overrideMethod (c$, "justify",
-function (right) {
-var modified = false;
-var maxLength = -1;
-var ends = Clazz.newIntArray (this.sequences.size () * 2, 0);
-var current;
-for (var i = 0; i < this.sequences.size (); i++) {
-current = this.getSequenceAt (i);
-ends[i * 2] = current.findIndex (current.getStart ());
-ends[i * 2 + 1] = current.findIndex (current.getStart () + current.getLength ());
-var hitres = false;
-for (var j = 0, rs = 0, ssiz = current.getLength (); j < ssiz; j++) {
-if (!jalview.util.Comparison.isGap (current.getCharAt (j))) {
-if (!hitres) {
-ends[i * 2] = j;
-hitres = true;
-} else {
-ends[i * 2 + 1] = j;
-if (j - ends[i * 2] > maxLength) {
-maxLength = j - ends[i * 2];
-}}}}
-}
-maxLength++;
-var cLength;
-var extent;
-var diff;
-for (var i = 0; i < this.sequences.size (); i++) {
-current = this.getSequenceAt (i);
-cLength = 1 + ends[i * 2 + 1] - ends[i * 2];
-diff = maxLength - cLength;
-extent = current.getLength ();
-if (right) {
-if (extent > ends[i * 2 + 1]) {
-current.deleteChars (ends[i * 2 + 1] + 1, extent);
-modified = true;
-}if (ends[i * 2] > diff) {
-current.deleteChars (0, ends[i * 2] - diff);
-modified = true;
-} else {
-if (ends[i * 2] < diff) {
-current.insertCharAt (0, diff - ends[i * 2], this.gapCharacter);
-modified = true;
-}}} else {
-if (ends[i * 2] > 0) {
-current.deleteChars (0, ends[i * 2]);
-modified = true;
-ends[i * 2 + 1] -= ends[i * 2];
-extent -= ends[i * 2];
-}if (extent > maxLength) {
-current.deleteChars (maxLength + 1, extent);
-modified = true;
-} else {
-if (extent < maxLength) {
-current.insertCharAt (extent, maxLength - extent, this.gapCharacter);
-modified = true;
-}}}}
-return modified;
-}, "~B");
-Clazz.defineMethod (c$, "getHiddenSequences",
-function () {
-return this.hiddenSequences;
-});
-Clazz.overrideMethod (c$, "getCompactAlignment",
-function () {
-{
-var alseqs = new Array (this.sequences.size ());
-var i = 0;
-for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-alseqs[i++] = new jalview.datamodel.SeqCigar (seq);
-}
-var cal = new jalview.datamodel.CigarArray (alseqs);
-cal.addOperation ('M', this.getWidth ());
-return cal;
-}});
-Clazz.overrideMethod (c$, "setProperty",
-function (key, value) {
-if (this.alignmentProperties == null) {
-this.alignmentProperties = new java.util.Hashtable ();
-}this.alignmentProperties.put (key, value);
-}, "~O,~O");
-Clazz.defineMethod (c$, "getProperty",
-function (key) {
-if (this.alignmentProperties != null) {
-return this.alignmentProperties.get (key);
-} else {
-return null;
-}}, "~O");
-Clazz.defineMethod (c$, "getProperties",
-function () {
-return this.alignmentProperties;
-});
-Clazz.overrideMethod (c$, "addCodonFrame",
-function (codons) {
-if (codons != null) {
-this.codonFrameList.add (codons);
-}}, "jalview.datamodel.AlignedCodonFrame");
-Clazz.overrideMethod (c$, "getCodonFrame",
-function (seq) {
-if (seq == null) {
-return null;
-}var cframes = new java.util.ArrayList ();
-for (var acf, $acf = this.codonFrameList.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-if (acf.involvesSequence (seq)) {
-cframes.add (acf);
-}}
-return cframes;
-}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "setCodonFrames",
-function (acfs) {
-this.codonFrameList = acfs;
-}, "java.util.Set");
-Clazz.defineMethod (c$, "getCodonFrames",
-function () {
-return this.codonFrameList;
-});
-Clazz.overrideMethod (c$, "removeCodonFrame",
-function (codons) {
-if (codons == null || this.codonFrameList == null) {
-return false;
-}return this.codonFrameList.remove (codons);
-}, "jalview.datamodel.AlignedCodonFrame");
-Clazz.overrideMethod (c$, "append",
-function (toappend) {
-if (toappend === this) {
-System.err.println ("Self append may cause a deadlock.");
-}var samegap = toappend.getGapCharacter () == this.getGapCharacter ();
-var oldc = toappend.getGapCharacter ();
-var hashidden = toappend.getHiddenSequences () != null && toappend.getHiddenSequences ().hiddenSequences != null;
-var sqs = (hashidden) ? toappend.getHiddenSequences ().getFullAlignment ().getSequences () : toappend.getSequences ();
-if (sqs != null) {
-{
-for (var addedsq, $addedsq = sqs.iterator (); $addedsq.hasNext () && ((addedsq = $addedsq.next ()) || true);) {
-if (!samegap) {
-var oldseq = addedsq.getSequence ();
-for (var c = 0; c < oldseq.length; c++) {
-if (oldseq[c] == oldc) {
-oldseq[c] = this.gapCharacter;
-}}
-}this.addSequence (addedsq);
-}
-}}var alan = toappend.getAlignmentAnnotation ();
-for (var a = 0; alan != null && a < alan.length; a++) {
-this.addAnnotation (alan[a]);
-}
-this.codonFrameList.addAll (toappend.getCodonFrames ());
-var sg = toappend.getGroups ();
-if (sg != null) {
-for (var _sg, $_sg = sg.iterator (); $_sg.hasNext () && ((_sg = $_sg.next ()) || true);) {
-this.addGroup (_sg);
-}
-}if (toappend.getHiddenSequences () != null) {
-var hs = toappend.getHiddenSequences ();
-if (this.hiddenSequences == null) {
-this.hiddenSequences = new jalview.datamodel.HiddenSequences (this);
-}if (hs.hiddenSequences != null) {
-for (var s = 0; s < hs.hiddenSequences.length; s++) {
-if (hs.hiddenSequences[s] != null) {
-this.hiddenSequences.hideSequence (hs.hiddenSequences[s]);
-}}
-}}if (toappend.getProperties () != null) {
-var key = toappend.getProperties ().keys ();
-while (key.hasMoreElements ()) {
-var k = key.nextElement ();
-var ourval = this.getProperty (k);
-var toapprop = toappend.getProperty (k);
-if (ourval != null) {
-if (ourval.getClass ().equals (toapprop.getClass ()) && !ourval.equals (toapprop)) {
-if (Clazz.instanceOf (ourval, String)) {
-this.setProperty (k, (ourval) + "; " + (toapprop));
-} else {
-if (Clazz.instanceOf (ourval, java.util.Vector)) {
-var theirv = (toapprop).elements ();
-while (theirv.hasMoreElements ()) {
-(ourval).addElement (theirv);
-}
-}}}} else {
-this.setProperty (k, toapprop);
-}}
-}}, "jalview.datamodel.AlignmentI");
-Clazz.overrideMethod (c$, "findOrCreateAnnotation",
-function (name, calcId, autoCalc, seqRef, groupRef) {
-if (this.annotations != null) {
-for (var annot, $annot = 0, $$annot = this.getAlignmentAnnotation (); $annot < $$annot.length && ((annot = $$annot[$annot]) || true); $annot++) {
-if (annot.autoCalculated == autoCalc && (name.equals (annot.label)) && (calcId == null || annot.getCalcId ().equals (calcId)) && annot.sequenceRef === seqRef && annot.groupRef === groupRef) {
-return annot;
-}}
-}var annot = new jalview.datamodel.AlignmentAnnotation (name, name, new Array (1), 0, 0, 1);
-annot.hasText = false;
-annot.setCalcId ( String.instantialize (calcId));
-annot.autoCalculated = autoCalc;
-if (seqRef != null) {
-annot.setSequenceRef (seqRef);
-}annot.groupRef = groupRef;
-this.addAnnotation (annot);
-return annot;
-}, "~S,~S,~B,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
-Clazz.overrideMethod (c$, "findAnnotation",
-function (calcId) {
-var aa = new java.util.ArrayList ();
-for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {
-if (a.getCalcId () === calcId || (a.getCalcId () != null && calcId != null && a.getCalcId ().equals (calcId))) {
-aa.add (a);
-}}
-return aa;
-}, "~S");
-Clazz.overrideMethod (c$, "findAnnotations",
-function (seq, calcId, label) {
-var aa = new java.util.ArrayList ();
-for (var ann, $ann = 0, $$ann = this.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
-if (ann.getCalcId () != null && ann.getCalcId ().equals (calcId) && ann.sequenceRef != null && ann.sequenceRef === seq && ann.label != null && ann.label.equals (label)) {
-aa.add (ann);
-}}
-return aa;
-}, "jalview.datamodel.SequenceI,~S,~S");
-Clazz.overrideMethod (c$, "moveSelectedSequencesByOne",
-function (sg, map, up) {
-{
-if (up) {
-for (var i = 1, iSize = this.sequences.size (); i < iSize; i++) {
-var seq = this.sequences.get (i);
-if (!sg.getSequences (map).contains (seq)) {
-continue;
-}var temp = this.sequences.get (i - 1);
-if (sg.getSequences (null).contains (temp)) {
-continue;
-}this.sequences.set (i, temp);
-this.sequences.set (i - 1, seq);
-}
-} else {
-for (var i = this.sequences.size () - 2; i > -1; i--) {
-var seq = this.sequences.get (i);
-if (!sg.getSequences (map).contains (seq)) {
-continue;
-}var temp = this.sequences.get (i + 1);
-if (sg.getSequences (map).contains (temp)) {
-continue;
-}this.sequences.set (i, temp);
-this.sequences.set (i + 1, seq);
-}
-}}}, "jalview.datamodel.SequenceGroup,java.util.Map,~B");
-Clazz.overrideMethod (c$, "validateAnnotation",
-function (alignmentAnnotation) {
-alignmentAnnotation.validateRangeAndDisplay ();
-if (this.isNucleotide () && alignmentAnnotation.isValidStruc ()) {
-this.$hasRNAStructure = true;
-}}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.overrideMethod (c$, "getSeqrep",
-function () {
-return this.seqrep;
-});
-Clazz.overrideMethod (c$, "setSeqrep",
-function (seqrep) {
-this.seqrep = seqrep;
-}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "hasSeqrep",
-function () {
-return this.seqrep != null;
-});
-Clazz.overrideMethod (c$, "getEndRes",
-function () {
-return this.getWidth () - 1;
-});
-Clazz.overrideMethod (c$, "getStartRes",
-function () {
-return 0;
-});
-Clazz.overrideMethod (c$, "getContext",
-function () {
-return this.dataset;
-});
-Clazz.defineMethod (c$, "alignAs",
-function (al) {
-return this.alignAs (al, false, true);
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "alignAs",
-function (al, preserveMappedGaps, preserveUnmappedGaps) {
-var count = 0;
-var thisIsNucleotide = this.isNucleotide ();
-var thatIsProtein = !al.isNucleotide ();
-if (!thatIsProtein && !thisIsNucleotide) {
-return jalview.analysis.AlignmentUtils.alignProteinAsDna (this, al);
-}var thisGapChar = this.getGapCharacter ();
-var gap = thisIsNucleotide && thatIsProtein ? String.valueOf ( Clazz.newCharArray (-1, [thisGapChar, thisGapChar, thisGapChar])) : String.valueOf (thisGapChar);
-for (var alignTo, $alignTo = this.getSequences ().iterator (); $alignTo.hasNext () && ((alignTo = $alignTo.next ()) || true);) {
-count += jalview.analysis.AlignmentUtils.alignSequenceAs (alignTo, al, gap, preserveMappedGaps, preserveUnmappedGaps) ? 1 : 0;
-}
-return count;
-}, "jalview.datamodel.AlignmentI,~B,~B");
-Clazz.overrideMethod (c$, "getSequenceNames",
-function () {
-var names = new java.util.HashSet ();
-for (var seq, $seq = this.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-names.add (seq.getName ());
-}
-return names;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-var seq = this.getSequencesArray ();
-{
-return "" + JSON.stringify(seq);
-}});
-Clazz.defineStatics (c$,
-"PROTEIN", 0,
-"NUCLEOTIDE", 1);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.AlignmentI", "$.HiddenSequences", "java.util.ArrayList", "$.Collections", "$.LinkedHashSet"], "jalview.datamodel.Alignment", ["jalview.analysis.AlignmentUtils", "jalview.datamodel.AlignmentAnnotation", "$.CigarArray", "$.SeqCigar", "$.Sequence", "jalview.util.Comparison", "$.MessageManager", "java.lang.Error", "java.util.HashSet", "$.Hashtable", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.dataset = null;
+this.sequences = null;
+this.groups = null;
+this.gapCharacter = '-';
+this.type = 1;
+this.$hasRNAStructure = false;
+this.annotations = null;
+this.hiddenSequences = null;
+this.alignmentProperties = null;
+this.codonFrameList = null;
+this.alignmentRefs = 0;
+this.seqrep = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "Alignment", null, jalview.datamodel.AlignmentI);
+Clazz.prepareFields (c$, function () {
+this.groups = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+this.hiddenSequences = new jalview.datamodel.HiddenSequences (this);
+this.codonFrameList = new java.util.LinkedHashSet ();
+});
+Clazz.defineMethod (c$, "initAlignment",
+($fz = function (seqs) {
+var i = 0;
+if (jalview.util.Comparison.isNucleotide (seqs)) {
+this.type = 1;
+} else {
+this.type = 0;
+}this.sequences = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+for (i = 0; i < seqs.length; i++) {
+this.sequences.add (seqs[i]);
+}
+}, $fz.isPrivate = true, $fz), "~A");
+Clazz.makeConstructor (c$,
+function (al) {
+var seqs = al.getSequencesArray ();
+for (var i = 0; i < seqs.length; i++) {
+seqs[i] = new jalview.datamodel.Sequence (seqs[i]);
+}
+this.codonFrameList = (al).codonFrameList;
+this.initAlignment (seqs);
+}, "jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$,
+function (seqs) {
+this.initAlignment (seqs);
+}, "~A");
+c$.createAlignment = Clazz.defineMethod (c$, "createAlignment",
+function (compactAlignment) {
+throw new Error (jalview.util.MessageManager.getString ("error.alignment_cigararray_not_implemented"));
+}, "jalview.datamodel.CigarArray");
+Clazz.defineMethod (c$, "getSequences",
+function () {
+return this.sequences;
+});
+Clazz.defineMethod (c$, "getSequences",
+function (hiddenReps) {
+return this.sequences;
+}, "java.util.Map");
+Clazz.defineMethod (c$, "getSequencesArray",
+function () {
+if (this.sequences == null) {
+return null;
+}{
+return this.sequences.toArray ( new Array (this.sequences.size ()));
+}});
+Clazz.overrideMethod (c$, "getSequencesByName",
+function () {
+return jalview.analysis.AlignmentUtils.getSequencesByName (this);
+});
+Clazz.overrideMethod (c$, "getSequenceAt",
+function (i) {
+{
+if (i > -1 && i < this.sequences.size ()) {
+return this.sequences.get (i);
+}}return null;
+}, "~N");
+Clazz.overrideMethod (c$, "addSequence",
+function (snew) {
+if (this.dataset != null) {
+if (snew.getDatasetSequence () != null) {
+this.getDataset ().addSequence (snew.getDatasetSequence ());
+} else {
+var adding = snew.deriveSequence ();
+this.getDataset ().addSequence (adding.getDatasetSequence ());
+snew = adding;
+}}if (this.sequences == null) {
+this.initAlignment ( Clazz.newArray (-1, [snew]));
+} else {
+{
+this.sequences.add (snew);
+}}if (this.hiddenSequences != null) {
+this.hiddenSequences.adjustHeightSequenceAdded ();
+}}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "setSequenceAt",
+function (i, snew) {
+{
+this.deleteSequence (i);
+this.sequences.set (i, snew);
+}}, "~N,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getGroups",
+function () {
+return this.groups;
+});
+Clazz.overrideMethod (c$, "finalize",
+function () {
+if (this.getDataset () != null) {
+this.getDataset ().removeAlignmentRef ();
+}this.dataset = null;
+this.sequences = null;
+this.groups = null;
+this.annotations = null;
+this.hiddenSequences = null;
+});
+Clazz.defineMethod (c$, "removeAlignmentRef",
+($fz = function () {
+if (--this.alignmentRefs == 0) {
+this.finalize ();
+}}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "deleteSequence",
+function (s) {
+this.deleteSequence (this.findIndex (s));
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "deleteSequence",
+function (i) {
+if (i > -1 && i < this.getHeight ()) {
+{
+this.sequences.remove (i);
+this.hiddenSequences.adjustHeightSequenceDeleted (i);
+}}}, "~N");
+Clazz.overrideMethod (c$, "findGroup",
+function (s) {
+{
+for (var i = 0; i < this.groups.size (); i++) {
+var sg = this.groups.get (i);
+if (sg.getSequences (null).contains (s)) {
+return sg;
+}}
+}return null;
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "findAllGroups",
+function (s) {
+var temp = new java.util.ArrayList ();
+{
+var gSize = this.groups.size ();
+for (var i = 0; i < gSize; i++) {
+var sg = this.groups.get (i);
+if (sg == null || sg.getSequences () == null) {
+this.deleteGroup (sg);
+gSize--;
+continue;
+}if (sg.getSequences ().contains (s)) {
+temp.add (sg);
+}}
+}var ret = new Array (temp.size ());
+return temp.toArray (ret);
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "addGroup",
+function (sg) {
+{
+if (!this.groups.contains (sg)) {
+if (this.hiddenSequences.getSize () > 0) {
+var i;
+var iSize = sg.getSize ();
+for (i = 0; i < iSize; i++) {
+if (!this.sequences.contains (sg.getSequenceAt (i))) {
+sg.deleteSequence (sg.getSequenceAt (i), false);
+iSize--;
+i--;
+}}
+if (sg.getSize () < 1) {
+return;
+}}sg.setContext (this);
+this.groups.add (sg);
+}}}, "jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "removeAnnotationForGroup",
+($fz = function (gp) {
+if (this.annotations == null || this.annotations.length == 0) {
+return;
+}var t;
+var todelete = new Array (this.annotations.length);
+var tokeep = new Array (this.annotations.length);
+var i;
+var p;
+var k;
+if (gp == null) {
+for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {
+if (this.annotations[i].groupRef != null) {
+todelete[p++] = this.annotations[i];
+} else {
+tokeep[k++] = this.annotations[i];
+}}
+} else {
+for (i = 0, p = 0, k = 0; i < this.annotations.length; i++) {
+if (this.annotations[i].groupRef === gp) {
+todelete[p++] = this.annotations[i];
+} else {
+tokeep[k++] = this.annotations[i];
+}}
+}if (p > 0) {
+for (i = 0; i < p; i++) {
+this.unhookAnnotation (todelete[i]);
+todelete[i] = null;
+}
+t = new Array (k);
+for (i = 0; i < k; i++) {
+t[i] = tokeep[i];
+}
+this.annotations = t;
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceGroup");
+Clazz.overrideMethod (c$, "deleteAllGroups",
+function () {
+{
+if (this.annotations != null) {
+this.removeAnnotationForGroup (null);
+}for (var sg, $sg = this.groups.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+sg.setContext (null);
+}
+this.groups.clear ();
+}});
+Clazz.overrideMethod (c$, "deleteGroup",
+function (g) {
+{
+if (this.groups.contains (g)) {
+this.removeAnnotationForGroup (g);
+this.groups.remove (g);
+g.setContext (null);
+}}}, "jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "findName",
+function (name) {
+return this.findName (name, false);
+}, "~S");
+Clazz.defineMethod (c$, "findName",
+function (token, b) {
+return this.findName (null, token, b);
+}, "~S,~B");
+Clazz.defineMethod (c$, "findName",
+function (startAfter, token, b) {
+var i = 0;
+var sq = null;
+var sqname = null;
+if (startAfter != null) {
+var matched = false;
+while (i < this.sequences.size ()) {
+if (this.getSequenceAt (i++) === startAfter) {
+matched = true;
+break;
+}}
+if (!matched) {
+i = 0;
+}}while (i < this.sequences.size ()) {
+sq = this.getSequenceAt (i);
+sqname = sq.getName ();
+if (sqname.equals (token) || (b && (sqname.equalsIgnoreCase (token)))) {
+return this.getSequenceAt (i);
+}i++;
+}
+return null;
+}, "jalview.datamodel.SequenceI,~S,~B");
+Clazz.overrideMethod (c$, "findSequenceMatch",
+function (name) {
+var matches = new java.util.Vector ();
+var i = 0;
+while (i < this.sequences.size ()) {
+if (this.getSequenceAt (i).getName ().equals (name)) {
+matches.addElement (this.getSequenceAt (i));
+}i++;
+}
+var result = new Array (matches.size ());
+for (i = 0; i < result.length; i++) {
+result[i] = matches.elementAt (i);
+}
+return result;
+}, "~S");
+Clazz.defineMethod (c$, "findIndex",
+function (s) {
+var i = 0;
+while (i < this.sequences.size ()) {
+if (s === this.getSequenceAt (i)) {
+return i;
+}i++;
+}
+return -1;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "findIndex",
+function (results) {
+var i = 0;
+while (i < this.sequences.size ()) {
+if (results.involvesSequence (this.getSequenceAt (i))) {
+return i;
+}i++;
+}
+return -1;
+}, "jalview.datamodel.SearchResults");
+Clazz.overrideMethod (c$, "getHeight",
+function () {
+return this.sequences.size ();
+});
+Clazz.overrideMethod (c$, "getWidth",
+function () {
+var maxLength = -1;
+for (var i = 0; i < this.sequences.size (); i++) {
+if (this.getSequenceAt (i).getLength () > maxLength) {
+maxLength = this.getSequenceAt (i).getLength ();
+}}
+return maxLength;
+});
+Clazz.overrideMethod (c$, "setGapCharacter",
+function (gc) {
+this.gapCharacter = gc;
+{
+for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+seq.setSequence (seq.getSequenceAsString ().$replace ('.', gc).$replace ('-', gc).$replace (' ', gc));
+}
+}}, "~S");
+Clazz.defineMethod (c$, "getGapCharacter",
+function () {
+return this.gapCharacter;
+});
+Clazz.defineMethod (c$, "isAligned",
+function () {
+return this.isAligned (false);
+});
+Clazz.defineMethod (c$, "isAligned",
+function (includeHidden) {
+var width = this.getWidth ();
+if (this.hiddenSequences == null || this.hiddenSequences.getSize () == 0) {
+includeHidden = true;
+}for (var i = 0; i < this.sequences.size (); i++) {
+if (includeHidden || !this.hiddenSequences.isHidden (this.getSequenceAt (i))) {
+if (this.getSequenceAt (i).getLength () != width) {
+return false;
+}}}
+return true;
+}, "~B");
+Clazz.overrideMethod (c$, "deleteAllAnnotations",
+function (includingAutoCalculated) {
+var result = false;
+for (var alan, $alan = 0, $$alan = this.getAlignmentAnnotation (); $alan < $$alan.length && ((alan = $$alan[$alan]) || true); $alan++) {
+if (!alan.autoCalculated || includingAutoCalculated) {
+this.deleteAnnotation (alan);
+result = true;
+}}
+return result;
+}, "~B");
+Clazz.defineMethod (c$, "deleteAnnotation",
+function (aa) {
+return this.deleteAnnotation (aa, true);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "deleteAnnotation",
+function (aa, unhook) {
+var aSize = 1;
+if (this.annotations != null) {
+aSize = this.annotations.length;
+}if (aSize < 1) {
+return false;
+}var temp = new Array (aSize - 1);
+var swap = false;
+var tIndex = 0;
+for (var i = 0; i < aSize; i++) {
+if (this.annotations[i] === aa) {
+swap = true;
+continue;
+}if (tIndex < temp.length) {
+temp[tIndex++] = this.annotations[i];
+}}
+if (swap) {
+this.annotations = temp;
+if (unhook) {
+this.unhookAnnotation (aa);
+}}return swap;
+}, "jalview.datamodel.AlignmentAnnotation,~B");
+Clazz.defineMethod (c$, "unhookAnnotation",
+($fz = function (aa) {
+if (aa.sequenceRef != null) {
+aa.sequenceRef.removeAlignmentAnnotation (aa);
+}if (aa.groupRef != null) {
+aa.groupRef = null;
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "addAnnotation",
+function (aa) {
+this.addAnnotation (aa, -1);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "addAnnotation",
+function (aa, pos) {
+if (aa.getRNAStruc () != null) {
+this.$hasRNAStructure = true;
+}var aSize = 1;
+if (this.annotations != null) {
+aSize = this.annotations.length + 1;
+}var temp = new Array (aSize);
+var i = 0;
+if (pos == -1 || pos >= aSize) {
+temp[aSize - 1] = aa;
+} else {
+temp[pos] = aa;
+}if (aSize > 1) {
+var p = 0;
+for (i = 0; i < (aSize - 1); i++, p++) {
+if (p == pos) {
+p++;
+}if (p < temp.length) {
+temp[p] = this.annotations[i];
+}}
+}this.annotations = temp;
+}, "jalview.datamodel.AlignmentAnnotation,~N");
+Clazz.overrideMethod (c$, "setAnnotationIndex",
+function (aa, index) {
+if (aa == null || this.annotations == null || this.annotations.length - 1 < index) {
+return;
+}var aSize = this.annotations.length;
+var temp = new Array (aSize);
+temp[index] = aa;
+for (var i = 0; i < aSize; i++) {
+if (i == index) {
+continue;
+}if (i < index) {
+temp[i] = this.annotations[i];
+} else {
+temp[i] = this.annotations[i - 1];
+}}
+this.annotations = temp;
+}, "jalview.datamodel.AlignmentAnnotation,~N");
+Clazz.defineMethod (c$, "getAlignmentAnnotation",
+function () {
+return this.annotations;
+});
+Clazz.overrideMethod (c$, "setNucleotide",
+function (b) {
+if (b) {
+this.type = 1;
+} else {
+this.type = 0;
+}}, "~B");
+Clazz.defineMethod (c$, "isNucleotide",
+function () {
+if (this.type == 1) {
+return true;
+} else {
+return false;
+}});
+Clazz.overrideMethod (c$, "hasRNAStructure",
+function () {
+return this.$hasRNAStructure;
+});
+Clazz.overrideMethod (c$, "setDataset",
+function (data) {
+if (this.dataset == null && data == null) {
+var seqs = new Array (this.getHeight ());
+var currentSeq;
+for (var i = 0; i < this.getHeight (); i++) {
+currentSeq = this.getSequenceAt (i);
+if (currentSeq.getDatasetSequence () != null) {
+seqs[i] = currentSeq.getDatasetSequence ();
+} else {
+seqs[i] = currentSeq.createDatasetSequence ();
+}}
+this.dataset = new jalview.datamodel.Alignment (seqs);
+} else if (this.dataset == null && data != null) {
+this.dataset = data;
+for (var i = 0; i < this.getHeight (); i++) {
+var currentSeq = this.getSequenceAt (i);
+var dsq = currentSeq.getDatasetSequence ();
+if (dsq == null) {
+dsq = currentSeq.createDatasetSequence ();
+this.dataset.addSequence (dsq);
+} else {
+while (dsq.getDatasetSequence () != null) {
+dsq = dsq.getDatasetSequence ();
+}
+if (this.dataset.findIndex (dsq) == -1) {
+this.dataset.addSequence (dsq);
+}}}
+}this.dataset.addAlignmentRef ();
+}, "jalview.datamodel.Alignment");
+Clazz.defineMethod (c$, "addAlignmentRef",
+($fz = function () {
+this.alignmentRefs++;
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "getDataset",
+function () {
+return this.dataset;
+});
+Clazz.overrideMethod (c$, "padGaps",
+function () {
+var modified = false;
+var maxLength = -1;
+var current;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+for (var j = current.getLength (); j > maxLength; j--) {
+if (j > maxLength && !jalview.util.Comparison.isGap (current.getCharAt (j))) {
+maxLength = j;
+break;
+}}
+}
+maxLength++;
+var cLength;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+cLength = current.getLength ();
+if (cLength < maxLength) {
+current.insertCharAt (cLength, maxLength - cLength, this.gapCharacter);
+modified = true;
+} else if (current.getLength () > maxLength) {
+current.deleteChars (maxLength, current.getLength ());
+}}
+return modified;
+});
+Clazz.overrideMethod (c$, "justify",
+function (right) {
+var modified = false;
+var maxLength = -1;
+var ends = Clazz.newIntArray (this.sequences.size () * 2, 0);
+var current;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+ends[i * 2] = current.findIndex (current.getStart ());
+ends[i * 2 + 1] = current.findIndex (current.getStart () + current.getLength ());
+var hitres = false;
+for (var j = 0, rs = 0, ssiz = current.getLength (); j < ssiz; j++) {
+if (!jalview.util.Comparison.isGap (current.getCharAt (j))) {
+if (!hitres) {
+ends[i * 2] = j;
+hitres = true;
+} else {
+ends[i * 2 + 1] = j;
+if (j - ends[i * 2] > maxLength) {
+maxLength = j - ends[i * 2];
+}}}}
+}
+maxLength++;
+var cLength;
+var extent;
+var diff;
+for (var i = 0; i < this.sequences.size (); i++) {
+current = this.getSequenceAt (i);
+cLength = 1 + ends[i * 2 + 1] - ends[i * 2];
+diff = maxLength - cLength;
+extent = current.getLength ();
+if (right) {
+if (extent > ends[i * 2 + 1]) {
+current.deleteChars (ends[i * 2 + 1] + 1, extent);
+modified = true;
+}if (ends[i * 2] > diff) {
+current.deleteChars (0, ends[i * 2] - diff);
+modified = true;
+} else {
+if (ends[i * 2] < diff) {
+current.insertCharAt (0, diff - ends[i * 2], this.gapCharacter);
+modified = true;
+}}} else {
+if (ends[i * 2] > 0) {
+current.deleteChars (0, ends[i * 2]);
+modified = true;
+ends[i * 2 + 1] -= ends[i * 2];
+extent -= ends[i * 2];
+}if (extent > maxLength) {
+current.deleteChars (maxLength + 1, extent);
+modified = true;
+} else {
+if (extent < maxLength) {
+current.insertCharAt (extent, maxLength - extent, this.gapCharacter);
+modified = true;
+}}}}
+return modified;
+}, "~B");
+Clazz.defineMethod (c$, "getHiddenSequences",
+function () {
+return this.hiddenSequences;
+});
+Clazz.overrideMethod (c$, "getCompactAlignment",
+function () {
+{
+var alseqs = new Array (this.sequences.size ());
+var i = 0;
+for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+alseqs[i++] = new jalview.datamodel.SeqCigar (seq);
+}
+var cal = new jalview.datamodel.CigarArray (alseqs);
+cal.addOperation ('M', this.getWidth ());
+return cal;
+}});
+Clazz.overrideMethod (c$, "setProperty",
+function (key, value) {
+if (this.alignmentProperties == null) {
+this.alignmentProperties = new java.util.Hashtable ();
+}this.alignmentProperties.put (key, value);
+}, "~O,~O");
+Clazz.defineMethod (c$, "getProperty",
+function (key) {
+if (this.alignmentProperties != null) {
+return this.alignmentProperties.get (key);
+} else {
+return null;
+}}, "~O");
+Clazz.defineMethod (c$, "getProperties",
+function () {
+return this.alignmentProperties;
+});
+Clazz.overrideMethod (c$, "addCodonFrame",
+function (codons) {
+if (codons != null) {
+this.codonFrameList.add (codons);
+}}, "jalview.datamodel.AlignedCodonFrame");
+Clazz.overrideMethod (c$, "getCodonFrame",
+function (seq) {
+if (seq == null) {
+return null;
+}var cframes = new java.util.ArrayList ();
+for (var acf, $acf = this.codonFrameList.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+if (acf.involvesSequence (seq)) {
+cframes.add (acf);
+}}
+return cframes;
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "setCodonFrames",
+function (acfs) {
+this.codonFrameList = acfs;
+}, "java.util.Set");
+Clazz.defineMethod (c$, "getCodonFrames",
+function () {
+return this.codonFrameList;
+});
+Clazz.overrideMethod (c$, "removeCodonFrame",
+function (codons) {
+if (codons == null || this.codonFrameList == null) {
+return false;
+}return this.codonFrameList.remove (codons);
+}, "jalview.datamodel.AlignedCodonFrame");
+Clazz.overrideMethod (c$, "append",
+function (toappend) {
+if (toappend === this) {
+System.err.println ("Self append may cause a deadlock.");
+}var samegap = toappend.getGapCharacter () == this.getGapCharacter ();
+var oldc = toappend.getGapCharacter ();
+var hashidden = toappend.getHiddenSequences () != null && toappend.getHiddenSequences ().hiddenSequences != null;
+var sqs = (hashidden) ? toappend.getHiddenSequences ().getFullAlignment ().getSequences () : toappend.getSequences ();
+if (sqs != null) {
+{
+for (var addedsq, $addedsq = sqs.iterator (); $addedsq.hasNext () && ((addedsq = $addedsq.next ()) || true);) {
+if (!samegap) {
+var oldseq = addedsq.getSequence ();
+for (var c = 0; c < oldseq.length; c++) {
+if (oldseq[c] == oldc) {
+oldseq[c] = this.gapCharacter;
+}}
+}this.addSequence (addedsq);
+}
+}}var alan = toappend.getAlignmentAnnotation ();
+for (var a = 0; alan != null && a < alan.length; a++) {
+this.addAnnotation (alan[a]);
+}
+this.codonFrameList.addAll (toappend.getCodonFrames ());
+var sg = toappend.getGroups ();
+if (sg != null) {
+for (var _sg, $_sg = sg.iterator (); $_sg.hasNext () && ((_sg = $_sg.next ()) || true);) {
+this.addGroup (_sg);
+}
+}if (toappend.getHiddenSequences () != null) {
+var hs = toappend.getHiddenSequences ();
+if (this.hiddenSequences == null) {
+this.hiddenSequences = new jalview.datamodel.HiddenSequences (this);
+}if (hs.hiddenSequences != null) {
+for (var s = 0; s < hs.hiddenSequences.length; s++) {
+if (hs.hiddenSequences[s] != null) {
+this.hiddenSequences.hideSequence (hs.hiddenSequences[s]);
+}}
+}}if (toappend.getProperties () != null) {
+var key = toappend.getProperties ().keys ();
+while (key.hasMoreElements ()) {
+var k = key.nextElement ();
+var ourval = this.getProperty (k);
+var toapprop = toappend.getProperty (k);
+if (ourval != null) {
+if (ourval.getClass ().equals (toapprop.getClass ()) && !ourval.equals (toapprop)) {
+if (Clazz.instanceOf (ourval, String)) {
+this.setProperty (k, (ourval) + "; " + (toapprop));
+} else {
+if (Clazz.instanceOf (ourval, java.util.Vector)) {
+var theirv = (toapprop).elements ();
+while (theirv.hasMoreElements ()) {
+(ourval).addElement (theirv);
+}
+}}}} else {
+this.setProperty (k, toapprop);
+}}
+}}, "jalview.datamodel.AlignmentI");
+Clazz.overrideMethod (c$, "findOrCreateAnnotation",
+function (name, calcId, autoCalc, seqRef, groupRef) {
+if (this.annotations != null) {
+for (var annot, $annot = 0, $$annot = this.getAlignmentAnnotation (); $annot < $$annot.length && ((annot = $$annot[$annot]) || true); $annot++) {
+if (annot.autoCalculated == autoCalc && (name.equals (annot.label)) && (calcId == null || annot.getCalcId ().equals (calcId)) && annot.sequenceRef === seqRef && annot.groupRef === groupRef) {
+return annot;
+}}
+}var annot = new jalview.datamodel.AlignmentAnnotation (name, name, new Array (1), 0, 0, 1);
+annot.hasText = false;
+annot.setCalcId ( String.instantialize (calcId));
+annot.autoCalculated = autoCalc;
+if (seqRef != null) {
+annot.setSequenceRef (seqRef);
+}annot.groupRef = groupRef;
+this.addAnnotation (annot);
+return annot;
+}, "~S,~S,~B,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
+Clazz.overrideMethod (c$, "findAnnotation",
+function (calcId) {
+var aa = new java.util.ArrayList ();
+for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {
+if (a.getCalcId () === calcId || (a.getCalcId () != null && calcId != null && a.getCalcId ().equals (calcId))) {
+aa.add (a);
+}}
+return aa;
+}, "~S");
+Clazz.overrideMethod (c$, "findAnnotations",
+function (seq, calcId, label) {
+var aa = new java.util.ArrayList ();
+for (var ann, $ann = 0, $$ann = this.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
+if (ann.getCalcId () != null && ann.getCalcId ().equals (calcId) && ann.sequenceRef != null && ann.sequenceRef === seq && ann.label != null && ann.label.equals (label)) {
+aa.add (ann);
+}}
+return aa;
+}, "jalview.datamodel.SequenceI,~S,~S");
+Clazz.overrideMethod (c$, "moveSelectedSequencesByOne",
+function (sg, map, up) {
+{
+if (up) {
+for (var i = 1, iSize = this.sequences.size (); i < iSize; i++) {
+var seq = this.sequences.get (i);
+if (!sg.getSequences (map).contains (seq)) {
+continue;
+}var temp = this.sequences.get (i - 1);
+if (sg.getSequences (null).contains (temp)) {
+continue;
+}this.sequences.set (i, temp);
+this.sequences.set (i - 1, seq);
+}
+} else {
+for (var i = this.sequences.size () - 2; i > -1; i--) {
+var seq = this.sequences.get (i);
+if (!sg.getSequences (map).contains (seq)) {
+continue;
+}var temp = this.sequences.get (i + 1);
+if (sg.getSequences (map).contains (temp)) {
+continue;
+}this.sequences.set (i, temp);
+this.sequences.set (i + 1, seq);
+}
+}}}, "jalview.datamodel.SequenceGroup,java.util.Map,~B");
+Clazz.overrideMethod (c$, "validateAnnotation",
+function (alignmentAnnotation) {
+alignmentAnnotation.validateRangeAndDisplay ();
+if (this.isNucleotide () && alignmentAnnotation.isValidStruc ()) {
+this.$hasRNAStructure = true;
+}}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "getSeqrep",
+function () {
+return this.seqrep;
+});
+Clazz.overrideMethod (c$, "setSeqrep",
+function (seqrep) {
+this.seqrep = seqrep;
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "hasSeqrep",
+function () {
+return this.seqrep != null;
+});
+Clazz.overrideMethod (c$, "getEndRes",
+function () {
+return this.getWidth () - 1;
+});
+Clazz.overrideMethod (c$, "getStartRes",
+function () {
+return 0;
+});
+Clazz.overrideMethod (c$, "getContext",
+function () {
+return this.dataset;
+});
+Clazz.defineMethod (c$, "alignAs",
+function (al) {
+return this.alignAs (al, false, true);
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "alignAs",
+function (al, preserveMappedGaps, preserveUnmappedGaps) {
+var count = 0;
+var thisIsNucleotide = this.isNucleotide ();
+var thatIsProtein = !al.isNucleotide ();
+if (!thatIsProtein && !thisIsNucleotide) {
+return jalview.analysis.AlignmentUtils.alignProteinAsDna (this, al);
+}var thisGapChar = this.getGapCharacter ();
+var gap = thisIsNucleotide && thatIsProtein ? String.valueOf ( Clazz.newCharArray (-1, [thisGapChar, thisGapChar, thisGapChar])) : String.valueOf (thisGapChar);
+for (var alignTo, $alignTo = this.getSequences ().iterator (); $alignTo.hasNext () && ((alignTo = $alignTo.next ()) || true);) {
+count += jalview.analysis.AlignmentUtils.alignSequenceAs (alignTo, al, gap, preserveMappedGaps, preserveUnmappedGaps) ? 1 : 0;
+}
+return count;
+}, "jalview.datamodel.AlignmentI,~B,~B");
+Clazz.overrideMethod (c$, "getSequenceNames",
+function () {
+var names = new java.util.HashSet ();
+for (var seq, $seq = this.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+names.add (seq.getName ());
+}
+return names;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+var seq = this.getSequencesArray ();
+{
+return "" + JSON.stringify(seq);
+}});
+Clazz.defineStatics (c$,
+"PROTEIN", 0,
+"NUCLEOTIDE", 1);
+});
diff --git a/bin/jalview/datamodel/AlignmentAnnotation.class b/bin/jalview/datamodel/AlignmentAnnotation.class
index 840fdf1..88e30db 100644
Binary files a/bin/jalview/datamodel/AlignmentAnnotation.class and b/bin/jalview/datamodel/AlignmentAnnotation.class differ
diff --git a/bin/jalview/datamodel/AlignmentAnnotation.js b/bin/jalview/datamodel/AlignmentAnnotation.js
index 0be7f1c..e321a8d 100644
--- a/bin/jalview/datamodel/AlignmentAnnotation.js
+++ b/bin/jalview/datamodel/AlignmentAnnotation.js
@@ -1,623 +1,623 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.util.HashMap"], "jalview.datamodel.AlignmentAnnotation", ["jalview.analysis.Rna", "jalview.datamodel.Annotation", "$.GraphLine", "jalview.schemes.ResidueProperties", "java.lang.Double", "$.Error", "$.Long", "$.StringBuffer", "$.StringBuilder", "java.util.Collections"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.autoCalculated = false;
-this.annotationId = null;
-this.sequenceRef = null;
-this.label = null;
-this.description = null;
-this.annotations = null;
-this.bps = null;
-this._rnasecstr = null;
-this.invalidrnastruc = -2;
-this.sequenceMapping = null;
-this.graphMin = 0;
-this.graphMax = 0;
-this.score = NaN;
-this.$hasScore = false;
-this.threshold = null;
-this.editable = false;
-this.hasIcons = false;
-this.hasText = false;
-this.visible = true;
-this.graphGroup = -1;
-this.height = 0;
-this.graph = 0;
-this.graphHeight = 40;
-this.padGaps = false;
-this.belowAlignment = true;
-this.groupRef = null;
-this.showAllColLabels = false;
-this.scaleColLabel = false;
-this.centreColLabels = false;
-this.isrna = false;
-if (!Clazz.isClassDefined ("jalview.datamodel.AlignmentAnnotation.AnnotCharSequence")) {
-jalview.datamodel.AlignmentAnnotation.$AlignmentAnnotation$AnnotCharSequence$ ();
-}
-this._lastrnaannot = -1;
-this.calcId = "";
-this.properties = null;
-this._linecolour = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "AlignmentAnnotation");
-Clazz.prepareFields (c$, function () {
-this.properties = new java.util.HashMap ();
-});
-Clazz.defineMethod (c$, "_updateRnaSecStr",
-($fz = function (RNAannot) {
-try {
-this._rnasecstr = jalview.analysis.Rna.GetBasePairs (RNAannot);
-this.bps = jalview.analysis.Rna.GetModeleBP (RNAannot);
-this.invalidrnastruc = -1;
-} catch (px) {
-if (Clazz.exceptionOf (px, jalview.analysis.WUSSParseException)) {
-this.invalidrnastruc = px.getProblemPos ();
-} else {
-throw px;
-}
-}
-if (this.invalidrnastruc > -1) {
-return;
-}jalview.analysis.Rna.HelixMap (this._rnasecstr);
-if (this._rnasecstr != null && this._rnasecstr.length > 0) {
-this.isrna = true;
-this.showAllColLabels = true;
-this.scaleColLabel = true;
-this._markRnaHelices ();
-}}, $fz.isPrivate = true, $fz), "CharSequence");
-Clazz.defineMethod (c$, "_markRnaHelices",
-($fz = function () {
-var mxval = 0;
-for (var x = 0; x < this._rnasecstr.length; x++) {
-var val = 0;
-try {
-val = (Integer.$valueOf (this._rnasecstr[x].getFeatureGroup ())).intValue ();
-if (mxval < val) {
-mxval = val;
-}} catch (q) {
-if (Clazz.exceptionOf (q, NumberFormatException)) {
-} else {
-throw q;
-}
-}
-;this.annotations[this._rnasecstr[x].getBegin ()].value = val;
-this.annotations[this._rnasecstr[x].getEnd ()].value = val;
-}
-this.setScore (mxval);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "finalize",
-function () {
-this.sequenceRef = null;
-this.groupRef = null;
-Clazz.superCall (this, jalview.datamodel.AlignmentAnnotation, "finalize", []);
-});
-c$.getGraphValueFromString = Clazz.defineMethod (c$, "getGraphValueFromString",
-function (string) {
-if (string.equalsIgnoreCase ("BAR_GRAPH")) {
-return 1;
-} else if (string.equalsIgnoreCase ("LINE_GRAPH")) {
-return 2;
-} else {
-return 0;
-}}, "~S");
-Clazz.defineMethod (c$, "ConcenStru",
-function (RNAannot) {
-this.bps = jalview.analysis.Rna.GetModeleBP (RNAannot);
-}, "CharSequence");
-Clazz.makeConstructor (c$,
-function (label, description, annotations) {
-this.setAnnotationId ();
-this.editable = true;
-this.label = label;
-this.description = description;
-this.annotations = annotations;
-this.validateRangeAndDisplay ();
-}, "~S,~S,~A");
-Clazz.defineMethod (c$, "areLabelsSecondaryStructure",
-function () {
-var nonSSLabel = false;
-this.isrna = false;
-var rnastring = new StringBuffer ();
-var firstChar = String.fromCharCode (0);
-for (var i = 0; i < this.annotations.length; i++) {
-if (this.annotations[i] == null) {
-continue;
-}if (this.annotations[i].secondaryStructure == 'H' || this.annotations[i].secondaryStructure == 'E') {
-this.hasIcons = new Boolean (this.hasIcons | true).valueOf ();
-} else {
-if (this.annotations[i].secondaryStructure == '(' || this.annotations[i].secondaryStructure == '[' || this.annotations[i].secondaryStructure == '<' || this.annotations[i].secondaryStructure == '{' || this.annotations[i].secondaryStructure == 'A' || this.annotations[i].secondaryStructure == 'B' || this.annotations[i].secondaryStructure == 'C' || this.annotations[i].secondaryStructure == 'D' || this.annotations[i].secondaryStructure == 'E' || this.annotations[i].secondaryStructure == 'F' || this.annotations[i].secondaryStructure == 'G' || this.annotations[i].secondaryStructure == 'H' || this.annotations[i].secondaryStructure == 'I' || this.annotations[i].secondaryStructure == 'J' || this.annotations[i].secondaryStructure == 'K' || this.annotations[i].secondaryStructure == 'L' || this.annotations[i].secondaryStructure == 'M' || this.annotations[i].secondaryStructure == 'N' || this.annotations[i].secondaryStructure == 'O' || this.annotations[i].secondaryStructure == 'P' || this.annotations[i].secondaryStructure == 'Q' || this.annotations[i].secondaryStructure == 'R' || this.annotations[i].secondaryStructure == 'S' || this.annotations[i].secondaryStructure == 'T' || this.annotations[i].secondaryStructure == 'U' || this.annotations[i].secondaryStructure == 'V' || this.annotations[i].secondaryStructure == 'W' || this.annotations[i].secondaryStructure == 'X' || this.annotations[i].secondaryStructure == 'Y' || this.annotations[i].secondaryStructure == 'Z') {
-this.hasIcons = new Boolean (this.hasIcons | true).valueOf ();
-this.isrna = new Boolean (this.isrna | true).valueOf ();
-}}if (this.annotations[i].displayCharacter == null || this.annotations[i].displayCharacter.length == 0) {
-rnastring.append ('.');
-continue;
-}if (this.annotations[i].displayCharacter.length == 1) {
-firstChar = this.annotations[i].displayCharacter.charAt (0);
-if (this.annotations[i].secondaryStructure != ' ' && !this.hasIcons && firstChar != ' ' && firstChar != '$' && firstChar.charCodeAt (0) != 0xCE && firstChar != '(' && firstChar != '[' && firstChar != '>' && firstChar != '{' && firstChar != 'A' && firstChar != 'B' && firstChar != 'C' && firstChar != 'D' && firstChar != 'E' && firstChar != 'F' && firstChar != 'G' && firstChar != 'H' && firstChar != 'I' && firstChar != 'J' && firstChar != 'K' && firstChar != 'L' && firstChar != 'M' && firstChar != 'N' && firstChar != 'O' && firstChar != 'P' && firstChar != 'Q' && firstChar != 'R' && firstChar != 'S' && firstChar != 'T' && firstChar != 'U' && firstChar != 'V' && firstChar != 'W' && firstChar != 'X' && firstChar != 'Y' && firstChar != 'Z' && firstChar != '-' && firstChar.charCodeAt (0) < jalview.schemes.ResidueProperties.aaIndex.length) {
-if (jalview.schemes.ResidueProperties.aaIndex[firstChar.charCodeAt (0)] < 23) {
-nonSSLabel = true;
-}}} else {
-rnastring.append (this.annotations[i].displayCharacter.charAt (1));
-}if (this.annotations[i].displayCharacter.length > 0) {
-this.hasText = true;
-}}
-if (nonSSLabel) {
-this.hasIcons = false;
-for (var j = 0; j < this.annotations.length; j++) {
-if (this.annotations[j] != null && this.annotations[j].secondaryStructure != ' ') {
-this.annotations[j].displayCharacter = String.valueOf (this.annotations[j].secondaryStructure);
-this.annotations[j].secondaryStructure = ' ';
-}}
-} else {
-if (this.isrna) {
-this._updateRnaSecStr (Clazz.innerTypeInstance (jalview.datamodel.AlignmentAnnotation.AnnotCharSequence, this, null));
-}}});
-Clazz.defineMethod (c$, "getRNAStruc",
-function () {
-if (this.isrna) {
-var rnastruc = Clazz.innerTypeInstance (jalview.datamodel.AlignmentAnnotation.AnnotCharSequence, this, null).toString ();
-if (this._lastrnaannot != rnastruc.hashCode ()) {
-this._lastrnaannot = rnastruc.hashCode ();
-this._updateRnaSecStr (rnastruc);
-}return rnastruc;
-}return null;
-});
-Clazz.makeConstructor (c$,
-function (label, description, annotations, min, max, graphType) {
-this.setAnnotationId ();
-this.editable = graphType == 0;
-this.label = label;
-this.description = description;
-this.annotations = annotations;
-this.graph = graphType;
-this.graphMin = min;
-this.graphMax = max;
-this.validateRangeAndDisplay ();
-}, "~S,~S,~A,~N,~N,~N");
-Clazz.defineMethod (c$, "validateRangeAndDisplay",
-function () {
-if (this.annotations == null) {
-this.visible = false;
-return;
-}var graphType = this.graph;
-var min = this.graphMin;
-var max = this.graphMax;
-var drawValues = true;
-this._linecolour = null;
-if (min == max) {
-min = 999999999;
-for (var i = 0; i < this.annotations.length; i++) {
-if (this.annotations[i] == null) {
-continue;
-}if (drawValues && this.annotations[i].displayCharacter != null && this.annotations[i].displayCharacter.length > 1) {
-drawValues = false;
-}if (this.annotations[i].value > max) {
-max = this.annotations[i].value;
-}if (this.annotations[i].value < min) {
-min = this.annotations[i].value;
-}if (this._linecolour == null && this.annotations[i].colour != null) {
-this._linecolour = this.annotations[i].colour;
-}}
-if (min > 0) {
-min = 0;
-} else {
-if (max < 0) {
-max = 0;
-}}}this.graphMin = min;
-this.graphMax = max;
-this.areLabelsSecondaryStructure ();
-if (!drawValues && graphType != 0) {
-for (var i = 0; i < this.annotations.length; i++) {
-if (this.annotations[i] != null) {
-this.annotations[i].displayCharacter = "";
-}}
-}});
-Clazz.makeConstructor (c$,
-function (annotation) {
-this.setAnnotationId ();
-this.label = String.instantialize (annotation.label);
-if (annotation.description != null) {
-this.description = String.instantialize (annotation.description);
-}this.graphMin = annotation.graphMin;
-this.graphMax = annotation.graphMax;
-this.graph = annotation.graph;
-this.graphHeight = annotation.graphHeight;
-this.graphGroup = annotation.graphGroup;
-this.groupRef = annotation.groupRef;
-this.editable = annotation.editable;
-this.autoCalculated = annotation.autoCalculated;
-this.hasIcons = annotation.hasIcons;
-this.hasText = annotation.hasText;
-this.height = annotation.height;
-this.label = annotation.label;
-this.padGaps = annotation.padGaps;
-this.visible = annotation.visible;
-this.centreColLabels = annotation.centreColLabels;
-this.scaleColLabel = annotation.scaleColLabel;
-this.showAllColLabels = annotation.showAllColLabels;
-this.calcId = annotation.calcId;
-if (annotation.properties != null) {
-this.properties = new java.util.HashMap ();
-for (var val, $val = annotation.properties.entrySet ().iterator (); $val.hasNext () && ((val = $val.next ()) || true);) {
-this.properties.put (val.getKey (), val.getValue ());
-}
-}if (this.$hasScore = annotation.$hasScore) {
-this.score = annotation.score;
-}if (annotation.threshold != null) {
-this.threshold = new jalview.datamodel.GraphLine (annotation.threshold);
-}var ann = annotation.annotations;
-if (annotation.annotations != null) {
-this.annotations = new Array (ann.length);
-for (var i = 0; i < ann.length; i++) {
-if (ann[i] != null) {
-this.annotations[i] = new jalview.datamodel.Annotation (ann[i]);
-if (this._linecolour != null) {
-this._linecolour = this.annotations[i].colour;
-}}}
-}if (annotation.sequenceRef != null) {
-this.sequenceRef = annotation.sequenceRef;
-if (annotation.sequenceMapping != null) {
-var p = null;
-this.sequenceMapping = new java.util.HashMap ();
-var pos = annotation.sequenceMapping.keySet ().iterator ();
-while (pos.hasNext ()) {
-p = pos.next ();
-var a = annotation.sequenceMapping.get (p);
-if (a == null) {
-continue;
-}if (ann != null) {
-for (var i = 0; i < ann.length; i++) {
-if (ann[i] === a) {
-this.sequenceMapping.put (p, this.annotations[i]);
-}}
-}}
-} else {
-this.sequenceMapping = null;
-}}{
-}this.validateRangeAndDisplay ();
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "restrict",
-function (startRes, endRes) {
-if (this.annotations == null) {
-return;
-}if (startRes < 0) {
-startRes = 0;
-}if (startRes >= this.annotations.length) {
-startRes = this.annotations.length - 1;
-}if (endRes >= this.annotations.length) {
-endRes = this.annotations.length - 1;
-}if (this.annotations == null) {
-return;
-}var temp = new Array (endRes - startRes + 1);
-if (startRes < this.annotations.length) {
-System.arraycopy (this.annotations, startRes, temp, 0, endRes - startRes + 1);
-}if (this.sequenceRef != null) {
-var spos = this.sequenceRef.findPosition (startRes);
-var epos = this.sequenceRef.findPosition (endRes);
-if (this.sequenceMapping != null) {
-var newmapping = new java.util.HashMap ();
-var e = this.sequenceMapping.keySet ().iterator ();
-while (e.hasNext ()) {
-var pos = e.next ();
-if (pos.intValue () >= spos && pos.intValue () <= epos) {
-newmapping.put (pos, this.sequenceMapping.get (pos));
-}}
-this.sequenceMapping.clear ();
-this.sequenceMapping = newmapping;
-}}this.annotations = temp;
-}, "~N,~N");
-Clazz.defineMethod (c$, "padAnnotation",
-function (length) {
-if (this.annotations == null) {
-return true;
-}if (this.annotations.length < length) {
-var na = new Array (length);
-System.arraycopy (this.annotations, 0, na, 0, this.annotations.length);
-this.annotations = na;
-return true;
-}return this.annotations.length > length;
-}, "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var buffer = new StringBuilder (256);
-for (var i = 0; i < this.annotations.length; i++) {
-if (this.annotations[i] != null) {
-if (this.graph != 0) {
-buffer.append (this.annotations[i].value);
-} else if (this.hasIcons) {
-buffer.append (this.annotations[i].secondaryStructure);
-} else {
-buffer.append (this.annotations[i].displayCharacter);
-}}buffer.append (", ");
-}
-if (this.label.indexOf ("Consensus") == 0) {
-buffer.append ("\n");
-for (var i = 0; i < this.annotations.length; i++) {
-if (this.annotations[i] != null) {
-buffer.append (this.annotations[i].description);
-}buffer.append (", ");
-}
-}return buffer.toString ();
-});
-Clazz.defineMethod (c$, "setThreshold",
-function (line) {
-this.threshold = line;
-}, "jalview.datamodel.GraphLine");
-Clazz.defineMethod (c$, "getThreshold",
-function () {
-return this.threshold;
-});
-Clazz.defineMethod (c$, "createSequenceMapping",
-function (seqRef, startRes, alreadyMapped) {
-if (seqRef == null) {
-return;
-}this.sequenceRef = seqRef;
-if (this.annotations == null) {
-return;
-}this.sequenceMapping = new java.util.HashMap ();
-var seqPos;
-for (var i = 0; i < this.annotations.length; i++) {
-if (this.annotations[i] != null) {
-if (alreadyMapped) {
-seqPos = seqRef.findPosition (i);
-} else {
-seqPos = i + startRes;
-}this.sequenceMapping.put ( new Integer (seqPos), this.annotations[i]);
-}}
-}, "jalview.datamodel.SequenceI,~N,~B");
-Clazz.defineMethod (c$, "adjustForAlignment",
-function () {
-if (this.sequenceRef == null) {
-return;
-}if (this.annotations == null) {
-return;
-}var a = 0;
-var aSize = this.sequenceRef.getLength ();
-if (aSize == 0) {
-return;
-}var position;
-var temp = new Array (aSize);
-var index;
-for (a = this.sequenceRef.getStart (); a <= this.sequenceRef.getEnd (); a++) {
-index = new Integer (a);
-if (this.sequenceMapping.containsKey (index)) {
-position = this.sequenceRef.findIndex (a) - 1;
-temp[position] = this.sequenceMapping.get (index);
-}}
-this.annotations = temp;
-});
-Clazz.defineMethod (c$, "compactAnnotationArray",
-function () {
-var i = 0;
-var iSize = this.annotations.length;
-while (i < iSize) {
-if (this.annotations[i] == null) {
-if (i + 1 < iSize) {
-System.arraycopy (this.annotations, i + 1, this.annotations, i, iSize - i - 1);
-}iSize--;
-} else {
-i++;
-}}
-var ann = this.annotations;
-this.annotations = new Array (i);
-System.arraycopy (ann, 0, this.annotations, 0, i);
-ann = null;
-return iSize;
-});
-Clazz.defineMethod (c$, "setSequenceRef",
-function (sequenceI) {
-if (sequenceI != null) {
-if (this.sequenceRef != null) {
-var rIsDs = this.sequenceRef.getDatasetSequence () == null;
-var tIsDs = sequenceI.getDatasetSequence () == null;
-if (this.sequenceRef !== sequenceI && (rIsDs && !tIsDs && this.sequenceRef !== sequenceI.getDatasetSequence ()) && (!rIsDs && tIsDs && this.sequenceRef.getDatasetSequence () !== sequenceI) && (!rIsDs && !tIsDs && this.sequenceRef.getDatasetSequence () !== sequenceI.getDatasetSequence ()) && !this.sequenceRef.equals (sequenceI)) {
-this.sequenceRef = null;
-if (this.sequenceMapping != null) {
-this.sequenceMapping = null;
-}this.createSequenceMapping (sequenceI, 1, true);
-this.adjustForAlignment ();
-} else {
-this.sequenceRef = sequenceI;
-}} else {
-this.createSequenceMapping (sequenceI, 1, true);
-this.adjustForAlignment ();
-}} else {
-this.sequenceMapping = null;
-this.sequenceRef = null;
-}}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getScore",
-function () {
-return this.score;
-});
-Clazz.defineMethod (c$, "setScore",
-function (score) {
-this.$hasScore = true;
-this.score = score;
-}, "~N");
-Clazz.defineMethod (c$, "hasScore",
-function () {
-return this.$hasScore || !Double.isNaN (this.score);
-});
-Clazz.makeConstructor (c$,
-function (label, description, score) {
-this.construct (label, description, null);
-this.setScore (score);
-}, "~S,~S,~N");
-Clazz.makeConstructor (c$,
-function (alignmentAnnotation, colSel) {
-this.construct (alignmentAnnotation);
-if (this.annotations == null) {
-return;
-}colSel.makeVisibleAnnotation (this);
-}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.ColumnSelection");
-Clazz.defineMethod (c$, "setPadGaps",
-function (padgaps, gapchar) {
-this.padGaps = padgaps;
-if (padgaps) {
-this.hasText = true;
-for (var i = 0; i < this.annotations.length; i++) {
-if (this.annotations[i] == null) {
-this.annotations[i] = new jalview.datamodel.Annotation (String.valueOf (gapchar), null, ' ', 0, null);
-} else if (this.annotations[i].displayCharacter == null || this.annotations[i].displayCharacter.equals (" ")) {
-this.annotations[i].displayCharacter = String.valueOf (gapchar);
-}}
-}}, "~B,~S");
-Clazz.defineMethod (c$, "getDescription",
-function (seqname) {
-if (seqname && this.sequenceRef != null) {
-var i = this.description.toLowerCase ().indexOf ("");
-if (i > -1) {
-return "" + this.sequenceRef.getName () + " : " + this.description.substring (i + 6);
-}return this.sequenceRef.getName () + " : " + this.description;
-}return this.description;
-}, "~B");
-Clazz.defineMethod (c$, "isValidStruc",
-function () {
-return this.invalidrnastruc == -1;
-});
-Clazz.defineMethod (c$, "getInvalidStrucPos",
-function () {
-return this.invalidrnastruc;
-});
-Clazz.defineMethod (c$, "getCalcId",
-function () {
-return this.calcId;
-});
-Clazz.defineMethod (c$, "setCalcId",
-function (calcId) {
-this.calcId = calcId;
-}, "~S");
-Clazz.defineMethod (c$, "isRNA",
-function () {
-return this.isrna;
-});
-Clazz.defineMethod (c$, "liftOver",
-function (sq, sp2sq) {
-if (sp2sq.getMappedWidth () != sp2sq.getWidth ()) {
-throw new Error ("liftOver currently not implemented for transfer of annotation between different types of seqeunce");
-}var mapIsTo = (sp2sq != null) ? (sp2sq.getTo () === sq || sp2sq.getTo () === sq.getDatasetSequence ()) : false;
-var mapForsq = new java.util.HashMap ();
-if (this.sequenceMapping != null) {
-if (sp2sq != null) {
-for (var ie, $ie = this.sequenceMapping.entrySet ().iterator (); $ie.hasNext () && ((ie = $ie.next ()) || true);) {
-var mpos = Integer.$valueOf (mapIsTo ? sp2sq.getMappedPosition ((ie.getKey ()).intValue ()) : sp2sq.getPosition ((ie.getKey ()).intValue ()));
-if ((mpos).intValue () >= sq.getStart () && (mpos).intValue () <= sq.getEnd ()) {
-mapForsq.put (mpos, ie.getValue ());
-}}
-this.sequenceMapping = mapForsq;
-this.sequenceRef = sq;
-this.adjustForAlignment ();
-} else {
-}}}, "jalview.datamodel.SequenceI,jalview.datamodel.Mapping");
-Clazz.defineMethod (c$, "remap",
-function (newref, mapping, from, to, idxoffset) {
-if (mapping != null) {
-var old = this.sequenceMapping;
-var remap = new java.util.HashMap ();
-var index = -1;
-for (var mp, $mp = 0, $$mp = mapping; $mp < $$mp.length && ((mp = $$mp[$mp]) || true); $mp++) {
-if (index++ < 0) {
-continue;
-}var ann = null;
-if (from == -1) {
-ann = this.sequenceMapping.get (Integer.$valueOf (idxoffset + index));
-} else {
-if (mp != null && mp.length > from) {
-ann = this.sequenceMapping.get (Integer.$valueOf (mp[from]));
-}}if (ann != null) {
-if (to == -1) {
-remap.put (Integer.$valueOf (idxoffset + index), ann);
-} else {
-if (to > -1 && to < mp.length) {
-remap.put (Integer.$valueOf (mp[to]), ann);
-}}}}
-this.sequenceMapping = remap;
-old.clear ();
-if (newref != null) {
-this.sequenceRef = newref;
-}this.adjustForAlignment ();
-}}, "jalview.datamodel.SequenceI,~A,~N,~N,~N");
-Clazz.defineMethod (c$, "getProperty",
-function (property) {
-if (this.properties == null) {
-return null;
-}return this.properties.get (property);
-}, "~S");
-Clazz.defineMethod (c$, "setProperty",
-function (property, value) {
-if (this.properties == null) {
-this.properties = new java.util.HashMap ();
-}this.properties.put (property, value);
-}, "~S,~S");
-Clazz.defineMethod (c$, "hasProperties",
-function () {
-return this.properties != null && this.properties.size () > 0;
-});
-Clazz.defineMethod (c$, "getProperties",
-function () {
-if (this.properties == null) {
-return java.util.Collections.emptyList ();
-}return this.properties.keySet ();
-});
-Clazz.defineMethod (c$, "getAnnotationForPosition",
-function (position) {
-return this.sequenceMapping == null ? null : this.sequenceMapping.get (new Integer (position));
-}, "~N");
-Clazz.defineMethod (c$, "setAnnotationId",
-function () {
-this.annotationId = "ann" + Long.toString (jalview.datamodel.AlignmentAnnotation.nextId ());
-});
-c$.nextId = Clazz.defineMethod (c$, "nextId",
-function () {
-return jalview.datamodel.AlignmentAnnotation.counter++;
-});
-c$.$AlignmentAnnotation$AnnotCharSequence$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.offset = 0;
-this.max = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel.AlignmentAnnotation, "AnnotCharSequence", null, CharSequence);
-Clazz.makeConstructor (c$,
-function () {
-this.construct (0, this.b$["jalview.datamodel.AlignmentAnnotation"].annotations.length);
-});
-Clazz.makeConstructor (c$,
-function (a, b) {
-this.offset = a;
-this.max = b;
-}, "~N,~N");
-Clazz.overrideMethod (c$, "subSequence",
-function (a, b) {
-return Clazz.innerTypeInstance (jalview.datamodel.AlignmentAnnotation.AnnotCharSequence, this, null, this.offset + a, this.offset + b);
-}, "~N,~N");
-Clazz.overrideMethod (c$, "length",
-function () {
-return this.max - this.offset;
-});
-Clazz.overrideMethod (c$, "charAt",
-function (a) {
-return ((a + this.offset < 0) || (a + this.offset) >= this.max || this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset] == null || (this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].secondaryStructure <= ' ') ? ' ' : this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].displayCharacter == null || this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].displayCharacter.length == 0 ? this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].secondaryStructure : this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].displayCharacter.charAt (0));
-}, "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var a = Clazz.newCharArray (this.max - this.offset, '\0');
-var b = this.b$["jalview.datamodel.AlignmentAnnotation"].annotations.length;
-for (var c = this.offset; c < b; c++) {
-a[c] = (this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c] == null || ((this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].secondaryStructure).charCodeAt (0) <= 32)) ? ' ' : (this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].displayCharacter == null || this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].displayCharacter.length == 0 ? this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].secondaryStructure : this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].displayCharacter.charAt (0));
-}
-return String.instantialize (a);
-});
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"ANNOTATION_ID_PREFIX", "ann",
-"SEQUENCE_PROFILE", 0,
-"STRUCTURE_PROFILE", 1,
-"CDNA_PROFILE", 2,
-"counter", 0,
-"NO_GRAPH", 0,
-"BAR_GRAPH", 1,
-"LINE_GRAPH", 2);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.util.HashMap"], "jalview.datamodel.AlignmentAnnotation", ["jalview.analysis.Rna", "jalview.datamodel.Annotation", "$.GraphLine", "jalview.schemes.ResidueProperties", "java.lang.Double", "$.Error", "$.Long", "$.StringBuffer", "$.StringBuilder", "java.util.Collections"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.autoCalculated = false;
+this.annotationId = null;
+this.sequenceRef = null;
+this.label = null;
+this.description = null;
+this.annotations = null;
+this.bps = null;
+this._rnasecstr = null;
+this.invalidrnastruc = -2;
+this.sequenceMapping = null;
+this.graphMin = 0;
+this.graphMax = 0;
+this.score = NaN;
+this.$hasScore = false;
+this.threshold = null;
+this.editable = false;
+this.hasIcons = false;
+this.hasText = false;
+this.visible = true;
+this.graphGroup = -1;
+this.height = 0;
+this.graph = 0;
+this.graphHeight = 40;
+this.padGaps = false;
+this.belowAlignment = true;
+this.groupRef = null;
+this.showAllColLabels = false;
+this.scaleColLabel = false;
+this.centreColLabels = false;
+this.isrna = false;
+if (!Clazz.isClassDefined ("jalview.datamodel.AlignmentAnnotation.AnnotCharSequence")) {
+jalview.datamodel.AlignmentAnnotation.$AlignmentAnnotation$AnnotCharSequence$ ();
+}
+this._lastrnaannot = -1;
+this.calcId = "";
+this.properties = null;
+this._linecolour = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "AlignmentAnnotation");
+Clazz.prepareFields (c$, function () {
+this.properties = new java.util.HashMap ();
+});
+Clazz.defineMethod (c$, "_updateRnaSecStr",
+($fz = function (RNAannot) {
+try {
+this._rnasecstr = jalview.analysis.Rna.GetBasePairs (RNAannot);
+this.bps = jalview.analysis.Rna.GetModeleBP (RNAannot);
+this.invalidrnastruc = -1;
+} catch (px) {
+if (Clazz.exceptionOf (px, jalview.analysis.WUSSParseException)) {
+this.invalidrnastruc = px.getProblemPos ();
+} else {
+throw px;
+}
+}
+if (this.invalidrnastruc > -1) {
+return;
+}jalview.analysis.Rna.HelixMap (this._rnasecstr);
+if (this._rnasecstr != null && this._rnasecstr.length > 0) {
+this.isrna = true;
+this.showAllColLabels = true;
+this.scaleColLabel = true;
+this._markRnaHelices ();
+}}, $fz.isPrivate = true, $fz), "CharSequence");
+Clazz.defineMethod (c$, "_markRnaHelices",
+($fz = function () {
+var mxval = 0;
+for (var x = 0; x < this._rnasecstr.length; x++) {
+var val = 0;
+try {
+val = (Integer.$valueOf (this._rnasecstr[x].getFeatureGroup ())).intValue ();
+if (mxval < val) {
+mxval = val;
+}} catch (q) {
+if (Clazz.exceptionOf (q, NumberFormatException)) {
+} else {
+throw q;
+}
+}
+;this.annotations[this._rnasecstr[x].getBegin ()].value = val;
+this.annotations[this._rnasecstr[x].getEnd ()].value = val;
+}
+this.setScore (mxval);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "finalize",
+function () {
+this.sequenceRef = null;
+this.groupRef = null;
+Clazz.superCall (this, jalview.datamodel.AlignmentAnnotation, "finalize", []);
+});
+c$.getGraphValueFromString = Clazz.defineMethod (c$, "getGraphValueFromString",
+function (string) {
+if (string.equalsIgnoreCase ("BAR_GRAPH")) {
+return 1;
+} else if (string.equalsIgnoreCase ("LINE_GRAPH")) {
+return 2;
+} else {
+return 0;
+}}, "~S");
+Clazz.defineMethod (c$, "ConcenStru",
+function (RNAannot) {
+this.bps = jalview.analysis.Rna.GetModeleBP (RNAannot);
+}, "CharSequence");
+Clazz.makeConstructor (c$,
+function (label, description, annotations) {
+this.setAnnotationId ();
+this.editable = true;
+this.label = label;
+this.description = description;
+this.annotations = annotations;
+this.validateRangeAndDisplay ();
+}, "~S,~S,~A");
+Clazz.defineMethod (c$, "areLabelsSecondaryStructure",
+function () {
+var nonSSLabel = false;
+this.isrna = false;
+var rnastring = new StringBuffer ();
+var firstChar = String.fromCharCode (0);
+for (var i = 0; i < this.annotations.length; i++) {
+if (this.annotations[i] == null) {
+continue;
+}if (this.annotations[i].secondaryStructure == 'H' || this.annotations[i].secondaryStructure == 'E') {
+this.hasIcons = new Boolean (this.hasIcons | true).valueOf ();
+} else {
+if (this.annotations[i].secondaryStructure == '(' || this.annotations[i].secondaryStructure == '[' || this.annotations[i].secondaryStructure == '<' || this.annotations[i].secondaryStructure == '{' || this.annotations[i].secondaryStructure == 'A' || this.annotations[i].secondaryStructure == 'B' || this.annotations[i].secondaryStructure == 'C' || this.annotations[i].secondaryStructure == 'D' || this.annotations[i].secondaryStructure == 'E' || this.annotations[i].secondaryStructure == 'F' || this.annotations[i].secondaryStructure == 'G' || this.annotations[i].secondaryStructure == 'H' || this.annotations[i].secondaryStructure == 'I' || this.annotations[i].secondaryStructure == 'J' || this.annotations[i].secondaryStructure == 'K' || this.annotations[i].secondaryStructure == 'L' || this.annotations[i].secondaryStructure == 'M' || this.annotations[i].secondaryStructure == 'N' || this.annotations[i].secondaryStructure == 'O' || this.annotations[i].secondaryStructure == 'P' || this.annotations[i].secondaryStructure == 'Q' || this.annotations[i].secondaryStructure == 'R' || this.annotations[i].secondaryStructure == 'S' || this.annotations[i].secondaryStructure == 'T' || this.annotations[i].secondaryStructure == 'U' || this.annotations[i].secondaryStructure == 'V' || this.annotations[i].secondaryStructure == 'W' || this.annotations[i].secondaryStructure == 'X' || this.annotations[i].secondaryStructure == 'Y' || this.annotations[i].secondaryStructure == 'Z') {
+this.hasIcons = new Boolean (this.hasIcons | true).valueOf ();
+this.isrna = new Boolean (this.isrna | true).valueOf ();
+}}if (this.annotations[i].displayCharacter == null || this.annotations[i].displayCharacter.length == 0) {
+rnastring.append ('.');
+continue;
+}if (this.annotations[i].displayCharacter.length == 1) {
+firstChar = this.annotations[i].displayCharacter.charAt (0);
+if (this.annotations[i].secondaryStructure != ' ' && !this.hasIcons && firstChar != ' ' && firstChar != '$' && firstChar.charCodeAt (0) != 0xCE && firstChar != '(' && firstChar != '[' && firstChar != '>' && firstChar != '{' && firstChar != 'A' && firstChar != 'B' && firstChar != 'C' && firstChar != 'D' && firstChar != 'E' && firstChar != 'F' && firstChar != 'G' && firstChar != 'H' && firstChar != 'I' && firstChar != 'J' && firstChar != 'K' && firstChar != 'L' && firstChar != 'M' && firstChar != 'N' && firstChar != 'O' && firstChar != 'P' && firstChar != 'Q' && firstChar != 'R' && firstChar != 'S' && firstChar != 'T' && firstChar != 'U' && firstChar != 'V' && firstChar != 'W' && firstChar != 'X' && firstChar != 'Y' && firstChar != 'Z' && firstChar != '-' && firstChar.charCodeAt (0) < jalview.schemes.ResidueProperties.aaIndex.length) {
+if (jalview.schemes.ResidueProperties.aaIndex[firstChar.charCodeAt (0)] < 23) {
+nonSSLabel = true;
+}}} else {
+rnastring.append (this.annotations[i].displayCharacter.charAt (1));
+}if (this.annotations[i].displayCharacter.length > 0) {
+this.hasText = true;
+}}
+if (nonSSLabel) {
+this.hasIcons = false;
+for (var j = 0; j < this.annotations.length; j++) {
+if (this.annotations[j] != null && this.annotations[j].secondaryStructure != ' ') {
+this.annotations[j].displayCharacter = String.valueOf (this.annotations[j].secondaryStructure);
+this.annotations[j].secondaryStructure = ' ';
+}}
+} else {
+if (this.isrna) {
+this._updateRnaSecStr (Clazz.innerTypeInstance (jalview.datamodel.AlignmentAnnotation.AnnotCharSequence, this, null));
+}}});
+Clazz.defineMethod (c$, "getRNAStruc",
+function () {
+if (this.isrna) {
+var rnastruc = Clazz.innerTypeInstance (jalview.datamodel.AlignmentAnnotation.AnnotCharSequence, this, null).toString ();
+if (this._lastrnaannot != rnastruc.hashCode ()) {
+this._lastrnaannot = rnastruc.hashCode ();
+this._updateRnaSecStr (rnastruc);
+}return rnastruc;
+}return null;
+});
+Clazz.makeConstructor (c$,
+function (label, description, annotations, min, max, graphType) {
+this.setAnnotationId ();
+this.editable = graphType == 0;
+this.label = label;
+this.description = description;
+this.annotations = annotations;
+this.graph = graphType;
+this.graphMin = min;
+this.graphMax = max;
+this.validateRangeAndDisplay ();
+}, "~S,~S,~A,~N,~N,~N");
+Clazz.defineMethod (c$, "validateRangeAndDisplay",
+function () {
+if (this.annotations == null) {
+this.visible = false;
+return;
+}var graphType = this.graph;
+var min = this.graphMin;
+var max = this.graphMax;
+var drawValues = true;
+this._linecolour = null;
+if (min == max) {
+min = 999999999;
+for (var i = 0; i < this.annotations.length; i++) {
+if (this.annotations[i] == null) {
+continue;
+}if (drawValues && this.annotations[i].displayCharacter != null && this.annotations[i].displayCharacter.length > 1) {
+drawValues = false;
+}if (this.annotations[i].value > max) {
+max = this.annotations[i].value;
+}if (this.annotations[i].value < min) {
+min = this.annotations[i].value;
+}if (this._linecolour == null && this.annotations[i].colour != null) {
+this._linecolour = this.annotations[i].colour;
+}}
+if (min > 0) {
+min = 0;
+} else {
+if (max < 0) {
+max = 0;
+}}}this.graphMin = min;
+this.graphMax = max;
+this.areLabelsSecondaryStructure ();
+if (!drawValues && graphType != 0) {
+for (var i = 0; i < this.annotations.length; i++) {
+if (this.annotations[i] != null) {
+this.annotations[i].displayCharacter = "";
+}}
+}});
+Clazz.makeConstructor (c$,
+function (annotation) {
+this.setAnnotationId ();
+this.label = String.instantialize (annotation.label);
+if (annotation.description != null) {
+this.description = String.instantialize (annotation.description);
+}this.graphMin = annotation.graphMin;
+this.graphMax = annotation.graphMax;
+this.graph = annotation.graph;
+this.graphHeight = annotation.graphHeight;
+this.graphGroup = annotation.graphGroup;
+this.groupRef = annotation.groupRef;
+this.editable = annotation.editable;
+this.autoCalculated = annotation.autoCalculated;
+this.hasIcons = annotation.hasIcons;
+this.hasText = annotation.hasText;
+this.height = annotation.height;
+this.label = annotation.label;
+this.padGaps = annotation.padGaps;
+this.visible = annotation.visible;
+this.centreColLabels = annotation.centreColLabels;
+this.scaleColLabel = annotation.scaleColLabel;
+this.showAllColLabels = annotation.showAllColLabels;
+this.calcId = annotation.calcId;
+if (annotation.properties != null) {
+this.properties = new java.util.HashMap ();
+for (var val, $val = annotation.properties.entrySet ().iterator (); $val.hasNext () && ((val = $val.next ()) || true);) {
+this.properties.put (val.getKey (), val.getValue ());
+}
+}if (this.$hasScore = annotation.$hasScore) {
+this.score = annotation.score;
+}if (annotation.threshold != null) {
+this.threshold = new jalview.datamodel.GraphLine (annotation.threshold);
+}var ann = annotation.annotations;
+if (annotation.annotations != null) {
+this.annotations = new Array (ann.length);
+for (var i = 0; i < ann.length; i++) {
+if (ann[i] != null) {
+this.annotations[i] = new jalview.datamodel.Annotation (ann[i]);
+if (this._linecolour != null) {
+this._linecolour = this.annotations[i].colour;
+}}}
+}if (annotation.sequenceRef != null) {
+this.sequenceRef = annotation.sequenceRef;
+if (annotation.sequenceMapping != null) {
+var p = null;
+this.sequenceMapping = new java.util.HashMap ();
+var pos = annotation.sequenceMapping.keySet ().iterator ();
+while (pos.hasNext ()) {
+p = pos.next ();
+var a = annotation.sequenceMapping.get (p);
+if (a == null) {
+continue;
+}if (ann != null) {
+for (var i = 0; i < ann.length; i++) {
+if (ann[i] === a) {
+this.sequenceMapping.put (p, this.annotations[i]);
+}}
+}}
+} else {
+this.sequenceMapping = null;
+}}{
+}this.validateRangeAndDisplay ();
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "restrict",
+function (startRes, endRes) {
+if (this.annotations == null) {
+return;
+}if (startRes < 0) {
+startRes = 0;
+}if (startRes >= this.annotations.length) {
+startRes = this.annotations.length - 1;
+}if (endRes >= this.annotations.length) {
+endRes = this.annotations.length - 1;
+}if (this.annotations == null) {
+return;
+}var temp = new Array (endRes - startRes + 1);
+if (startRes < this.annotations.length) {
+System.arraycopy (this.annotations, startRes, temp, 0, endRes - startRes + 1);
+}if (this.sequenceRef != null) {
+var spos = this.sequenceRef.findPosition (startRes);
+var epos = this.sequenceRef.findPosition (endRes);
+if (this.sequenceMapping != null) {
+var newmapping = new java.util.HashMap ();
+var e = this.sequenceMapping.keySet ().iterator ();
+while (e.hasNext ()) {
+var pos = e.next ();
+if (pos.intValue () >= spos && pos.intValue () <= epos) {
+newmapping.put (pos, this.sequenceMapping.get (pos));
+}}
+this.sequenceMapping.clear ();
+this.sequenceMapping = newmapping;
+}}this.annotations = temp;
+}, "~N,~N");
+Clazz.defineMethod (c$, "padAnnotation",
+function (length) {
+if (this.annotations == null) {
+return true;
+}if (this.annotations.length < length) {
+var na = new Array (length);
+System.arraycopy (this.annotations, 0, na, 0, this.annotations.length);
+this.annotations = na;
+return true;
+}return this.annotations.length > length;
+}, "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var buffer = new StringBuilder (256);
+for (var i = 0; i < this.annotations.length; i++) {
+if (this.annotations[i] != null) {
+if (this.graph != 0) {
+buffer.append (this.annotations[i].value);
+} else if (this.hasIcons) {
+buffer.append (this.annotations[i].secondaryStructure);
+} else {
+buffer.append (this.annotations[i].displayCharacter);
+}}buffer.append (", ");
+}
+if (this.label.indexOf ("Consensus") == 0) {
+buffer.append ("\n");
+for (var i = 0; i < this.annotations.length; i++) {
+if (this.annotations[i] != null) {
+buffer.append (this.annotations[i].description);
+}buffer.append (", ");
+}
+}return buffer.toString ();
+});
+Clazz.defineMethod (c$, "setThreshold",
+function (line) {
+this.threshold = line;
+}, "jalview.datamodel.GraphLine");
+Clazz.defineMethod (c$, "getThreshold",
+function () {
+return this.threshold;
+});
+Clazz.defineMethod (c$, "createSequenceMapping",
+function (seqRef, startRes, alreadyMapped) {
+if (seqRef == null) {
+return;
+}this.sequenceRef = seqRef;
+if (this.annotations == null) {
+return;
+}this.sequenceMapping = new java.util.HashMap ();
+var seqPos;
+for (var i = 0; i < this.annotations.length; i++) {
+if (this.annotations[i] != null) {
+if (alreadyMapped) {
+seqPos = seqRef.findPosition (i);
+} else {
+seqPos = i + startRes;
+}this.sequenceMapping.put ( new Integer (seqPos), this.annotations[i]);
+}}
+}, "jalview.datamodel.SequenceI,~N,~B");
+Clazz.defineMethod (c$, "adjustForAlignment",
+function () {
+if (this.sequenceRef == null) {
+return;
+}if (this.annotations == null) {
+return;
+}var a = 0;
+var aSize = this.sequenceRef.getLength ();
+if (aSize == 0) {
+return;
+}var position;
+var temp = new Array (aSize);
+var index;
+for (a = this.sequenceRef.getStart (); a <= this.sequenceRef.getEnd (); a++) {
+index = new Integer (a);
+if (this.sequenceMapping.containsKey (index)) {
+position = this.sequenceRef.findIndex (a) - 1;
+temp[position] = this.sequenceMapping.get (index);
+}}
+this.annotations = temp;
+});
+Clazz.defineMethod (c$, "compactAnnotationArray",
+function () {
+var i = 0;
+var iSize = this.annotations.length;
+while (i < iSize) {
+if (this.annotations[i] == null) {
+if (i + 1 < iSize) {
+System.arraycopy (this.annotations, i + 1, this.annotations, i, iSize - i - 1);
+}iSize--;
+} else {
+i++;
+}}
+var ann = this.annotations;
+this.annotations = new Array (i);
+System.arraycopy (ann, 0, this.annotations, 0, i);
+ann = null;
+return iSize;
+});
+Clazz.defineMethod (c$, "setSequenceRef",
+function (sequenceI) {
+if (sequenceI != null) {
+if (this.sequenceRef != null) {
+var rIsDs = this.sequenceRef.getDatasetSequence () == null;
+var tIsDs = sequenceI.getDatasetSequence () == null;
+if (this.sequenceRef !== sequenceI && (rIsDs && !tIsDs && this.sequenceRef !== sequenceI.getDatasetSequence ()) && (!rIsDs && tIsDs && this.sequenceRef.getDatasetSequence () !== sequenceI) && (!rIsDs && !tIsDs && this.sequenceRef.getDatasetSequence () !== sequenceI.getDatasetSequence ()) && !this.sequenceRef.equals (sequenceI)) {
+this.sequenceRef = null;
+if (this.sequenceMapping != null) {
+this.sequenceMapping = null;
+}this.createSequenceMapping (sequenceI, 1, true);
+this.adjustForAlignment ();
+} else {
+this.sequenceRef = sequenceI;
+}} else {
+this.createSequenceMapping (sequenceI, 1, true);
+this.adjustForAlignment ();
+}} else {
+this.sequenceMapping = null;
+this.sequenceRef = null;
+}}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getScore",
+function () {
+return this.score;
+});
+Clazz.defineMethod (c$, "setScore",
+function (score) {
+this.$hasScore = true;
+this.score = score;
+}, "~N");
+Clazz.defineMethod (c$, "hasScore",
+function () {
+return this.$hasScore || !Double.isNaN (this.score);
+});
+Clazz.makeConstructor (c$,
+function (label, description, score) {
+this.construct (label, description, null);
+this.setScore (score);
+}, "~S,~S,~N");
+Clazz.makeConstructor (c$,
+function (alignmentAnnotation, colSel) {
+this.construct (alignmentAnnotation);
+if (this.annotations == null) {
+return;
+}colSel.makeVisibleAnnotation (this);
+}, "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.ColumnSelection");
+Clazz.defineMethod (c$, "setPadGaps",
+function (padgaps, gapchar) {
+this.padGaps = padgaps;
+if (padgaps) {
+this.hasText = true;
+for (var i = 0; i < this.annotations.length; i++) {
+if (this.annotations[i] == null) {
+this.annotations[i] = new jalview.datamodel.Annotation (String.valueOf (gapchar), null, ' ', 0, null);
+} else if (this.annotations[i].displayCharacter == null || this.annotations[i].displayCharacter.equals (" ")) {
+this.annotations[i].displayCharacter = String.valueOf (gapchar);
+}}
+}}, "~B,~S");
+Clazz.defineMethod (c$, "getDescription",
+function (seqname) {
+if (seqname && this.sequenceRef != null) {
+var i = this.description.toLowerCase ().indexOf ("");
+if (i > -1) {
+return "" + this.sequenceRef.getName () + " : " + this.description.substring (i + 6);
+}return this.sequenceRef.getName () + " : " + this.description;
+}return this.description;
+}, "~B");
+Clazz.defineMethod (c$, "isValidStruc",
+function () {
+return this.invalidrnastruc == -1;
+});
+Clazz.defineMethod (c$, "getInvalidStrucPos",
+function () {
+return this.invalidrnastruc;
+});
+Clazz.defineMethod (c$, "getCalcId",
+function () {
+return this.calcId;
+});
+Clazz.defineMethod (c$, "setCalcId",
+function (calcId) {
+this.calcId = calcId;
+}, "~S");
+Clazz.defineMethod (c$, "isRNA",
+function () {
+return this.isrna;
+});
+Clazz.defineMethod (c$, "liftOver",
+function (sq, sp2sq) {
+if (sp2sq.getMappedWidth () != sp2sq.getWidth ()) {
+throw new Error ("liftOver currently not implemented for transfer of annotation between different types of seqeunce");
+}var mapIsTo = (sp2sq != null) ? (sp2sq.getTo () === sq || sp2sq.getTo () === sq.getDatasetSequence ()) : false;
+var mapForsq = new java.util.HashMap ();
+if (this.sequenceMapping != null) {
+if (sp2sq != null) {
+for (var ie, $ie = this.sequenceMapping.entrySet ().iterator (); $ie.hasNext () && ((ie = $ie.next ()) || true);) {
+var mpos = Integer.$valueOf (mapIsTo ? sp2sq.getMappedPosition ((ie.getKey ()).intValue ()) : sp2sq.getPosition ((ie.getKey ()).intValue ()));
+if ((mpos).intValue () >= sq.getStart () && (mpos).intValue () <= sq.getEnd ()) {
+mapForsq.put (mpos, ie.getValue ());
+}}
+this.sequenceMapping = mapForsq;
+this.sequenceRef = sq;
+this.adjustForAlignment ();
+} else {
+}}}, "jalview.datamodel.SequenceI,jalview.datamodel.Mapping");
+Clazz.defineMethod (c$, "remap",
+function (newref, mapping, from, to, idxoffset) {
+if (mapping != null) {
+var old = this.sequenceMapping;
+var remap = new java.util.HashMap ();
+var index = -1;
+for (var mp, $mp = 0, $$mp = mapping; $mp < $$mp.length && ((mp = $$mp[$mp]) || true); $mp++) {
+if (index++ < 0) {
+continue;
+}var ann = null;
+if (from == -1) {
+ann = this.sequenceMapping.get (Integer.$valueOf (idxoffset + index));
+} else {
+if (mp != null && mp.length > from) {
+ann = this.sequenceMapping.get (Integer.$valueOf (mp[from]));
+}}if (ann != null) {
+if (to == -1) {
+remap.put (Integer.$valueOf (idxoffset + index), ann);
+} else {
+if (to > -1 && to < mp.length) {
+remap.put (Integer.$valueOf (mp[to]), ann);
+}}}}
+this.sequenceMapping = remap;
+old.clear ();
+if (newref != null) {
+this.sequenceRef = newref;
+}this.adjustForAlignment ();
+}}, "jalview.datamodel.SequenceI,~A,~N,~N,~N");
+Clazz.defineMethod (c$, "getProperty",
+function (property) {
+if (this.properties == null) {
+return null;
+}return this.properties.get (property);
+}, "~S");
+Clazz.defineMethod (c$, "setProperty",
+function (property, value) {
+if (this.properties == null) {
+this.properties = new java.util.HashMap ();
+}this.properties.put (property, value);
+}, "~S,~S");
+Clazz.defineMethod (c$, "hasProperties",
+function () {
+return this.properties != null && this.properties.size () > 0;
+});
+Clazz.defineMethod (c$, "getProperties",
+function () {
+if (this.properties == null) {
+return java.util.Collections.emptyList ();
+}return this.properties.keySet ();
+});
+Clazz.defineMethod (c$, "getAnnotationForPosition",
+function (position) {
+return this.sequenceMapping == null ? null : this.sequenceMapping.get (new Integer (position));
+}, "~N");
+Clazz.defineMethod (c$, "setAnnotationId",
+function () {
+this.annotationId = "ann" + Long.toString (jalview.datamodel.AlignmentAnnotation.nextId ());
+});
+c$.nextId = Clazz.defineMethod (c$, "nextId",
+function () {
+return jalview.datamodel.AlignmentAnnotation.counter++;
+});
+c$.$AlignmentAnnotation$AnnotCharSequence$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.offset = 0;
+this.max = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel.AlignmentAnnotation, "AnnotCharSequence", null, CharSequence);
+Clazz.makeConstructor (c$,
+function () {
+this.construct (0, this.b$["jalview.datamodel.AlignmentAnnotation"].annotations.length);
+});
+Clazz.makeConstructor (c$,
+function (a, b) {
+this.offset = a;
+this.max = b;
+}, "~N,~N");
+Clazz.overrideMethod (c$, "subSequence",
+function (a, b) {
+return Clazz.innerTypeInstance (jalview.datamodel.AlignmentAnnotation.AnnotCharSequence, this, null, this.offset + a, this.offset + b);
+}, "~N,~N");
+Clazz.overrideMethod (c$, "length",
+function () {
+return this.max - this.offset;
+});
+Clazz.overrideMethod (c$, "charAt",
+function (a) {
+return ((a + this.offset < 0) || (a + this.offset) >= this.max || this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset] == null || (this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].secondaryStructure <= ' ') ? ' ' : this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].displayCharacter == null || this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].displayCharacter.length == 0 ? this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].secondaryStructure : this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[a + this.offset].displayCharacter.charAt (0));
+}, "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var a = Clazz.newCharArray (this.max - this.offset, '\0');
+var b = this.b$["jalview.datamodel.AlignmentAnnotation"].annotations.length;
+for (var c = this.offset; c < b; c++) {
+a[c] = (this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c] == null || ((this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].secondaryStructure).charCodeAt (0) <= 32)) ? ' ' : (this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].displayCharacter == null || this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].displayCharacter.length == 0 ? this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].secondaryStructure : this.b$["jalview.datamodel.AlignmentAnnotation"].annotations[c].displayCharacter.charAt (0));
+}
+return String.instantialize (a);
+});
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"ANNOTATION_ID_PREFIX", "ann",
+"SEQUENCE_PROFILE", 0,
+"STRUCTURE_PROFILE", 1,
+"CDNA_PROFILE", 2,
+"counter", 0,
+"NO_GRAPH", 0,
+"BAR_GRAPH", 1,
+"LINE_GRAPH", 2);
+});
diff --git a/bin/jalview/datamodel/AlignmentI.js b/bin/jalview/datamodel/AlignmentI.js
index d1f3174..80e1794 100644
--- a/bin/jalview/datamodel/AlignmentI.js
+++ b/bin/jalview/datamodel/AlignmentI.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.AnnotatedCollectionI"], "jalview.datamodel.AlignmentI", null, function () {
-Clazz.declareInterface (jalview.datamodel, "AlignmentI", jalview.datamodel.AnnotatedCollectionI);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.AnnotatedCollectionI"], "jalview.datamodel.AlignmentI", null, function () {
+Clazz.declareInterface (jalview.datamodel, "AlignmentI", jalview.datamodel.AnnotatedCollectionI);
+});
diff --git a/bin/jalview/datamodel/AlignmentOrder.js b/bin/jalview/datamodel/AlignmentOrder.js
index 281aa17..0fb0cbb 100644
--- a/bin/jalview/datamodel/AlignmentOrder.js
+++ b/bin/jalview/datamodel/AlignmentOrder.js
@@ -1,118 +1,118 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.AlignmentOrder", ["java.lang.Error", "java.util.ArrayList", "$.Arrays"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.Type = 0;
-this.Name = null;
-this.Order = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "AlignmentOrder");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (anOrder) {
-this.Order = anOrder;
-}, "java.util.List");
-Clazz.makeConstructor (c$,
-function (orderFrom) {
-this.Order = new java.util.ArrayList ();
-for (var seq, $seq = orderFrom.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-this.Order.add (seq);
-}
-}, "jalview.datamodel.AlignmentI");
-Clazz.makeConstructor (c$,
-function (orderFrom) {
-this.Order = new java.util.ArrayList (java.util.Arrays.asList (orderFrom));
-}, "~A");
-Clazz.defineMethod (c$, "setType",
-function (Type) {
-this.Type = Type;
-}, "~N");
-Clazz.defineMethod (c$, "getType",
-function () {
-return this.Type;
-});
-Clazz.defineMethod (c$, "setName",
-function (Name) {
-this.Name = Name;
-}, "~S");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.Name;
-});
-Clazz.defineMethod (c$, "setOrder",
-function (Order) {
-this.Order = Order;
-}, "java.util.List");
-Clazz.defineMethod (c$, "getOrder",
-function () {
-return this.Order;
-});
-Clazz.defineMethod (c$, "updateSequence",
-function (oldref, newref) {
-var found = this.Order.indexOf (oldref);
-if (found > -1) {
-this.Order.set (found, newref);
-}return found > -1;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "equals",
-function (o) {
-if (o == null || !(Clazz.instanceOf (o, jalview.datamodel.AlignmentOrder))) {
-return false;
-}return this.equals (o, true);
-}, "~O");
-Clazz.defineMethod (c$, "equals",
-function (o, identity) {
-if (o !== this) {
-if (o == null) {
-return false;
-}if (this.Order != null && o.Order != null && this.Order.size () == o.Order.size ()) {
-if (!identity) {
-throw new Error ("Weak sequenceI equivalence not yet implemented.");
-} else {
-for (var i = 0, j = o.Order.size (); i < j; i++) {
-if (this.Order.get (i) !== o.Order.get (i)) {
-return false;
-}}
-}} else {
-return false;
-}}return true;
-}, "jalview.datamodel.AlignmentOrder,~B");
-Clazz.defineMethod (c$, "isConsistent",
-function (o) {
-return this.isConsistent (o, true);
-}, "jalview.datamodel.AlignmentOrder");
-Clazz.defineMethod (c$, "isConsistent",
-function (o, identity) {
-if (o !== this) {
-if (o == null) {
-return false;
-}if (this.Order != null && o.Order != null) {
-var c;
-var s;
-if (o.Order.size () > this.Order.size ()) {
-c = o.Order;
-s = this.Order;
-} else {
-c = this.Order;
-s = o.Order;
-}if (!identity) {
-throw new Error ("Weak sequenceI equivalence not yet implemented.");
-} else {
-var last = -1;
-for (var i = 0, j = s.size (); i < j; i++) {
-var pos = c.indexOf (s.get (i));
-if (pos > last) {
-last = pos;
-} else {
-return false;
-}}
-}} else {
-return false;
-}}return true;
-}, "jalview.datamodel.AlignmentOrder,~B");
-Clazz.defineStatics (c$,
-"FILE", 0,
-"MSA", 1,
-"USER", 2);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.AlignmentOrder", ["java.lang.Error", "java.util.ArrayList", "$.Arrays"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.Type = 0;
+this.Name = null;
+this.Order = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "AlignmentOrder");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (anOrder) {
+this.Order = anOrder;
+}, "java.util.List");
+Clazz.makeConstructor (c$,
+function (orderFrom) {
+this.Order = new java.util.ArrayList ();
+for (var seq, $seq = orderFrom.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+this.Order.add (seq);
+}
+}, "jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$,
+function (orderFrom) {
+this.Order = new java.util.ArrayList (java.util.Arrays.asList (orderFrom));
+}, "~A");
+Clazz.defineMethod (c$, "setType",
+function (Type) {
+this.Type = Type;
+}, "~N");
+Clazz.defineMethod (c$, "getType",
+function () {
+return this.Type;
+});
+Clazz.defineMethod (c$, "setName",
+function (Name) {
+this.Name = Name;
+}, "~S");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.Name;
+});
+Clazz.defineMethod (c$, "setOrder",
+function (Order) {
+this.Order = Order;
+}, "java.util.List");
+Clazz.defineMethod (c$, "getOrder",
+function () {
+return this.Order;
+});
+Clazz.defineMethod (c$, "updateSequence",
+function (oldref, newref) {
+var found = this.Order.indexOf (oldref);
+if (found > -1) {
+this.Order.set (found, newref);
+}return found > -1;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "equals",
+function (o) {
+if (o == null || !(Clazz.instanceOf (o, jalview.datamodel.AlignmentOrder))) {
+return false;
+}return this.equals (o, true);
+}, "~O");
+Clazz.defineMethod (c$, "equals",
+function (o, identity) {
+if (o !== this) {
+if (o == null) {
+return false;
+}if (this.Order != null && o.Order != null && this.Order.size () == o.Order.size ()) {
+if (!identity) {
+throw new Error ("Weak sequenceI equivalence not yet implemented.");
+} else {
+for (var i = 0, j = o.Order.size (); i < j; i++) {
+if (this.Order.get (i) !== o.Order.get (i)) {
+return false;
+}}
+}} else {
+return false;
+}}return true;
+}, "jalview.datamodel.AlignmentOrder,~B");
+Clazz.defineMethod (c$, "isConsistent",
+function (o) {
+return this.isConsistent (o, true);
+}, "jalview.datamodel.AlignmentOrder");
+Clazz.defineMethod (c$, "isConsistent",
+function (o, identity) {
+if (o !== this) {
+if (o == null) {
+return false;
+}if (this.Order != null && o.Order != null) {
+var c;
+var s;
+if (o.Order.size () > this.Order.size ()) {
+c = o.Order;
+s = this.Order;
+} else {
+c = this.Order;
+s = o.Order;
+}if (!identity) {
+throw new Error ("Weak sequenceI equivalence not yet implemented.");
+} else {
+var last = -1;
+for (var i = 0, j = s.size (); i < j; i++) {
+var pos = c.indexOf (s.get (i));
+if (pos > last) {
+last = pos;
+} else {
+return false;
+}}
+}} else {
+return false;
+}}return true;
+}, "jalview.datamodel.AlignmentOrder,~B");
+Clazz.defineStatics (c$,
+"FILE", 0,
+"MSA", 1,
+"USER", 2);
+});
diff --git a/bin/jalview/datamodel/AlignmentView.class b/bin/jalview/datamodel/AlignmentView.class
index 122d311..08408b7 100644
Binary files a/bin/jalview/datamodel/AlignmentView.class and b/bin/jalview/datamodel/AlignmentView.class differ
diff --git a/bin/jalview/datamodel/AlignmentView.js b/bin/jalview/datamodel/AlignmentView.js
index e88c405..e559e79 100644
--- a/bin/jalview/datamodel/AlignmentView.js
+++ b/bin/jalview/datamodel/AlignmentView.js
@@ -1,625 +1,625 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.AlignmentView", ["jalview.datamodel.Alignment", "$.CigarArray", "$.ColumnSelection", "$.SeqCigar", "$.SequenceGroup", "jalview.util.MessageManager", "$.ShiftList", "java.lang.Error", "java.util.ArrayList", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.sequences = null;
-this.contigs = null;
-this.width = 0;
-this.firstCol = 0;
-this.scGroups = null;
-this.$isNa = false;
-if (!Clazz.isClassDefined ("jalview.datamodel.AlignmentView.ScGroup")) {
-jalview.datamodel.AlignmentView.$AlignmentView$ScGroup$ ();
-}
-this.selected = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "AlignmentView");
-Clazz.defineMethod (c$, "isNa",
-function () {
-return this.$isNa;
-});
-Clazz.makeConstructor (c$,
-function (alignment, columnSelection, selection, hasHiddenColumns, selectedRegionOnly, recordGroups) {
-this.construct ( new jalview.datamodel.CigarArray (alignment, (hasHiddenColumns ? columnSelection : null), (selectedRegionOnly ? selection : null)), (selectedRegionOnly && selection != null) ? selection.getStartRes () : 0);
-this.$isNa = alignment.isNucleotide ();
-var selseqs;
-if (selection != null && selection.getSize () > 0) {
-var sel = selection.getSequences (null);
-this.selected = new java.util.Vector ();
-selseqs = selection.getSequencesInOrder (alignment, selectedRegionOnly);
-} else {
-selseqs = alignment.getSequencesArray ();
-}var seqsets = new java.util.ArrayList ();
-var grps = new java.util.ArrayList ();
-var gg = alignment.getGroups ();
-grps.addAll (gg);
-var sgrps = null;
-var addedgps = null;
-if (grps != null) {
-if (selection != null && selectedRegionOnly) {
-var ssel = selection.getStartRes ();
-var esel = selection.getEndRes ();
-var isg = new java.util.ArrayList ();
-for (var sg, $sg = grps.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (!(sg.getStartRes () > esel || sg.getEndRes () < ssel)) {
-if (sg.getStartRes () < ssel) {
-sg.setStartRes (ssel);
-}if (sg.getEndRes () > esel) {
-sg.setEndRes (esel);
-}sg.setStartRes (sg.getStartRes () - ssel + 1);
-sg.setEndRes (sg.getEndRes () - ssel + 1);
-isg.add (sg);
-}}
-grps = isg;
-}sgrps = new Array (grps.size ());
-addedgps = Clazz.newBooleanArray (grps.size (), false);
-for (var g = 0; g < sgrps.length; g++) {
-var sg = grps.get (g);
-sgrps[g] = Clazz.innerTypeInstance (jalview.datamodel.AlignmentView.ScGroup, this, null);
-sgrps[g].sg = new jalview.datamodel.SequenceGroup (sg);
-addedgps[g] = false;
-seqsets.add (sg.getSequences ());
-}
-}var csi = 0;
-for (var i = 0; i < selseqs.length; i++) {
-if (selseqs[i] != null) {
-if (selection != null && selection.getSize () > 0 && !selectedRegionOnly) {
-this.sequences[csi].setGroupMembership (this.selected);
-this.selected.addElement (this.sequences[csi]);
-}if (seqsets != null) {
-for (var sg = 0; sg < sgrps.length; sg++) {
-if ((seqsets.get (sg)).contains (selseqs[i])) {
-this.sequences[csi].setGroupMembership (sgrps[sg]);
-sgrps[sg].sg.deleteSequence (selseqs[i], false);
-sgrps[sg].seqs.addElement (this.sequences[csi]);
-if (!addedgps[sg]) {
-if (this.scGroups == null) {
-this.scGroups = new java.util.ArrayList ();
-}addedgps[sg] = true;
-this.scGroups.add (sgrps[sg]);
-}}}
-}csi++;
-}}
-for (var sg = 0; sg < sgrps.length; sg++) {
-var sqs = sgrps[sg].sg.getSequencesAsArray (null);
-for (var si = 0; si < sqs.length; si++) {
-sgrps[sg].sg.deleteSequence (sqs[si], false);
-}
-sgrps[sg] = null;
-}
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup,~B,~B,~B");
-Clazz.makeConstructor (c$,
-function (seqcigararray) {
-if (!seqcigararray.isSeqCigarArray ()) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_can_only_make_alignmnet_from_cigararray"));
-}this.contigs = seqcigararray.getDeletedRegions ();
-this.sequences = seqcigararray.getSeqCigarArray ();
-this.width = seqcigararray.getWidth ();
-}, "jalview.datamodel.CigarArray");
-Clazz.makeConstructor (c$,
-function (sdata, firstcol) {
-this.construct (sdata);
-this.firstCol = firstcol;
-}, "jalview.datamodel.CigarArray,~N");
-Clazz.defineMethod (c$, "setSequences",
-function (sequences) {
-this.sequences = sequences;
-}, "~A");
-Clazz.defineMethod (c$, "setContigs",
-function (contigs) {
-this.contigs = contigs;
-}, "~A");
-Clazz.defineMethod (c$, "getSequences",
-function () {
-return this.sequences;
-});
-Clazz.defineMethod (c$, "getContigs",
-function () {
-return this.contigs;
-});
-Clazz.defineMethod (c$, "getAlignmentAndColumnSelection",
-function (gapCharacter) {
-var colsel = new jalview.datamodel.ColumnSelection ();
-return Clazz.newArray (-1, [jalview.datamodel.SeqCigar.createAlignmentSequences (this.sequences, gapCharacter, colsel, this.contigs), colsel]);
-}, "~S");
-Clazz.defineMethod (c$, "getVisibleAlignment",
-function (c) {
-var aln = this.getVisibleSeqs (c);
-var vcal = new jalview.datamodel.Alignment (aln);
-this.addPrunedGroupsInOrder (vcal, -1, -1, true);
-return vcal;
-}, "~S");
-Clazz.defineMethod (c$, "addPrunedGroupsInOrder",
-($fz = function (vcal, gstart, gend, viscontigs) {
-var r = false;
-if (gstart > -1 && gstart <= gend) {
-r = true;
-}var aln = vcal.getSequencesArray ();
-{
-{
-var nvg = (this.scGroups != null) ? this.scGroups.size () : 0;
-if (nvg > 0) {
-var nsg = new Array (nvg);
-for (var g = 0; g < nvg; g++) {
-var sg = this.scGroups.get (g).sg;
-if (r) {
-if (sg.getStartRes () > gend || sg.getEndRes () < gstart) {
-nsg[g] = null;
-continue;
-}}nsg[g] = new jalview.datamodel.SequenceGroup (sg);
-if (r && !viscontigs) {
-if (nsg[g].getStartRes () < gstart) {
-nsg[g].setStartRes (0);
-} else {
-nsg[g].setStartRes (nsg[g].getStartRes () - gstart);
-nsg[g].setEndRes (nsg[g].getEndRes () - gstart);
-}if (nsg[g].getEndRes () > (gend - gstart)) {
-nsg[g].setEndRes (gend - gstart);
-}}}
-if (viscontigs) {
-if (this.contigs != null) {
-var p = 0;
-var prune = new jalview.util.ShiftList ();
-if (r) {
-prune.addShift (gstart, -gstart);
-}for (var h = 0; h < this.contigs.length; h += 3) {
-{
-prune.addShift (p + this.contigs[h + 1], this.contigs[h + 2] - this.contigs[h + 1]);
-}p = this.contigs[h + 1] + this.contigs[h + 2];
-}
-for (var g = 0; g < nsg.length; g++) {
-if (nsg[g] != null) {
-var s = nsg[g].getStartRes ();
-var t = nsg[g].getEndRes ();
-var w = 1 + t - s;
-if (r) {
-if (s < gstart) {
-s = gstart;
-}if (t > gend) {
-t = gend;
-}}s = prune.shift (s);
-t = prune.shift (t);
-nsg[g].setStartRes (s);
-nsg[g].setEndRes (t);
-}}
-}}for (var nsq = 0; nsq < aln.length; nsq++) {
-for (var g = 0; g < nvg; g++) {
-if (nsg[g] != null && this.sequences[nsq].isMemberOf (this.scGroups.get (g))) {
-nsg[g].addSequence (aln[nsq], false);
-}}
-}
-for (var g = 0; g < nvg; g++) {
-if (nsg[g] != null && nsg[g].getSize () > 0) {
-vcal.addGroup (nsg[g]);
-}nsg[g] = null;
-}
-}}}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~N,~N,~B");
-Clazz.defineMethod (c$, "getVisibleSeqs",
-($fz = function (c) {
-var aln = new Array (this.sequences.length);
-for (var i = 0, j = this.sequences.length; i < j; i++) {
-aln[i] = this.sequences[i].getSeq ('-');
-}
-var seqs = this.getSequenceStrings ('-');
-for (var i = 0, j = aln.length; i < j; i++) {
-aln[i].setSequence (seqs[i]);
-}
-return aln;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "getVisibleContigAlignments",
-function (c) {
-var nvc = 0;
-var vcontigs = this.getVisibleContigs ();
-var contigviews = this.getVisibleContigs (c);
-var vcals = new Array (contigviews.length);
-for (nvc = 0; nvc < contigviews.length; nvc++) {
-vcals[nvc] = new jalview.datamodel.Alignment (contigviews[nvc]);
-if (this.scGroups != null && this.scGroups.size () > 0) {
-this.addPrunedGroupsInOrder (vcals[nvc], vcontigs[nvc * 2], vcontigs[nvc * 2 + 1], true);
-}}
-return vcals;
-}, "~S");
-Clazz.defineMethod (c$, "getSequenceStrings",
-function (c) {
-var seqs = new Array (this.sequences.length);
-for (var n = 0; n < this.sequences.length; n++) {
-var fullseq = this.sequences[n].getSequenceString (c);
-if (this.contigs != null) {
-seqs[n] = "";
-var p = 0;
-for (var h = 0; h < this.contigs.length; h += 3) {
-seqs[n] += fullseq.substring (p, this.contigs[h + 1]);
-p = this.contigs[h + 1] + this.contigs[h + 2];
-}
-seqs[n] += fullseq.substring (p);
-} else {
-seqs[n] = fullseq;
-}}
-return seqs;
-}, "~S");
-Clazz.defineMethod (c$, "getWidth",
-function () {
-return this.width;
-});
-Clazz.defineMethod (c$, "setWidth",
-function (width) {
-this.width = width;
-}, "~N");
-Clazz.defineMethod (c$, "getVisibleContigs",
-function (gapCharacter) {
-var smsa;
-var njobs = 1;
-if (this.sequences == null || this.width <= 0) {
-return null;
-}if (this.contigs != null && this.contigs.length > 0) {
-var start = 0;
-njobs = 0;
-var fwidth = this.width;
-for (var contig = 0; contig < this.contigs.length; contig += 3) {
-if ((this.contigs[contig + 1] - start) > 0) {
-njobs++;
-}fwidth += this.contigs[contig + 2];
-start = this.contigs[contig + 1] + this.contigs[contig + 2];
-}
-if (start < fwidth) {
-njobs++;
-}smsa = new Array (njobs);
-start = 0;
-var j = 0;
-for (var contig = 0; contig < this.contigs.length; contig += 3) {
-if (this.contigs[contig + 1] - start > 0) {
-var mseq = new Array (this.sequences.length);
-for (var s = 0; s < mseq.length; s++) {
-mseq[s] = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, this.contigs[contig + 1]);
-}
-smsa[j] = mseq;
-j++;
-}start = this.contigs[contig + 1] + this.contigs[contig + 2];
-}
-if (start < fwidth) {
-var mseq = new Array (this.sequences.length);
-for (var s = 0; s < mseq.length; s++) {
-mseq[s] = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, fwidth + 1);
-}
-smsa[j] = mseq;
-j++;
-}} else {
-smsa = new Array (1);
-smsa[0] = new Array (this.sequences.length);
-for (var s = 0; s < this.sequences.length; s++) {
-smsa[0][s] = this.sequences[s].getSeq (gapCharacter);
-}
-}return smsa;
-}, "~S");
-Clazz.defineMethod (c$, "getUpdatedView",
-function (nvismsa, orders, gapCharacter) {
-if (this.sequences == null || this.width <= 0) {
-throw new Error (jalview.util.MessageManager.getString ("error.empty_view_cannot_be_updated"));
-}if (nvismsa == null) {
-throw new Error ("nvismsa==null. use getAlignmentAndColumnSelection() instead.");
-}if (this.contigs != null && this.contigs.length > 0) {
-var alignment = new Array (this.sequences.length);
-var columnselection = new jalview.datamodel.ColumnSelection ();
-if (this.contigs != null && this.contigs.length > 0) {
-var start = 0;
-var nwidth = 0;
-var owidth = this.width;
-var j = 0;
-for (var contig = 0; contig < this.contigs.length; contig += 3) {
-owidth += this.contigs[contig + 2];
-if (this.contigs[contig + 1] - start > 0) {
-var swidth = 0;
-if (nvismsa[j] != null) {
-var mseq = nvismsa[j];
-var order = (orders == null) ? null : orders[j];
-j++;
-if (mseq.length != this.sequences.length) {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.mismatch_between_number_of_sequences_in_block", Clazz.newArray (-1, [Integer.$valueOf (j).toString (), Integer.$valueOf (mseq.length).toString (), Integer.$valueOf (this.sequences.length).toString ()])));
-}swidth = mseq[0].getLength ();
-for (var s = 0; s < mseq.length; s++) {
-if (alignment[s] == null) {
-alignment[s] = mseq[s];
-} else {
-alignment[s].setSequence (alignment[s].getSequenceAsString () + mseq[s].getSequenceAsString ());
-if (mseq[s].getStart () <= mseq[s].getEnd ()) {
-alignment[s].setEnd (mseq[s].getEnd ());
-}if (order != null) {
-order.updateSequence (mseq[s], alignment[s]);
-}}}
-} else {
-if (true) {
-for (var s = 0; s < this.sequences.length; s++) {
-var oseq = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, this.contigs[contig + 1]);
-if (swidth < oseq.getLength ()) {
-swidth = oseq.getLength ();
-}if (alignment[s] == null) {
-alignment[s] = oseq;
-} else {
-alignment[s].setSequence (alignment[s].getSequenceAsString () + oseq.getSequenceAsString ());
-if (oseq.getEnd () >= oseq.getStart ()) {
-alignment[s].setEnd (oseq.getEnd ());
-}}}
-}j++;
-}nwidth += swidth;
-}start = this.contigs[contig + 1] + this.contigs[contig + 2];
-for (var s = 0; s < this.sequences.length; s++) {
-var hseq = this.sequences[s].getSeq (gapCharacter).getSubSequence (this.contigs[contig + 1], start);
-if (alignment[s] == null) {
-alignment[s] = hseq;
-} else {
-alignment[s].setSequence (alignment[s].getSequenceAsString () + hseq.getSequenceAsString ());
-if (hseq.getEnd () >= hseq.getStart ()) {
-alignment[s].setEnd (hseq.getEnd ());
-}}}
-columnselection.hideColumns (nwidth, nwidth + this.contigs[contig + 2] - 1);
-nwidth += this.contigs[contig + 2];
-}
-if (j < nvismsa.length) {
-var swidth = 0;
-if (nvismsa[j] != null) {
-var mseq = nvismsa[j];
-var order = (orders != null) ? orders[j] : null;
-swidth = mseq[0].getLength ();
-for (var s = 0; s < mseq.length; s++) {
-if (alignment[s] == null) {
-alignment[s] = mseq[s];
-} else {
-alignment[s].setSequence (alignment[s].getSequenceAsString () + mseq[s].getSequenceAsString ());
-if (mseq[s].getEnd () >= mseq[s].getStart ()) {
-alignment[s].setEnd (mseq[s].getEnd ());
-}if (order != null) {
-order.updateSequence (mseq[s], alignment[s]);
-}}}
-} else {
-if (start < owidth) {
-if (true) {
-for (var s = 0; s < this.sequences.length; s++) {
-var oseq = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, owidth + 1);
-if (swidth < oseq.getLength ()) {
-swidth = oseq.getLength ();
-}if (alignment[s] == null) {
-alignment[s] = oseq;
-} else {
-alignment[s].setSequence (alignment[s].getSequenceAsString () + oseq.getSequenceAsString ());
-if (oseq.getEnd () >= oseq.getStart ()) {
-alignment[s].setEnd (oseq.getEnd ());
-}}}
-nwidth += swidth;
-} else {
-throw new Error (jalview.util.MessageManager.getString ("error.padding_not_yet_implemented"));
-}}}}}return Clazz.newArray (-1, [alignment, columnselection]);
-} else {
-if (nvismsa.length != 1) {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view", Clazz.newArray (-1, [Integer.$valueOf (nvismsa.length).toString ()])));
-}if (nvismsa[0] != null) {
-return Clazz.newArray (-1, [nvismsa[0], new jalview.datamodel.ColumnSelection ()]);
-} else {
-return this.getAlignmentAndColumnSelection (gapCharacter);
-}}}, "~A,~A,~S");
-Clazz.defineMethod (c$, "getVisibleContigs",
-function () {
-if (this.contigs != null && this.contigs.length > 0) {
-var start = 0;
-var nvis = 0;
-var fwidth = this.width;
-for (var contig = 0; contig < this.contigs.length; contig += 3) {
-if ((this.contigs[contig + 1] - start) > 0) {
-nvis++;
-}fwidth += this.contigs[contig + 2];
-start = this.contigs[contig + 1] + this.contigs[contig + 2];
-}
-if (start < fwidth) {
-nvis++;
-}var viscontigs = Clazz.newIntArray (nvis * 2, 0);
-nvis = 0;
-start = 0;
-for (var contig = 0; contig < this.contigs.length; contig += 3) {
-if ((this.contigs[contig + 1] - start) > 0) {
-viscontigs[nvis] = start;
-viscontigs[nvis + 1] = this.contigs[contig + 1] - 1;
-nvis += 2;
-}start = this.contigs[contig + 1] + this.contigs[contig + 2];
-}
-if (start < fwidth) {
-viscontigs[nvis] = start;
-viscontigs[nvis + 1] = fwidth;
-nvis += 2;
-}return viscontigs;
-} else {
-return Clazz.newIntArray (-1, [0, this.width]);
-}});
-Clazz.defineMethod (c$, "getAlignmentOrigin",
-function () {
-return this.firstCol;
-});
-Clazz.defineMethod (c$, "getVisibleContigMapFor",
-function (gapMap) {
-var delMap = null;
-var viscontigs = this.getVisibleContigs ();
-var spos = 0;
-var i = 0;
-if (viscontigs != null) {
-delMap = Clazz.newIntArray (gapMap.length, 0);
-for (var contig = 0; contig < viscontigs.length; contig += 2) {
-while (spos < gapMap.length && gapMap[spos] < viscontigs[contig]) {
-spos++;
-}
-while (spos < gapMap.length && gapMap[spos] <= viscontigs[contig + 1]) {
-delMap[i++] = spos++;
-}
-}
-var tmap = Clazz.newIntArray (i, 0);
-System.arraycopy (delMap, 0, tmap, 0, i);
-delMap = tmap;
-}return delMap;
-}, "~A");
-Clazz.defineMethod (c$, "getEditedSequences",
-function (gc, $delete) {
-var msf = this.getSequences ();
-var aln = new Array (msf.length);
-for (var i = 0, j = msf.length; i < j; i++) {
-aln[i] = msf[i].getSeq (gc);
-}
-if ($delete) {
-var sqs = this.getSequenceStrings (gc);
-for (var i = 0; i < sqs.length; i++) {
-aln[i].setSequence (sqs[i]);
-sqs[i] = null;
-}
-}return aln;
-}, "~S,~B");
-c$.summariseAlignmentView = Clazz.defineMethod (c$, "summariseAlignmentView",
-function (view, os) {
-os.print ("View has " + view.sequences.length + " of which ");
-if (view.selected == null) {
-os.print ("None");
-} else {
-os.print (" " + view.selected.size ());
-}os.println (" are selected.");
-os.print ("View is " + view.getWidth () + " columns wide");
-var viswid = 0;
-var contigs = view.getContigs ();
-if (contigs != null) {
-viswid = view.width;
-for (var i = 0; i < contigs.length; i += 3) {
-viswid += contigs[i + 2];
-}
-os.println ("with " + viswid + " visible columns spread over " + Clazz.doubleToInt (contigs.length / 3) + " regions.");
-} else {
-viswid = view.width;
-os.println (".");
-}if (view.scGroups != null) {
-os.println ("There are " + view.scGroups.size () + " groups defined on the view.");
-for (var g = 0; g < view.scGroups.size (); g++) {
-var sgr = view.scGroups.get (g);
-os.println ("Group " + g + ": Name = " + sgr.sg.getName () + " Contains " + sgr.seqs.size () + " Seqs.");
-os.println ("This group runs from " + sgr.sg.getStartRes () + " to " + sgr.sg.getEndRes ());
-for (var s = 0; s < sgr.seqs.size (); s++) {
-if (!(sgr.seqs.elementAt (s)).isMemberOf (sgr)) {
-os.println ("** WARNING: sequence " + (sgr.seqs.elementAt (s)).toString () + " is not marked as member of group.");
-}}
-}
-var visal = view.getVisibleAlignment ('-');
-if (visal != null) {
-os.println ("Vis. alignment is " + visal.getWidth () + " wide and has " + visal.getHeight () + " seqs.");
-if (visal.getGroups () != null && visal.getGroups ().size () > 0) {
-var i = 1;
-for (var sg, $sg = visal.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-os.println ("Group " + (i++) + " begins at column " + sg.getStartRes () + " and ends at " + sg.getEndRes ());
-}
-}}}}, "jalview.datamodel.AlignmentView,java.io.PrintStream");
-c$.testSelectionViews = Clazz.defineMethod (c$, "testSelectionViews",
-function (alignment, csel, selection) {
-System.out.println ("Testing standard view creation:\n");
-var view = null;
-try {
-System.out.println ("View with no hidden columns, no limit to selection, no groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, false, false);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection but no groups marked.");
-} else {
-throw e;
-}
-}
-try {
-System.out.println ("View with no hidden columns, no limit to selection, and all groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, false, true);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection marked but no groups marked.");
-} else {
-throw e;
-}
-}
-try {
-System.out.println ("View with no hidden columns, limited to selection and no groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, true, false);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection restricted but no groups marked.");
-} else {
-throw e;
-}
-}
-try {
-System.out.println ("View with no hidden columns, limited to selection, and all groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, true, true);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection restricted and groups marked.");
-} else {
-throw e;
-}
-}
-try {
-System.out.println ("View *with* hidden columns, no limit to selection, no groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, false, false);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection but no groups marked.");
-} else {
-throw e;
-}
-}
-try {
-System.out.println ("View *with* hidden columns, no limit to selection, and all groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, false, true);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection marked but no groups marked.");
-} else {
-throw e;
-}
-}
-try {
-System.out.println ("View *with* hidden columns, limited to selection and no groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, true, false);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection restricted but no groups marked.");
-} else {
-throw e;
-}
-}
-try {
-System.out.println ("View *with* hidden columns, limited to selection, and all groups to be collected:");
-view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, true, true);
-jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to generate alignment with selection restricted and groups marked.");
-} else {
-throw e;
-}
-}
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup");
-c$.$AlignmentView$ScGroup$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.seqs = null;
-this.sg = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel.AlignmentView, "ScGroup");
-Clazz.makeConstructor (c$,
-function () {
-this.seqs = new java.util.Vector ();
-});
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.AlignmentView", ["jalview.datamodel.Alignment", "$.CigarArray", "$.ColumnSelection", "$.SeqCigar", "$.SequenceGroup", "jalview.util.MessageManager", "$.ShiftList", "java.lang.Error", "java.util.ArrayList", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.sequences = null;
+this.contigs = null;
+this.width = 0;
+this.firstCol = 0;
+this.scGroups = null;
+this.$isNa = false;
+if (!Clazz.isClassDefined ("jalview.datamodel.AlignmentView.ScGroup")) {
+jalview.datamodel.AlignmentView.$AlignmentView$ScGroup$ ();
+}
+this.selected = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "AlignmentView");
+Clazz.defineMethod (c$, "isNa",
+function () {
+return this.$isNa;
+});
+Clazz.makeConstructor (c$,
+function (alignment, columnSelection, selection, hasHiddenColumns, selectedRegionOnly, recordGroups) {
+this.construct ( new jalview.datamodel.CigarArray (alignment, (hasHiddenColumns ? columnSelection : null), (selectedRegionOnly ? selection : null)), (selectedRegionOnly && selection != null) ? selection.getStartRes () : 0);
+this.$isNa = alignment.isNucleotide ();
+var selseqs;
+if (selection != null && selection.getSize () > 0) {
+var sel = selection.getSequences (null);
+this.selected = new java.util.Vector ();
+selseqs = selection.getSequencesInOrder (alignment, selectedRegionOnly);
+} else {
+selseqs = alignment.getSequencesArray ();
+}var seqsets = new java.util.ArrayList ();
+var grps = new java.util.ArrayList ();
+var gg = alignment.getGroups ();
+grps.addAll (gg);
+var sgrps = null;
+var addedgps = null;
+if (grps != null) {
+if (selection != null && selectedRegionOnly) {
+var ssel = selection.getStartRes ();
+var esel = selection.getEndRes ();
+var isg = new java.util.ArrayList ();
+for (var sg, $sg = grps.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (!(sg.getStartRes () > esel || sg.getEndRes () < ssel)) {
+if (sg.getStartRes () < ssel) {
+sg.setStartRes (ssel);
+}if (sg.getEndRes () > esel) {
+sg.setEndRes (esel);
+}sg.setStartRes (sg.getStartRes () - ssel + 1);
+sg.setEndRes (sg.getEndRes () - ssel + 1);
+isg.add (sg);
+}}
+grps = isg;
+}sgrps = new Array (grps.size ());
+addedgps = Clazz.newBooleanArray (grps.size (), false);
+for (var g = 0; g < sgrps.length; g++) {
+var sg = grps.get (g);
+sgrps[g] = Clazz.innerTypeInstance (jalview.datamodel.AlignmentView.ScGroup, this, null);
+sgrps[g].sg = new jalview.datamodel.SequenceGroup (sg);
+addedgps[g] = false;
+seqsets.add (sg.getSequences ());
+}
+}var csi = 0;
+for (var i = 0; i < selseqs.length; i++) {
+if (selseqs[i] != null) {
+if (selection != null && selection.getSize () > 0 && !selectedRegionOnly) {
+this.sequences[csi].setGroupMembership (this.selected);
+this.selected.addElement (this.sequences[csi]);
+}if (seqsets != null) {
+for (var sg = 0; sg < sgrps.length; sg++) {
+if ((seqsets.get (sg)).contains (selseqs[i])) {
+this.sequences[csi].setGroupMembership (sgrps[sg]);
+sgrps[sg].sg.deleteSequence (selseqs[i], false);
+sgrps[sg].seqs.addElement (this.sequences[csi]);
+if (!addedgps[sg]) {
+if (this.scGroups == null) {
+this.scGroups = new java.util.ArrayList ();
+}addedgps[sg] = true;
+this.scGroups.add (sgrps[sg]);
+}}}
+}csi++;
+}}
+for (var sg = 0; sg < sgrps.length; sg++) {
+var sqs = sgrps[sg].sg.getSequencesAsArray (null);
+for (var si = 0; si < sqs.length; si++) {
+sgrps[sg].sg.deleteSequence (sqs[si], false);
+}
+sgrps[sg] = null;
+}
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup,~B,~B,~B");
+Clazz.makeConstructor (c$,
+function (seqcigararray) {
+if (!seqcigararray.isSeqCigarArray ()) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_can_only_make_alignmnet_from_cigararray"));
+}this.contigs = seqcigararray.getDeletedRegions ();
+this.sequences = seqcigararray.getSeqCigarArray ();
+this.width = seqcigararray.getWidth ();
+}, "jalview.datamodel.CigarArray");
+Clazz.makeConstructor (c$,
+function (sdata, firstcol) {
+this.construct (sdata);
+this.firstCol = firstcol;
+}, "jalview.datamodel.CigarArray,~N");
+Clazz.defineMethod (c$, "setSequences",
+function (sequences) {
+this.sequences = sequences;
+}, "~A");
+Clazz.defineMethod (c$, "setContigs",
+function (contigs) {
+this.contigs = contigs;
+}, "~A");
+Clazz.defineMethod (c$, "getSequences",
+function () {
+return this.sequences;
+});
+Clazz.defineMethod (c$, "getContigs",
+function () {
+return this.contigs;
+});
+Clazz.defineMethod (c$, "getAlignmentAndColumnSelection",
+function (gapCharacter) {
+var colsel = new jalview.datamodel.ColumnSelection ();
+return Clazz.newArray (-1, [jalview.datamodel.SeqCigar.createAlignmentSequences (this.sequences, gapCharacter, colsel, this.contigs), colsel]);
+}, "~S");
+Clazz.defineMethod (c$, "getVisibleAlignment",
+function (c) {
+var aln = this.getVisibleSeqs (c);
+var vcal = new jalview.datamodel.Alignment (aln);
+this.addPrunedGroupsInOrder (vcal, -1, -1, true);
+return vcal;
+}, "~S");
+Clazz.defineMethod (c$, "addPrunedGroupsInOrder",
+($fz = function (vcal, gstart, gend, viscontigs) {
+var r = false;
+if (gstart > -1 && gstart <= gend) {
+r = true;
+}var aln = vcal.getSequencesArray ();
+{
+{
+var nvg = (this.scGroups != null) ? this.scGroups.size () : 0;
+if (nvg > 0) {
+var nsg = new Array (nvg);
+for (var g = 0; g < nvg; g++) {
+var sg = this.scGroups.get (g).sg;
+if (r) {
+if (sg.getStartRes () > gend || sg.getEndRes () < gstart) {
+nsg[g] = null;
+continue;
+}}nsg[g] = new jalview.datamodel.SequenceGroup (sg);
+if (r && !viscontigs) {
+if (nsg[g].getStartRes () < gstart) {
+nsg[g].setStartRes (0);
+} else {
+nsg[g].setStartRes (nsg[g].getStartRes () - gstart);
+nsg[g].setEndRes (nsg[g].getEndRes () - gstart);
+}if (nsg[g].getEndRes () > (gend - gstart)) {
+nsg[g].setEndRes (gend - gstart);
+}}}
+if (viscontigs) {
+if (this.contigs != null) {
+var p = 0;
+var prune = new jalview.util.ShiftList ();
+if (r) {
+prune.addShift (gstart, -gstart);
+}for (var h = 0; h < this.contigs.length; h += 3) {
+{
+prune.addShift (p + this.contigs[h + 1], this.contigs[h + 2] - this.contigs[h + 1]);
+}p = this.contigs[h + 1] + this.contigs[h + 2];
+}
+for (var g = 0; g < nsg.length; g++) {
+if (nsg[g] != null) {
+var s = nsg[g].getStartRes ();
+var t = nsg[g].getEndRes ();
+var w = 1 + t - s;
+if (r) {
+if (s < gstart) {
+s = gstart;
+}if (t > gend) {
+t = gend;
+}}s = prune.shift (s);
+t = prune.shift (t);
+nsg[g].setStartRes (s);
+nsg[g].setEndRes (t);
+}}
+}}for (var nsq = 0; nsq < aln.length; nsq++) {
+for (var g = 0; g < nvg; g++) {
+if (nsg[g] != null && this.sequences[nsq].isMemberOf (this.scGroups.get (g))) {
+nsg[g].addSequence (aln[nsq], false);
+}}
+}
+for (var g = 0; g < nvg; g++) {
+if (nsg[g] != null && nsg[g].getSize () > 0) {
+vcal.addGroup (nsg[g]);
+}nsg[g] = null;
+}
+}}}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~N,~N,~B");
+Clazz.defineMethod (c$, "getVisibleSeqs",
+($fz = function (c) {
+var aln = new Array (this.sequences.length);
+for (var i = 0, j = this.sequences.length; i < j; i++) {
+aln[i] = this.sequences[i].getSeq ('-');
+}
+var seqs = this.getSequenceStrings ('-');
+for (var i = 0, j = aln.length; i < j; i++) {
+aln[i].setSequence (seqs[i]);
+}
+return aln;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "getVisibleContigAlignments",
+function (c) {
+var nvc = 0;
+var vcontigs = this.getVisibleContigs ();
+var contigviews = this.getVisibleContigs (c);
+var vcals = new Array (contigviews.length);
+for (nvc = 0; nvc < contigviews.length; nvc++) {
+vcals[nvc] = new jalview.datamodel.Alignment (contigviews[nvc]);
+if (this.scGroups != null && this.scGroups.size () > 0) {
+this.addPrunedGroupsInOrder (vcals[nvc], vcontigs[nvc * 2], vcontigs[nvc * 2 + 1], true);
+}}
+return vcals;
+}, "~S");
+Clazz.defineMethod (c$, "getSequenceStrings",
+function (c) {
+var seqs = new Array (this.sequences.length);
+for (var n = 0; n < this.sequences.length; n++) {
+var fullseq = this.sequences[n].getSequenceString (c);
+if (this.contigs != null) {
+seqs[n] = "";
+var p = 0;
+for (var h = 0; h < this.contigs.length; h += 3) {
+seqs[n] += fullseq.substring (p, this.contigs[h + 1]);
+p = this.contigs[h + 1] + this.contigs[h + 2];
+}
+seqs[n] += fullseq.substring (p);
+} else {
+seqs[n] = fullseq;
+}}
+return seqs;
+}, "~S");
+Clazz.defineMethod (c$, "getWidth",
+function () {
+return this.width;
+});
+Clazz.defineMethod (c$, "setWidth",
+function (width) {
+this.width = width;
+}, "~N");
+Clazz.defineMethod (c$, "getVisibleContigs",
+function (gapCharacter) {
+var smsa;
+var njobs = 1;
+if (this.sequences == null || this.width <= 0) {
+return null;
+}if (this.contigs != null && this.contigs.length > 0) {
+var start = 0;
+njobs = 0;
+var fwidth = this.width;
+for (var contig = 0; contig < this.contigs.length; contig += 3) {
+if ((this.contigs[contig + 1] - start) > 0) {
+njobs++;
+}fwidth += this.contigs[contig + 2];
+start = this.contigs[contig + 1] + this.contigs[contig + 2];
+}
+if (start < fwidth) {
+njobs++;
+}smsa = new Array (njobs);
+start = 0;
+var j = 0;
+for (var contig = 0; contig < this.contigs.length; contig += 3) {
+if (this.contigs[contig + 1] - start > 0) {
+var mseq = new Array (this.sequences.length);
+for (var s = 0; s < mseq.length; s++) {
+mseq[s] = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, this.contigs[contig + 1]);
+}
+smsa[j] = mseq;
+j++;
+}start = this.contigs[contig + 1] + this.contigs[contig + 2];
+}
+if (start < fwidth) {
+var mseq = new Array (this.sequences.length);
+for (var s = 0; s < mseq.length; s++) {
+mseq[s] = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, fwidth + 1);
+}
+smsa[j] = mseq;
+j++;
+}} else {
+smsa = new Array (1);
+smsa[0] = new Array (this.sequences.length);
+for (var s = 0; s < this.sequences.length; s++) {
+smsa[0][s] = this.sequences[s].getSeq (gapCharacter);
+}
+}return smsa;
+}, "~S");
+Clazz.defineMethod (c$, "getUpdatedView",
+function (nvismsa, orders, gapCharacter) {
+if (this.sequences == null || this.width <= 0) {
+throw new Error (jalview.util.MessageManager.getString ("error.empty_view_cannot_be_updated"));
+}if (nvismsa == null) {
+throw new Error ("nvismsa==null. use getAlignmentAndColumnSelection() instead.");
+}if (this.contigs != null && this.contigs.length > 0) {
+var alignment = new Array (this.sequences.length);
+var columnselection = new jalview.datamodel.ColumnSelection ();
+if (this.contigs != null && this.contigs.length > 0) {
+var start = 0;
+var nwidth = 0;
+var owidth = this.width;
+var j = 0;
+for (var contig = 0; contig < this.contigs.length; contig += 3) {
+owidth += this.contigs[contig + 2];
+if (this.contigs[contig + 1] - start > 0) {
+var swidth = 0;
+if (nvismsa[j] != null) {
+var mseq = nvismsa[j];
+var order = (orders == null) ? null : orders[j];
+j++;
+if (mseq.length != this.sequences.length) {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.mismatch_between_number_of_sequences_in_block", Clazz.newArray (-1, [Integer.$valueOf (j).toString (), Integer.$valueOf (mseq.length).toString (), Integer.$valueOf (this.sequences.length).toString ()])));
+}swidth = mseq[0].getLength ();
+for (var s = 0; s < mseq.length; s++) {
+if (alignment[s] == null) {
+alignment[s] = mseq[s];
+} else {
+alignment[s].setSequence (alignment[s].getSequenceAsString () + mseq[s].getSequenceAsString ());
+if (mseq[s].getStart () <= mseq[s].getEnd ()) {
+alignment[s].setEnd (mseq[s].getEnd ());
+}if (order != null) {
+order.updateSequence (mseq[s], alignment[s]);
+}}}
+} else {
+if (true) {
+for (var s = 0; s < this.sequences.length; s++) {
+var oseq = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, this.contigs[contig + 1]);
+if (swidth < oseq.getLength ()) {
+swidth = oseq.getLength ();
+}if (alignment[s] == null) {
+alignment[s] = oseq;
+} else {
+alignment[s].setSequence (alignment[s].getSequenceAsString () + oseq.getSequenceAsString ());
+if (oseq.getEnd () >= oseq.getStart ()) {
+alignment[s].setEnd (oseq.getEnd ());
+}}}
+}j++;
+}nwidth += swidth;
+}start = this.contigs[contig + 1] + this.contigs[contig + 2];
+for (var s = 0; s < this.sequences.length; s++) {
+var hseq = this.sequences[s].getSeq (gapCharacter).getSubSequence (this.contigs[contig + 1], start);
+if (alignment[s] == null) {
+alignment[s] = hseq;
+} else {
+alignment[s].setSequence (alignment[s].getSequenceAsString () + hseq.getSequenceAsString ());
+if (hseq.getEnd () >= hseq.getStart ()) {
+alignment[s].setEnd (hseq.getEnd ());
+}}}
+columnselection.hideColumns (nwidth, nwidth + this.contigs[contig + 2] - 1);
+nwidth += this.contigs[contig + 2];
+}
+if (j < nvismsa.length) {
+var swidth = 0;
+if (nvismsa[j] != null) {
+var mseq = nvismsa[j];
+var order = (orders != null) ? orders[j] : null;
+swidth = mseq[0].getLength ();
+for (var s = 0; s < mseq.length; s++) {
+if (alignment[s] == null) {
+alignment[s] = mseq[s];
+} else {
+alignment[s].setSequence (alignment[s].getSequenceAsString () + mseq[s].getSequenceAsString ());
+if (mseq[s].getEnd () >= mseq[s].getStart ()) {
+alignment[s].setEnd (mseq[s].getEnd ());
+}if (order != null) {
+order.updateSequence (mseq[s], alignment[s]);
+}}}
+} else {
+if (start < owidth) {
+if (true) {
+for (var s = 0; s < this.sequences.length; s++) {
+var oseq = this.sequences[s].getSeq (gapCharacter).getSubSequence (start, owidth + 1);
+if (swidth < oseq.getLength ()) {
+swidth = oseq.getLength ();
+}if (alignment[s] == null) {
+alignment[s] = oseq;
+} else {
+alignment[s].setSequence (alignment[s].getSequenceAsString () + oseq.getSequenceAsString ());
+if (oseq.getEnd () >= oseq.getStart ()) {
+alignment[s].setEnd (oseq.getEnd ());
+}}}
+nwidth += swidth;
+} else {
+throw new Error (jalview.util.MessageManager.getString ("error.padding_not_yet_implemented"));
+}}}}}return Clazz.newArray (-1, [alignment, columnselection]);
+} else {
+if (nvismsa.length != 1) {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view", Clazz.newArray (-1, [Integer.$valueOf (nvismsa.length).toString ()])));
+}if (nvismsa[0] != null) {
+return Clazz.newArray (-1, [nvismsa[0], new jalview.datamodel.ColumnSelection ()]);
+} else {
+return this.getAlignmentAndColumnSelection (gapCharacter);
+}}}, "~A,~A,~S");
+Clazz.defineMethod (c$, "getVisibleContigs",
+function () {
+if (this.contigs != null && this.contigs.length > 0) {
+var start = 0;
+var nvis = 0;
+var fwidth = this.width;
+for (var contig = 0; contig < this.contigs.length; contig += 3) {
+if ((this.contigs[contig + 1] - start) > 0) {
+nvis++;
+}fwidth += this.contigs[contig + 2];
+start = this.contigs[contig + 1] + this.contigs[contig + 2];
+}
+if (start < fwidth) {
+nvis++;
+}var viscontigs = Clazz.newIntArray (nvis * 2, 0);
+nvis = 0;
+start = 0;
+for (var contig = 0; contig < this.contigs.length; contig += 3) {
+if ((this.contigs[contig + 1] - start) > 0) {
+viscontigs[nvis] = start;
+viscontigs[nvis + 1] = this.contigs[contig + 1] - 1;
+nvis += 2;
+}start = this.contigs[contig + 1] + this.contigs[contig + 2];
+}
+if (start < fwidth) {
+viscontigs[nvis] = start;
+viscontigs[nvis + 1] = fwidth;
+nvis += 2;
+}return viscontigs;
+} else {
+return Clazz.newIntArray (-1, [0, this.width]);
+}});
+Clazz.defineMethod (c$, "getAlignmentOrigin",
+function () {
+return this.firstCol;
+});
+Clazz.defineMethod (c$, "getVisibleContigMapFor",
+function (gapMap) {
+var delMap = null;
+var viscontigs = this.getVisibleContigs ();
+var spos = 0;
+var i = 0;
+if (viscontigs != null) {
+delMap = Clazz.newIntArray (gapMap.length, 0);
+for (var contig = 0; contig < viscontigs.length; contig += 2) {
+while (spos < gapMap.length && gapMap[spos] < viscontigs[contig]) {
+spos++;
+}
+while (spos < gapMap.length && gapMap[spos] <= viscontigs[contig + 1]) {
+delMap[i++] = spos++;
+}
+}
+var tmap = Clazz.newIntArray (i, 0);
+System.arraycopy (delMap, 0, tmap, 0, i);
+delMap = tmap;
+}return delMap;
+}, "~A");
+Clazz.defineMethod (c$, "getEditedSequences",
+function (gc, $delete) {
+var msf = this.getSequences ();
+var aln = new Array (msf.length);
+for (var i = 0, j = msf.length; i < j; i++) {
+aln[i] = msf[i].getSeq (gc);
+}
+if ($delete) {
+var sqs = this.getSequenceStrings (gc);
+for (var i = 0; i < sqs.length; i++) {
+aln[i].setSequence (sqs[i]);
+sqs[i] = null;
+}
+}return aln;
+}, "~S,~B");
+c$.summariseAlignmentView = Clazz.defineMethod (c$, "summariseAlignmentView",
+function (view, os) {
+os.print ("View has " + view.sequences.length + " of which ");
+if (view.selected == null) {
+os.print ("None");
+} else {
+os.print (" " + view.selected.size ());
+}os.println (" are selected.");
+os.print ("View is " + view.getWidth () + " columns wide");
+var viswid = 0;
+var contigs = view.getContigs ();
+if (contigs != null) {
+viswid = view.width;
+for (var i = 0; i < contigs.length; i += 3) {
+viswid += contigs[i + 2];
+}
+os.println ("with " + viswid + " visible columns spread over " + Clazz.doubleToInt (contigs.length / 3) + " regions.");
+} else {
+viswid = view.width;
+os.println (".");
+}if (view.scGroups != null) {
+os.println ("There are " + view.scGroups.size () + " groups defined on the view.");
+for (var g = 0; g < view.scGroups.size (); g++) {
+var sgr = view.scGroups.get (g);
+os.println ("Group " + g + ": Name = " + sgr.sg.getName () + " Contains " + sgr.seqs.size () + " Seqs.");
+os.println ("This group runs from " + sgr.sg.getStartRes () + " to " + sgr.sg.getEndRes ());
+for (var s = 0; s < sgr.seqs.size (); s++) {
+if (!(sgr.seqs.elementAt (s)).isMemberOf (sgr)) {
+os.println ("** WARNING: sequence " + (sgr.seqs.elementAt (s)).toString () + " is not marked as member of group.");
+}}
+}
+var visal = view.getVisibleAlignment ('-');
+if (visal != null) {
+os.println ("Vis. alignment is " + visal.getWidth () + " wide and has " + visal.getHeight () + " seqs.");
+if (visal.getGroups () != null && visal.getGroups ().size () > 0) {
+var i = 1;
+for (var sg, $sg = visal.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+os.println ("Group " + (i++) + " begins at column " + sg.getStartRes () + " and ends at " + sg.getEndRes ());
+}
+}}}}, "jalview.datamodel.AlignmentView,java.io.PrintStream");
+c$.testSelectionViews = Clazz.defineMethod (c$, "testSelectionViews",
+function (alignment, csel, selection) {
+System.out.println ("Testing standard view creation:\n");
+var view = null;
+try {
+System.out.println ("View with no hidden columns, no limit to selection, no groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, false, false);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection but no groups marked.");
+} else {
+throw e;
+}
+}
+try {
+System.out.println ("View with no hidden columns, no limit to selection, and all groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, false, true);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection marked but no groups marked.");
+} else {
+throw e;
+}
+}
+try {
+System.out.println ("View with no hidden columns, limited to selection and no groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, true, false);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection restricted but no groups marked.");
+} else {
+throw e;
+}
+}
+try {
+System.out.println ("View with no hidden columns, limited to selection, and all groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, false, true, true);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection restricted and groups marked.");
+} else {
+throw e;
+}
+}
+try {
+System.out.println ("View *with* hidden columns, no limit to selection, no groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, false, false);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection but no groups marked.");
+} else {
+throw e;
+}
+}
+try {
+System.out.println ("View *with* hidden columns, no limit to selection, and all groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, false, true);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection marked but no groups marked.");
+} else {
+throw e;
+}
+}
+try {
+System.out.println ("View *with* hidden columns, limited to selection and no groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, true, false);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection restricted but no groups marked.");
+} else {
+throw e;
+}
+}
+try {
+System.out.println ("View *with* hidden columns, limited to selection, and all groups to be collected:");
+view = new jalview.datamodel.AlignmentView (alignment, csel, selection, true, true, true);
+jalview.datamodel.AlignmentView.summariseAlignmentView (view, System.out);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to generate alignment with selection restricted and groups marked.");
+} else {
+throw e;
+}
+}
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup");
+c$.$AlignmentView$ScGroup$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.seqs = null;
+this.sg = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel.AlignmentView, "ScGroup");
+Clazz.makeConstructor (c$,
+function () {
+this.seqs = new java.util.Vector ();
+});
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/datamodel/AnnotatedCollectionI.js b/bin/jalview/datamodel/AnnotatedCollectionI.js
index 0dda32c..fd7a804 100644
--- a/bin/jalview/datamodel/AnnotatedCollectionI.js
+++ b/bin/jalview/datamodel/AnnotatedCollectionI.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.SequenceCollectionI"], "jalview.datamodel.AnnotatedCollectionI", null, function () {
-Clazz.declareInterface (jalview.datamodel, "AnnotatedCollectionI", jalview.datamodel.SequenceCollectionI);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.SequenceCollectionI"], "jalview.datamodel.AnnotatedCollectionI", null, function () {
+Clazz.declareInterface (jalview.datamodel, "AnnotatedCollectionI", jalview.datamodel.SequenceCollectionI);
+});
diff --git a/bin/jalview/datamodel/Annotation.class b/bin/jalview/datamodel/Annotation.class
index ad9b0f6..043f330 100644
Binary files a/bin/jalview/datamodel/Annotation.class and b/bin/jalview/datamodel/Annotation.class differ
diff --git a/bin/jalview/datamodel/Annotation.js b/bin/jalview/datamodel/Annotation.js
index 92e1248..76f42d8 100644
--- a/bin/jalview/datamodel/Annotation.js
+++ b/bin/jalview/datamodel/Annotation.js
@@ -1,72 +1,72 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.Annotation", ["java.lang.Float", "$.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.displayCharacter = "";
-this.description = "";
-this.secondaryStructure = ' ';
-this.value = 0;
-this.colour = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "Annotation");
-Clazz.makeConstructor (c$,
-function (displayChar, desc, ss, val) {
-this.displayCharacter = displayChar;
-this.description = desc;
-this.secondaryStructure = ss;
-this.value = val;
-}, "~S,~S,~S,~N");
-Clazz.makeConstructor (c$,
-function (displayChar, desc, ss, val, colour) {
-this.construct (displayChar, desc, ss, val);
-this.colour = colour;
-}, "~S,~S,~S,~N,java.awt.Color");
-Clazz.makeConstructor (c$,
-function (that) {
-if (that == null || this === that) {
-return;
-}if (that.displayCharacter != null) this.displayCharacter = String.instantialize (that.displayCharacter);
-if (that.description != null) this.description = String.instantialize (that.description);
-this.secondaryStructure = that.secondaryStructure;
-this.value = that.value;
-this.colour = that.colour;
-}, "jalview.datamodel.Annotation");
-Clazz.makeConstructor (c$,
-function (val) {
-this.construct (null, null, ' ', val, null);
-}, "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var sb = new StringBuffer ();
-if (this.displayCharacter != null) {
-sb.append ("\'");
-sb.append (this.displayCharacter);
-sb.append ("\'");
-}{
-sb.append (",");
-}if (this.secondaryStructure.charCodeAt (0) != 0 && !("" + this.displayCharacter).equals ("" + this.secondaryStructure)) {
-sb.append ("\'");
-sb.append (this.secondaryStructure);
-sb.append ("\'");
-}{
-sb.append (",");
-}if (this.description != null && this.description.length > 0) {
-sb.append ("\"");
-sb.append (this.description);
-sb.append ("\"");
-}{
-sb.append (",");
-}if (!Float.isNaN (this.value)) {
-sb.append (this.value);
-}if (this.colour != null) {
-if (sb.length () > 0) {
-sb.append (",");
-}sb.append ("[");
-sb.append (this.colour.getRed ());
-sb.append (",");
-sb.append (this.colour.getGreen ());
-sb.append (",");
-sb.append (this.colour.getBlue ());
-sb.append ("]");
-}return sb.toString ();
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.Annotation", ["java.lang.Float", "$.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.displayCharacter = "";
+this.description = "";
+this.secondaryStructure = ' ';
+this.value = 0;
+this.colour = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "Annotation");
+Clazz.makeConstructor (c$,
+function (displayChar, desc, ss, val) {
+this.displayCharacter = displayChar;
+this.description = desc;
+this.secondaryStructure = ss;
+this.value = val;
+}, "~S,~S,~S,~N");
+Clazz.makeConstructor (c$,
+function (displayChar, desc, ss, val, colour) {
+this.construct (displayChar, desc, ss, val);
+this.colour = colour;
+}, "~S,~S,~S,~N,java.awt.Color");
+Clazz.makeConstructor (c$,
+function (that) {
+if (that == null || this === that) {
+return;
+}if (that.displayCharacter != null) this.displayCharacter = String.instantialize (that.displayCharacter);
+if (that.description != null) this.description = String.instantialize (that.description);
+this.secondaryStructure = that.secondaryStructure;
+this.value = that.value;
+this.colour = that.colour;
+}, "jalview.datamodel.Annotation");
+Clazz.makeConstructor (c$,
+function (val) {
+this.construct (null, null, ' ', val, null);
+}, "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var sb = new StringBuffer ();
+if (this.displayCharacter != null) {
+sb.append ("\'");
+sb.append (this.displayCharacter);
+sb.append ("\'");
+}{
+sb.append (",");
+}if (this.secondaryStructure.charCodeAt (0) != 0 && !("" + this.displayCharacter).equals ("" + this.secondaryStructure)) {
+sb.append ("\'");
+sb.append (this.secondaryStructure);
+sb.append ("\'");
+}{
+sb.append (",");
+}if (this.description != null && this.description.length > 0) {
+sb.append ("\"");
+sb.append (this.description);
+sb.append ("\"");
+}{
+sb.append (",");
+}if (!Float.isNaN (this.value)) {
+sb.append (this.value);
+}if (this.colour != null) {
+if (sb.length () > 0) {
+sb.append (",");
+}sb.append ("[");
+sb.append ("" + this.colour.getRed ());
+sb.append (",");
+sb.append ("" + this.colour.getGreen ());
+sb.append (",");
+sb.append ("" + this.colour.getBlue ());
+sb.append ("]");
+}return sb.toString ();
+});
+});
diff --git a/bin/jalview/datamodel/BinaryNode.js b/bin/jalview/datamodel/BinaryNode.js
index 64fb764..7575508 100644
--- a/bin/jalview/datamodel/BinaryNode.js
+++ b/bin/jalview/datamodel/BinaryNode.js
@@ -1,112 +1,112 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.decorateAsClass (function () {
-this.$element = null;
-this.name = null;
-this.$left = null;
-this.$right = null;
-this.$parent = null;
-this.bootstrap = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "BinaryNode");
-Clazz.makeConstructor (c$,
-function () {
-this.$left = this.$right = this.$parent = null;
-this.bootstrap = 0;
-});
-Clazz.makeConstructor (c$,
-function (element, parent, name) {
-this.$element = element;
-this.$parent = parent;
-this.name = name;
-this.$left = this.$right = null;
-}, "~O,jalview.datamodel.BinaryNode,~S");
-Clazz.defineMethod (c$, "element",
-function () {
-return this.$element;
-});
-Clazz.defineMethod (c$, "setElement",
-function (v) {
-return this.$element = v;
-}, "~O");
-Clazz.defineMethod (c$, "left",
-function () {
-return this.$left;
-});
-Clazz.defineMethod (c$, "setLeft",
-function (n) {
-return this.$left = n;
-}, "jalview.datamodel.BinaryNode");
-Clazz.defineMethod (c$, "right",
-function () {
-return this.$right;
-});
-Clazz.defineMethod (c$, "setRight",
-function (n) {
-return this.$right = n;
-}, "jalview.datamodel.BinaryNode");
-Clazz.defineMethod (c$, "parent",
-function () {
-return this.$parent;
-});
-Clazz.defineMethod (c$, "setParent",
-function (n) {
-return this.$parent = n;
-}, "jalview.datamodel.BinaryNode");
-Clazz.defineMethod (c$, "isLeaf",
-function () {
-return (this.$left == null) && (this.$right == null);
-});
-Clazz.defineMethod (c$, "SetChildren",
-function (leftchild, rightchild) {
-if (leftchild != null) {
-this.setLeft (leftchild);
-leftchild.detach ();
-leftchild.setParent (this);
-}if (rightchild != null) {
-this.setRight (rightchild);
-rightchild.detach ();
-rightchild.setParent (this);
-}}, "jalview.datamodel.BinaryNode,jalview.datamodel.BinaryNode");
-Clazz.defineMethod (c$, "detach",
-function () {
-if (this.$parent != null) {
-if (this.$parent.$left === this) {
-this.$parent.$left = null;
-} else {
-if (this.$parent.$right === this) {
-this.$parent.$right = null;
-}}}this.$parent = null;
-return this;
-});
-Clazz.defineMethod (c$, "ascendLeft",
-function () {
-var c = this;
-do {
-c = c.parent ();
-} while ((c != null) && (c.left () != null) && !c.left ().isLeaf ());
-return c;
-});
-Clazz.defineMethod (c$, "ascendRight",
-function () {
-var c = this;
-do {
-c = c.parent ();
-} while ((c != null) && (c.right () != null) && !c.right ().isLeaf ());
-return c;
-});
-Clazz.defineMethod (c$, "setName",
-function (name) {
-this.name = name;
-}, "~S");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.name;
-});
-Clazz.defineMethod (c$, "setBootstrap",
-function (boot) {
-this.bootstrap = boot;
-}, "~N");
-Clazz.defineMethod (c$, "getBootstrap",
-function () {
-return this.bootstrap;
-});
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.decorateAsClass (function () {
+this.$element = null;
+this.name = null;
+this.$left = null;
+this.$right = null;
+this.$parent = null;
+this.bootstrap = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "BinaryNode");
+Clazz.makeConstructor (c$,
+function () {
+this.$left = this.$right = this.$parent = null;
+this.bootstrap = 0;
+});
+Clazz.makeConstructor (c$,
+function (element, parent, name) {
+this.$element = element;
+this.$parent = parent;
+this.name = name;
+this.$left = this.$right = null;
+}, "~O,jalview.datamodel.BinaryNode,~S");
+Clazz.defineMethod (c$, "element",
+function () {
+return this.$element;
+});
+Clazz.defineMethod (c$, "setElement",
+function (v) {
+return this.$element = v;
+}, "~O");
+Clazz.defineMethod (c$, "left",
+function () {
+return this.$left;
+});
+Clazz.defineMethod (c$, "setLeft",
+function (n) {
+return this.$left = n;
+}, "jalview.datamodel.BinaryNode");
+Clazz.defineMethod (c$, "right",
+function () {
+return this.$right;
+});
+Clazz.defineMethod (c$, "setRight",
+function (n) {
+return this.$right = n;
+}, "jalview.datamodel.BinaryNode");
+Clazz.defineMethod (c$, "parent",
+function () {
+return this.$parent;
+});
+Clazz.defineMethod (c$, "setParent",
+function (n) {
+return this.$parent = n;
+}, "jalview.datamodel.BinaryNode");
+Clazz.defineMethod (c$, "isLeaf",
+function () {
+return (this.$left == null) && (this.$right == null);
+});
+Clazz.defineMethod (c$, "SetChildren",
+function (leftchild, rightchild) {
+if (leftchild != null) {
+this.setLeft (leftchild);
+leftchild.detach ();
+leftchild.setParent (this);
+}if (rightchild != null) {
+this.setRight (rightchild);
+rightchild.detach ();
+rightchild.setParent (this);
+}}, "jalview.datamodel.BinaryNode,jalview.datamodel.BinaryNode");
+Clazz.defineMethod (c$, "detach",
+function () {
+if (this.$parent != null) {
+if (this.$parent.$left === this) {
+this.$parent.$left = null;
+} else {
+if (this.$parent.$right === this) {
+this.$parent.$right = null;
+}}}this.$parent = null;
+return this;
+});
+Clazz.defineMethod (c$, "ascendLeft",
+function () {
+var c = this;
+do {
+c = c.parent ();
+} while ((c != null) && (c.left () != null) && !c.left ().isLeaf ());
+return c;
+});
+Clazz.defineMethod (c$, "ascendRight",
+function () {
+var c = this;
+do {
+c = c.parent ();
+} while ((c != null) && (c.right () != null) && !c.right ().isLeaf ());
+return c;
+});
+Clazz.defineMethod (c$, "setName",
+function (name) {
+this.name = name;
+}, "~S");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.name;
+});
+Clazz.defineMethod (c$, "setBootstrap",
+function (boot) {
+this.bootstrap = boot;
+}, "~N");
+Clazz.defineMethod (c$, "getBootstrap",
+function () {
+return this.bootstrap;
+});
diff --git a/bin/jalview/datamodel/BinarySequence.js b/bin/jalview/datamodel/BinarySequence.js
index 2285387..90b6b95 100644
--- a/bin/jalview/datamodel/BinarySequence.js
+++ b/bin/jalview/datamodel/BinarySequence.js
@@ -1,99 +1,99 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.Sequence", "java.lang.Exception"], "jalview.datamodel.BinarySequence", ["jalview.schemes.ResidueProperties"], function () {
-c$ = Clazz.decorateAsClass (function () {
-if (!Clazz.isClassDefined ("jalview.datamodel.BinarySequence.InvalidSequenceTypeException")) {
-jalview.datamodel.BinarySequence.$BinarySequence$InvalidSequenceTypeException$ ();
-}
-this.binary = null;
-this.dbinary = null;
-this.isNa = false;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "BinarySequence", jalview.datamodel.Sequence);
-Clazz.makeConstructor (c$,
-function (s, isNa) {
-Clazz.superConstructor (this, jalview.datamodel.BinarySequence, ["", s, 0, s.length]);
-this.isNa = isNa;
-}, "~S,~B");
-Clazz.defineMethod (c$, "initMatrixGetNoRes",
-($fz = function () {
-var nores = (this.isNa) ? 10 : 23;
-this.dbinary = Clazz.newDoubleArray (this.getSequence ().length * nores, 0);
-for (var i = 0; i < this.dbinary.length; i++) {
-this.dbinary[i] = 0.0;
-}
-return nores;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getSymbolmatrix",
-($fz = function () {
-return (this.isNa) ? jalview.schemes.ResidueProperties.nucleotideIndex : jalview.schemes.ResidueProperties.aaIndex;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "encode",
-function () {
-var nores = this.initMatrixGetNoRes ();
-var sindex = this.getSymbolmatrix ();
-for (var i = 0; i < this.getSequence ().length; i++) {
-var aanum = nores - 1;
-try {
-aanum = sindex[this.getCharAt (i).charCodeAt (0)];
-} catch (e) {
-if (Clazz.exceptionOf (e, NullPointerException)) {
-aanum = nores - 1;
-} else {
-throw e;
-}
-}
-if (aanum >= nores) {
-aanum = nores - 1;
-}this.dbinary[(i * nores) + aanum] = 1.0;
-}
-});
-Clazz.defineMethod (c$, "matrixEncode",
-function (matrix) {
-if (this.isNa != matrix.isDNA ()) {
-throw Clazz.innerTypeInstance (jalview.datamodel.BinarySequence.InvalidSequenceTypeException, this, null, "matrix " + matrix.getClass ().getCanonicalName () + " is not a valid matrix for " + (this.isNa ? "nucleotide" : "protein") + "sequences");
-}this.matrixEncode (matrix.isDNA () ? jalview.schemes.ResidueProperties.nucleotideIndex : jalview.schemes.ResidueProperties.aaIndex, matrix.getMatrix ());
-}, "jalview.schemes.ScoreMatrix");
-Clazz.defineMethod (c$, "matrixEncode",
-($fz = function (aaIndex, matrix) {
-var nores = this.initMatrixGetNoRes ();
-for (var i = 0, iSize = this.getSequence ().length; i < iSize; i++) {
-var aanum = nores - 1;
-try {
-aanum = aaIndex[this.getCharAt (i).charCodeAt (0)];
-} catch (e) {
-if (Clazz.exceptionOf (e, NullPointerException)) {
-aanum = nores - 1;
-} else {
-throw e;
-}
-}
-if (aanum >= nores) {
-aanum = nores - 1;
-}for (var j = 0; j < nores; j++) {
-this.dbinary[(i * nores) + j] = matrix[aanum][j];
-}
-}
-}, $fz.isPrivate = true, $fz), "~A,~A");
-Clazz.defineMethod (c$, "toBinaryString",
-function () {
-var out = "";
-for (var i = 0; i < this.binary.length; i++) {
-out += ( new Integer (this.binary[i])).toString ();
-if (i < (this.binary.length - 1)) {
-out += " ";
-}}
-return out;
-});
-Clazz.defineMethod (c$, "getDBinary",
-function () {
-return this.dbinary;
-});
-c$.$BinarySequence$InvalidSequenceTypeException$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel.BinarySequence, "InvalidSequenceTypeException", Exception);
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.Sequence", "java.lang.Exception"], "jalview.datamodel.BinarySequence", ["jalview.schemes.ResidueProperties"], function () {
+c$ = Clazz.decorateAsClass (function () {
+if (!Clazz.isClassDefined ("jalview.datamodel.BinarySequence.InvalidSequenceTypeException")) {
+jalview.datamodel.BinarySequence.$BinarySequence$InvalidSequenceTypeException$ ();
+}
+this.binary = null;
+this.dbinary = null;
+this.isNa = false;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "BinarySequence", jalview.datamodel.Sequence);
+Clazz.makeConstructor (c$,
+function (s, isNa) {
+Clazz.superConstructor (this, jalview.datamodel.BinarySequence, ["", s, 0, s.length]);
+this.isNa = isNa;
+}, "~S,~B");
+Clazz.defineMethod (c$, "initMatrixGetNoRes",
+($fz = function () {
+var nores = (this.isNa) ? 10 : 23;
+this.dbinary = Clazz.newDoubleArray (this.getSequence ().length * nores, 0);
+for (var i = 0; i < this.dbinary.length; i++) {
+this.dbinary[i] = 0.0;
+}
+return nores;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getSymbolmatrix",
+($fz = function () {
+return (this.isNa) ? jalview.schemes.ResidueProperties.nucleotideIndex : jalview.schemes.ResidueProperties.aaIndex;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "encode",
+function () {
+var nores = this.initMatrixGetNoRes ();
+var sindex = this.getSymbolmatrix ();
+for (var i = 0; i < this.getSequence ().length; i++) {
+var aanum = nores - 1;
+try {
+aanum = sindex[this.getCharAt (i).charCodeAt (0)];
+} catch (e) {
+if (Clazz.exceptionOf (e, NullPointerException)) {
+aanum = nores - 1;
+} else {
+throw e;
+}
+}
+if (aanum >= nores) {
+aanum = nores - 1;
+}this.dbinary[(i * nores) + aanum] = 1.0;
+}
+});
+Clazz.defineMethod (c$, "matrixEncode",
+function (matrix) {
+if (this.isNa != matrix.isDNA ()) {
+throw Clazz.innerTypeInstance (jalview.datamodel.BinarySequence.InvalidSequenceTypeException, this, null, "matrix " + matrix.getClass ().getCanonicalName () + " is not a valid matrix for " + (this.isNa ? "nucleotide" : "protein") + "sequences");
+}this.matrixEncode (matrix.isDNA () ? jalview.schemes.ResidueProperties.nucleotideIndex : jalview.schemes.ResidueProperties.aaIndex, matrix.getMatrix ());
+}, "jalview.schemes.ScoreMatrix");
+Clazz.defineMethod (c$, "matrixEncode",
+($fz = function (aaIndex, matrix) {
+var nores = this.initMatrixGetNoRes ();
+for (var i = 0, iSize = this.getSequence ().length; i < iSize; i++) {
+var aanum = nores - 1;
+try {
+aanum = aaIndex[this.getCharAt (i).charCodeAt (0)];
+} catch (e) {
+if (Clazz.exceptionOf (e, NullPointerException)) {
+aanum = nores - 1;
+} else {
+throw e;
+}
+}
+if (aanum >= nores) {
+aanum = nores - 1;
+}for (var j = 0; j < nores; j++) {
+this.dbinary[(i * nores) + j] = matrix[aanum][j];
+}
+}
+}, $fz.isPrivate = true, $fz), "~A,~A");
+Clazz.defineMethod (c$, "toBinaryString",
+function () {
+var out = "";
+for (var i = 0; i < this.binary.length; i++) {
+out += ( new Integer (this.binary[i])).toString ();
+if (i < (this.binary.length - 1)) {
+out += " ";
+}}
+return out;
+});
+Clazz.defineMethod (c$, "getDBinary",
+function () {
+return this.dbinary;
+});
+c$.$BinarySequence$InvalidSequenceTypeException$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel.BinarySequence, "InvalidSequenceTypeException", Exception);
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/datamodel/CigarArray.class b/bin/jalview/datamodel/CigarArray.class
index c31f49e..10b48a9 100644
Binary files a/bin/jalview/datamodel/CigarArray.class and b/bin/jalview/datamodel/CigarArray.class differ
diff --git a/bin/jalview/datamodel/CigarArray.js b/bin/jalview/datamodel/CigarArray.js
index b18df9f..7f45aff 100644
--- a/bin/jalview/datamodel/CigarArray.js
+++ b/bin/jalview/datamodel/CigarArray.js
@@ -1,188 +1,188 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.CigarBase"], "jalview.datamodel.CigarArray", ["jalview.datamodel.CigarCigar", "$.SeqCigar", "java.lang.StringBuffer", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.refCigars = null;
-this.seqcigararray = false;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "CigarArray", jalview.datamodel.CigarBase);
-Clazz.defineMethod (c$, "isSeqCigarArray",
-function () {
-return this.seqcigararray;
-});
-Clazz.makeConstructor (c$,
-function (cigars) {
-Clazz.superConstructor (this, jalview.datamodel.CigarArray);
-this.seqcigararray = true;
-if (cigars != null && cigars.length > 0) {
-this.refCigars = new Array (cigars.length);
-for (var c = 0; c < cigars.length; c++) {
-this.refCigars[c] = cigars[c];
-if (!((Clazz.instanceOf (cigars[c], jalview.datamodel.SeqCigar)) || Clazz.instanceOf (cigars[c], jalview.datamodel.CigarCigar))) {
-this.seqcigararray = false;
-}}
-}}, "~A");
-Clazz.makeConstructor (c$,
-function (alignment, columnSelection, selectionGroup) {
-this.construct (jalview.datamodel.CigarArray.constructSeqCigarArray (alignment, selectionGroup));
-this.constructFromAlignment (alignment, columnSelection != null ? columnSelection.getHiddenColumns () : null, selectionGroup);
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup");
-c$._calcStartEndBounds = Clazz.defineMethod (c$, "_calcStartEndBounds",
-($fz = function (alignment, selectionGroup) {
-var startend = Clazz.newIntArray (-1, [0, 0, 0]);
-if (selectionGroup != null) {
-startend[0] = selectionGroup.getSize ();
-startend[1] = selectionGroup.getStartRes ();
-startend[2] = selectionGroup.getEndRes ();
-} else {
-startend[0] = alignment.getHeight ();
-startend[2] = alignment.getWidth () - 1;
-}return startend;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
-c$.constructSeqCigarArray = Clazz.defineMethod (c$, "constructSeqCigarArray",
-function (alignment, selectionGroup) {
-var seqs = null;
-var i;
-var iSize;
-var _startend = jalview.datamodel.CigarArray._calcStartEndBounds (alignment, selectionGroup);
-var start = _startend[1];
-var end = _startend[2];
-if (selectionGroup != null) {
-iSize = selectionGroup.getSize ();
-seqs = selectionGroup.getSequencesInOrder (alignment);
-start = selectionGroup.getStartRes ();
-end = selectionGroup.getEndRes ();
-} else {
-iSize = alignment.getHeight ();
-seqs = alignment.getSequencesArray ();
-end = alignment.getWidth () - 1;
-}var selseqs = new Array (iSize);
-for (i = 0; i < iSize; i++) {
-selseqs[i] = new jalview.datamodel.SeqCigar (seqs[i], start, end);
-}
-return selseqs;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "constructFromAlignment",
-($fz = function (alignment, list, selectionGroup) {
-var _startend = jalview.datamodel.CigarArray._calcStartEndBounds (alignment, selectionGroup);
-var start = _startend[1];
-var end = _startend[2];
-if (list != null) {
-var region;
-var hideStart;
-var hideEnd;
-var last = start;
-for (var j = 0; new Boolean (last < end & j < list.size ()).valueOf (); j++) {
-region = list.get (j);
-hideStart = region[0];
-hideEnd = region[1];
-if (hideStart < last) {
-if (hideEnd > last) {
-hideStart = last;
-} else {
-continue;
-}}if (hideStart > end) {
-break;
-}if (hideEnd > end) {
-hideEnd = end;
-}if (hideStart > hideEnd) {
-break;
-}if (last < hideStart) {
-this.addOperation ('M', hideStart - last);
-}this.addOperation ('D', 1 + hideEnd - hideStart);
-last = hideEnd + 1;
-}
-if (last < end) {
-this.addOperation ('M', end - last + 1);
-}} else {
-this.addOperation ('M', end - start + 1);
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List,jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "getArrayofSequenceAndDeletions",
-function (GapChar) {
-if (this.refCigars == null || this.refCigars.length == 0 || this.length == 0) {
-return null;
-}var sqanddels = new Array (this.refCigars.length);
-for (var c = 0; c < this.refCigars.length; c++) {
-var refString = this.refCigars[c].getSequenceString (GapChar);
-if (refString != null) {
-sqanddels[c] = this.getSequenceAndDeletions (refString, GapChar);
-} else {
-sqanddels[c] = null;
-}}
-return sqanddels;
-}, "~S");
-Clazz.defineMethod (c$, "getSequenceString",
-function (GapChar) {
-if (this.length == 0 || this.refCigars == null) {
-return "";
-}var seqStrings = new StringBuffer ();
-var sqanddels = this.getArrayofSequenceAndDeletions (GapChar);
-for (var c = 0; c < this.refCigars.length; c++) {
-if (sqanddels[c] != null) {
-seqStrings.append (sqanddels[c][0]);
-sqanddels[c][0] = null;
-}seqStrings.append ('\n');
-}
-return seqStrings.toString ();
-}, "~S");
-Clazz.defineMethod (c$, "getSequenceStrings",
-function (GapChar) {
-if (this.length == 0 || this.refCigars == null || this.refCigars.length == 0) {
-return null;
-}var sqanddels = this.getArrayofSequenceAndDeletions (GapChar);
-var seqs = new Array (sqanddels.length);
-for (var c = 0; c < this.refCigars.length; c++) {
-seqs[c] = sqanddels[c][0];
-}
-return seqs;
-}, "~S");
-Clazz.defineMethod (c$, "applyDeletions",
-function () {
-var delpos = null;
-if (this.length == 0) {
-return null;
-}var cursor = 0;
-var vcursor = 0;
-var offset = 0;
-var i = 0;
-while (i < this.length) {
-if (this.operation[i] != 'D') {
-if (this.operation[i] == 'M') {
-cursor += this.range[i];
-}vcursor += this.range[i++];
-} else {
-if (delpos == null) {
-delpos = new java.util.Vector ();
-}var delstart = cursor;
-var delend = cursor + this.range[i] - 1;
-delpos.addElement ( Clazz.newIntArray (-1, [vcursor + offset, this.range[i]]));
-offset += this.range[i] - 1;
-System.arraycopy (this.operation, i + 1, this.operation, i, this.length - i);
-System.arraycopy (this.range, i + 1, this.range, i, this.length - i);
-this.length--;
-for (var s = 0; s < this.refCigars.length; s++) {
-var d = this.refCigars[s].deleteRange (delstart, delend);
-}
-}}
-if (delpos != null) {
-var pos = Clazz.newIntArray (delpos.size () * 2, 0);
-for (var k = 0, l = delpos.size (); k < l; k++) {
-var dr = (delpos.elementAt (k));
-pos[k * 2] = dr[0];
-pos[k * 2 + 1] = dr[1];
-delpos.setElementAt (null, k);
-}
-delpos = null;
-return pos;
-}return null;
-});
-Clazz.defineMethod (c$, "getSeqCigarArray",
-function () {
-if (!this.isSeqCigarArray ()) {
-return null;
-}var sa = new Array (this.refCigars.length);
-for (var i = 0; i < this.refCigars.length; i++) {
-sa[i] = this.refCigars[i];
-}
-return sa;
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.CigarBase"], "jalview.datamodel.CigarArray", ["jalview.datamodel.CigarCigar", "$.SeqCigar", "java.lang.StringBuffer", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.refCigars = null;
+this.seqcigararray = false;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "CigarArray", jalview.datamodel.CigarBase);
+Clazz.defineMethod (c$, "isSeqCigarArray",
+function () {
+return this.seqcigararray;
+});
+Clazz.makeConstructor (c$,
+function (cigars) {
+Clazz.superConstructor (this, jalview.datamodel.CigarArray);
+this.seqcigararray = true;
+if (cigars != null && cigars.length > 0) {
+this.refCigars = new Array (cigars.length);
+for (var c = 0; c < cigars.length; c++) {
+this.refCigars[c] = cigars[c];
+if (!((Clazz.instanceOf (cigars[c], jalview.datamodel.SeqCigar)) || Clazz.instanceOf (cigars[c], jalview.datamodel.CigarCigar))) {
+this.seqcigararray = false;
+}}
+}}, "~A");
+Clazz.makeConstructor (c$,
+function (alignment, columnSelection, selectionGroup) {
+this.construct (jalview.datamodel.CigarArray.constructSeqCigarArray (alignment, selectionGroup));
+this.constructFromAlignment (alignment, columnSelection != null ? columnSelection.getHiddenColumns () : null, selectionGroup);
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,jalview.datamodel.SequenceGroup");
+c$._calcStartEndBounds = Clazz.defineMethod (c$, "_calcStartEndBounds",
+($fz = function (alignment, selectionGroup) {
+var startend = Clazz.newIntArray (-1, [0, 0, 0]);
+if (selectionGroup != null) {
+startend[0] = selectionGroup.getSize ();
+startend[1] = selectionGroup.getStartRes ();
+startend[2] = selectionGroup.getEndRes ();
+} else {
+startend[0] = alignment.getHeight ();
+startend[2] = alignment.getWidth () - 1;
+}return startend;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
+c$.constructSeqCigarArray = Clazz.defineMethod (c$, "constructSeqCigarArray",
+function (alignment, selectionGroup) {
+var seqs = null;
+var i;
+var iSize;
+var _startend = jalview.datamodel.CigarArray._calcStartEndBounds (alignment, selectionGroup);
+var start = _startend[1];
+var end = _startend[2];
+if (selectionGroup != null) {
+iSize = selectionGroup.getSize ();
+seqs = selectionGroup.getSequencesInOrder (alignment);
+start = selectionGroup.getStartRes ();
+end = selectionGroup.getEndRes ();
+} else {
+iSize = alignment.getHeight ();
+seqs = alignment.getSequencesArray ();
+end = alignment.getWidth () - 1;
+}var selseqs = new Array (iSize);
+for (i = 0; i < iSize; i++) {
+selseqs[i] = new jalview.datamodel.SeqCigar (seqs[i], start, end);
+}
+return selseqs;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "constructFromAlignment",
+($fz = function (alignment, list, selectionGroup) {
+var _startend = jalview.datamodel.CigarArray._calcStartEndBounds (alignment, selectionGroup);
+var start = _startend[1];
+var end = _startend[2];
+if (list != null) {
+var region;
+var hideStart;
+var hideEnd;
+var last = start;
+for (var j = 0; new Boolean (last < end & j < list.size ()).valueOf (); j++) {
+region = list.get (j);
+hideStart = region[0];
+hideEnd = region[1];
+if (hideStart < last) {
+if (hideEnd > last) {
+hideStart = last;
+} else {
+continue;
+}}if (hideStart > end) {
+break;
+}if (hideEnd > end) {
+hideEnd = end;
+}if (hideStart > hideEnd) {
+break;
+}if (last < hideStart) {
+this.addOperation ('M', hideStart - last);
+}this.addOperation ('D', 1 + hideEnd - hideStart);
+last = hideEnd + 1;
+}
+if (last < end) {
+this.addOperation ('M', end - last + 1);
+}} else {
+this.addOperation ('M', end - start + 1);
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List,jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "getArrayofSequenceAndDeletions",
+function (GapChar) {
+if (this.refCigars == null || this.refCigars.length == 0 || this.length == 0) {
+return null;
+}var sqanddels = new Array (this.refCigars.length);
+for (var c = 0; c < this.refCigars.length; c++) {
+var refString = this.refCigars[c].getSequenceString (GapChar);
+if (refString != null) {
+sqanddels[c] = this.getSequenceAndDeletions (refString, GapChar);
+} else {
+sqanddels[c] = null;
+}}
+return sqanddels;
+}, "~S");
+Clazz.defineMethod (c$, "getSequenceString",
+function (GapChar) {
+if (this.length == 0 || this.refCigars == null) {
+return "";
+}var seqStrings = new StringBuffer ();
+var sqanddels = this.getArrayofSequenceAndDeletions (GapChar);
+for (var c = 0; c < this.refCigars.length; c++) {
+if (sqanddels[c] != null) {
+seqStrings.append (sqanddels[c][0]);
+sqanddels[c][0] = null;
+}seqStrings.append ('\n');
+}
+return seqStrings.toString ();
+}, "~S");
+Clazz.defineMethod (c$, "getSequenceStrings",
+function (GapChar) {
+if (this.length == 0 || this.refCigars == null || this.refCigars.length == 0) {
+return null;
+}var sqanddels = this.getArrayofSequenceAndDeletions (GapChar);
+var seqs = new Array (sqanddels.length);
+for (var c = 0; c < this.refCigars.length; c++) {
+seqs[c] = sqanddels[c][0];
+}
+return seqs;
+}, "~S");
+Clazz.defineMethod (c$, "applyDeletions",
+function () {
+var delpos = null;
+if (this.length == 0) {
+return null;
+}var cursor = 0;
+var vcursor = 0;
+var offset = 0;
+var i = 0;
+while (i < this.length) {
+if (this.operation[i] != 'D') {
+if (this.operation[i] == 'M') {
+cursor += this.range[i];
+}vcursor += this.range[i++];
+} else {
+if (delpos == null) {
+delpos = new java.util.Vector ();
+}var delstart = cursor;
+var delend = cursor + this.range[i] - 1;
+delpos.addElement ( Clazz.newIntArray (-1, [vcursor + offset, this.range[i]]));
+offset += this.range[i] - 1;
+System.arraycopy (this.operation, i + 1, this.operation, i, this.length - i);
+System.arraycopy (this.range, i + 1, this.range, i, this.length - i);
+this.length--;
+for (var s = 0; s < this.refCigars.length; s++) {
+var d = this.refCigars[s].deleteRange (delstart, delend);
+}
+}}
+if (delpos != null) {
+var pos = Clazz.newIntArray (delpos.size () * 2, 0);
+for (var k = 0, l = delpos.size (); k < l; k++) {
+var dr = (delpos.elementAt (k));
+pos[k * 2] = dr[0];
+pos[k * 2 + 1] = dr[1];
+delpos.setElementAt (null, k);
+}
+delpos = null;
+return pos;
+}return null;
+});
+Clazz.defineMethod (c$, "getSeqCigarArray",
+function () {
+if (!this.isSeqCigarArray ()) {
+return null;
+}var sa = new Array (this.refCigars.length);
+for (var i = 0; i < this.refCigars.length; i++) {
+sa[i] = this.refCigars[i];
+}
+return sa;
+});
+});
diff --git a/bin/jalview/datamodel/CigarBase.class b/bin/jalview/datamodel/CigarBase.class
index d658368..7417a4d 100644
Binary files a/bin/jalview/datamodel/CigarBase.class and b/bin/jalview/datamodel/CigarBase.class differ
diff --git a/bin/jalview/datamodel/CigarBase.js b/bin/jalview/datamodel/CigarBase.js
index bd75085..5b88b3f 100644
--- a/bin/jalview/datamodel/CigarBase.js
+++ b/bin/jalview/datamodel/CigarBase.js
@@ -1,310 +1,310 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.CigarBase", ["jalview.util.MessageManager", "java.lang.Error", "$.Exception", "$.StringBuffer", "java.util.Vector", "javajs.util.AU"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.length = 0;
-this._inc_length = 10;
-this.operation = null;
-this.range = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "CigarBase");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "getSequenceAndDeletions",
-function (reference, GapChar) {
-var rlength = 0;
-var deletions = javajs.util.AU.newInt2 (this.length);
-var trunc_deletions = null;
-var sq = new StringBuffer ();
-var cursor = 0;
-var alcursor = 0;
-var start = 0;
-var startpos = 0;
-var end = 0;
-var endpos = 0;
-var delcount = -1;
-var consecutive_del = false;
-if (this.length == 0) {
-return null;
-}if (reference != null) {
-rlength = reference.length;
-}var modstart = true;
-for (var i = 0; i < this.length; i++) {
-switch (this.operation[i]) {
-case 'D':
-if (!consecutive_del) {
-deletions[++delcount] = Clazz.newIntArray (-1, [cursor, 0, alcursor]);
-}cursor += this.range[i];
-deletions[delcount][1] = cursor - 1;
-consecutive_del = true;
-break;
-case 'I':
-consecutive_del = false;
-for (var r = 0; r < this.range[i]; r++) {
-sq.append (GapChar);
-alcursor++;
-}
-break;
-case 'M':
-consecutive_del = false;
-if (modstart) {
-start = cursor;
-startpos = alcursor;
-modstart = false;
-}if (reference != null) {
-var sbend = cursor + this.range[i];
-if (sbend > rlength) {
-sq.append (reference.substring (cursor, rlength));
-while (sbend-- >= rlength) {
-sq.append (GapChar);
-}
-} else {
-sq.append (reference.substring (cursor, sbend));
-}}alcursor += this.range[i];
-cursor += this.range[i];
-end = cursor - 1;
-endpos = alcursor;
-break;
-default:
-throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_seq_cigar_operation", Clazz.newArray (-1, [ new StringBuffer (this.operation[i].charCodeAt (0)).toString ()])));
-}
-}
-if (++delcount > 0) {
-trunc_deletions = Clazz.newIntArray (delcount, 0);
-System.arraycopy (deletions, 0, trunc_deletions, 0, delcount);
-}deletions = null;
-return Clazz.newArray (-1, [((reference != null) ? sq.toString () : null), Clazz.newIntArray (-1, [start, startpos, end, endpos]), trunc_deletions]);
-}, "~S,~S");
-Clazz.defineMethod (c$, "compact_operations",
-function () {
-var i = 1;
-if (this.operation == null) {
-return;
-}var last = this.operation[0];
-while (i < this.length) {
-if (last == this.operation[i]) {
-this.range[i - 1] += this.range[i];
-var r = this.length - i;
-if (r > 0) {
-System.arraycopy (this.range, i + 1, this.range, i, r);
-System.arraycopy (this.operation, i + 1, this.operation, i, r);
-}this.length--;
-} else {
-last = this.operation[i++];
-}}
-});
-c$.parseCigarString = Clazz.defineMethod (c$, "parseCigarString",
-function (cigarString) {
-var ops = 0;
-for (var i = 0, l = cigarString.length; i < l; i++) {
-var c = cigarString.charAt (i);
-if (c == 'M' || c.charCodeAt (0) == (45) || c == 'I' || c.charCodeAt (0) == (41) || c == 'D' || c.charCodeAt (0) == (36)) {
-ops++;
-}}
-var operation = Clazz.newCharArray (ops, '\0');
-var range = Clazz.newIntArray (ops, 0);
-var op = 0;
-var i = 0;
-var l = cigarString.length;
-while (i < l) {
-var c;
-var j = i;
-do {
-c = cigarString.charAt (j++);
-} while (c >= '0' && c <= '9' && j < l);
-if (j >= l && c >= '0' && c <= '9') {
-throw new Exception (jalview.util.MessageManager.getString ("exception.unterminated_cigar_string"));
-}try {
-var rangeint = cigarString.substring (i, j - 1);
-range[op] = Integer.parseInt (rangeint);
-i = j;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_bug_parse_cigar_string"));
-} else {
-throw e;
-}
-}
-if (c >= 'a' && c <= 'z') {
-c = String.fromCharCode (c.charCodeAt (0) - 32);
-}if ((c == 'M' || c == 'I' || c == 'D')) {
-operation[op++] = c;
-} else {
-throw new Exception (jalview.util.MessageManager.formatMessage ("exception.unexpected_operation_cigar_string_pos", Clazz.newArray (-1, [ new StringBuffer (c.charCodeAt (0)).toString (), Integer.$valueOf (i).toString (), cigarString])));
-}}
-return Clazz.newArray (-1, [operation, range]);
-}, "~S");
-Clazz.defineMethod (c$, "addOperation",
-function (op, range) {
-if (op >= 'a' && op <= 'z') {
-op = String.fromCharCode (op.charCodeAt (0) - 32);
-}if (op != 'M' && op != 'D' && op != 'I') {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_invalid_operation_string"));
-}if (range == 0) {
-return;
-}if (range < 0) {
-throw new Error (jalview.util.MessageManager.getString ("error.invalid_range_string"));
-}var lngth = 0;
-if (this.operation == null) {
-this.operation = Clazz.newCharArray (this._inc_length, '\0');
-this.range = Clazz.newIntArray (this._inc_length, 0);
-}if (this.length + 1 == this.operation.length) {
-var ops = this.operation;
-this.operation = Clazz.newCharArray (this.length + 1 + this._inc_length, '\0');
-System.arraycopy (ops, 0, this.operation, 0, this.length);
-ops = null;
-var rng = this.range;
-this.range = Clazz.newIntArray (this.length + 1 + this._inc_length, 0);
-System.arraycopy (rng, 0, this.range, 0, this.length);
-rng = null;
-}if ((this.length > 0) && (this.operation[this.length - 1] == op)) {
-this.length--;
-} else {
-this.range[this.length] = 0;
-}this.operation[this.length] = op;
-this.range[this.length++] += range;
-}, "~S,~N");
-Clazz.defineMethod (c$, "deleteRange",
-function (start, end) {
-var deleted = 0;
-if (this.length == 0) {
-return deleted;
-}if (start < 0 || start > end) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_delete_range_out_of_bounds"));
-}var cursor = 0;
-var rlength = 1 + end - start;
-var oldlen = this.length;
-var o = 0;
-var editing = false;
-var oldops = this.operation;
-var oldrange = this.range;
-this.length = 0;
-this.operation = null;
-this.range = null;
-this.compact_operations ();
-while (o < oldlen && cursor <= end && rlength > 0) {
-if (oldops[o] == 'D') {
-this.addDeleted (oldrange[o++]);
-continue;
-}var remain = oldrange[o];
-if (!editing) {
-if ((cursor + remain) <= start) {
-this.addOperation (oldops[o], oldrange[o]);
-cursor += oldrange[o++];
-continue;
-}editing = true;
-if (start - cursor > 0) {
-this.addOperation (oldops[o], start - cursor);
-remain -= start - cursor;
-}}if (o < oldlen && editing && rlength > 0 && remain > 0) {
-switch (oldops[o]) {
-case 'M':
-if (rlength > remain) {
-this.addDeleted (remain);
-deleted += remain;
-} else {
-deleted += rlength;
-this.addDeleted (rlength);
-if (remain - rlength > 0) {
-this.addOperation ('M', remain - rlength);
-}rlength = 0;
-remain = 0;
-}break;
-case 'I':
-if (remain - rlength > 0) {
-this.addInsertion (remain - rlength);
-rlength = 0;
-}break;
-case 'D':
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error"));
-default:
-throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_unknown_operation", Clazz.newArray (-1, [ new StringBuffer (oldops[o].charCodeAt (0)).toString ()])));
-}
-rlength -= remain;
-remain = oldrange[++o];
-}}
-while (o < oldlen) {
-this.addOperation (oldops[o], oldrange[o++]);
-}
-return deleted;
-}, "~N,~N");
-Clazz.defineMethod (c$, "hasDeletedRegions",
-function () {
-for (var i = 0; i < this.length; i++) {
-if (this.operation[i] == 'D') {
-return true;
-}}
-return false;
-});
-Clazz.defineMethod (c$, "getDeletedRegions",
-function () {
-if (this.length == 0) {
-return null;
-}var dr = new java.util.Vector ();
-var cursor = 0;
-var vcursor = 0;
-for (var i = 0; i < this.length; i++) {
-switch (this.operation[i]) {
-case 'M':
-cursor += this.range[i];
-case 'I':
-vcursor += this.range[i];
-break;
-case 'D':
-dr.addElement ( Clazz.newIntArray (-1, [vcursor, cursor, this.range[i]]));
-cursor += this.range[i];
-}
-}
-if (dr.size () == 0) {
-return null;
-}var delregions = Clazz.newIntArray (dr.size () * 3, 0);
-for (var i = 0, l = dr.size (); i < l; i++) {
-var reg = dr.elementAt (i);
-delregions[i * 3] = reg[0];
-delregions[i * 3 + 1] = reg[1];
-delregions[i * 3 + 2] = reg[2];
-}
-return delregions;
-});
-Clazz.defineMethod (c$, "getFullWidth",
-function () {
-var w = 0;
-if (this.range != null) {
-for (var i = 0; i < this.length; i++) {
-w += this.range[i];
-}
-}return w;
-});
-Clazz.defineMethod (c$, "getWidth",
-function () {
-var w = 0;
-if (this.range != null) {
-for (var i = 0; i < this.length; i++) {
-if (this.operation[i] == 'M' || this.operation[i] == 'I') {
-w += this.range[i];
-}}
-}return w;
-});
-Clazz.defineMethod (c$, "addInsertion",
-function (range) {
-this.addOperation ('I', range);
-}, "~N");
-Clazz.defineMethod (c$, "addDeleted",
-function (range) {
-this.addOperation ('D', range);
-}, "~N");
-Clazz.defineMethod (c$, "getCigarstring",
-function () {
-var cigarString = new StringBuffer ();
-for (var i = 0; i < this.length; i++) {
-cigarString.append ("" + this.range[i]);
-cigarString.append (this.operation[i]);
-}
-return cigarString.toString ();
-});
-Clazz.defineStatics (c$,
-"D", 'D',
-"I", 'I',
-"M", 'M',
-"_case_shift", String.fromCharCode (32));
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.CigarBase", ["jalview.util.MessageManager", "java.lang.Error", "$.Exception", "$.StringBuffer", "java.util.Vector", "javajs.util.AU"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.length = 0;
+this._inc_length = 10;
+this.operation = null;
+this.range = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "CigarBase");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "getSequenceAndDeletions",
+function (reference, GapChar) {
+var rlength = 0;
+var deletions = javajs.util.AU.newInt2 (this.length);
+var trunc_deletions = null;
+var sq = new StringBuffer ();
+var cursor = 0;
+var alcursor = 0;
+var start = 0;
+var startpos = 0;
+var end = 0;
+var endpos = 0;
+var delcount = -1;
+var consecutive_del = false;
+if (this.length == 0) {
+return null;
+}if (reference != null) {
+rlength = reference.length;
+}var modstart = true;
+for (var i = 0; i < this.length; i++) {
+switch (this.operation[i]) {
+case 'D':
+if (!consecutive_del) {
+deletions[++delcount] = Clazz.newIntArray (-1, [cursor, 0, alcursor]);
+}cursor += this.range[i];
+deletions[delcount][1] = cursor - 1;
+consecutive_del = true;
+break;
+case 'I':
+consecutive_del = false;
+for (var r = 0; r < this.range[i]; r++) {
+sq.append (GapChar);
+alcursor++;
+}
+break;
+case 'M':
+consecutive_del = false;
+if (modstart) {
+start = cursor;
+startpos = alcursor;
+modstart = false;
+}if (reference != null) {
+var sbend = cursor + this.range[i];
+if (sbend > rlength) {
+sq.append (reference.substring (cursor, rlength));
+while (sbend-- >= rlength) {
+sq.append (GapChar);
+}
+} else {
+sq.append (reference.substring (cursor, sbend));
+}}alcursor += this.range[i];
+cursor += this.range[i];
+end = cursor - 1;
+endpos = alcursor;
+break;
+default:
+throw new Error (jalview.util.MessageManager.formatMessage ("error.unknown_seq_cigar_operation", Clazz.newArray (-1, [ new StringBuffer (this.operation[i].charCodeAt (0)).toString ()])));
+}
+}
+if (++delcount > 0) {
+trunc_deletions = Clazz.newIntArray (delcount, 0);
+System.arraycopy (deletions, 0, trunc_deletions, 0, delcount);
+}deletions = null;
+return Clazz.newArray (-1, [((reference != null) ? sq.toString () : null), Clazz.newIntArray (-1, [start, startpos, end, endpos]), trunc_deletions]);
+}, "~S,~S");
+Clazz.defineMethod (c$, "compact_operations",
+function () {
+var i = 1;
+if (this.operation == null) {
+return;
+}var last = this.operation[0];
+while (i < this.length) {
+if (last == this.operation[i]) {
+this.range[i - 1] += this.range[i];
+var r = this.length - i;
+if (r > 0) {
+System.arraycopy (this.range, i + 1, this.range, i, r);
+System.arraycopy (this.operation, i + 1, this.operation, i, r);
+}this.length--;
+} else {
+last = this.operation[i++];
+}}
+});
+c$.parseCigarString = Clazz.defineMethod (c$, "parseCigarString",
+function (cigarString) {
+var ops = 0;
+for (var i = 0, l = cigarString.length; i < l; i++) {
+var c = cigarString.charAt (i);
+if (c == 'M' || c.charCodeAt (0) == (45) || c == 'I' || c.charCodeAt (0) == (41) || c == 'D' || c.charCodeAt (0) == (36)) {
+ops++;
+}}
+var operation = Clazz.newCharArray (ops, '\0');
+var range = Clazz.newIntArray (ops, 0);
+var op = 0;
+var i = 0;
+var l = cigarString.length;
+while (i < l) {
+var c;
+var j = i;
+do {
+c = cigarString.charAt (j++);
+} while (c >= '0' && c <= '9' && j < l);
+if (j >= l && c >= '0' && c <= '9') {
+throw new Exception (jalview.util.MessageManager.getString ("exception.unterminated_cigar_string"));
+}try {
+var rangeint = cigarString.substring (i, j - 1);
+range[op] = Integer.parseInt (rangeint);
+i = j;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_bug_parse_cigar_string"));
+} else {
+throw e;
+}
+}
+if (c >= 'a' && c <= 'z') {
+c = String.fromCharCode (c.charCodeAt (0) - 32);
+}if ((c == 'M' || c == 'I' || c == 'D')) {
+operation[op++] = c;
+} else {
+throw new Exception (jalview.util.MessageManager.formatMessage ("exception.unexpected_operation_cigar_string_pos", Clazz.newArray (-1, [ new StringBuffer (c.charCodeAt (0)).toString (), Integer.$valueOf (i).toString (), cigarString])));
+}}
+return Clazz.newArray (-1, [operation, range]);
+}, "~S");
+Clazz.defineMethod (c$, "addOperation",
+function (op, range) {
+if (op >= 'a' && op <= 'z') {
+op = String.fromCharCode (op.charCodeAt (0) - 32);
+}if (op != 'M' && op != 'D' && op != 'I') {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_invalid_operation_string"));
+}if (range == 0) {
+return;
+}if (range < 0) {
+throw new Error (jalview.util.MessageManager.getString ("error.invalid_range_string"));
+}var lngth = 0;
+if (this.operation == null) {
+this.operation = Clazz.newCharArray (this._inc_length, '\0');
+this.range = Clazz.newIntArray (this._inc_length, 0);
+}if (this.length + 1 == this.operation.length) {
+var ops = this.operation;
+this.operation = Clazz.newCharArray (this.length + 1 + this._inc_length, '\0');
+System.arraycopy (ops, 0, this.operation, 0, this.length);
+ops = null;
+var rng = this.range;
+this.range = Clazz.newIntArray (this.length + 1 + this._inc_length, 0);
+System.arraycopy (rng, 0, this.range, 0, this.length);
+rng = null;
+}if ((this.length > 0) && (this.operation[this.length - 1] == op)) {
+this.length--;
+} else {
+this.range[this.length] = 0;
+}this.operation[this.length] = op;
+this.range[this.length++] += range;
+}, "~S,~N");
+Clazz.defineMethod (c$, "deleteRange",
+function (start, end) {
+var deleted = 0;
+if (this.length == 0) {
+return deleted;
+}if (start < 0 || start > end) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_delete_range_out_of_bounds"));
+}var cursor = 0;
+var rlength = 1 + end - start;
+var oldlen = this.length;
+var o = 0;
+var editing = false;
+var oldops = this.operation;
+var oldrange = this.range;
+this.length = 0;
+this.operation = null;
+this.range = null;
+this.compact_operations ();
+while (o < oldlen && cursor <= end && rlength > 0) {
+if (oldops[o] == 'D') {
+this.addDeleted (oldrange[o++]);
+continue;
+}var remain = oldrange[o];
+if (!editing) {
+if ((cursor + remain) <= start) {
+this.addOperation (oldops[o], oldrange[o]);
+cursor += oldrange[o++];
+continue;
+}editing = true;
+if (start - cursor > 0) {
+this.addOperation (oldops[o], start - cursor);
+remain -= start - cursor;
+}}if (o < oldlen && editing && rlength > 0 && remain > 0) {
+switch (oldops[o]) {
+case 'M':
+if (rlength > remain) {
+this.addDeleted (remain);
+deleted += remain;
+} else {
+deleted += rlength;
+this.addDeleted (rlength);
+if (remain - rlength > 0) {
+this.addOperation ('M', remain - rlength);
+}rlength = 0;
+remain = 0;
+}break;
+case 'I':
+if (remain - rlength > 0) {
+this.addInsertion (remain - rlength);
+rlength = 0;
+}break;
+case 'D':
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error"));
+default:
+throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_unknown_operation", Clazz.newArray (-1, [ new StringBuffer (oldops[o].charCodeAt (0)).toString ()])));
+}
+rlength -= remain;
+remain = oldrange[++o];
+}}
+while (o < oldlen) {
+this.addOperation (oldops[o], oldrange[o++]);
+}
+return deleted;
+}, "~N,~N");
+Clazz.defineMethod (c$, "hasDeletedRegions",
+function () {
+for (var i = 0; i < this.length; i++) {
+if (this.operation[i] == 'D') {
+return true;
+}}
+return false;
+});
+Clazz.defineMethod (c$, "getDeletedRegions",
+function () {
+if (this.length == 0) {
+return null;
+}var dr = new java.util.Vector ();
+var cursor = 0;
+var vcursor = 0;
+for (var i = 0; i < this.length; i++) {
+switch (this.operation[i]) {
+case 'M':
+cursor += this.range[i];
+case 'I':
+vcursor += this.range[i];
+break;
+case 'D':
+dr.addElement ( Clazz.newIntArray (-1, [vcursor, cursor, this.range[i]]));
+cursor += this.range[i];
+}
+}
+if (dr.size () == 0) {
+return null;
+}var delregions = Clazz.newIntArray (dr.size () * 3, 0);
+for (var i = 0, l = dr.size (); i < l; i++) {
+var reg = dr.elementAt (i);
+delregions[i * 3] = reg[0];
+delregions[i * 3 + 1] = reg[1];
+delregions[i * 3 + 2] = reg[2];
+}
+return delregions;
+});
+Clazz.defineMethod (c$, "getFullWidth",
+function () {
+var w = 0;
+if (this.range != null) {
+for (var i = 0; i < this.length; i++) {
+w += this.range[i];
+}
+}return w;
+});
+Clazz.defineMethod (c$, "getWidth",
+function () {
+var w = 0;
+if (this.range != null) {
+for (var i = 0; i < this.length; i++) {
+if (this.operation[i] == 'M' || this.operation[i] == 'I') {
+w += this.range[i];
+}}
+}return w;
+});
+Clazz.defineMethod (c$, "addInsertion",
+function (range) {
+this.addOperation ('I', range);
+}, "~N");
+Clazz.defineMethod (c$, "addDeleted",
+function (range) {
+this.addOperation ('D', range);
+}, "~N");
+Clazz.defineMethod (c$, "getCigarstring",
+function () {
+var cigarString = new StringBuffer ();
+for (var i = 0; i < this.length; i++) {
+cigarString.append ("" + this.range[i]);
+cigarString.append (this.operation[i]);
+}
+return cigarString.toString ();
+});
+Clazz.defineStatics (c$,
+"D", 'D',
+"I", 'I',
+"M", 'M',
+"_case_shift", String.fromCharCode (32));
+});
diff --git a/bin/jalview/datamodel/CigarCigar.js b/bin/jalview/datamodel/CigarCigar.js
index 12f3e39..9448de4 100644
--- a/bin/jalview/datamodel/CigarCigar.js
+++ b/bin/jalview/datamodel/CigarCigar.js
@@ -1,22 +1,22 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.CigarSimple"], "jalview.datamodel.CigarCigar", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.refCigar = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "CigarCigar", jalview.datamodel.CigarSimple);
-Clazz.makeConstructor (c$,
-function (cigar) {
-Clazz.superConstructor (this, jalview.datamodel.CigarCigar);
-this.refCigar = cigar;
-}, "jalview.datamodel.SeqCigar");
-Clazz.overrideMethod (c$, "getSequenceString",
-function (GapChar) {
-if (this.length == 0) {
-return "";
-}var refString = this.refCigar.getSequenceString (GapChar);
-if (refString != null) {
-return (this.length == 0) ? "" : this.getSequenceAndDeletions (refString, GapChar)[0];
-} else {
-return null;
-}}, "~S");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.CigarSimple"], "jalview.datamodel.CigarCigar", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.refCigar = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "CigarCigar", jalview.datamodel.CigarSimple);
+Clazz.makeConstructor (c$,
+function (cigar) {
+Clazz.superConstructor (this, jalview.datamodel.CigarCigar);
+this.refCigar = cigar;
+}, "jalview.datamodel.SeqCigar");
+Clazz.overrideMethod (c$, "getSequenceString",
+function (GapChar) {
+if (this.length == 0) {
+return "";
+}var refString = this.refCigar.getSequenceString (GapChar);
+if (refString != null) {
+return (this.length == 0) ? "" : this.getSequenceAndDeletions (refString, GapChar)[0];
+} else {
+return null;
+}}, "~S");
+});
diff --git a/bin/jalview/datamodel/CigarSimple.js b/bin/jalview/datamodel/CigarSimple.js
index 776f62a..1f9da1c 100644
--- a/bin/jalview/datamodel/CigarSimple.js
+++ b/bin/jalview/datamodel/CigarSimple.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.CigarBase"], "jalview.datamodel.CigarSimple", null, function () {
-c$ = Clazz.declareType (jalview.datamodel, "CigarSimple", jalview.datamodel.CigarBase);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.CigarBase"], "jalview.datamodel.CigarSimple", null, function () {
+c$ = Clazz.declareType (jalview.datamodel, "CigarSimple", jalview.datamodel.CigarBase);
+});
diff --git a/bin/jalview/datamodel/ColumnSelection.class b/bin/jalview/datamodel/ColumnSelection.class
index c770c96..e80a262 100644
Binary files a/bin/jalview/datamodel/ColumnSelection.class and b/bin/jalview/datamodel/ColumnSelection.class differ
diff --git a/bin/jalview/datamodel/ColumnSelection.js b/bin/jalview/datamodel/ColumnSelection.js
index 6cab54c..b9e3e99 100644
--- a/bin/jalview/datamodel/ColumnSelection.js
+++ b/bin/jalview/datamodel/ColumnSelection.js
@@ -1,682 +1,682 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.util.Vector"], "jalview.datamodel.ColumnSelection", ["jalview.util.ShiftList", "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", "java.lang.StringBuffer", "java.util.ArrayList", "$.Collections"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.selected = null;
-this.hiddenColumns = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "ColumnSelection");
-Clazz.prepareFields (c$, function () {
-this.selected = new java.util.Vector ();
-});
-Clazz.defineMethod (c$, "addElement",
-function (col) {
-var column = new Integer (col);
-if (!this.selected.contains (column)) {
-this.selected.addElement (column);
-}}, "~N");
-Clazz.defineMethod (c$, "clear",
-function () {
-this.selected.removeAllElements ();
-});
-Clazz.defineMethod (c$, "removeElement",
-function (col) {
-var colInt = new Integer (col);
-if (this.selected.contains (colInt)) {
-this.selected.removeElement (colInt);
-}}, "~N");
-Clazz.defineMethod (c$, "removeElements",
-function (start, end) {
-var colInt;
-for (var i = start; i < end; i++) {
-colInt = new Integer (i);
-if (this.selected.contains (colInt)) {
-this.selected.removeElement (colInt);
-}}
-}, "~N,~N");
-Clazz.defineMethod (c$, "getSelected",
-function () {
-return this.selected;
-});
-Clazz.defineMethod (c$, "contains",
-function (col) {
-return this.selected.contains ( new Integer (col));
-}, "~N");
-Clazz.defineMethod (c$, "columnAt",
-function (i) {
-return this.selected.elementAt (i).intValue ();
-}, "~N");
-Clazz.defineMethod (c$, "size",
-function () {
-return this.selected.size ();
-});
-Clazz.defineMethod (c$, "getMax",
-function () {
-var max = -1;
-for (var i = 0; i < this.selected.size (); i++) {
-if (this.columnAt (i) > max) {
-max = this.columnAt (i);
-}}
-return max;
-});
-Clazz.defineMethod (c$, "getMin",
-function () {
-var min = 1000000000;
-for (var i = 0; i < this.selected.size (); i++) {
-if (this.columnAt (i) < min) {
-min = this.columnAt (i);
-}}
-return min;
-});
-Clazz.defineMethod (c$, "compensateForEdit",
-function (start, change) {
-var deletedHiddenColumns = null;
-for (var i = 0; i < this.size (); i++) {
-var temp = this.columnAt (i);
-if (temp >= start) {
-this.selected.setElementAt ( new Integer (temp - change), i);
-}}
-if (this.hiddenColumns != null) {
-deletedHiddenColumns = new java.util.ArrayList ();
-var hSize = this.hiddenColumns.size ();
-for (var i = 0; i < hSize; i++) {
-var region = this.hiddenColumns.elementAt (i);
-if (region[0] > start && start + change > region[1]) {
-deletedHiddenColumns.add (region);
-this.hiddenColumns.removeElementAt (i);
-i--;
-hSize--;
-continue;
-}if (region[0] > start) {
-region[0] -= change;
-region[1] -= change;
-}if (region[0] < 0) {
-region[0] = 0;
-}}
-this.revealHiddenColumns (0);
-}return deletedHiddenColumns;
-}, "~N,~N");
-Clazz.defineMethod (c$, "compensateForDelEdits",
-($fz = function (start, change) {
-for (var i = 0; i < this.size (); i++) {
-var temp = this.columnAt (i);
-if (temp >= start) {
-this.selected.setElementAt ( new Integer (temp - change), i);
-}}
-if (this.hiddenColumns != null) {
-for (var i = 0; i < this.hiddenColumns.size (); i++) {
-var region = this.hiddenColumns.elementAt (i);
-if (region[0] >= start) {
-region[0] -= change;
-}if (region[1] >= start) {
-region[1] -= change;
-}if (region[1] < region[0]) {
-this.hiddenColumns.removeElementAt (i--);
-}if (region[0] < 0) {
-region[0] = 0;
-}if (region[1] < 0) {
-region[1] = 0;
-}}
-}}, $fz.isPrivate = true, $fz), "~N,~N");
-Clazz.defineMethod (c$, "compensateForEdits",
-function (shiftrecord) {
-if (shiftrecord != null) {
-var shifts = shiftrecord.getShifts ();
-if (shifts != null && shifts.size () > 0) {
-var shifted = 0;
-for (var i = 0, j = shifts.size (); i < j; i++) {
-var sh = shifts.get (i);
-this.compensateForDelEdits (shifted + sh[0], sh[1]);
-shifted -= sh[1];
-}
-}return shiftrecord.getInverse ();
-}return null;
-}, "jalview.util.ShiftList");
-Clazz.defineMethod (c$, "pruneIntervalVector",
-($fz = function (shifts, intervals) {
-var pruned = false;
-var i = 0;
-var j = intervals.size () - 1;
-var s = 0;
-var t = shifts.size () - 1;
-var hr = intervals.elementAt (i);
-var sr = shifts.get (s);
-while (i <= j && s <= t) {
-var trailinghn = hr[1] >= sr[0];
-if (!trailinghn) {
-if (i < j) {
-hr = intervals.elementAt (++i);
-} else {
-i++;
-}continue;
-}var endshift = sr[0] + sr[1];
-if (endshift < hr[0] || endshift < sr[0]) {
-if (s < t) {
-sr = shifts.get (++s);
-} else {
-s++;
-}continue;
-}var leadinghn = hr[0] >= sr[0];
-var leadinghc = hr[0] < endshift;
-var trailinghc = hr[1] < endshift;
-if (leadinghn) {
-if (trailinghc) {
-intervals.removeElementAt (i);
-pruned = true;
-j--;
-if (i <= j) {
-hr = intervals.elementAt (i);
-}continue;
-}if (leadinghc) {
-hr[0] = endshift;
-leadinghn = !leadinghn;
-pruned = true;
-}}if (!leadinghn) {
-if (trailinghc) {
-if (trailinghn) {
-hr[1] = sr[0] - 1;
-pruned = true;
-}} else {
-if (s < t) {
-sr = shifts.get (++s);
-} else {
-s++;
-}continue;
-}}}
-return pruned;
-}, $fz.isPrivate = true, $fz), "java.util.List,java.util.Vector");
-Clazz.defineMethod (c$, "pruneColumnList",
-($fz = function (shifts, list) {
-var s = 0;
-var t = shifts.size ();
-var sr = shifts.get (s++);
-var pruned = false;
-var i = 0;
-var j = list.size ();
-while (i < j && s <= t) {
-var c = list.elementAt (i++).intValue ();
-if (sr[0] <= c) {
-if (sr[1] + sr[0] >= c) {
-list.removeElementAt (--i);
-j--;
-} else {
-if (s < t) {
-sr = shifts.get (s);
-}s++;
-}}}
-return pruned;
-}, $fz.isPrivate = true, $fz), "java.util.List,java.util.Vector");
-Clazz.defineMethod (c$, "pruneDeletions",
-function (deletions) {
-if (deletions != null) {
-var shifts = deletions.getShifts ();
-if (shifts != null && shifts.size () > 0) {
-if (this.hiddenColumns != null) {
-this.pruneIntervalVector (shifts, this.hiddenColumns);
-if (this.hiddenColumns != null && this.hiddenColumns.size () == 0) {
-this.hiddenColumns = null;
-}}if (this.selected != null && this.selected.size () > 0) {
-this.pruneColumnList (shifts, this.selected);
-if (this.selected != null && this.selected.size () == 0) {
-this.selected = null;
-}}this.compensateForEdits (deletions);
-}}}, "jalview.util.ShiftList");
-Clazz.defineMethod (c$, "getHiddenColumns",
-function () {
-return this.hiddenColumns == null ? java.util.Collections.emptyList () : this.hiddenColumns;
-});
-Clazz.defineMethod (c$, "adjustForHiddenColumns",
-function (column) {
-var result = column;
-if (this.hiddenColumns != null) {
-for (var i = 0; i < this.hiddenColumns.size (); i++) {
-var region = this.hiddenColumns.elementAt (i);
-if (result >= region[0]) {
-result += region[1] - region[0] + 1;
-}}
-}return result;
-}, "~N");
-Clazz.defineMethod (c$, "findColumnPosition",
-function (hiddenColumn) {
-var result = hiddenColumn;
-if (this.hiddenColumns != null) {
-var index = 0;
-var region;
-do {
-region = this.hiddenColumns.elementAt (index++);
-if (hiddenColumn > region[1]) {
-result -= region[1] + 1 - region[0];
-}} while ((hiddenColumn > region[1]) && (index < this.hiddenColumns.size ()));
-if (hiddenColumn > region[0] && hiddenColumn < region[1]) {
-return region[0] + hiddenColumn - result;
-}}return result;
-}, "~N");
-Clazz.defineMethod (c$, "findHiddenRegionPosition",
-function (hiddenRegion) {
-var result = 0;
-if (this.hiddenColumns != null) {
-var index = 0;
-var gaps = 0;
-do {
-var region = this.hiddenColumns.elementAt (index);
-if (hiddenRegion == 0) {
-return region[0];
-}gaps += region[1] + 1 - region[0];
-result = region[1] + 1;
-index++;
-} while (index < hiddenRegion + 1);
-result -= gaps;
-}return result;
-}, "~N");
-Clazz.defineMethod (c$, "getHiddenBoundaryRight",
-function (alPos) {
-if (this.hiddenColumns != null) {
-var index = 0;
-do {
-var region = this.hiddenColumns.elementAt (index);
-if (alPos < region[0]) {
-return region[0];
-}index++;
-} while (index < this.hiddenColumns.size ());
-}return alPos;
-}, "~N");
-Clazz.defineMethod (c$, "getHiddenBoundaryLeft",
-function (alPos) {
-if (this.hiddenColumns != null) {
-var index = this.hiddenColumns.size () - 1;
-do {
-var region = this.hiddenColumns.elementAt (index);
-if (alPos > region[1]) {
-return region[1];
-}index--;
-} while (index > -1);
-}return alPos;
-}, "~N");
-Clazz.defineMethod (c$, "hideSelectedColumns",
-function () {
-while (this.size () > 0) {
-var column = this.getSelected ().firstElement ().intValue ();
-this.hideColumns (column);
-}
-});
-Clazz.defineMethod (c$, "hideColumns",
-function (start, end) {
-if (this.hiddenColumns == null) {
-this.hiddenColumns = new java.util.Vector ();
-}var added = false;
-var overlap = false;
-for (var i = 0; i < this.hiddenColumns.size (); i++) {
-var region = this.hiddenColumns.elementAt (i);
-if (start <= region[1] && end >= region[0]) {
-this.hiddenColumns.removeElementAt (i);
-overlap = true;
-break;
-} else if (end < region[0] && start < region[0]) {
-this.hiddenColumns.insertElementAt ( Clazz.newIntArray (-1, [start, end]), i);
-added = true;
-break;
-}}
-if (overlap) {
-this.hideColumns (start, end);
-} else if (!added) {
-this.hiddenColumns.addElement ( Clazz.newIntArray (-1, [start, end]));
-}}, "~N,~N");
-Clazz.defineMethod (c$, "hideColumns",
-function (col) {
-var min = col;
-var max = col + 1;
-while (this.contains (min)) {
-this.removeElement (min);
-min--;
-}
-while (this.contains (max)) {
-this.removeElement (max);
-max++;
-}
-min++;
-max--;
-if (min > max) {
-min = max;
-}this.hideColumns (min, max);
-}, "~N");
-Clazz.defineMethod (c$, "revealAllHiddenColumns",
-function () {
-if (this.hiddenColumns != null) {
-for (var i = 0; i < this.hiddenColumns.size (); i++) {
-var region = this.hiddenColumns.elementAt (i);
-for (var j = region[0]; j < region[1] + 1; j++) {
-this.addElement (j);
-}
-}
-}this.hiddenColumns = null;
-});
-Clazz.defineMethod (c$, "revealHiddenColumns",
-function (res) {
-for (var i = 0; i < this.hiddenColumns.size (); i++) {
-var region = this.hiddenColumns.elementAt (i);
-if (res == region[0]) {
-for (var j = region[0]; j < region[1] + 1; j++) {
-this.addElement (j);
-}
-this.hiddenColumns.removeElement (region);
-break;
-}}
-if (this.hiddenColumns.size () == 0) {
-this.hiddenColumns = null;
-}}, "~N");
-Clazz.defineMethod (c$, "isVisible",
-function (column) {
-if (this.hiddenColumns != null) {
-for (var i = 0; i < this.hiddenColumns.size (); i++) {
-var region = this.hiddenColumns.elementAt (i);
-if (column >= region[0] && column <= region[1]) {
-return false;
-}}
-}return true;
-}, "~N");
-Clazz.makeConstructor (c$,
-function (copy) {
-if (copy != null) {
-if (copy.selected != null) {
-this.selected = new java.util.Vector ();
-for (var i = 0, j = copy.selected.size (); i < j; i++) {
-this.selected.addElement (copy.selected.elementAt (i));
-}
-}if (copy.hiddenColumns != null) {
-this.hiddenColumns = new java.util.Vector (copy.hiddenColumns.size ());
-for (var i = 0, j = copy.hiddenColumns.size (); i < j; i++) {
-var rh;
-var cp;
-rh = copy.hiddenColumns.elementAt (i);
-if (rh != null) {
-cp = Clazz.newIntArray (rh.length, 0);
-System.arraycopy (rh, 0, cp, 0, rh.length);
-this.hiddenColumns.addElement (cp);
-}}
-}}}, "jalview.datamodel.ColumnSelection");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "getVisibleSequenceStrings",
-function (start, end, seqs) {
-var i;
-var iSize = seqs.length;
-var selection = new Array (iSize);
-if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
-for (i = 0; i < iSize; i++) {
-var visibleSeq = new StringBuffer ();
-var regions = this.getHiddenColumns ();
-var blockStart = start;
-var blockEnd = end;
-var region;
-var hideStart;
-var hideEnd;
-for (var j = 0; j < regions.size (); j++) {
-region = regions.get (j);
-hideStart = region[0];
-hideEnd = region[1];
-if (hideStart < start) {
-continue;
-}blockStart = Math.min (blockStart, hideEnd + 1);
-blockEnd = Math.min (blockEnd, hideStart);
-if (blockStart > blockEnd) {
-break;
-}visibleSeq.append (seqs[i].getSequence (blockStart, blockEnd));
-blockStart = hideEnd + 1;
-blockEnd = end;
-}
-if (end > blockStart) {
-visibleSeq.append (seqs[i].getSequence (blockStart, end));
-}selection[i] = visibleSeq.toString ();
-}
-} else {
-for (i = 0; i < iSize; i++) {
-selection[i] = seqs[i].getSequenceAsString (start, end);
-}
-}return selection;
-}, "~N,~N,~A");
-Clazz.defineMethod (c$, "getVisibleContigs",
-function (start, end) {
-if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
-var visiblecontigs = new java.util.ArrayList ();
-var regions = this.getHiddenColumns ();
-var vstart = start;
-var region;
-var hideStart;
-var hideEnd;
-for (var j = 0; vstart < end && j < regions.size (); j++) {
-region = regions.get (j);
-hideStart = region[0];
-hideEnd = region[1];
-if (hideEnd < vstart) {
-continue;
-}if (hideStart > vstart) {
-visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, hideStart - 1]));
-}vstart = hideEnd + 1;
-}
-if (vstart < end) {
-visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, end - 1]));
-}var vcontigs = Clazz.newIntArray (visiblecontigs.size () * 2, 0);
-for (var i = 0, j = visiblecontigs.size (); i < j; i++) {
-var vc = visiblecontigs.get (i);
-visiblecontigs.set (i, null);
-vcontigs[i * 2] = vc[0];
-vcontigs[i * 2 + 1] = vc[1];
-}
-visiblecontigs.clear ();
-return vcontigs;
-} else {
-return Clazz.newIntArray (-1, [start, end - 1]);
-}}, "~N,~N");
-Clazz.defineMethod (c$, "makeVisibleAnnotation",
-function (alignmentAnnotation) {
-this.makeVisibleAnnotation (-1, -1, alignmentAnnotation);
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "makeVisibleAnnotation",
-function (start, end, alignmentAnnotation) {
-if (alignmentAnnotation.annotations == null) {
-return;
-}if (start == end && end == -1) {
-start = 0;
-end = alignmentAnnotation.annotations.length;
-}if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
-var annels = new java.util.Vector ();
-var els = null;
-var regions = this.getHiddenColumns ();
-var blockStart = start;
-var blockEnd = end;
-var region;
-var hideStart;
-var hideEnd;
-var w = 0;
-for (var j = 0; j < regions.size (); j++) {
-region = regions.get (j);
-hideStart = region[0];
-hideEnd = region[1];
-if (hideStart < start) {
-continue;
-}blockStart = Math.min (blockStart, hideEnd + 1);
-blockEnd = Math.min (blockEnd, hideStart);
-if (blockStart > blockEnd) {
-break;
-}annels.addElement (els = new Array (blockEnd - blockStart));
-System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);
-w += els.length;
-blockStart = hideEnd + 1;
-blockEnd = end;
-}
-if (end > blockStart) {
-annels.addElement (els = new Array (end - blockStart + 1));
-if ((els.length + blockStart) <= alignmentAnnotation.annotations.length) {
-System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);
-} else {
-System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, (alignmentAnnotation.annotations.length - blockStart));
-}w += els.length;
-}if (w == 0) {
-return;
-}alignmentAnnotation.annotations = new Array (w);
-w = 0;
-for (var chnk, $chnk = annels.iterator (); $chnk.hasNext () && ((chnk = $chnk.next ()) || true);) {
-System.arraycopy (chnk, 0, alignmentAnnotation.annotations, w, chnk.length);
-w += chnk.length;
-}
-} else {
-alignmentAnnotation.restrict (start, end);
-}}, "~N,~N,jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "invertColumnSelection",
-function (first, width) {
-var hasHidden = this.hiddenColumns != null && this.hiddenColumns.size () > 0;
-for (var i = first; i < width; i++) {
-if (this.contains (i)) {
-this.removeElement (i);
-} else {
-if (!hasHidden || this.isVisible (i)) {
-this.addElement (i);
-}}}
-}, "~N,~N");
-Clazz.defineMethod (c$, "addElementsFrom",
-function (colsel) {
-if (colsel != null && colsel.size () > 0) {
-for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {
-if (this.hiddenColumns != null && this.isVisible (col.intValue ())) {
-if (!this.selected.contains (col)) {
-this.selected.addElement (col);
-}}}
-}}, "jalview.datamodel.ColumnSelection");
-Clazz.defineMethod (c$, "setElementsFrom",
-function (colsel) {
-this.selected = new java.util.Vector ();
-if (colsel.selected != null && colsel.selected.size () > 0) {
-if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
-this.addElementsFrom (colsel);
-} else {
-for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {
-this.addElement ((col).intValue ());
-}
-}}}, "jalview.datamodel.ColumnSelection");
-c$.propagateInsertions = Clazz.defineMethod (c$, "propagateInsertions",
-function (profileseq, al, input) {
-var profsqpos = 0;
-var gc = al.getGapCharacter ();
-var alandcolsel = input.getAlignmentAndColumnSelection (gc);
-var nview = alandcolsel[1];
-var origseq = (alandcolsel[0])[profsqpos];
-nview.propagateInsertions (profileseq, al, origseq);
-return nview;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentView");
-Clazz.defineMethod (c$, "propagateInsertions",
-function (profileseq, al, origseq) {
-var gc = al.getGapCharacter ();
-this.pruneDeletions (jalview.util.ShiftList.parseMap (origseq.gapMap ()));
-var viscontigs = this.getVisibleContigs (0, profileseq.getLength ());
-var spos = 0;
-var offset = 0;
-for (var v = 0; v < viscontigs.length; v += 2) {
-if (viscontigs[v] > spos) {
-var sb = new StringBuffer ();
-for (var s = 0, ns = viscontigs[v] - spos; s < ns; s++) {
-sb.append (gc);
-}
-for (var s = 0, ns = al.getHeight (); s < ns; s++) {
-var sqobj = al.getSequenceAt (s);
-if (sqobj !== profileseq) {
-var sq = al.getSequenceAt (s).getSequenceAsString ();
-if (sq.length <= spos + offset) {
-var diff = spos + offset - sq.length - 1;
-if (diff > 0) {
-sq = sq + sb;
-while ((diff = spos + offset - sq.length - 1) > 0) {
-if (diff >= sb.length ()) {
-sq += sb.toString ();
-} else {
-var buf = Clazz.newCharArray (diff, '\0');
-sb.getChars (0, diff, buf, 0);
-sq += buf.toString ();
-}}
-}sq += sb.toString ();
-} else {
-al.getSequenceAt (s).setSequence (sq.substring (0, spos + offset) + sb.toString () + sq.substring (spos + offset));
-}}}
-}spos = viscontigs[v + 1] + 1;
-}
-if ((offset + spos) < profileseq.getLength ()) {
-var sb = new StringBuffer ();
-for (var s = 0, ns = profileseq.getLength () - spos - offset; s < ns; s++) {
-sb.append (gc);
-}
-for (var s = 0, ns = al.getHeight (); s < ns; s++) {
-var sqobj = al.getSequenceAt (s);
-if (sqobj === profileseq) {
-continue;
-}var sq = sqobj.getSequenceAsString ();
-var diff = origseq.getLength () - sq.length;
-while (diff > 0) {
-if (diff >= sb.length ()) {
-sq += sb.toString ();
-} else {
-var buf = Clazz.newCharArray (diff, '\0');
-sb.getChars (0, diff, buf, 0);
-sq += buf.toString ();
-}diff = origseq.getLength () - sq.length;
-}
-}
-}}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "hasSelectedColumns",
-function () {
-return (this.selected != null && this.selected.size () > 0);
-});
-Clazz.defineMethod (c$, "hasHiddenColumns",
-function () {
-return this.hiddenColumns != null && this.hiddenColumns.size () > 0;
-});
-Clazz.defineMethod (c$, "hasManyHiddenColumns",
-function () {
-return this.hiddenColumns != null && this.hiddenColumns.size () > 1;
-});
-Clazz.defineMethod (c$, "hideInsertionsFor",
-function (sr) {
-var inserts = sr.getInsertions ();
-for (var r, $r = inserts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
-this.hideColumns (r[0], r[1]);
-}
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "filterAnnotations",
-function (annotations, filterParams) {
-this.revealAllHiddenColumns ();
-this.clear ();
-var count = 0;
-do {
-if (annotations[count] != null) {
-var itemMatched = false;
-if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD && annotations[count].value >= filterParams.getThresholdValue ()) {
-itemMatched = true;
-}if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD && annotations[count].value <= filterParams.getThresholdValue ()) {
-itemMatched = true;
-}if (filterParams.isFilterAlphaHelix () && annotations[count].secondaryStructure == 'H') {
-itemMatched = true;
-}if (filterParams.isFilterBetaSheet () && annotations[count].secondaryStructure == 'E') {
-itemMatched = true;
-}if (filterParams.isFilterTurn () && annotations[count].secondaryStructure == 'S') {
-itemMatched = true;
-}var regexSearchString = filterParams.getRegexString ();
-if (regexSearchString != null && !filterParams.getRegexSearchFields ().isEmpty ()) {
-var fields = filterParams.getRegexSearchFields ();
-try {
-if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING) && annotations[count].displayCharacter.matches (regexSearchString)) {
-itemMatched = true;
-}} catch (pse) {
-if (Clazz.exceptionOf (pse, java.util.regex.PatternSyntaxException)) {
-if (annotations[count].displayCharacter.equals (regexSearchString)) {
-itemMatched = true;
-}} else {
-throw pse;
-}
-}
-if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION) && annotations[count].description != null && annotations[count].description.matches (regexSearchString)) {
-itemMatched = true;
-}}if (itemMatched) {
-this.addElement (count);
-}}count++;
-} while (count < annotations.length);
-return false;
-}, "~A,jalview.viewmodel.annotationfilter.AnnotationFilterParameter");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.util.Vector"], "jalview.datamodel.ColumnSelection", ["jalview.util.ShiftList", "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", "java.lang.StringBuffer", "java.util.ArrayList", "$.Collections"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.selected = null;
+this.hiddenColumns = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "ColumnSelection");
+Clazz.prepareFields (c$, function () {
+this.selected = new java.util.Vector ();
+});
+Clazz.defineMethod (c$, "addElement",
+function (col) {
+var column = new Integer (col);
+if (!this.selected.contains (column)) {
+this.selected.addElement (column);
+}}, "~N");
+Clazz.defineMethod (c$, "clear",
+function () {
+this.selected.removeAllElements ();
+});
+Clazz.defineMethod (c$, "removeElement",
+function (col) {
+var colInt = new Integer (col);
+if (this.selected.contains (colInt)) {
+this.selected.removeElement (colInt);
+}}, "~N");
+Clazz.defineMethod (c$, "removeElements",
+function (start, end) {
+var colInt;
+for (var i = start; i < end; i++) {
+colInt = new Integer (i);
+if (this.selected.contains (colInt)) {
+this.selected.removeElement (colInt);
+}}
+}, "~N,~N");
+Clazz.defineMethod (c$, "getSelected",
+function () {
+return this.selected;
+});
+Clazz.defineMethod (c$, "contains",
+function (col) {
+return this.selected.contains ( new Integer (col));
+}, "~N");
+Clazz.defineMethod (c$, "columnAt",
+function (i) {
+return this.selected.elementAt (i).intValue ();
+}, "~N");
+Clazz.defineMethod (c$, "size",
+function () {
+return this.selected.size ();
+});
+Clazz.defineMethod (c$, "getMax",
+function () {
+var max = -1;
+for (var i = 0; i < this.selected.size (); i++) {
+if (this.columnAt (i) > max) {
+max = this.columnAt (i);
+}}
+return max;
+});
+Clazz.defineMethod (c$, "getMin",
+function () {
+var min = 1000000000;
+for (var i = 0; i < this.selected.size (); i++) {
+if (this.columnAt (i) < min) {
+min = this.columnAt (i);
+}}
+return min;
+});
+Clazz.defineMethod (c$, "compensateForEdit",
+function (start, change) {
+var deletedHiddenColumns = null;
+for (var i = 0; i < this.size (); i++) {
+var temp = this.columnAt (i);
+if (temp >= start) {
+this.selected.setElementAt ( new Integer (temp - change), i);
+}}
+if (this.hiddenColumns != null) {
+deletedHiddenColumns = new java.util.ArrayList ();
+var hSize = this.hiddenColumns.size ();
+for (var i = 0; i < hSize; i++) {
+var region = this.hiddenColumns.elementAt (i);
+if (region[0] > start && start + change > region[1]) {
+deletedHiddenColumns.add (region);
+this.hiddenColumns.removeElementAt (i);
+i--;
+hSize--;
+continue;
+}if (region[0] > start) {
+region[0] -= change;
+region[1] -= change;
+}if (region[0] < 0) {
+region[0] = 0;
+}}
+this.revealHiddenColumns (0);
+}return deletedHiddenColumns;
+}, "~N,~N");
+Clazz.defineMethod (c$, "compensateForDelEdits",
+($fz = function (start, change) {
+for (var i = 0; i < this.size (); i++) {
+var temp = this.columnAt (i);
+if (temp >= start) {
+this.selected.setElementAt ( new Integer (temp - change), i);
+}}
+if (this.hiddenColumns != null) {
+for (var i = 0; i < this.hiddenColumns.size (); i++) {
+var region = this.hiddenColumns.elementAt (i);
+if (region[0] >= start) {
+region[0] -= change;
+}if (region[1] >= start) {
+region[1] -= change;
+}if (region[1] < region[0]) {
+this.hiddenColumns.removeElementAt (i--);
+}if (region[0] < 0) {
+region[0] = 0;
+}if (region[1] < 0) {
+region[1] = 0;
+}}
+}}, $fz.isPrivate = true, $fz), "~N,~N");
+Clazz.defineMethod (c$, "compensateForEdits",
+function (shiftrecord) {
+if (shiftrecord != null) {
+var shifts = shiftrecord.getShifts ();
+if (shifts != null && shifts.size () > 0) {
+var shifted = 0;
+for (var i = 0, j = shifts.size (); i < j; i++) {
+var sh = shifts.get (i);
+this.compensateForDelEdits (shifted + sh[0], sh[1]);
+shifted -= sh[1];
+}
+}return shiftrecord.getInverse ();
+}return null;
+}, "jalview.util.ShiftList");
+Clazz.defineMethod (c$, "pruneIntervalVector",
+($fz = function (shifts, intervals) {
+var pruned = false;
+var i = 0;
+var j = intervals.size () - 1;
+var s = 0;
+var t = shifts.size () - 1;
+var hr = intervals.elementAt (i);
+var sr = shifts.get (s);
+while (i <= j && s <= t) {
+var trailinghn = hr[1] >= sr[0];
+if (!trailinghn) {
+if (i < j) {
+hr = intervals.elementAt (++i);
+} else {
+i++;
+}continue;
+}var endshift = sr[0] + sr[1];
+if (endshift < hr[0] || endshift < sr[0]) {
+if (s < t) {
+sr = shifts.get (++s);
+} else {
+s++;
+}continue;
+}var leadinghn = hr[0] >= sr[0];
+var leadinghc = hr[0] < endshift;
+var trailinghc = hr[1] < endshift;
+if (leadinghn) {
+if (trailinghc) {
+intervals.removeElementAt (i);
+pruned = true;
+j--;
+if (i <= j) {
+hr = intervals.elementAt (i);
+}continue;
+}if (leadinghc) {
+hr[0] = endshift;
+leadinghn = !leadinghn;
+pruned = true;
+}}if (!leadinghn) {
+if (trailinghc) {
+if (trailinghn) {
+hr[1] = sr[0] - 1;
+pruned = true;
+}} else {
+if (s < t) {
+sr = shifts.get (++s);
+} else {
+s++;
+}continue;
+}}}
+return pruned;
+}, $fz.isPrivate = true, $fz), "java.util.List,java.util.Vector");
+Clazz.defineMethod (c$, "pruneColumnList",
+($fz = function (shifts, list) {
+var s = 0;
+var t = shifts.size ();
+var sr = shifts.get (s++);
+var pruned = false;
+var i = 0;
+var j = list.size ();
+while (i < j && s <= t) {
+var c = list.elementAt (i++).intValue ();
+if (sr[0] <= c) {
+if (sr[1] + sr[0] >= c) {
+list.removeElementAt (--i);
+j--;
+} else {
+if (s < t) {
+sr = shifts.get (s);
+}s++;
+}}}
+return pruned;
+}, $fz.isPrivate = true, $fz), "java.util.List,java.util.Vector");
+Clazz.defineMethod (c$, "pruneDeletions",
+function (deletions) {
+if (deletions != null) {
+var shifts = deletions.getShifts ();
+if (shifts != null && shifts.size () > 0) {
+if (this.hiddenColumns != null) {
+this.pruneIntervalVector (shifts, this.hiddenColumns);
+if (this.hiddenColumns != null && this.hiddenColumns.size () == 0) {
+this.hiddenColumns = null;
+}}if (this.selected != null && this.selected.size () > 0) {
+this.pruneColumnList (shifts, this.selected);
+if (this.selected != null && this.selected.size () == 0) {
+this.selected = null;
+}}this.compensateForEdits (deletions);
+}}}, "jalview.util.ShiftList");
+Clazz.defineMethod (c$, "getHiddenColumns",
+function () {
+return this.hiddenColumns == null ? java.util.Collections.emptyList () : this.hiddenColumns;
+});
+Clazz.defineMethod (c$, "adjustForHiddenColumns",
+function (column) {
+var result = column;
+if (this.hiddenColumns != null) {
+for (var i = 0; i < this.hiddenColumns.size (); i++) {
+var region = this.hiddenColumns.elementAt (i);
+if (result >= region[0]) {
+result += region[1] - region[0] + 1;
+}}
+}return result;
+}, "~N");
+Clazz.defineMethod (c$, "findColumnPosition",
+function (hiddenColumn) {
+var result = hiddenColumn;
+if (this.hiddenColumns != null) {
+var index = 0;
+var region;
+do {
+region = this.hiddenColumns.elementAt (index++);
+if (hiddenColumn > region[1]) {
+result -= region[1] + 1 - region[0];
+}} while ((hiddenColumn > region[1]) && (index < this.hiddenColumns.size ()));
+if (hiddenColumn > region[0] && hiddenColumn < region[1]) {
+return region[0] + hiddenColumn - result;
+}}return result;
+}, "~N");
+Clazz.defineMethod (c$, "findHiddenRegionPosition",
+function (hiddenRegion) {
+var result = 0;
+if (this.hiddenColumns != null) {
+var index = 0;
+var gaps = 0;
+do {
+var region = this.hiddenColumns.elementAt (index);
+if (hiddenRegion == 0) {
+return region[0];
+}gaps += region[1] + 1 - region[0];
+result = region[1] + 1;
+index++;
+} while (index < hiddenRegion + 1);
+result -= gaps;
+}return result;
+}, "~N");
+Clazz.defineMethod (c$, "getHiddenBoundaryRight",
+function (alPos) {
+if (this.hiddenColumns != null) {
+var index = 0;
+do {
+var region = this.hiddenColumns.elementAt (index);
+if (alPos < region[0]) {
+return region[0];
+}index++;
+} while (index < this.hiddenColumns.size ());
+}return alPos;
+}, "~N");
+Clazz.defineMethod (c$, "getHiddenBoundaryLeft",
+function (alPos) {
+if (this.hiddenColumns != null) {
+var index = this.hiddenColumns.size () - 1;
+do {
+var region = this.hiddenColumns.elementAt (index);
+if (alPos > region[1]) {
+return region[1];
+}index--;
+} while (index > -1);
+}return alPos;
+}, "~N");
+Clazz.defineMethod (c$, "hideSelectedColumns",
+function () {
+while (this.size () > 0) {
+var column = this.getSelected ().firstElement ().intValue ();
+this.hideColumns (column);
+}
+});
+Clazz.defineMethod (c$, "hideColumns",
+function (start, end) {
+if (this.hiddenColumns == null) {
+this.hiddenColumns = new java.util.Vector ();
+}var added = false;
+var overlap = false;
+for (var i = 0; i < this.hiddenColumns.size (); i++) {
+var region = this.hiddenColumns.elementAt (i);
+if (start <= region[1] && end >= region[0]) {
+this.hiddenColumns.removeElementAt (i);
+overlap = true;
+break;
+} else if (end < region[0] && start < region[0]) {
+this.hiddenColumns.insertElementAt ( Clazz.newIntArray (-1, [start, end]), i);
+added = true;
+break;
+}}
+if (overlap) {
+this.hideColumns (start, end);
+} else if (!added) {
+this.hiddenColumns.addElement ( Clazz.newIntArray (-1, [start, end]));
+}}, "~N,~N");
+Clazz.defineMethod (c$, "hideColumns",
+function (col) {
+var min = col;
+var max = col + 1;
+while (this.contains (min)) {
+this.removeElement (min);
+min--;
+}
+while (this.contains (max)) {
+this.removeElement (max);
+max++;
+}
+min++;
+max--;
+if (min > max) {
+min = max;
+}this.hideColumns (min, max);
+}, "~N");
+Clazz.defineMethod (c$, "revealAllHiddenColumns",
+function () {
+if (this.hiddenColumns != null) {
+for (var i = 0; i < this.hiddenColumns.size (); i++) {
+var region = this.hiddenColumns.elementAt (i);
+for (var j = region[0]; j < region[1] + 1; j++) {
+this.addElement (j);
+}
+}
+}this.hiddenColumns = null;
+});
+Clazz.defineMethod (c$, "revealHiddenColumns",
+function (res) {
+for (var i = 0; i < this.hiddenColumns.size (); i++) {
+var region = this.hiddenColumns.elementAt (i);
+if (res == region[0]) {
+for (var j = region[0]; j < region[1] + 1; j++) {
+this.addElement (j);
+}
+this.hiddenColumns.removeElement (region);
+break;
+}}
+if (this.hiddenColumns.size () == 0) {
+this.hiddenColumns = null;
+}}, "~N");
+Clazz.defineMethod (c$, "isVisible",
+function (column) {
+if (this.hiddenColumns != null) {
+for (var i = 0; i < this.hiddenColumns.size (); i++) {
+var region = this.hiddenColumns.elementAt (i);
+if (column >= region[0] && column <= region[1]) {
+return false;
+}}
+}return true;
+}, "~N");
+Clazz.makeConstructor (c$,
+function (copy) {
+if (copy != null) {
+if (copy.selected != null) {
+this.selected = new java.util.Vector ();
+for (var i = 0, j = copy.selected.size (); i < j; i++) {
+this.selected.addElement (copy.selected.elementAt (i));
+}
+}if (copy.hiddenColumns != null) {
+this.hiddenColumns = new java.util.Vector (copy.hiddenColumns.size ());
+for (var i = 0, j = copy.hiddenColumns.size (); i < j; i++) {
+var rh;
+var cp;
+rh = copy.hiddenColumns.elementAt (i);
+if (rh != null) {
+cp = Clazz.newIntArray (rh.length, 0);
+System.arraycopy (rh, 0, cp, 0, rh.length);
+this.hiddenColumns.addElement (cp);
+}}
+}}}, "jalview.datamodel.ColumnSelection");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "getVisibleSequenceStrings",
+function (start, end, seqs) {
+var i;
+var iSize = seqs.length;
+var selection = new Array (iSize);
+if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
+for (i = 0; i < iSize; i++) {
+var visibleSeq = new StringBuffer ();
+var regions = this.getHiddenColumns ();
+var blockStart = start;
+var blockEnd = end;
+var region;
+var hideStart;
+var hideEnd;
+for (var j = 0; j < regions.size (); j++) {
+region = regions.get (j);
+hideStart = region[0];
+hideEnd = region[1];
+if (hideStart < start) {
+continue;
+}blockStart = Math.min (blockStart, hideEnd + 1);
+blockEnd = Math.min (blockEnd, hideStart);
+if (blockStart > blockEnd) {
+break;
+}visibleSeq.append (seqs[i].getSequence (blockStart, blockEnd));
+blockStart = hideEnd + 1;
+blockEnd = end;
+}
+if (end > blockStart) {
+visibleSeq.append (seqs[i].getSequence (blockStart, end));
+}selection[i] = visibleSeq.toString ();
+}
+} else {
+for (i = 0; i < iSize; i++) {
+selection[i] = seqs[i].getSequenceAsString (start, end);
+}
+}return selection;
+}, "~N,~N,~A");
+Clazz.defineMethod (c$, "getVisibleContigs",
+function (start, end) {
+if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
+var visiblecontigs = new java.util.ArrayList ();
+var regions = this.getHiddenColumns ();
+var vstart = start;
+var region;
+var hideStart;
+var hideEnd;
+for (var j = 0; vstart < end && j < regions.size (); j++) {
+region = regions.get (j);
+hideStart = region[0];
+hideEnd = region[1];
+if (hideEnd < vstart) {
+continue;
+}if (hideStart > vstart) {
+visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, hideStart - 1]));
+}vstart = hideEnd + 1;
+}
+if (vstart < end) {
+visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, end - 1]));
+}var vcontigs = Clazz.newIntArray (visiblecontigs.size () * 2, 0);
+for (var i = 0, j = visiblecontigs.size (); i < j; i++) {
+var vc = visiblecontigs.get (i);
+visiblecontigs.set (i, null);
+vcontigs[i * 2] = vc[0];
+vcontigs[i * 2 + 1] = vc[1];
+}
+visiblecontigs.clear ();
+return vcontigs;
+} else {
+return Clazz.newIntArray (-1, [start, end - 1]);
+}}, "~N,~N");
+Clazz.defineMethod (c$, "makeVisibleAnnotation",
+function (alignmentAnnotation) {
+this.makeVisibleAnnotation (-1, -1, alignmentAnnotation);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "makeVisibleAnnotation",
+function (start, end, alignmentAnnotation) {
+if (alignmentAnnotation.annotations == null) {
+return;
+}if (start == end && end == -1) {
+start = 0;
+end = alignmentAnnotation.annotations.length;
+}if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
+var annels = new java.util.Vector ();
+var els = null;
+var regions = this.getHiddenColumns ();
+var blockStart = start;
+var blockEnd = end;
+var region;
+var hideStart;
+var hideEnd;
+var w = 0;
+for (var j = 0; j < regions.size (); j++) {
+region = regions.get (j);
+hideStart = region[0];
+hideEnd = region[1];
+if (hideStart < start) {
+continue;
+}blockStart = Math.min (blockStart, hideEnd + 1);
+blockEnd = Math.min (blockEnd, hideStart);
+if (blockStart > blockEnd) {
+break;
+}annels.addElement (els = new Array (blockEnd - blockStart));
+System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);
+w += els.length;
+blockStart = hideEnd + 1;
+blockEnd = end;
+}
+if (end > blockStart) {
+annels.addElement (els = new Array (end - blockStart + 1));
+if ((els.length + blockStart) <= alignmentAnnotation.annotations.length) {
+System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);
+} else {
+System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, (alignmentAnnotation.annotations.length - blockStart));
+}w += els.length;
+}if (w == 0) {
+return;
+}alignmentAnnotation.annotations = new Array (w);
+w = 0;
+for (var chnk, $chnk = annels.iterator (); $chnk.hasNext () && ((chnk = $chnk.next ()) || true);) {
+System.arraycopy (chnk, 0, alignmentAnnotation.annotations, w, chnk.length);
+w += chnk.length;
+}
+} else {
+alignmentAnnotation.restrict (start, end);
+}}, "~N,~N,jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "invertColumnSelection",
+function (first, width) {
+var hasHidden = this.hiddenColumns != null && this.hiddenColumns.size () > 0;
+for (var i = first; i < width; i++) {
+if (this.contains (i)) {
+this.removeElement (i);
+} else {
+if (!hasHidden || this.isVisible (i)) {
+this.addElement (i);
+}}}
+}, "~N,~N");
+Clazz.defineMethod (c$, "addElementsFrom",
+function (colsel) {
+if (colsel != null && colsel.size () > 0) {
+for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {
+if (this.hiddenColumns != null && this.isVisible (col.intValue ())) {
+if (!this.selected.contains (col)) {
+this.selected.addElement (col);
+}}}
+}}, "jalview.datamodel.ColumnSelection");
+Clazz.defineMethod (c$, "setElementsFrom",
+function (colsel) {
+this.selected = new java.util.Vector ();
+if (colsel.selected != null && colsel.selected.size () > 0) {
+if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
+this.addElementsFrom (colsel);
+} else {
+for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {
+this.addElement ((col).intValue ());
+}
+}}}, "jalview.datamodel.ColumnSelection");
+c$.propagateInsertions = Clazz.defineMethod (c$, "propagateInsertions",
+function (profileseq, al, input) {
+var profsqpos = 0;
+var gc = al.getGapCharacter ();
+var alandcolsel = input.getAlignmentAndColumnSelection (gc);
+var nview = alandcolsel[1];
+var origseq = (alandcolsel[0])[profsqpos];
+nview.propagateInsertions (profileseq, al, origseq);
+return nview;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentView");
+Clazz.defineMethod (c$, "propagateInsertions",
+function (profileseq, al, origseq) {
+var gc = al.getGapCharacter ();
+this.pruneDeletions (jalview.util.ShiftList.parseMap (origseq.gapMap ()));
+var viscontigs = this.getVisibleContigs (0, profileseq.getLength ());
+var spos = 0;
+var offset = 0;
+for (var v = 0; v < viscontigs.length; v += 2) {
+if (viscontigs[v] > spos) {
+var sb = new StringBuffer ();
+for (var s = 0, ns = viscontigs[v] - spos; s < ns; s++) {
+sb.append (gc);
+}
+for (var s = 0, ns = al.getHeight (); s < ns; s++) {
+var sqobj = al.getSequenceAt (s);
+if (sqobj !== profileseq) {
+var sq = al.getSequenceAt (s).getSequenceAsString ();
+if (sq.length <= spos + offset) {
+var diff = spos + offset - sq.length - 1;
+if (diff > 0) {
+sq = sq + sb;
+while ((diff = spos + offset - sq.length - 1) > 0) {
+if (diff >= sb.length ()) {
+sq += sb.toString ();
+} else {
+var buf = Clazz.newCharArray (diff, '\0');
+sb.getChars (0, diff, buf, 0);
+sq += buf.toString ();
+}}
+}sq += sb.toString ();
+} else {
+al.getSequenceAt (s).setSequence (sq.substring (0, spos + offset) + sb.toString () + sq.substring (spos + offset));
+}}}
+}spos = viscontigs[v + 1] + 1;
+}
+if ((offset + spos) < profileseq.getLength ()) {
+var sb = new StringBuffer ();
+for (var s = 0, ns = profileseq.getLength () - spos - offset; s < ns; s++) {
+sb.append (gc);
+}
+for (var s = 0, ns = al.getHeight (); s < ns; s++) {
+var sqobj = al.getSequenceAt (s);
+if (sqobj === profileseq) {
+continue;
+}var sq = sqobj.getSequenceAsString ();
+var diff = origseq.getLength () - sq.length;
+while (diff > 0) {
+if (diff >= sb.length ()) {
+sq += sb.toString ();
+} else {
+var buf = Clazz.newCharArray (diff, '\0');
+sb.getChars (0, diff, buf, 0);
+sq += buf.toString ();
+}diff = origseq.getLength () - sq.length;
+}
+}
+}}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "hasSelectedColumns",
+function () {
+return (this.selected != null && this.selected.size () > 0);
+});
+Clazz.defineMethod (c$, "hasHiddenColumns",
+function () {
+return this.hiddenColumns != null && this.hiddenColumns.size () > 0;
+});
+Clazz.defineMethod (c$, "hasManyHiddenColumns",
+function () {
+return this.hiddenColumns != null && this.hiddenColumns.size () > 1;
+});
+Clazz.defineMethod (c$, "hideInsertionsFor",
+function (sr) {
+var inserts = sr.getInsertions ();
+for (var r, $r = inserts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
+this.hideColumns (r[0], r[1]);
+}
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "filterAnnotations",
+function (annotations, filterParams) {
+this.revealAllHiddenColumns ();
+this.clear ();
+var count = 0;
+do {
+if (annotations[count] != null) {
+var itemMatched = false;
+if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD && annotations[count].value >= filterParams.getThresholdValue ()) {
+itemMatched = true;
+}if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD && annotations[count].value <= filterParams.getThresholdValue ()) {
+itemMatched = true;
+}if (filterParams.isFilterAlphaHelix () && annotations[count].secondaryStructure == 'H') {
+itemMatched = true;
+}if (filterParams.isFilterBetaSheet () && annotations[count].secondaryStructure == 'E') {
+itemMatched = true;
+}if (filterParams.isFilterTurn () && annotations[count].secondaryStructure == 'S') {
+itemMatched = true;
+}var regexSearchString = filterParams.getRegexString ();
+if (regexSearchString != null && !filterParams.getRegexSearchFields ().isEmpty ()) {
+var fields = filterParams.getRegexSearchFields ();
+try {
+if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING) && annotations[count].displayCharacter.matches (regexSearchString)) {
+itemMatched = true;
+}} catch (pse) {
+if (Clazz.exceptionOf (pse, java.util.regex.PatternSyntaxException)) {
+if (annotations[count].displayCharacter.equals (regexSearchString)) {
+itemMatched = true;
+}} else {
+throw pse;
+}
+}
+if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION) && annotations[count].description != null && annotations[count].description.matches (regexSearchString)) {
+itemMatched = true;
+}}if (itemMatched) {
+this.addElement (count);
+}}count++;
+} while (count < annotations.length);
+return false;
+}, "~A,jalview.viewmodel.annotationfilter.AnnotationFilterParameter");
+});
diff --git a/bin/jalview/datamodel/DBRefEntry.js b/bin/jalview/datamodel/DBRefEntry.js
index da2e0cb..148cf99 100644
--- a/bin/jalview/datamodel/DBRefEntry.js
+++ b/bin/jalview/datamodel/DBRefEntry.js
@@ -1,93 +1,93 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.DBRefEntry", ["jalview.datamodel.Mapping"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.source = "";
-this.version = "";
-this.accessionId = "";
-this.map = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "DBRefEntry");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (source, version, accessionId) {
-this.construct (source, version, accessionId, null);
-}, "~S,~S,~S");
-Clazz.makeConstructor (c$,
-function (source, version, accessionId, map) {
-this.source = source.toUpperCase ();
-this.version = version;
-this.accessionId = accessionId;
-this.map = map;
-}, "~S,~S,~S,jalview.datamodel.Mapping");
-Clazz.makeConstructor (c$,
-function (entry) {
-this.construct ((entry.source == null ? "" : String.instantialize (entry.source)), (entry.version == null ? "" : String.instantialize (entry.version)), (entry.accessionId == null ? "" : String.instantialize (entry.accessionId)), (entry.map == null ? null : new jalview.datamodel.Mapping (entry.map)));
-}, "jalview.datamodel.DBRefEntry");
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (o == null || !(Clazz.instanceOf (o, jalview.datamodel.DBRefEntry))) {
-return false;
-}var entry = o;
-if (entry === this) {
-return true;
-}if (this.equalRef (entry) && ((this.map == null && entry.map == null) || (this.map != null && entry.map != null && this.map.equals (entry.map)))) {
-return true;
-}return false;
-}, "~O");
-Clazz.defineMethod (c$, "equalRef",
-function (entry) {
-if (entry == null) {
-return false;
-}if (entry === this) {
-return true;
-}if ((this.source != null && entry.source != null && this.source.equalsIgnoreCase (entry.source)) && (this.accessionId != null && entry.accessionId != null && this.accessionId.equalsIgnoreCase (entry.accessionId)) && (this.version != null && entry.version != null && this.version.equalsIgnoreCase (entry.version))) {
-return true;
-}return false;
-}, "jalview.datamodel.DBRefEntry");
-Clazz.defineMethod (c$, "getSource",
-function () {
-return this.source;
-});
-Clazz.defineMethod (c$, "getVersion",
-function () {
-return this.version;
-});
-Clazz.defineMethod (c$, "getAccessionId",
-function () {
-return this.accessionId;
-});
-Clazz.defineMethod (c$, "setAccessionId",
-function (accessionId) {
-this.accessionId = accessionId;
-}, "~S");
-Clazz.defineMethod (c$, "setSource",
-function (source) {
-this.source = source;
-}, "~S");
-Clazz.defineMethod (c$, "setVersion",
-function (version) {
-this.version = version;
-}, "~S");
-Clazz.defineMethod (c$, "getMap",
-function () {
-return this.map;
-});
-Clazz.defineMethod (c$, "setMap",
-function (map) {
-this.map = map;
-}, "jalview.datamodel.Mapping");
-Clazz.defineMethod (c$, "hasMap",
-function () {
-return this.map != null;
-});
-Clazz.defineMethod (c$, "getSrcAccString",
-function () {
-return ((this.source != null) ? this.source : "") + ":" + ((this.accessionId != null) ? this.accessionId : "");
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.getSrcAccString ();
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.DBRefEntry", ["jalview.datamodel.Mapping"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.source = "";
+this.version = "";
+this.accessionId = "";
+this.map = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "DBRefEntry");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (source, version, accessionId) {
+this.construct (source, version, accessionId, null);
+}, "~S,~S,~S");
+Clazz.makeConstructor (c$,
+function (source, version, accessionId, map) {
+this.source = source.toUpperCase ();
+this.version = version;
+this.accessionId = accessionId;
+this.map = map;
+}, "~S,~S,~S,jalview.datamodel.Mapping");
+Clazz.makeConstructor (c$,
+function (entry) {
+this.construct ((entry.source == null ? "" : String.instantialize (entry.source)), (entry.version == null ? "" : String.instantialize (entry.version)), (entry.accessionId == null ? "" : String.instantialize (entry.accessionId)), (entry.map == null ? null : new jalview.datamodel.Mapping (entry.map)));
+}, "jalview.datamodel.DBRefEntry");
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (o == null || !(Clazz.instanceOf (o, jalview.datamodel.DBRefEntry))) {
+return false;
+}var entry = o;
+if (entry === this) {
+return true;
+}if (this.equalRef (entry) && ((this.map == null && entry.map == null) || (this.map != null && entry.map != null && this.map.equals (entry.map)))) {
+return true;
+}return false;
+}, "~O");
+Clazz.defineMethod (c$, "equalRef",
+function (entry) {
+if (entry == null) {
+return false;
+}if (entry === this) {
+return true;
+}if ((this.source != null && entry.source != null && this.source.equalsIgnoreCase (entry.source)) && (this.accessionId != null && entry.accessionId != null && this.accessionId.equalsIgnoreCase (entry.accessionId)) && (this.version != null && entry.version != null && this.version.equalsIgnoreCase (entry.version))) {
+return true;
+}return false;
+}, "jalview.datamodel.DBRefEntry");
+Clazz.defineMethod (c$, "getSource",
+function () {
+return this.source;
+});
+Clazz.defineMethod (c$, "getVersion",
+function () {
+return this.version;
+});
+Clazz.defineMethod (c$, "getAccessionId",
+function () {
+return this.accessionId;
+});
+Clazz.defineMethod (c$, "setAccessionId",
+function (accessionId) {
+this.accessionId = accessionId;
+}, "~S");
+Clazz.defineMethod (c$, "setSource",
+function (source) {
+this.source = source;
+}, "~S");
+Clazz.defineMethod (c$, "setVersion",
+function (version) {
+this.version = version;
+}, "~S");
+Clazz.defineMethod (c$, "getMap",
+function () {
+return this.map;
+});
+Clazz.defineMethod (c$, "setMap",
+function (map) {
+this.map = map;
+}, "jalview.datamodel.Mapping");
+Clazz.defineMethod (c$, "hasMap",
+function () {
+return this.map != null;
+});
+Clazz.defineMethod (c$, "getSrcAccString",
+function () {
+return ((this.source != null) ? this.source : "") + ":" + ((this.accessionId != null) ? this.accessionId : "");
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.getSrcAccString ();
+});
+});
diff --git a/bin/jalview/datamodel/DBRefSource.js b/bin/jalview/datamodel/DBRefSource.js
index 587f6f3..00d7337 100644
--- a/bin/jalview/datamodel/DBRefSource.js
+++ b/bin/jalview/datamodel/DBRefSource.js
@@ -1,29 +1,29 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.declareType (jalview.datamodel, "DBRefSource");
-Clazz.defineStatics (c$,
-"UNIPROT", "UNIPROT");
-c$.UP_NAME = c$.prototype.UP_NAME = "UNIPROT_NAME".toUpperCase ();
-c$.UNIPROTKB = c$.prototype.UNIPROTKB = "UniProtKB/TrEMBL".toUpperCase ();
-c$.EMBLCDSProduct = c$.prototype.EMBLCDSProduct = "EMBLCDSProtein".toUpperCase ();
-Clazz.defineStatics (c$,
-"PDB", "PDB",
-"EMBL", "EMBL",
-"EMBLCDS", "EMBLCDS",
-"PFAM", "PFAM",
-"RFAM", "RFAM");
-c$.GENEDB = c$.prototype.GENEDB = "GeneDB".toUpperCase ();
-c$.DNACODINGDBS = c$.prototype.DNACODINGDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.EMBL, jalview.datamodel.DBRefSource.EMBLCDS, jalview.datamodel.DBRefSource.GENEDB]);
-c$.CODINGDBS = c$.prototype.CODINGDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.EMBLCDS, jalview.datamodel.DBRefSource.GENEDB]);
-c$.PROTEINDBS = c$.prototype.PROTEINDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.UNIPROT, jalview.datamodel.DBRefSource.PDB, jalview.datamodel.DBRefSource.UNIPROTKB, jalview.datamodel.DBRefSource.EMBLCDSProduct]);
-c$.PROTEINSEQ = c$.prototype.PROTEINSEQ = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.UNIPROT, jalview.datamodel.DBRefSource.UNIPROTKB, jalview.datamodel.DBRefSource.EMBLCDSProduct]);
-c$.PROTEINSTR = c$.prototype.PROTEINSTR = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.PDB]);
-c$.DOMAINDBS = c$.prototype.DOMAINDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.PFAM, jalview.datamodel.DBRefSource.RFAM]);
-Clazz.defineStatics (c$,
-"SEQDB", "SQ",
-"DNASEQDB", "NASQ",
-"PROTSEQDB", "PROTSQ",
-"CODINGSEQDB", "CODING",
-"DNACODINGSEQDB", "XONCODING",
-"DOMAINDB", "DOMAIN",
-"MULTIACC", "MULTIACC",
-"ALIGNMENTDB", "ALIGNMENTS");
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.declareType (jalview.datamodel, "DBRefSource");
+Clazz.defineStatics (c$,
+"UNIPROT", "UNIPROT");
+c$.UP_NAME = c$.prototype.UP_NAME = "UNIPROT_NAME".toUpperCase ();
+c$.UNIPROTKB = c$.prototype.UNIPROTKB = "UniProtKB/TrEMBL".toUpperCase ();
+c$.EMBLCDSProduct = c$.prototype.EMBLCDSProduct = "EMBLCDSProtein".toUpperCase ();
+Clazz.defineStatics (c$,
+"PDB", "PDB",
+"EMBL", "EMBL",
+"EMBLCDS", "EMBLCDS",
+"PFAM", "PFAM",
+"RFAM", "RFAM");
+c$.GENEDB = c$.prototype.GENEDB = "GeneDB".toUpperCase ();
+c$.DNACODINGDBS = c$.prototype.DNACODINGDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.EMBL, jalview.datamodel.DBRefSource.EMBLCDS, jalview.datamodel.DBRefSource.GENEDB]);
+c$.CODINGDBS = c$.prototype.CODINGDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.EMBLCDS, jalview.datamodel.DBRefSource.GENEDB]);
+c$.PROTEINDBS = c$.prototype.PROTEINDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.UNIPROT, jalview.datamodel.DBRefSource.PDB, jalview.datamodel.DBRefSource.UNIPROTKB, jalview.datamodel.DBRefSource.EMBLCDSProduct]);
+c$.PROTEINSEQ = c$.prototype.PROTEINSEQ = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.UNIPROT, jalview.datamodel.DBRefSource.UNIPROTKB, jalview.datamodel.DBRefSource.EMBLCDSProduct]);
+c$.PROTEINSTR = c$.prototype.PROTEINSTR = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.PDB]);
+c$.DOMAINDBS = c$.prototype.DOMAINDBS = Clazz.newArray (-1, [jalview.datamodel.DBRefSource.PFAM, jalview.datamodel.DBRefSource.RFAM]);
+Clazz.defineStatics (c$,
+"SEQDB", "SQ",
+"DNASEQDB", "NASQ",
+"PROTSEQDB", "PROTSQ",
+"CODINGSEQDB", "CODING",
+"DNACODINGSEQDB", "XONCODING",
+"DOMAINDB", "DOMAIN",
+"MULTIACC", "MULTIACC",
+"ALIGNMENTDB", "ALIGNMENTS");
diff --git a/bin/jalview/datamodel/FeatureProperties.js b/bin/jalview/datamodel/FeatureProperties.js
index 6df3e2b..350148d 100644
--- a/bin/jalview/datamodel/FeatureProperties.js
+++ b/bin/jalview/datamodel/FeatureProperties.js
@@ -1,20 +1,20 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.FeatureProperties", ["jalview.datamodel.DBRefSource"], function () {
-c$ = Clazz.declareType (jalview.datamodel, "FeatureProperties");
-c$.isCodingFeature = Clazz.defineMethod (c$, "isCodingFeature",
-function (dbrefsource, type) {
-if (type.equalsIgnoreCase ("CDS")) {
-return (dbrefsource == null || dbrefsource.equalsIgnoreCase (jalview.datamodel.DBRefSource.EMBL) || dbrefsource.equalsIgnoreCase (jalview.datamodel.DBRefSource.EMBLCDS));
-}return false;
-}, "~S,~S");
-c$.getCodingFeature = Clazz.defineMethod (c$, "getCodingFeature",
-function (dbrefsource) {
-if (jalview.datamodel.DBRefSource.EMBL.equalsIgnoreCase (dbrefsource) || jalview.datamodel.DBRefSource.EMBLCDS.equalsIgnoreCase (dbrefsource)) {
-return "CDS";
-}return null;
-}, "~S");
-Clazz.defineStatics (c$,
-"EMBL_CODING_FEATURE", "CDS",
-"EXONPOS", "exon number",
-"EXONPRODUCT", "product");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.FeatureProperties", ["jalview.datamodel.DBRefSource"], function () {
+c$ = Clazz.declareType (jalview.datamodel, "FeatureProperties");
+c$.isCodingFeature = Clazz.defineMethod (c$, "isCodingFeature",
+function (dbrefsource, type) {
+if (type.equalsIgnoreCase ("CDS")) {
+return (dbrefsource == null || dbrefsource.equalsIgnoreCase (jalview.datamodel.DBRefSource.EMBL) || dbrefsource.equalsIgnoreCase (jalview.datamodel.DBRefSource.EMBLCDS));
+}return false;
+}, "~S,~S");
+c$.getCodingFeature = Clazz.defineMethod (c$, "getCodingFeature",
+function (dbrefsource) {
+if (jalview.datamodel.DBRefSource.EMBL.equalsIgnoreCase (dbrefsource) || jalview.datamodel.DBRefSource.EMBLCDS.equalsIgnoreCase (dbrefsource)) {
+return "CDS";
+}return null;
+}, "~S");
+Clazz.defineStatics (c$,
+"EMBL_CODING_FEATURE", "CDS",
+"EXONPOS", "exon number",
+"EXONPRODUCT", "product");
+});
diff --git a/bin/jalview/datamodel/GraphLine.js b/bin/jalview/datamodel/GraphLine.js
index 564e7f4..83ffc69 100644
--- a/bin/jalview/datamodel/GraphLine.js
+++ b/bin/jalview/datamodel/GraphLine.js
@@ -1,36 +1,36 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.awt.Color"], "jalview.datamodel.GraphLine", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.value = 0;
-this.label = "";
-this.colour = null;
-this.displayed = true;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "GraphLine");
-Clazz.prepareFields (c$, function () {
-this.colour = java.awt.Color.black;
-});
-Clazz.makeConstructor (c$,
-function (value, label, col) {
-this.value = value;
-if (label != null) {
-this.label = label;
-}if (col != null) {
-this.colour = col;
-}}, "~N,~S,java.awt.Color");
-Clazz.makeConstructor (c$,
-function (from) {
-if (from != null) {
-this.value = from.value;
-this.label = String.instantialize (from.label);
-this.colour = from.colour;
-this.displayed = from.displayed;
-}}, "jalview.datamodel.GraphLine");
-Clazz.overrideMethod (c$, "equals",
-function (obj) {
-if (obj != null && Clazz.instanceOf (obj, jalview.datamodel.GraphLine)) {
-var other = obj;
-return this.displayed == other.displayed && this.value == other.value && (this.colour != null ? (other.colour != null && other.colour.equals (this.colour)) : other.colour == null) && (this.label != null ? (other.label != null && other.label.equals (this.label)) : other.label == null);
-}return false;
-}, "~O");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.awt.Color"], "jalview.datamodel.GraphLine", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.value = 0;
+this.label = "";
+this.colour = null;
+this.displayed = true;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "GraphLine");
+Clazz.prepareFields (c$, function () {
+this.colour = java.awt.Color.black;
+});
+Clazz.makeConstructor (c$,
+function (value, label, col) {
+this.value = value;
+if (label != null) {
+this.label = label;
+}if (col != null) {
+this.colour = col;
+}}, "~N,~S,java.awt.Color");
+Clazz.makeConstructor (c$,
+function (from) {
+if (from != null) {
+this.value = from.value;
+this.label = String.instantialize (from.label);
+this.colour = from.colour;
+this.displayed = from.displayed;
+}}, "jalview.datamodel.GraphLine");
+Clazz.overrideMethod (c$, "equals",
+function (obj) {
+if (obj != null && Clazz.instanceOf (obj, jalview.datamodel.GraphLine)) {
+var other = obj;
+return this.displayed == other.displayed && this.value == other.value && (this.colour != null ? (other.colour != null && other.colour.equals (this.colour)) : other.colour == null) && (this.label != null ? (other.label != null && other.label.equals (this.label)) : other.label == null);
+}return false;
+}, "~O");
+});
diff --git a/bin/jalview/datamodel/HiddenSequences.class b/bin/jalview/datamodel/HiddenSequences.class
index a6524e4..5553ae2 100644
Binary files a/bin/jalview/datamodel/HiddenSequences.class and b/bin/jalview/datamodel/HiddenSequences.class differ
diff --git a/bin/jalview/datamodel/HiddenSequences.js b/bin/jalview/datamodel/HiddenSequences.js
index 9111dd8..65b1c2b 100644
--- a/bin/jalview/datamodel/HiddenSequences.js
+++ b/bin/jalview/datamodel/HiddenSequences.js
@@ -1,162 +1,162 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.HiddenSequences", ["jalview.datamodel.Alignment", "java.util.ArrayList"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.hiddenSequences = null;
-this.alignment = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "HiddenSequences");
-Clazz.makeConstructor (c$,
-function (al) {
-this.alignment = al;
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "getSize",
-function () {
-if (this.hiddenSequences == null) {
-return 0;
-}var count = 0;
-for (var i = 0; i < this.hiddenSequences.length; i++) {
-if (this.hiddenSequences[i] != null) {
-count++;
-}}
-return count;
-});
-Clazz.defineMethod (c$, "getWidth",
-function () {
-var width = 0;
-for (var i = 0; i < this.hiddenSequences.length; i++) {
-if (this.hiddenSequences[i] != null && this.hiddenSequences[i].getLength () > width) {
-width = this.hiddenSequences[i].getLength ();
-}}
-return width;
-});
-Clazz.defineMethod (c$, "adjustHeightSequenceDeleted",
-function (seqIndex) {
-if (this.hiddenSequences == null) {
-return;
-}var alHeight = this.alignment.getHeight ();
-var tmp = new Array (alHeight + this.getSize ());
-var deletionIndex = this.adjustForHiddenSeqs (seqIndex);
-for (var i = 0; i < this.hiddenSequences.length; i++) {
-if (this.hiddenSequences[i] == null) {
-continue;
-}if (i > deletionIndex) {
-tmp[i - 1] = this.hiddenSequences[i];
-} else {
-tmp[i] = this.hiddenSequences[i];
-}}
-this.hiddenSequences = tmp;
-}, "~N");
-Clazz.defineMethod (c$, "adjustHeightSequenceAdded",
-function () {
-if (this.hiddenSequences == null) {
-return;
-}var alHeight = this.alignment.getHeight ();
-var tmp = new Array (alHeight + this.getSize ());
-System.arraycopy (this.hiddenSequences, 0, tmp, 0, this.hiddenSequences.length);
-this.hiddenSequences = tmp;
-});
-Clazz.defineMethod (c$, "hideSequence",
-function (sequence) {
-if (this.hiddenSequences == null) {
-this.hiddenSequences = new Array (this.alignment.getHeight ());
-}var alignmentIndex = this.alignment.findIndex (sequence);
-alignmentIndex = this.adjustForHiddenSeqs (alignmentIndex);
-if (this.hiddenSequences[alignmentIndex] != null) {
-System.out.println ("ERROR!!!!!!!!!!!");
-}this.hiddenSequences[alignmentIndex] = sequence;
-this.alignment.deleteSequence (sequence);
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "showAll",
-function (hiddenRepSequences) {
-var revealedSeqs = new java.util.ArrayList ();
-for (var i = 0; i < this.hiddenSequences.length; i++) {
-if (this.hiddenSequences[i] != null) {
-var tmp = this.showSequence (i, hiddenRepSequences);
-for (var seq, $seq = tmp.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-revealedSeqs.add (seq);
-}
-}}
-return revealedSeqs;
-}, "java.util.Map");
-Clazz.defineMethod (c$, "showSequence",
-function (alignmentIndex, hiddenRepSequences) {
-var revealedSeqs = new java.util.ArrayList ();
-var repSequence = this.alignment.getSequenceAt (alignmentIndex);
-if (repSequence != null && hiddenRepSequences != null && hiddenRepSequences.containsKey (repSequence)) {
-hiddenRepSequences.remove (repSequence);
-revealedSeqs.add (repSequence);
-}var start = this.adjustForHiddenSeqs (alignmentIndex - 1);
-var end = this.adjustForHiddenSeqs (alignmentIndex);
-if (end >= this.hiddenSequences.length) {
-end = this.hiddenSequences.length - 1;
-}var asequences;
-{
-for (var index = end; index > start; index--) {
-var seq = this.hiddenSequences[index];
-this.hiddenSequences[index] = null;
-if (seq != null) {
-if (seq.getLength () > 0) {
-revealedSeqs.add (seq);
-asequences.add (alignmentIndex, seq);
-} else {
-System.out.println (seq.getName () + " has been deleted whilst hidden");
-}}}
-}return revealedSeqs;
-}, "~N,java.util.Map");
-Clazz.defineMethod (c$, "getHiddenSequence",
-function (alignmentIndex) {
-return this.hiddenSequences[alignmentIndex];
-}, "~N");
-Clazz.defineMethod (c$, "findIndexWithoutHiddenSeqs",
-function (alignmentIndex) {
-var index = 0;
-var hiddenSeqs = 0;
-if (this.hiddenSequences.length <= alignmentIndex) {
-alignmentIndex = this.hiddenSequences.length - 1;
-}while (index <= alignmentIndex) {
-if (this.hiddenSequences[index] != null) {
-hiddenSeqs++;
-}index++;
-}
-;return (alignmentIndex - hiddenSeqs);
-}, "~N");
-Clazz.defineMethod (c$, "adjustForHiddenSeqs",
-function (alignmentIndex) {
-var index = 0;
-var hSize = this.hiddenSequences.length;
-while (index <= alignmentIndex && index < hSize) {
-if (this.hiddenSequences[index] != null) {
-alignmentIndex++;
-}index++;
-}
-;return alignmentIndex;
-}, "~N");
-Clazz.defineMethod (c$, "getFullAlignment",
-function () {
-var isize = this.hiddenSequences.length;
-var seq = new Array (isize);
-var index = 0;
-for (var i = 0; i < this.hiddenSequences.length; i++) {
-if (this.hiddenSequences[i] != null) {
-seq[i] = this.hiddenSequences[i];
-} else {
-seq[i] = this.alignment.getSequenceAt (index);
-index++;
-}}
-var fAlignmt = new jalview.datamodel.Alignment (seq);
-fAlignmt.annotations = this.alignment.getAlignmentAnnotation ();
-fAlignmt.alignmentProperties = this.alignment.getProperties ();
-fAlignmt.groups = this.alignment.getGroups ();
-fAlignmt.$hasRNAStructure = this.alignment.hasRNAStructure ();
-return fAlignmt;
-});
-Clazz.defineMethod (c$, "isHidden",
-function (seq) {
-if (this.hiddenSequences != null) {
-for (var i = 0; i < this.hiddenSequences.length; i++) {
-if (this.hiddenSequences[i] != null && this.hiddenSequences[i] === seq) {
-return true;
-}}
-}return false;
-}, "jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.HiddenSequences", ["jalview.datamodel.Alignment", "java.util.ArrayList"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.hiddenSequences = null;
+this.alignment = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "HiddenSequences");
+Clazz.makeConstructor (c$,
+function (al) {
+this.alignment = al;
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "getSize",
+function () {
+if (this.hiddenSequences == null) {
+return 0;
+}var count = 0;
+for (var i = 0; i < this.hiddenSequences.length; i++) {
+if (this.hiddenSequences[i] != null) {
+count++;
+}}
+return count;
+});
+Clazz.defineMethod (c$, "getWidth",
+function () {
+var width = 0;
+for (var i = 0; i < this.hiddenSequences.length; i++) {
+if (this.hiddenSequences[i] != null && this.hiddenSequences[i].getLength () > width) {
+width = this.hiddenSequences[i].getLength ();
+}}
+return width;
+});
+Clazz.defineMethod (c$, "adjustHeightSequenceDeleted",
+function (seqIndex) {
+if (this.hiddenSequences == null) {
+return;
+}var alHeight = this.alignment.getHeight ();
+var tmp = new Array (alHeight + this.getSize ());
+var deletionIndex = this.adjustForHiddenSeqs (seqIndex);
+for (var i = 0; i < this.hiddenSequences.length; i++) {
+if (this.hiddenSequences[i] == null) {
+continue;
+}if (i > deletionIndex) {
+tmp[i - 1] = this.hiddenSequences[i];
+} else {
+tmp[i] = this.hiddenSequences[i];
+}}
+this.hiddenSequences = tmp;
+}, "~N");
+Clazz.defineMethod (c$, "adjustHeightSequenceAdded",
+function () {
+if (this.hiddenSequences == null) {
+return;
+}var alHeight = this.alignment.getHeight ();
+var tmp = new Array (alHeight + this.getSize ());
+System.arraycopy (this.hiddenSequences, 0, tmp, 0, this.hiddenSequences.length);
+this.hiddenSequences = tmp;
+});
+Clazz.defineMethod (c$, "hideSequence",
+function (sequence) {
+if (this.hiddenSequences == null) {
+this.hiddenSequences = new Array (this.alignment.getHeight ());
+}var alignmentIndex = this.alignment.findIndex (sequence);
+alignmentIndex = this.adjustForHiddenSeqs (alignmentIndex);
+if (this.hiddenSequences[alignmentIndex] != null) {
+System.out.println ("ERROR!!!!!!!!!!!");
+}this.hiddenSequences[alignmentIndex] = sequence;
+this.alignment.deleteSequence (sequence);
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "showAll",
+function (hiddenRepSequences) {
+var revealedSeqs = new java.util.ArrayList ();
+for (var i = 0; i < this.hiddenSequences.length; i++) {
+if (this.hiddenSequences[i] != null) {
+var tmp = this.showSequence (i, hiddenRepSequences);
+for (var seq, $seq = tmp.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+revealedSeqs.add (seq);
+}
+}}
+return revealedSeqs;
+}, "java.util.Map");
+Clazz.defineMethod (c$, "showSequence",
+function (alignmentIndex, hiddenRepSequences) {
+var revealedSeqs = new java.util.ArrayList ();
+var repSequence = this.alignment.getSequenceAt (alignmentIndex);
+if (repSequence != null && hiddenRepSequences != null && hiddenRepSequences.containsKey (repSequence)) {
+hiddenRepSequences.remove (repSequence);
+revealedSeqs.add (repSequence);
+}var start = this.adjustForHiddenSeqs (alignmentIndex - 1);
+var end = this.adjustForHiddenSeqs (alignmentIndex);
+if (end >= this.hiddenSequences.length) {
+end = this.hiddenSequences.length - 1;
+}var asequences;
+{
+for (var index = end; index > start; index--) {
+var seq = this.hiddenSequences[index];
+this.hiddenSequences[index] = null;
+if (seq != null) {
+if (seq.getLength () > 0) {
+revealedSeqs.add (seq);
+asequences.add (alignmentIndex, seq);
+} else {
+System.out.println (seq.getName () + " has been deleted whilst hidden");
+}}}
+}return revealedSeqs;
+}, "~N,java.util.Map");
+Clazz.defineMethod (c$, "getHiddenSequence",
+function (alignmentIndex) {
+return this.hiddenSequences[alignmentIndex];
+}, "~N");
+Clazz.defineMethod (c$, "findIndexWithoutHiddenSeqs",
+function (alignmentIndex) {
+var index = 0;
+var hiddenSeqs = 0;
+if (this.hiddenSequences.length <= alignmentIndex) {
+alignmentIndex = this.hiddenSequences.length - 1;
+}while (index <= alignmentIndex) {
+if (this.hiddenSequences[index] != null) {
+hiddenSeqs++;
+}index++;
+}
+;return (alignmentIndex - hiddenSeqs);
+}, "~N");
+Clazz.defineMethod (c$, "adjustForHiddenSeqs",
+function (alignmentIndex) {
+var index = 0;
+var hSize = this.hiddenSequences.length;
+while (index <= alignmentIndex && index < hSize) {
+if (this.hiddenSequences[index] != null) {
+alignmentIndex++;
+}index++;
+}
+;return alignmentIndex;
+}, "~N");
+Clazz.defineMethod (c$, "getFullAlignment",
+function () {
+var isize = this.hiddenSequences.length;
+var seq = new Array (isize);
+var index = 0;
+for (var i = 0; i < this.hiddenSequences.length; i++) {
+if (this.hiddenSequences[i] != null) {
+seq[i] = this.hiddenSequences[i];
+} else {
+seq[i] = this.alignment.getSequenceAt (index);
+index++;
+}}
+var fAlignmt = new jalview.datamodel.Alignment (seq);
+fAlignmt.annotations = this.alignment.getAlignmentAnnotation ();
+fAlignmt.alignmentProperties = this.alignment.getProperties ();
+fAlignmt.groups = this.alignment.getGroups ();
+fAlignmt.$hasRNAStructure = this.alignment.hasRNAStructure ();
+return fAlignmt;
+});
+Clazz.defineMethod (c$, "isHidden",
+function (seq) {
+if (this.hiddenSequences != null) {
+for (var i = 0; i < this.hiddenSequences.length; i++) {
+if (this.hiddenSequences[i] != null && this.hiddenSequences[i] === seq) {
+return true;
+}}
+}return false;
+}, "jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/datamodel/IncompleteCodonException.js b/bin/jalview/datamodel/IncompleteCodonException.js
index 372d9dd..924024c 100644
--- a/bin/jalview/datamodel/IncompleteCodonException.js
+++ b/bin/jalview/datamodel/IncompleteCodonException.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.lang.RuntimeException"], "jalview.datamodel.IncompleteCodonException", null, function () {
-c$ = Clazz.declareType (jalview.datamodel, "IncompleteCodonException", RuntimeException);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.lang.RuntimeException"], "jalview.datamodel.IncompleteCodonException", null, function () {
+c$ = Clazz.declareType (jalview.datamodel, "IncompleteCodonException", RuntimeException);
+});
diff --git a/bin/jalview/datamodel/Mapping.js b/bin/jalview/datamodel/Mapping.js
index fe06fda..a25222e 100644
--- a/bin/jalview/datamodel/Mapping.js
+++ b/bin/jalview/datamodel/Mapping.js
@@ -1,304 +1,304 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.util.Iterator"], "jalview.datamodel.Mapping", ["jalview.datamodel.AlignedCodon", "$.IncompleteCodonException", "$.SequenceFeature", "jalview.util.MapList", "java.util.NoSuchElementException", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-if (!Clazz.isClassDefined ("jalview.datamodel.Mapping.AlignedCodonIterator")) {
-jalview.datamodel.Mapping.$Mapping$AlignedCodonIterator$ ();
-}
-this.map = null;
-this.to = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "Mapping");
-Clazz.makeConstructor (c$,
-function (map) {
-this.map = map;
-}, "jalview.util.MapList");
-Clazz.makeConstructor (c$,
-function (to, map) {
-this.construct (map);
-this.to = to;
-}, "jalview.datamodel.SequenceI,jalview.util.MapList");
-Clazz.makeConstructor (c$,
-function (to, exon, is, i, j) {
-this.construct (to, new jalview.util.MapList (exon, is, i, j));
-}, "jalview.datamodel.SequenceI,~A,~A,~N,~N");
-Clazz.makeConstructor (c$,
-function (map2) {
-if (map2 !== this && map2 != null) {
-if (map2.map != null) {
-this.map = new jalview.util.MapList (map2.map);
-}this.to = map2.to;
-}}, "jalview.datamodel.Mapping");
-Clazz.defineMethod (c$, "getMap",
-function () {
-return this.map;
-});
-Clazz.defineMethod (c$, "setMap",
-function (map) {
-this.map = map;
-}, "jalview.util.MapList");
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (o == null || !(Clazz.instanceOf (o, jalview.datamodel.Mapping))) {
-return false;
-}var other = o;
-if (other === this) {
-return true;
-}if (other.to !== this.to) {
-return false;
-}if ((this.map != null && other.map == null) || (this.map == null && other.map != null)) {
-return false;
-}if ((this.map == null && other.map == null) || this.map.equals (other.map)) {
-return true;
-}return false;
-}, "~O");
-Clazz.defineMethod (c$, "getPosition",
-function (mpos) {
-if (this.map != null) {
-var mp = this.map.shiftTo (mpos);
-if (mp != null) {
-return mp[0];
-}}return mpos;
-}, "~N");
-Clazz.defineMethod (c$, "getWord",
-function (mpos) {
-if (this.map != null) {
-return this.map.getToWord (mpos);
-}return null;
-}, "~N");
-Clazz.defineMethod (c$, "getWidth",
-function () {
-if (this.map != null) {
-return this.map.getFromRatio ();
-}return 1;
-});
-Clazz.defineMethod (c$, "getMappedWidth",
-function () {
-if (this.map != null) {
-return this.map.getToRatio ();
-}return 1;
-});
-Clazz.defineMethod (c$, "getMappedPosition",
-function (pos) {
-if (this.map != null) {
-var mp = this.map.shiftFrom (pos);
-if (mp != null) {
-return mp[0];
-}}return pos;
-}, "~N");
-Clazz.defineMethod (c$, "getMappedWord",
-function (pos) {
-if (this.map != null) {
-var mp = this.map.shiftFrom (pos);
-if (mp != null) {
-return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.map.getToRatio () - 1)]);
-}}return null;
-}, "~N");
-Clazz.defineMethod (c$, "locateFeature",
-function (f) {
-if (true) {
-if (this.map != null) {
-var frange = this.map.locateInFrom (f.getBegin (), f.getEnd ());
-if (frange == null) {
-return null;
-}var vf = new Array (Clazz.doubleToInt (frange.length / 2));
-for (var i = 0, v = 0; i < frange.length; i += 2, v++) {
-vf[v] = new jalview.datamodel.SequenceFeature (f);
-vf[v].setBegin (frange[i]);
-vf[v].setEnd (frange[i + 1]);
-if (frange.length > 2) {
-vf[v].setDescription (f.getDescription () + "\nPart " + (v + 1));
-}}
-return vf;
-}}if (false) {
-var word = this.getWord (f.getBegin ());
-if (word[0] < word[1]) {
-f.setBegin (word[0]);
-} else {
-f.setBegin (word[1]);
-}word = this.getWord (f.getEnd ());
-if (word[0] > word[1]) {
-f.setEnd (word[0]);
-} else {
-f.setEnd (word[1]);
-}}return Clazz.newArray (-1, [f]);
-}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "locateRange",
-function (from, to) {
-if (this.map != null) {
-if (from <= to) {
-from = (this.map.getToLowest () < from) ? from : this.map.getToLowest ();
-to = (this.map.getToHighest () > to) ? to : this.map.getToHighest ();
-if (from > to) {
-return null;
-}} else {
-from = (this.map.getToHighest () > from) ? from : this.map.getToHighest ();
-to = (this.map.getToLowest () < to) ? to : this.map.getToLowest ();
-if (from < to) {
-return null;
-}}return this.map.locateInFrom (from, to);
-}return Clazz.newIntArray (-1, [from, to]);
-}, "~N,~N");
-Clazz.defineMethod (c$, "locateMappedRange",
-function (from, to) {
-if (this.map != null) {
-if (from <= to) {
-from = (this.map.getFromLowest () < from) ? from : this.map.getFromLowest ();
-to = (this.map.getFromHighest () > to) ? to : this.map.getFromHighest ();
-if (from > to) {
-return null;
-}} else {
-from = (this.map.getFromHighest () > from) ? from : this.map.getFromHighest ();
-to = (this.map.getFromLowest () < to) ? to : this.map.getFromLowest ();
-if (from < to) {
-return null;
-}}return this.map.locateInTo (from, to);
-}return Clazz.newIntArray (-1, [from, to]);
-}, "~N,~N");
-Clazz.defineMethod (c$, "intersectVisContigs",
-function (viscontigs) {
-var copy = new jalview.datamodel.Mapping (this);
-if (this.map != null) {
-var vpos = 0;
-var apos = 0;
-var toRange = new java.util.Vector ();
-var fromRange = new java.util.Vector ();
-for (var vc = 0; vc < viscontigs.length; vc += 2) {
-var mpr = this.locateMappedRange (1 + viscontigs[vc], viscontigs[vc + 1] - 1);
-if (mpr != null) {
-for (var m = 0; m < mpr.length; m += 2) {
-toRange.addElement ( Clazz.newIntArray (-1, [mpr[m], mpr[m + 1]]));
-var xpos = this.locateRange (mpr[m], mpr[m + 1]);
-for (var x = 0; x < xpos.length; x += 2) {
-fromRange.addElement ( Clazz.newIntArray (-1, [xpos[x], xpos[x + 1]]));
-}
-}
-}}
-var from = Clazz.newIntArray (fromRange.size () * 2, 0);
-var to = Clazz.newIntArray (toRange.size () * 2, 0);
-var r;
-for (var f = 0, fSize = fromRange.size (); f < fSize; f++) {
-r = fromRange.elementAt (f);
-from[f * 2] = r[0];
-from[f * 2 + 1] = r[1];
-}
-for (var f = 0, fSize = toRange.size (); f < fSize; f++) {
-r = toRange.elementAt (f);
-to[f * 2] = r[0];
-to[f * 2 + 1] = r[1];
-}
-copy.setMap ( new jalview.util.MapList (from, to, this.map.getFromRatio (), this.map.getToRatio ()));
-}return copy;
-}, "~A");
-Clazz.defineMethod (c$, "getTo",
-function () {
-return this.to;
-});
-Clazz.defineMethod (c$, "setTo",
-function (tto) {
-this.to = tto;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "finalize",
-function () {
-this.map = null;
-this.to = null;
-Clazz.superCall (this, jalview.datamodel.Mapping, "finalize", []);
-});
-Clazz.defineMethod (c$, "getCodonIterator",
-function (seq, gapChar) {
-return Clazz.innerTypeInstance (jalview.datamodel.Mapping.AlignedCodonIterator, this, null, seq.getSequence (), gapChar);
-}, "jalview.datamodel.SequenceI,~S");
-c$.$Mapping$AlignedCodonIterator$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.gap = '\0';
-this.alignedSeq = null;
-this.alignedColumn = 0;
-this.alignedBases = 0;
-this.fromRanges = null;
-this.toRanges = null;
-this.currentFromRange = null;
-this.currentToRange = null;
-this.fromPosition = 0;
-this.toPosition = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel.Mapping, "AlignedCodonIterator", null, java.util.Iterator);
-Clazz.makeConstructor (c$,
-function (a, b) {
-this.alignedSeq = a;
-this.gap = b;
-this.fromRanges = this.b$["jalview.datamodel.Mapping"].map.getFromRanges ().iterator ();
-this.toRanges = this.b$["jalview.datamodel.Mapping"].map.getToRanges ().iterator ();
-if (this.fromRanges.hasNext ()) {
-this.currentFromRange = this.fromRanges.next ();
-this.fromPosition = this.currentFromRange[0];
-}if (this.toRanges.hasNext ()) {
-this.currentToRange = this.toRanges.next ();
-this.toPosition = this.currentToRange[0];
-}}, "~A,~S");
-Clazz.defineMethod (c$, "hasNext",
-function () {
-if (this.fromRanges.hasNext ()) {
-return true;
-}if (this.currentFromRange == null || this.fromPosition >= this.currentFromRange[1]) {
-return false;
-}return true;
-});
-Clazz.overrideMethod (c$, "next",
-function () {
-if (!this.hasNext ()) {
-throw new java.util.NoSuchElementException ();
-}var a = this.getNextCodon ();
-var b = this.getAlignedCodon (a);
-var c = this.getPeptide ();
-return new jalview.datamodel.AlignedCodon (b[0], b[1], b[2], c);
-});
-Clazz.defineMethod (c$, "getPeptide",
-($fz = function () {
-if (this.toPosition <= this.currentToRange[1]) {
-var a = this.b$["jalview.datamodel.Mapping"].to.getSequence ()[this.toPosition - 1];
-this.toPosition++;
-return String.valueOf (a);
-}if (!this.toRanges.hasNext ()) {
-throw new java.util.NoSuchElementException ("Ran out of peptide at position " + this.toPosition);
-}this.currentToRange = this.toRanges.next ();
-this.toPosition = this.currentToRange[0];
-return this.getPeptide ();
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getNextCodon",
-($fz = function () {
-var a = Clazz.newIntArray (3, 0);
-var b = 0;
-while (b < 3) {
-if (this.fromPosition <= this.currentFromRange[1]) {
-a[b++] = this.fromPosition++;
-} else {
-if (!this.fromRanges.hasNext ()) {
-throw new jalview.datamodel.IncompleteCodonException ();
-}this.currentFromRange = this.fromRanges.next ();
-this.fromPosition = this.currentFromRange[0];
-}}
-return a;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getAlignedCodon",
-($fz = function (a) {
-var b = Clazz.newIntArray (a.length, 0);
-for (var c = 0; c < a.length; c++) {
-b[c] = this.getAlignedColumn (a[c]);
-}
-return b;
-}, $fz.isPrivate = true, $fz), "~A");
-Clazz.defineMethod (c$, "getAlignedColumn",
-($fz = function (a) {
-while (this.alignedBases < a && this.alignedColumn < this.alignedSeq.length) {
-if (this.alignedSeq[this.alignedColumn++] != this.gap) {
-this.alignedBases++;
-}}
-return this.alignedColumn - 1;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.overrideMethod (c$, "remove",
-function () {
-});
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.util.Iterator"], "jalview.datamodel.Mapping", ["jalview.datamodel.AlignedCodon", "$.IncompleteCodonException", "$.SequenceFeature", "jalview.util.MapList", "java.util.NoSuchElementException", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+if (!Clazz.isClassDefined ("jalview.datamodel.Mapping.AlignedCodonIterator")) {
+jalview.datamodel.Mapping.$Mapping$AlignedCodonIterator$ ();
+}
+this.map = null;
+this.to = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "Mapping");
+Clazz.makeConstructor (c$,
+function (map) {
+this.map = map;
+}, "jalview.util.MapList");
+Clazz.makeConstructor (c$,
+function (to, map) {
+this.construct (map);
+this.to = to;
+}, "jalview.datamodel.SequenceI,jalview.util.MapList");
+Clazz.makeConstructor (c$,
+function (to, exon, is, i, j) {
+this.construct (to, new jalview.util.MapList (exon, is, i, j));
+}, "jalview.datamodel.SequenceI,~A,~A,~N,~N");
+Clazz.makeConstructor (c$,
+function (map2) {
+if (map2 !== this && map2 != null) {
+if (map2.map != null) {
+this.map = new jalview.util.MapList (map2.map);
+}this.to = map2.to;
+}}, "jalview.datamodel.Mapping");
+Clazz.defineMethod (c$, "getMap",
+function () {
+return this.map;
+});
+Clazz.defineMethod (c$, "setMap",
+function (map) {
+this.map = map;
+}, "jalview.util.MapList");
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (o == null || !(Clazz.instanceOf (o, jalview.datamodel.Mapping))) {
+return false;
+}var other = o;
+if (other === this) {
+return true;
+}if (other.to !== this.to) {
+return false;
+}if ((this.map != null && other.map == null) || (this.map == null && other.map != null)) {
+return false;
+}if ((this.map == null && other.map == null) || this.map.equals (other.map)) {
+return true;
+}return false;
+}, "~O");
+Clazz.defineMethod (c$, "getPosition",
+function (mpos) {
+if (this.map != null) {
+var mp = this.map.shiftTo (mpos);
+if (mp != null) {
+return mp[0];
+}}return mpos;
+}, "~N");
+Clazz.defineMethod (c$, "getWord",
+function (mpos) {
+if (this.map != null) {
+return this.map.getToWord (mpos);
+}return null;
+}, "~N");
+Clazz.defineMethod (c$, "getWidth",
+function () {
+if (this.map != null) {
+return this.map.getFromRatio ();
+}return 1;
+});
+Clazz.defineMethod (c$, "getMappedWidth",
+function () {
+if (this.map != null) {
+return this.map.getToRatio ();
+}return 1;
+});
+Clazz.defineMethod (c$, "getMappedPosition",
+function (pos) {
+if (this.map != null) {
+var mp = this.map.shiftFrom (pos);
+if (mp != null) {
+return mp[0];
+}}return pos;
+}, "~N");
+Clazz.defineMethod (c$, "getMappedWord",
+function (pos) {
+if (this.map != null) {
+var mp = this.map.shiftFrom (pos);
+if (mp != null) {
+return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.map.getToRatio () - 1)]);
+}}return null;
+}, "~N");
+Clazz.defineMethod (c$, "locateFeature",
+function (f) {
+if (true) {
+if (this.map != null) {
+var frange = this.map.locateInFrom (f.getBegin (), f.getEnd ());
+if (frange == null) {
+return null;
+}var vf = new Array (Clazz.doubleToInt (frange.length / 2));
+for (var i = 0, v = 0; i < frange.length; i += 2, v++) {
+vf[v] = new jalview.datamodel.SequenceFeature (f);
+vf[v].setBegin (frange[i]);
+vf[v].setEnd (frange[i + 1]);
+if (frange.length > 2) {
+vf[v].setDescription (f.getDescription () + "\nPart " + (v + 1));
+}}
+return vf;
+}}if (false) {
+var word = this.getWord (f.getBegin ());
+if (word[0] < word[1]) {
+f.setBegin (word[0]);
+} else {
+f.setBegin (word[1]);
+}word = this.getWord (f.getEnd ());
+if (word[0] > word[1]) {
+f.setEnd (word[0]);
+} else {
+f.setEnd (word[1]);
+}}return Clazz.newArray (-1, [f]);
+}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "locateRange",
+function (from, to) {
+if (this.map != null) {
+if (from <= to) {
+from = (this.map.getToLowest () < from) ? from : this.map.getToLowest ();
+to = (this.map.getToHighest () > to) ? to : this.map.getToHighest ();
+if (from > to) {
+return null;
+}} else {
+from = (this.map.getToHighest () > from) ? from : this.map.getToHighest ();
+to = (this.map.getToLowest () < to) ? to : this.map.getToLowest ();
+if (from < to) {
+return null;
+}}return this.map.locateInFrom (from, to);
+}return Clazz.newIntArray (-1, [from, to]);
+}, "~N,~N");
+Clazz.defineMethod (c$, "locateMappedRange",
+function (from, to) {
+if (this.map != null) {
+if (from <= to) {
+from = (this.map.getFromLowest () < from) ? from : this.map.getFromLowest ();
+to = (this.map.getFromHighest () > to) ? to : this.map.getFromHighest ();
+if (from > to) {
+return null;
+}} else {
+from = (this.map.getFromHighest () > from) ? from : this.map.getFromHighest ();
+to = (this.map.getFromLowest () < to) ? to : this.map.getFromLowest ();
+if (from < to) {
+return null;
+}}return this.map.locateInTo (from, to);
+}return Clazz.newIntArray (-1, [from, to]);
+}, "~N,~N");
+Clazz.defineMethod (c$, "intersectVisContigs",
+function (viscontigs) {
+var copy = new jalview.datamodel.Mapping (this);
+if (this.map != null) {
+var vpos = 0;
+var apos = 0;
+var toRange = new java.util.Vector ();
+var fromRange = new java.util.Vector ();
+for (var vc = 0; vc < viscontigs.length; vc += 2) {
+var mpr = this.locateMappedRange (1 + viscontigs[vc], viscontigs[vc + 1] - 1);
+if (mpr != null) {
+for (var m = 0; m < mpr.length; m += 2) {
+toRange.addElement ( Clazz.newIntArray (-1, [mpr[m], mpr[m + 1]]));
+var xpos = this.locateRange (mpr[m], mpr[m + 1]);
+for (var x = 0; x < xpos.length; x += 2) {
+fromRange.addElement ( Clazz.newIntArray (-1, [xpos[x], xpos[x + 1]]));
+}
+}
+}}
+var from = Clazz.newIntArray (fromRange.size () * 2, 0);
+var to = Clazz.newIntArray (toRange.size () * 2, 0);
+var r;
+for (var f = 0, fSize = fromRange.size (); f < fSize; f++) {
+r = fromRange.elementAt (f);
+from[f * 2] = r[0];
+from[f * 2 + 1] = r[1];
+}
+for (var f = 0, fSize = toRange.size (); f < fSize; f++) {
+r = toRange.elementAt (f);
+to[f * 2] = r[0];
+to[f * 2 + 1] = r[1];
+}
+copy.setMap ( new jalview.util.MapList (from, to, this.map.getFromRatio (), this.map.getToRatio ()));
+}return copy;
+}, "~A");
+Clazz.defineMethod (c$, "getTo",
+function () {
+return this.to;
+});
+Clazz.defineMethod (c$, "setTo",
+function (tto) {
+this.to = tto;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "finalize",
+function () {
+this.map = null;
+this.to = null;
+Clazz.superCall (this, jalview.datamodel.Mapping, "finalize", []);
+});
+Clazz.defineMethod (c$, "getCodonIterator",
+function (seq, gapChar) {
+return Clazz.innerTypeInstance (jalview.datamodel.Mapping.AlignedCodonIterator, this, null, seq.getSequence (), gapChar);
+}, "jalview.datamodel.SequenceI,~S");
+c$.$Mapping$AlignedCodonIterator$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.gap = '\0';
+this.alignedSeq = null;
+this.alignedColumn = 0;
+this.alignedBases = 0;
+this.fromRanges = null;
+this.toRanges = null;
+this.currentFromRange = null;
+this.currentToRange = null;
+this.fromPosition = 0;
+this.toPosition = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel.Mapping, "AlignedCodonIterator", null, java.util.Iterator);
+Clazz.makeConstructor (c$,
+function (a, b) {
+this.alignedSeq = a;
+this.gap = b;
+this.fromRanges = this.b$["jalview.datamodel.Mapping"].map.getFromRanges ().iterator ();
+this.toRanges = this.b$["jalview.datamodel.Mapping"].map.getToRanges ().iterator ();
+if (this.fromRanges.hasNext ()) {
+this.currentFromRange = this.fromRanges.next ();
+this.fromPosition = this.currentFromRange[0];
+}if (this.toRanges.hasNext ()) {
+this.currentToRange = this.toRanges.next ();
+this.toPosition = this.currentToRange[0];
+}}, "~A,~S");
+Clazz.defineMethod (c$, "hasNext",
+function () {
+if (this.fromRanges.hasNext ()) {
+return true;
+}if (this.currentFromRange == null || this.fromPosition >= this.currentFromRange[1]) {
+return false;
+}return true;
+});
+Clazz.overrideMethod (c$, "next",
+function () {
+if (!this.hasNext ()) {
+throw new java.util.NoSuchElementException ();
+}var a = this.getNextCodon ();
+var b = this.getAlignedCodon (a);
+var c = this.getPeptide ();
+return new jalview.datamodel.AlignedCodon (b[0], b[1], b[2], c);
+});
+Clazz.defineMethod (c$, "getPeptide",
+($fz = function () {
+if (this.toPosition <= this.currentToRange[1]) {
+var a = this.b$["jalview.datamodel.Mapping"].to.getSequence ()[this.toPosition - 1];
+this.toPosition++;
+return String.valueOf (a);
+}if (!this.toRanges.hasNext ()) {
+throw new java.util.NoSuchElementException ("Ran out of peptide at position " + this.toPosition);
+}this.currentToRange = this.toRanges.next ();
+this.toPosition = this.currentToRange[0];
+return this.getPeptide ();
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getNextCodon",
+($fz = function () {
+var a = Clazz.newIntArray (3, 0);
+var b = 0;
+while (b < 3) {
+if (this.fromPosition <= this.currentFromRange[1]) {
+a[b++] = this.fromPosition++;
+} else {
+if (!this.fromRanges.hasNext ()) {
+throw new jalview.datamodel.IncompleteCodonException ();
+}this.currentFromRange = this.fromRanges.next ();
+this.fromPosition = this.currentFromRange[0];
+}}
+return a;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getAlignedCodon",
+($fz = function (a) {
+var b = Clazz.newIntArray (a.length, 0);
+for (var c = 0; c < a.length; c++) {
+b[c] = this.getAlignedColumn (a[c]);
+}
+return b;
+}, $fz.isPrivate = true, $fz), "~A");
+Clazz.defineMethod (c$, "getAlignedColumn",
+($fz = function (a) {
+while (this.alignedBases < a && this.alignedColumn < this.alignedSeq.length) {
+if (this.alignedSeq[this.alignedColumn++] != this.gap) {
+this.alignedBases++;
+}}
+return this.alignedColumn - 1;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.overrideMethod (c$, "remove",
+function () {
+});
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/datamodel/NodeTransformI.js b/bin/jalview/datamodel/NodeTransformI.js
index 83ace63..0f7a757 100644
--- a/bin/jalview/datamodel/NodeTransformI.js
+++ b/bin/jalview/datamodel/NodeTransformI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.declareInterface (jalview.datamodel, "NodeTransformI");
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.declareInterface (jalview.datamodel, "NodeTransformI");
diff --git a/bin/jalview/datamodel/PDBEntry.js b/bin/jalview/datamodel/PDBEntry.js
index e52f785..e153399 100644
--- a/bin/jalview/datamodel/PDBEntry.js
+++ b/bin/jalview/datamodel/PDBEntry.js
@@ -1,88 +1,88 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.lang.Enum"], "jalview.datamodel.PDBEntry", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.file = null;
-this.type = null;
-this.id = null;
-this.chainCode = null;
-this.properties = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "PDBEntry");
-Clazz.overrideMethod (c$, "equals",
-function (obj) {
-if (obj == null || !(Clazz.instanceOf (obj, jalview.datamodel.PDBEntry))) {
-return false;
-}if (obj === this) {
-return true;
-}var o = obj;
-return (this.type === o.type || (this.type != null && o.type != null && o.type.equals (this.type))) && (this.id === o.id || (this.id != null && o.id != null && o.id.equalsIgnoreCase (this.id))) && (this.chainCode === o.chainCode || (this.chainCode != null && o.chainCode != null && o.chainCode.equalsIgnoreCase (this.chainCode))) && (this.properties === o.properties || (this.properties != null && o.properties != null && this.properties.equals (o.properties)));
-}, "~O");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (pdbId, chain, type, filePath) {
-this.id = pdbId;
-this.chainCode = chain;
-this.type = type == null ? null : type.toString ();
-this.file = filePath;
-}, "~S,~S,jalview.datamodel.PDBEntry.Type,~S");
-Clazz.makeConstructor (c$,
-function (entry) {
-this.file = entry.file;
-this.type = entry.type;
-this.id = entry.id;
-this.chainCode = entry.chainCode;
-if (entry.properties != null) {
-this.properties = entry.properties.clone ();
-}}, "jalview.datamodel.PDBEntry");
-Clazz.defineMethod (c$, "setFile",
-function (file) {
-this.file = file;
-}, "~S");
-Clazz.defineMethod (c$, "getFile",
-function () {
-return this.file;
-});
-Clazz.defineMethod (c$, "setType",
-function (t) {
-this.type = t;
-}, "~S");
-Clazz.defineMethod (c$, "setType",
-function (type) {
-this.type = type == null ? null : type.toString ();
-}, "jalview.datamodel.PDBEntry.Type");
-Clazz.defineMethod (c$, "getType",
-function () {
-return this.type;
-});
-Clazz.defineMethod (c$, "setId",
-function (id) {
-this.id = id;
-}, "~S");
-Clazz.defineMethod (c$, "getId",
-function () {
-return this.id;
-});
-Clazz.defineMethod (c$, "setProperty",
-function (property) {
-this.properties = property;
-}, "java.util.Hashtable");
-Clazz.defineMethod (c$, "getProperty",
-function () {
-return this.properties;
-});
-Clazz.defineMethod (c$, "getChainCode",
-function () {
-return this.chainCode;
-});
-Clazz.defineMethod (c$, "setChainCode",
-function (chainCode) {
-this.chainCode = chainCode;
-}, "~S");
-Clazz.pu$h ();
-c$ = Clazz.declareType (jalview.datamodel.PDBEntry, "Type", Enum);
-Clazz.defineEnumConstant (c$, "PDB", 0, []);
-Clazz.defineEnumConstant (c$, "FILE", 1, []);
-c$ = Clazz.p0p ();
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.lang.Enum"], "jalview.datamodel.PDBEntry", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.file = null;
+this.type = null;
+this.id = null;
+this.chainCode = null;
+this.properties = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "PDBEntry");
+Clazz.overrideMethod (c$, "equals",
+function (obj) {
+if (obj == null || !(Clazz.instanceOf (obj, jalview.datamodel.PDBEntry))) {
+return false;
+}if (obj === this) {
+return true;
+}var o = obj;
+return (this.type === o.type || (this.type != null && o.type != null && o.type.equals (this.type))) && (this.id === o.id || (this.id != null && o.id != null && o.id.equalsIgnoreCase (this.id))) && (this.chainCode === o.chainCode || (this.chainCode != null && o.chainCode != null && o.chainCode.equalsIgnoreCase (this.chainCode))) && (this.properties === o.properties || (this.properties != null && o.properties != null && this.properties.equals (o.properties)));
+}, "~O");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (pdbId, chain, type, filePath) {
+this.id = pdbId;
+this.chainCode = chain;
+this.type = type == null ? null : type.toString ();
+this.file = filePath;
+}, "~S,~S,jalview.datamodel.PDBEntry.Type,~S");
+Clazz.makeConstructor (c$,
+function (entry) {
+this.file = entry.file;
+this.type = entry.type;
+this.id = entry.id;
+this.chainCode = entry.chainCode;
+if (entry.properties != null) {
+this.properties = entry.properties.clone ();
+}}, "jalview.datamodel.PDBEntry");
+Clazz.defineMethod (c$, "setFile",
+function (file) {
+this.file = file;
+}, "~S");
+Clazz.defineMethod (c$, "getFile",
+function () {
+return this.file;
+});
+Clazz.defineMethod (c$, "setType",
+function (t) {
+this.type = t;
+}, "~S");
+Clazz.defineMethod (c$, "setType",
+function (type) {
+this.type = type == null ? null : type.toString ();
+}, "jalview.datamodel.PDBEntry.Type");
+Clazz.defineMethod (c$, "getType",
+function () {
+return this.type;
+});
+Clazz.defineMethod (c$, "setId",
+function (id) {
+this.id = id;
+}, "~S");
+Clazz.defineMethod (c$, "getId",
+function () {
+return this.id;
+});
+Clazz.defineMethod (c$, "setProperty",
+function (property) {
+this.properties = property;
+}, "java.util.Hashtable");
+Clazz.defineMethod (c$, "getProperty",
+function () {
+return this.properties;
+});
+Clazz.defineMethod (c$, "getChainCode",
+function () {
+return this.chainCode;
+});
+Clazz.defineMethod (c$, "setChainCode",
+function (chainCode) {
+this.chainCode = chainCode;
+}, "~S");
+Clazz.pu$h ();
+c$ = Clazz.declareType (jalview.datamodel.PDBEntry, "Type", Enum);
+Clazz.defineEnumConstant (c$, "PDB", 0, []);
+Clazz.defineEnumConstant (c$, "FILE", 1, []);
+c$ = Clazz.p0p ();
+});
diff --git a/bin/jalview/datamodel/Provenance.js b/bin/jalview/datamodel/Provenance.js
index 04f873e..c0180ea 100644
--- a/bin/jalview/datamodel/Provenance.js
+++ b/bin/jalview/datamodel/Provenance.js
@@ -1,25 +1,25 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.util.Vector"], "jalview.datamodel.Provenance", ["jalview.datamodel.ProvenanceEntry"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.entries = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "Provenance");
-Clazz.prepareFields (c$, function () {
-this.entries = new java.util.Vector ();
-});
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "getEntries",
-function () {
-var ret = new Array (this.entries.size ());
-for (var i = 0; i < this.entries.size (); i++) {
-ret[i] = this.entries.elementAt (i);
-}
-return ret;
-});
-Clazz.defineMethod (c$, "addEntry",
-function (user, action, date, id) {
-this.entries.addElement ( new jalview.datamodel.ProvenanceEntry (user, action, date, id));
-}, "~S,~S,java.util.Date,~S");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.util.Vector"], "jalview.datamodel.Provenance", ["jalview.datamodel.ProvenanceEntry"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.entries = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "Provenance");
+Clazz.prepareFields (c$, function () {
+this.entries = new java.util.Vector ();
+});
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "getEntries",
+function () {
+var ret = new Array (this.entries.size ());
+for (var i = 0; i < this.entries.size (); i++) {
+ret[i] = this.entries.elementAt (i);
+}
+return ret;
+});
+Clazz.defineMethod (c$, "addEntry",
+function (user, action, date, id) {
+this.entries.addElement ( new jalview.datamodel.ProvenanceEntry (user, action, date, id));
+}, "~S,~S,java.util.Date,~S");
+});
diff --git a/bin/jalview/datamodel/ProvenanceEntry.js b/bin/jalview/datamodel/ProvenanceEntry.js
index 5077d90..1283717 100644
--- a/bin/jalview/datamodel/ProvenanceEntry.js
+++ b/bin/jalview/datamodel/ProvenanceEntry.js
@@ -1,31 +1,31 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.decorateAsClass (function () {
-this.user = null;
-this.action = null;
-this.id = null;
-this.date = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "ProvenanceEntry");
-Clazz.makeConstructor (c$,
-function (u, a, d, i) {
-this.user = u;
-this.action = a;
-this.date = d;
-this.id = i;
-}, "~S,~S,java.util.Date,~S");
-Clazz.defineMethod (c$, "getUser",
-function () {
-return this.user;
-});
-Clazz.defineMethod (c$, "getAction",
-function () {
-return this.action;
-});
-Clazz.defineMethod (c$, "getDate",
-function () {
-return this.date;
-});
-Clazz.defineMethod (c$, "getID",
-function () {
-return this.id;
-});
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.decorateAsClass (function () {
+this.user = null;
+this.action = null;
+this.id = null;
+this.date = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "ProvenanceEntry");
+Clazz.makeConstructor (c$,
+function (u, a, d, i) {
+this.user = u;
+this.action = a;
+this.date = d;
+this.id = i;
+}, "~S,~S,java.util.Date,~S");
+Clazz.defineMethod (c$, "getUser",
+function () {
+return this.user;
+});
+Clazz.defineMethod (c$, "getAction",
+function () {
+return this.action;
+});
+Clazz.defineMethod (c$, "getDate",
+function () {
+return this.date;
+});
+Clazz.defineMethod (c$, "getID",
+function () {
+return this.id;
+});
diff --git a/bin/jalview/datamodel/RnaViewerModel.js b/bin/jalview/datamodel/RnaViewerModel.js
index 2e64a80..612cdda 100644
--- a/bin/jalview/datamodel/RnaViewerModel.js
+++ b/bin/jalview/datamodel/RnaViewerModel.js
@@ -1,21 +1,21 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.decorateAsClass (function () {
-this.viewId = null;
-this.title = null;
-this.x = 0;
-this.y = 0;
-this.width = 0;
-this.height = 0;
-this.dividerLocation = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "RnaViewerModel");
-Clazz.makeConstructor (c$,
-function (viewId, title, xpos, ypos, width, height, dividerLocation) {
-this.viewId = viewId;
-this.title = title;
-this.x = xpos;
-this.y = ypos;
-this.width = width;
-this.height = height;
-this.dividerLocation = dividerLocation;
-}, "~S,~S,~N,~N,~N,~N,~N");
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.decorateAsClass (function () {
+this.viewId = null;
+this.title = null;
+this.x = 0;
+this.y = 0;
+this.width = 0;
+this.height = 0;
+this.dividerLocation = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "RnaViewerModel");
+Clazz.makeConstructor (c$,
+function (viewId, title, xpos, ypos, width, height, dividerLocation) {
+this.viewId = viewId;
+this.title = title;
+this.x = xpos;
+this.y = ypos;
+this.width = width;
+this.height = height;
+this.dividerLocation = dividerLocation;
+}, "~S,~S,~N,~N,~N,~N,~N");
diff --git a/bin/jalview/datamodel/SearchResults.js b/bin/jalview/datamodel/SearchResults.js
index 74170de..e82bfa5 100644
--- a/bin/jalview/datamodel/SearchResults.js
+++ b/bin/jalview/datamodel/SearchResults.js
@@ -1,137 +1,137 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.util.ArrayList"], "jalview.datamodel.SearchResults", ["java.lang.StringBuilder", "java.util.Arrays"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.matches = null;
-if (!Clazz.isClassDefined ("jalview.datamodel.SearchResults.Match")) {
-jalview.datamodel.SearchResults.$SearchResults$Match$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "SearchResults");
-Clazz.prepareFields (c$, function () {
-this.matches = new java.util.ArrayList ();
-});
-Clazz.defineMethod (c$, "addResult",
-function (seq, start, end) {
-this.matches.add (Clazz.innerTypeInstance (jalview.datamodel.SearchResults.Match, this, null, seq, start, end));
-}, "jalview.datamodel.SequenceI,~N,~N");
-Clazz.defineMethod (c$, "involvesSequence",
-function (sequence) {
-var ds = sequence.getDatasetSequence ();
-for (var m, $m = this.matches.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
-if (m.sequence != null && (m.sequence === sequence || m.sequence === ds)) {
-return true;
-}}
-return false;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getResults",
-function (sequence, start, end) {
-if (this.matches.isEmpty ()) {
-return null;
-}var result = null;
-var tmp = null;
-var resultLength;
-var matchStart = 0;
-var matchEnd = 0;
-var mfound;
-for (var m, $m = this.matches.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
-mfound = false;
-if (m.sequence === sequence) {
-mfound = true;
-matchStart = sequence.findIndex (m.start) - 1;
-matchEnd = sequence.findIndex (m.end) - 1;
-} else if (m.sequence === sequence.getDatasetSequence ()) {
-mfound = true;
-matchStart = sequence.findIndex (m.start) - 1;
-matchEnd = sequence.findIndex (m.end) - 1;
-}if (mfound) {
-if (matchStart <= end && matchEnd >= start) {
-if (matchStart < start) {
-matchStart = start;
-}if (matchEnd > end) {
-matchEnd = end;
-}if (result == null) {
-result = Clazz.newIntArray (-1, [matchStart, matchEnd]);
-} else {
-resultLength = result.length;
-tmp = Clazz.newIntArray (resultLength + 2, 0);
-System.arraycopy (result, 0, tmp, 0, resultLength);
-result = tmp;
-result[resultLength] = matchStart;
-result[resultLength + 1] = matchEnd;
-}} else {
-}}}
-return result;
-}, "jalview.datamodel.SequenceI,~N,~N");
-Clazz.defineMethod (c$, "getSize",
-function () {
-return this.matches.size ();
-});
-Clazz.defineMethod (c$, "getResultSequence",
-function (index) {
-return this.matches.get (index).sequence;
-}, "~N");
-Clazz.defineMethod (c$, "getResultStart",
-function (i) {
-return this.matches.get (i).start;
-}, "~N");
-Clazz.defineMethod (c$, "getResultEnd",
-function (i) {
-return this.matches.get (i).end;
-}, "~N");
-Clazz.defineMethod (c$, "isEmpty",
-function () {
-return this.matches.isEmpty ();
-});
-Clazz.defineMethod (c$, "getResults",
-function () {
-return this.matches;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-var result = new StringBuilder (256);
-for (var m, $m = this.matches.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
-result.append (m.toString ());
-}
-return result.toString ();
-});
-c$.$SearchResults$Match$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.sequence = null;
-this.start = 0;
-this.end = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel.SearchResults, "Match");
-Clazz.makeConstructor (c$,
-function (a, b, c) {
-this.sequence = a;
-this.start = b;
-this.end = c;
-}, "jalview.datamodel.SequenceI,~N,~N");
-Clazz.defineMethod (c$, "getSequence",
-function () {
-return this.sequence;
-});
-Clazz.defineMethod (c$, "getStart",
-function () {
-return this.start;
-});
-Clazz.defineMethod (c$, "getEnd",
-function () {
-return this.end;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-var a = this.sequence.getSequence ();
-var b = Math.max (this.start - 1, 0);
-var c = Math.min (this.end, a.length + 1);
-return String.valueOf (java.util.Arrays.copyOfRange (a, b, c));
-});
-Clazz.defineMethod (c$, "setSequence",
-function (a) {
-this.sequence = a;
-}, "jalview.datamodel.SequenceI");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.util.ArrayList"], "jalview.datamodel.SearchResults", ["java.lang.StringBuilder", "java.util.Arrays"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.matches = null;
+if (!Clazz.isClassDefined ("jalview.datamodel.SearchResults.Match")) {
+jalview.datamodel.SearchResults.$SearchResults$Match$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "SearchResults");
+Clazz.prepareFields (c$, function () {
+this.matches = new java.util.ArrayList ();
+});
+Clazz.defineMethod (c$, "addResult",
+function (seq, start, end) {
+this.matches.add (Clazz.innerTypeInstance (jalview.datamodel.SearchResults.Match, this, null, seq, start, end));
+}, "jalview.datamodel.SequenceI,~N,~N");
+Clazz.defineMethod (c$, "involvesSequence",
+function (sequence) {
+var ds = sequence.getDatasetSequence ();
+for (var m, $m = this.matches.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+if (m.sequence != null && (m.sequence === sequence || m.sequence === ds)) {
+return true;
+}}
+return false;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getResults",
+function (sequence, start, end) {
+if (this.matches.isEmpty ()) {
+return null;
+}var result = null;
+var tmp = null;
+var resultLength;
+var matchStart = 0;
+var matchEnd = 0;
+var mfound;
+for (var m, $m = this.matches.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+mfound = false;
+if (m.sequence === sequence) {
+mfound = true;
+matchStart = sequence.findIndex (m.start) - 1;
+matchEnd = sequence.findIndex (m.end) - 1;
+} else if (m.sequence === sequence.getDatasetSequence ()) {
+mfound = true;
+matchStart = sequence.findIndex (m.start) - 1;
+matchEnd = sequence.findIndex (m.end) - 1;
+}if (mfound) {
+if (matchStart <= end && matchEnd >= start) {
+if (matchStart < start) {
+matchStart = start;
+}if (matchEnd > end) {
+matchEnd = end;
+}if (result == null) {
+result = Clazz.newIntArray (-1, [matchStart, matchEnd]);
+} else {
+resultLength = result.length;
+tmp = Clazz.newIntArray (resultLength + 2, 0);
+System.arraycopy (result, 0, tmp, 0, resultLength);
+result = tmp;
+result[resultLength] = matchStart;
+result[resultLength + 1] = matchEnd;
+}} else {
+}}}
+return result;
+}, "jalview.datamodel.SequenceI,~N,~N");
+Clazz.defineMethod (c$, "getSize",
+function () {
+return this.matches.size ();
+});
+Clazz.defineMethod (c$, "getResultSequence",
+function (index) {
+return this.matches.get (index).sequence;
+}, "~N");
+Clazz.defineMethod (c$, "getResultStart",
+function (i) {
+return this.matches.get (i).start;
+}, "~N");
+Clazz.defineMethod (c$, "getResultEnd",
+function (i) {
+return this.matches.get (i).end;
+}, "~N");
+Clazz.defineMethod (c$, "isEmpty",
+function () {
+return this.matches.isEmpty ();
+});
+Clazz.defineMethod (c$, "getResults",
+function () {
+return this.matches;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+var result = new StringBuilder (256);
+for (var m, $m = this.matches.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+result.append (m.toString ());
+}
+return result.toString ();
+});
+c$.$SearchResults$Match$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.sequence = null;
+this.start = 0;
+this.end = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel.SearchResults, "Match");
+Clazz.makeConstructor (c$,
+function (a, b, c) {
+this.sequence = a;
+this.start = b;
+this.end = c;
+}, "jalview.datamodel.SequenceI,~N,~N");
+Clazz.defineMethod (c$, "getSequence",
+function () {
+return this.sequence;
+});
+Clazz.defineMethod (c$, "getStart",
+function () {
+return this.start;
+});
+Clazz.defineMethod (c$, "getEnd",
+function () {
+return this.end;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+var a = this.sequence.getSequence ();
+var b = Math.max (this.start - 1, 0);
+var c = Math.min (this.end, a.length + 1);
+return String.valueOf (java.util.Arrays.copyOfRange (a, b, c));
+});
+Clazz.defineMethod (c$, "setSequence",
+function (a) {
+this.sequence = a;
+}, "jalview.datamodel.SequenceI");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/datamodel/SecondaryStructureAnnotation.js b/bin/jalview/datamodel/SecondaryStructureAnnotation.js
index 6a35ad3..2d1eb58 100644
--- a/bin/jalview/datamodel/SecondaryStructureAnnotation.js
+++ b/bin/jalview/datamodel/SecondaryStructureAnnotation.js
@@ -1,23 +1,23 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.AlignmentAnnotation"], "jalview.datamodel.SecondaryStructureAnnotation", ["jalview.datamodel.Annotation"], function () {
-c$ = Clazz.declareType (jalview.datamodel, "SecondaryStructureAnnotation", jalview.datamodel.AlignmentAnnotation);
-Clazz.makeConstructor (c$,
-function (rna) {
-Clazz.superConstructor (this, jalview.datamodel.SecondaryStructureAnnotation, ["Secondary Structure", "Un truc trop cool", jalview.datamodel.SecondaryStructureAnnotation.getAnnotation (rna)]);
-jalview.datamodel.SecondaryStructureAnnotation._rna = rna;
-}, "fr.orsay.lri.varna.models.rna.RNA");
-Clazz.defineMethod (c$, "getRNA",
-function () {
-return jalview.datamodel.SecondaryStructureAnnotation._rna;
-});
-c$.getAnnotation = Clazz.defineMethod (c$, "getAnnotation",
-function (rna) {
-var ann = new Array (rna.getSize ());
-for (var i = 0; i < ann.length; i++) {
-ann[i] = new jalview.datamodel.Annotation (jalview.datamodel.SecondaryStructureAnnotation._rna.getStructDBN (true), "", ' ', 0);
-;}
-return ann;
-}, "fr.orsay.lri.varna.models.rna.RNA");
-Clazz.defineStatics (c$,
-"_rna", null);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.AlignmentAnnotation"], "jalview.datamodel.SecondaryStructureAnnotation", ["jalview.datamodel.Annotation"], function () {
+c$ = Clazz.declareType (jalview.datamodel, "SecondaryStructureAnnotation", jalview.datamodel.AlignmentAnnotation);
+Clazz.makeConstructor (c$,
+function (rna) {
+Clazz.superConstructor (this, jalview.datamodel.SecondaryStructureAnnotation, ["Secondary Structure", "Un truc trop cool", jalview.datamodel.SecondaryStructureAnnotation.getAnnotation (rna)]);
+jalview.datamodel.SecondaryStructureAnnotation._rna = rna;
+}, "fr.orsay.lri.varna.models.rna.RNA");
+Clazz.defineMethod (c$, "getRNA",
+function () {
+return jalview.datamodel.SecondaryStructureAnnotation._rna;
+});
+c$.getAnnotation = Clazz.defineMethod (c$, "getAnnotation",
+function (rna) {
+var ann = new Array (rna.getSize ());
+for (var i = 0; i < ann.length; i++) {
+ann[i] = new jalview.datamodel.Annotation (jalview.datamodel.SecondaryStructureAnnotation._rna.getStructDBN (true), "", ' ', 0);
+;}
+return ann;
+}, "fr.orsay.lri.varna.models.rna.RNA");
+Clazz.defineStatics (c$,
+"_rna", null);
+});
diff --git a/bin/jalview/datamodel/SeqCigar.class b/bin/jalview/datamodel/SeqCigar.class
index 5f54f07..8bb4e15 100644
Binary files a/bin/jalview/datamodel/SeqCigar.class and b/bin/jalview/datamodel/SeqCigar.class differ
diff --git a/bin/jalview/datamodel/SeqCigar.js b/bin/jalview/datamodel/SeqCigar.js
index c9304ac..d35d16f 100644
--- a/bin/jalview/datamodel/SeqCigar.js
+++ b/bin/jalview/datamodel/SeqCigar.js
@@ -1,259 +1,259 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.CigarSimple"], "jalview.datamodel.SeqCigar", ["jalview.analysis.AlignSeq", "$.SeqsetUtils", "jalview.datamodel.Sequence", "jalview.util.Comparison", "$.MessageManager", "$.ShiftList", "java.lang.Error", "$.StringBuffer", "java.util.Hashtable"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.start = 0;
-this.end = 0;
-this.refseq = null;
-this.seqProps = null;
-this.selGroups = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "SeqCigar", jalview.datamodel.CigarSimple);
-Clazz.defineMethod (c$, "getRefSeq",
-function () {
-return this.refseq;
-});
-Clazz.defineMethod (c$, "getStart",
-function () {
-return this.start;
-});
-Clazz.defineMethod (c$, "getEnd",
-function () {
-return this.end;
-});
-Clazz.overrideMethod (c$, "getSequenceString",
-function (GapChar) {
-return (this.length == 0) ? "" : this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar)[0];
-}, "~S");
-Clazz.defineMethod (c$, "getSeq",
-function (GapChar) {
-var seq;
-if (this.refseq == null || this.length == 0) {
-return null;
-}var edit_result = this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar);
-if (edit_result == null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_unexpected_null_from_get_sequence_and_deletions"));
-}var bounds = edit_result[1];
-seq = new jalview.datamodel.Sequence (this.refseq.getName (), edit_result[0], this.refseq.getStart () + this.start + bounds[0], this.refseq.getStart () + this.start + ((bounds[2] == 0) ? -1 : bounds[2]));
-seq.setDescription (this.refseq.getDescription ());
-var sstart = seq.getStart ();
-var send = seq.getEnd ();
-if (this.seqProps != null) {
-jalview.analysis.SeqsetUtils.SeqCharacterUnhash (seq, this.seqProps);
-}seq.setDatasetSequence (this.refseq);
-seq.setStart (sstart);
-seq.setEnd (send);
-return seq;
-}, "~S");
-Clazz.defineMethod (c$, "_setSeq",
-($fz = function (seq, initialDeletion, _s, _e) {
-var hasgaps = false;
-if (seq == null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_set_seq_null"));
-}if (_s < 0) {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_s", Clazz.newArray (-1, [Integer.$valueOf (_s).toString ()])));
-}var seq_string = seq.getSequenceAsString ();
-if (_e == 0 || _e < _s || _e > seq_string.length) {
-_e = seq_string.length;
-}this.start = seq.findPosition (_s) - seq.getStart ();
-this.end = seq.findPosition (_e) - seq.getStart ();
-var l_ungapped = this.end - this.start;
-var ds = seq.getDatasetSequence ();
-if (ds == null) {
-var ungapped = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (seq_string));
-l_ungapped = ungapped.length;
-if (l_ungapped == seq.getLength ()) {
-ds = seq;
-} else {
-ds = new jalview.datamodel.Sequence (seq.getName (), ungapped, seq.getStart (), seq.getStart () + ungapped.length - 1);
-}}if (ds.getStart () < seq.getStart ()) {
-var offset = seq.getStart () - ds.getStart ();
-if (initialDeletion) {
-this.addDeleted (_s + offset);
-this.start = 0;
-this.end += offset;
-} else {
-this.start += offset;
-this.end += offset;
-}}if (l_ungapped != (_e - _s)) {
-hasgaps = true;
-}this.refseq = ds;
-this.seqProps = jalview.analysis.SeqsetUtils.SeqCharacterHash (seq);
-if (this.end > ds.getLength ()) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_seqcigar_possible"));
-}return hasgaps;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,~B,~N,~N");
-Clazz.makeConstructor (c$,
-function (seq, operation, range) {
-Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
-if (seq == null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implmentation_bug_seq_null"));
-}if (operation.length != range.length) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_bug_cigar_operation_list_range_list"));
-}if (operation != null) {
-this.operation = Clazz.newCharArray (operation.length + this._inc_length, '\0');
-this.range = Clazz.newIntArray (operation.length + this._inc_length, 0);
-if (this._setSeq (seq, false, 0, 0)) {
-throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
-}for (var i = this.length, j = 0; j < operation.length; i++, j++) {
-var op = operation[j];
-if (op != 'M' && op != 'I' && op != 'D') {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_bug_cigar_operation", Clazz.newArray (-1, [Integer.$valueOf (j).toString (), Integer.$valueOf (op.charCodeAt (0)).toString (), Integer.$valueOf ('M'.charCodeAt (0)).toString (), Integer.$valueOf ('I'.charCodeAt (0)).toString (), Integer.$valueOf ('D'.charCodeAt (0)).toString ()])));
-}this.operation[i] = op;
-this.range[i] = range[j];
-}
-this.length += operation.length;
-} else {
-this.operation = null;
-this.range = null;
-this.length = 0;
-if (this._setSeq (seq, false, 0, 0)) {
-throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
-}}}, "jalview.datamodel.SequenceI,~A,~A");
-Clazz.defineMethod (c$, "addMatch",
-function (range) {
-this.addOperation ('M', range);
-}, "~N");
-c$.addSequenceOps = Clazz.defineMethod (c$, "addSequenceOps",
-function (cigar, seq, startpos, endpos, initialDeletions) {
-var op = '\u0000';
-var range = 0;
-var p = 0;
-var res = seq.getLength ();
-if (!initialDeletions) {
-p = startpos;
-}while (p <= endpos) {
-var isGap = (p < res) ? jalview.util.Comparison.isGap (seq.getCharAt (p)) : true;
-if ((startpos <= p) && (p <= endpos)) {
-if (isGap) {
-if (range > 0 && op != 'I') {
-cigar.addOperation (op, range);
-range = 0;
-}op = 'I';
-range++;
-} else {
-if (range > 0 && op != 'M') {
-cigar.addOperation (op, range);
-range = 0;
-}op = 'M';
-range++;
-}} else {
-if (!isGap) {
-if (range > 0 && op != 'D') {
-cigar.addOperation (op, range);
-range = 0;
-}op = 'D';
-range++;
-} else {
-}}p++;
-}
-if (range > 0) {
-cigar.addOperation (op, range);
-}}, "jalview.datamodel.CigarBase,jalview.datamodel.SequenceI,~N,~N,~B");
-Clazz.makeConstructor (c$,
-function (seq) {
-Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
-if (seq == null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
-}this._setSeq (seq, false, 0, 0);
-jalview.datamodel.SeqCigar.addSequenceOps (this, seq, 0, seq.getLength () - 1, false);
-}, "jalview.datamodel.SequenceI");
-Clazz.makeConstructor (c$,
-function (seq, start, end) {
-Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
-if (seq == null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
-}this._setSeq (seq, false, start, end + 1);
-jalview.datamodel.SeqCigar.addSequenceOps (this, seq, start, end, false);
-}, "jalview.datamodel.SequenceI,~N,~N");
-c$.parseCigar = Clazz.defineMethod (c$, "parseCigar",
-function (seq, cigarString) {
-var opsandrange = jalview.datamodel.CigarBase.parseCigarString (cigarString);
-return new jalview.datamodel.SeqCigar (seq, opsandrange[0], opsandrange[1]);
-}, "jalview.datamodel.SequenceI,~S");
-c$.createAlignmentSequences = Clazz.defineMethod (c$, "createAlignmentSequences",
-function (alseqs, gapCharacter, colsel, segments) {
-var seqs = new Array (alseqs.length);
-var g_seqs = new Array (alseqs.length);
-var alseqs_string = new Array (alseqs.length);
-var gs_regions = new Array (alseqs.length);
-for (var i = 0; i < alseqs.length; i++) {
-alseqs_string[i] = alseqs[i].getRefSeq ().getSequenceAsString (alseqs[i].start, alseqs[i].end);
-gs_regions[i] = alseqs[i].getSequenceAndDeletions (alseqs_string[i], gapCharacter);
-if (gs_regions[i] == null) {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_cigar_seq_no_operations", Clazz.newArray (-1, [Integer.$valueOf (i).toString ()])));
-}g_seqs[i] = new StringBuffer ((gs_regions[i])[0]);
-}
-var shifts = new jalview.util.ShiftList ();
-for (var i = 0; i < alseqs.length; i++) {
-var gs_region = ((gs_regions[i])[2]);
-if (gs_region != null) {
-for (var hr = 0; hr < gs_region.length; hr++) {
-var region = gs_region[hr];
-var insert = Clazz.newCharArray (region[1] - region[0] + 1, '\0');
-for (var s = 0; s < insert.length; s++) {
-insert[s] = gapCharacter;
-}
-var inspos = shifts.shift (region[2]);
-for (var s = 0; s < alseqs.length; s++) {
-if (s != i) {
-if (g_seqs[s].length () <= inspos) {
-for (var l = inspos - g_seqs[s].length (); l > 0; l--) {
-g_seqs[s].append (gapCharacter);
-}
-}g_seqs[s].insert (inspos, insert);
-} else {
-g_seqs[s].insert (inspos, alseqs_string[i].substring (region[0], region[1] + 1));
-}}
-shifts.addShift (region[2], insert.length);
-if (segments == null) {
-colsel.hideColumns (inspos, inspos + insert.length - 1);
-}}
-}}
-for (var i = 0; i < alseqs.length; i++) {
-var bounds = ((gs_regions[i])[1]);
-var ref = alseqs[i].getRefSeq ();
-seqs[i] = new jalview.datamodel.Sequence (ref.getName (), g_seqs[i].toString (), ref.getStart () + alseqs[i].start + bounds[0], ref.getStart () + alseqs[i].start + (bounds[2] == 0 ? -1 : bounds[2]));
-seqs[i].setDatasetSequence (ref);
-seqs[i].setDescription (ref.getDescription ());
-}
-if (segments != null) {
-for (var i = 0; i < segments.length; i += 3) {
-colsel.hideColumns (segments[i + 1], segments[i + 1] + segments[i + 2] - 1);
-}
-}return seqs;
-}, "~A,~S,jalview.datamodel.ColumnSelection,~A");
-Clazz.defineMethod (c$, "setGroupMembership",
-function (group) {
-if (this.selGroups == null) {
-this.selGroups = new java.util.Hashtable ();
-}this.selGroups.put (group, Clazz.newIntArray (0, 0));
-}, "~O");
-Clazz.defineMethod (c$, "removeGroupMembership",
-function (group) {
-if (this.selGroups != null && this.selGroups.containsKey (group)) {
-this.selGroups.remove (group);
-return true;
-}return false;
-}, "~O");
-Clazz.defineMethod (c$, "clearMemberships",
-function () {
-if (this.selGroups != null) {
-this.selGroups.clear ();
-}this.selGroups = null;
-});
-Clazz.defineMethod (c$, "getAllMemberships",
-function () {
-if (this.selGroups == null) {
-return null;
-}var mmbs = new Array (this.selGroups.size ());
-var en = this.selGroups.keys ();
-for (var i = 0; en.hasMoreElements (); i++) {
-mmbs[i] = en.nextElement ();
-}
-return mmbs;
-});
-Clazz.defineMethod (c$, "isMemberOf",
-function (sgr) {
-return (this.selGroups != null) && this.selGroups.get (sgr) != null;
-}, "~O");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.CigarSimple"], "jalview.datamodel.SeqCigar", ["jalview.analysis.AlignSeq", "$.SeqsetUtils", "jalview.datamodel.Sequence", "jalview.util.Comparison", "$.MessageManager", "$.ShiftList", "java.lang.Error", "$.StringBuffer", "java.util.Hashtable"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.start = 0;
+this.end = 0;
+this.refseq = null;
+this.seqProps = null;
+this.selGroups = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "SeqCigar", jalview.datamodel.CigarSimple);
+Clazz.defineMethod (c$, "getRefSeq",
+function () {
+return this.refseq;
+});
+Clazz.defineMethod (c$, "getStart",
+function () {
+return this.start;
+});
+Clazz.defineMethod (c$, "getEnd",
+function () {
+return this.end;
+});
+Clazz.overrideMethod (c$, "getSequenceString",
+function (GapChar) {
+return (this.length == 0) ? "" : this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar)[0];
+}, "~S");
+Clazz.defineMethod (c$, "getSeq",
+function (GapChar) {
+var seq;
+if (this.refseq == null || this.length == 0) {
+return null;
+}var edit_result = this.getSequenceAndDeletions (this.refseq.getSequenceAsString (this.start, this.end), GapChar);
+if (edit_result == null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_unexpected_null_from_get_sequence_and_deletions"));
+}var bounds = edit_result[1];
+seq = new jalview.datamodel.Sequence (this.refseq.getName (), edit_result[0], this.refseq.getStart () + this.start + bounds[0], this.refseq.getStart () + this.start + ((bounds[2] == 0) ? -1 : bounds[2]));
+seq.setDescription (this.refseq.getDescription ());
+var sstart = seq.getStart ();
+var send = seq.getEnd ();
+if (this.seqProps != null) {
+jalview.analysis.SeqsetUtils.SeqCharacterUnhash (seq, this.seqProps);
+}seq.setDatasetSequence (this.refseq);
+seq.setStart (sstart);
+seq.setEnd (send);
+return seq;
+}, "~S");
+Clazz.defineMethod (c$, "_setSeq",
+($fz = function (seq, initialDeletion, _s, _e) {
+var hasgaps = false;
+if (seq == null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_set_seq_null"));
+}if (_s < 0) {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_s", Clazz.newArray (-1, [Integer.$valueOf (_s).toString ()])));
+}var seq_string = seq.getSequenceAsString ();
+if (_e == 0 || _e < _s || _e > seq_string.length) {
+_e = seq_string.length;
+}this.start = seq.findPosition (_s) - seq.getStart ();
+this.end = seq.findPosition (_e) - seq.getStart ();
+var l_ungapped = this.end - this.start;
+var ds = seq.getDatasetSequence ();
+if (ds == null) {
+var ungapped = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (seq_string));
+l_ungapped = ungapped.length;
+if (l_ungapped == seq.getLength ()) {
+ds = seq;
+} else {
+ds = new jalview.datamodel.Sequence (seq.getName (), ungapped, seq.getStart (), seq.getStart () + ungapped.length - 1);
+}}if (ds.getStart () < seq.getStart ()) {
+var offset = seq.getStart () - ds.getStart ();
+if (initialDeletion) {
+this.addDeleted (_s + offset);
+this.start = 0;
+this.end += offset;
+} else {
+this.start += offset;
+this.end += offset;
+}}if (l_ungapped != (_e - _s)) {
+hasgaps = true;
+}this.refseq = ds;
+this.seqProps = jalview.analysis.SeqsetUtils.SeqCharacterHash (seq);
+if (this.end > ds.getLength ()) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_seqcigar_possible"));
+}return hasgaps;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,~B,~N,~N");
+Clazz.makeConstructor (c$,
+function (seq, operation, range) {
+Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
+if (seq == null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implmentation_bug_seq_null"));
+}if (operation.length != range.length) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_bug_cigar_operation_list_range_list"));
+}if (operation != null) {
+this.operation = Clazz.newCharArray (operation.length + this._inc_length, '\0');
+this.range = Clazz.newIntArray (operation.length + this._inc_length, 0);
+if (this._setSeq (seq, false, 0, 0)) {
+throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
+}for (var i = this.length, j = 0; j < operation.length; i++, j++) {
+var op = operation[j];
+if (op != 'M' && op != 'I' && op != 'D') {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_bug_cigar_operation", Clazz.newArray (-1, [Integer.$valueOf (j).toString (), Integer.$valueOf (op.charCodeAt (0)).toString (), Integer.$valueOf ('M'.charCodeAt (0)).toString (), Integer.$valueOf ('I'.charCodeAt (0)).toString (), Integer.$valueOf ('D'.charCodeAt (0)).toString ()])));
+}this.operation[i] = op;
+this.range[i] = range[j];
+}
+this.length += operation.length;
+} else {
+this.operation = null;
+this.range = null;
+this.length = 0;
+if (this._setSeq (seq, false, 0, 0)) {
+throw new Error (jalview.util.MessageManager.getString ("error.not_yet_implemented_cigar_object_from_cigar_string"));
+}}}, "jalview.datamodel.SequenceI,~A,~A");
+Clazz.defineMethod (c$, "addMatch",
+function (range) {
+this.addOperation ('M', range);
+}, "~N");
+c$.addSequenceOps = Clazz.defineMethod (c$, "addSequenceOps",
+function (cigar, seq, startpos, endpos, initialDeletions) {
+var op = '\u0000';
+var range = 0;
+var p = 0;
+var res = seq.getLength ();
+if (!initialDeletions) {
+p = startpos;
+}while (p <= endpos) {
+var isGap = (p < res) ? jalview.util.Comparison.isGap (seq.getCharAt (p)) : true;
+if ((startpos <= p) && (p <= endpos)) {
+if (isGap) {
+if (range > 0 && op != 'I') {
+cigar.addOperation (op, range);
+range = 0;
+}op = 'I';
+range++;
+} else {
+if (range > 0 && op != 'M') {
+cigar.addOperation (op, range);
+range = 0;
+}op = 'M';
+range++;
+}} else {
+if (!isGap) {
+if (range > 0 && op != 'D') {
+cigar.addOperation (op, range);
+range = 0;
+}op = 'D';
+range++;
+} else {
+}}p++;
+}
+if (range > 0) {
+cigar.addOperation (op, range);
+}}, "jalview.datamodel.CigarBase,jalview.datamodel.SequenceI,~N,~N,~B");
+Clazz.makeConstructor (c$,
+function (seq) {
+Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
+if (seq == null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
+}this._setSeq (seq, false, 0, 0);
+jalview.datamodel.SeqCigar.addSequenceOps (this, seq, 0, seq.getLength () - 1, false);
+}, "jalview.datamodel.SequenceI");
+Clazz.makeConstructor (c$,
+function (seq, start, end) {
+Clazz.superConstructor (this, jalview.datamodel.SeqCigar);
+if (seq == null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_for_new_cigar"));
+}this._setSeq (seq, false, start, end + 1);
+jalview.datamodel.SeqCigar.addSequenceOps (this, seq, start, end, false);
+}, "jalview.datamodel.SequenceI,~N,~N");
+c$.parseCigar = Clazz.defineMethod (c$, "parseCigar",
+function (seq, cigarString) {
+var opsandrange = jalview.datamodel.CigarBase.parseCigarString (cigarString);
+return new jalview.datamodel.SeqCigar (seq, opsandrange[0], opsandrange[1]);
+}, "jalview.datamodel.SequenceI,~S");
+c$.createAlignmentSequences = Clazz.defineMethod (c$, "createAlignmentSequences",
+function (alseqs, gapCharacter, colsel, segments) {
+var seqs = new Array (alseqs.length);
+var g_seqs = new Array (alseqs.length);
+var alseqs_string = new Array (alseqs.length);
+var gs_regions = new Array (alseqs.length);
+for (var i = 0; i < alseqs.length; i++) {
+alseqs_string[i] = alseqs[i].getRefSeq ().getSequenceAsString (alseqs[i].start, alseqs[i].end);
+gs_regions[i] = alseqs[i].getSequenceAndDeletions (alseqs_string[i], gapCharacter);
+if (gs_regions[i] == null) {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_cigar_seq_no_operations", Clazz.newArray (-1, [Integer.$valueOf (i).toString ()])));
+}g_seqs[i] = new StringBuffer ((gs_regions[i])[0]);
+}
+var shifts = new jalview.util.ShiftList ();
+for (var i = 0; i < alseqs.length; i++) {
+var gs_region = ((gs_regions[i])[2]);
+if (gs_region != null) {
+for (var hr = 0; hr < gs_region.length; hr++) {
+var region = gs_region[hr];
+var insert = Clazz.newCharArray (region[1] - region[0] + 1, '\0');
+for (var s = 0; s < insert.length; s++) {
+insert[s] = gapCharacter;
+}
+var inspos = shifts.shift (region[2]);
+for (var s = 0; s < alseqs.length; s++) {
+if (s != i) {
+if (g_seqs[s].length () <= inspos) {
+for (var l = inspos - g_seqs[s].length (); l > 0; l--) {
+g_seqs[s].append (gapCharacter);
+}
+}g_seqs[s].insert (inspos, insert);
+} else {
+g_seqs[s].insert (inspos, alseqs_string[i].substring (region[0], region[1] + 1));
+}}
+shifts.addShift (region[2], insert.length);
+if (segments == null) {
+colsel.hideColumns (inspos, inspos + insert.length - 1);
+}}
+}}
+for (var i = 0; i < alseqs.length; i++) {
+var bounds = ((gs_regions[i])[1]);
+var ref = alseqs[i].getRefSeq ();
+seqs[i] = new jalview.datamodel.Sequence (ref.getName (), g_seqs[i].toString (), ref.getStart () + alseqs[i].start + bounds[0], ref.getStart () + alseqs[i].start + (bounds[2] == 0 ? -1 : bounds[2]));
+seqs[i].setDatasetSequence (ref);
+seqs[i].setDescription (ref.getDescription ());
+}
+if (segments != null) {
+for (var i = 0; i < segments.length; i += 3) {
+colsel.hideColumns (segments[i + 1], segments[i + 1] + segments[i + 2] - 1);
+}
+}return seqs;
+}, "~A,~S,jalview.datamodel.ColumnSelection,~A");
+Clazz.defineMethod (c$, "setGroupMembership",
+function (group) {
+if (this.selGroups == null) {
+this.selGroups = new java.util.Hashtable ();
+}this.selGroups.put (group, Clazz.newIntArray (0, 0));
+}, "~O");
+Clazz.defineMethod (c$, "removeGroupMembership",
+function (group) {
+if (this.selGroups != null && this.selGroups.containsKey (group)) {
+this.selGroups.remove (group);
+return true;
+}return false;
+}, "~O");
+Clazz.defineMethod (c$, "clearMemberships",
+function () {
+if (this.selGroups != null) {
+this.selGroups.clear ();
+}this.selGroups = null;
+});
+Clazz.defineMethod (c$, "getAllMemberships",
+function () {
+if (this.selGroups == null) {
+return null;
+}var mmbs = new Array (this.selGroups.size ());
+var en = this.selGroups.keys ();
+for (var i = 0; en.hasMoreElements (); i++) {
+mmbs[i] = en.nextElement ();
+}
+return mmbs;
+});
+Clazz.defineMethod (c$, "isMemberOf",
+function (sgr) {
+return (this.selGroups != null) && this.selGroups.get (sgr) != null;
+}, "~O");
+});
diff --git a/bin/jalview/datamodel/Sequence.class b/bin/jalview/datamodel/Sequence.class
index 87bb9e3..f406e42 100644
Binary files a/bin/jalview/datamodel/Sequence.class and b/bin/jalview/datamodel/Sequence.class differ
diff --git a/bin/jalview/datamodel/Sequence.js b/bin/jalview/datamodel/Sequence.js
index 6a15091..06c8329 100644
--- a/bin/jalview/datamodel/Sequence.js
+++ b/bin/jalview/datamodel/Sequence.js
@@ -1,658 +1,658 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.ASequence", "$.SequenceI", "jalview.jsdev.RegExp"], "jalview.datamodel.Sequence", ["jalview.analysis.AlignSeq", "jalview.datamodel.AlignmentAnnotation", "$.DBRefEntry", "$.DBRefSource", "$.PDBEntry", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "$.StringUtils", "java.lang.StringBuffer", "java.util.ArrayList", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.datasetSequence = null;
-this.name = null;
-this.sequence = null;
-this.description = null;
-this.start = 0;
-this.end = 0;
-this.pdbIds = null;
-this.vamsasId = null;
-this.dbrefs = null;
-this.rna = null;
-this.annotation = null;
-this.index = -1;
-this.sequenceFeatures = null;
-this.limitrx = null;
-this.endrx = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "Sequence", jalview.datamodel.ASequence, jalview.datamodel.SequenceI);
-Clazz.prepareFields (c$, function () {
-this.limitrx = jalview.jsdev.RegExp.newRegex (["[/][0-9]{1,}[-][0-9]{1,}$"]);
-this.endrx = jalview.jsdev.RegExp.newRegex (["[0-9]{1,}$"]);
-});
-Clazz.makeConstructor (c$,
-function (name, sequence, start, end) {
-Clazz.superConstructor (this, jalview.datamodel.Sequence, []);
-this.initSeqAndName (name, sequence.toCharArray (), start, end);
-}, "~S,~S,~N,~N");
-Clazz.makeConstructor (c$,
-function (name, sequence, start, end) {
-Clazz.superConstructor (this, jalview.datamodel.Sequence, []);
-this.initSeqAndName (name, sequence, start, end);
-}, "~S,~A,~N,~N");
-Clazz.defineMethod (c$, "initSeqAndName",
-function (name2, sequence2, start2, end2) {
-this.name = name2;
-this.sequence = sequence2;
-this.start = start2;
-this.end = end2;
-this.parseId ();
-this.checkValidRange ();
-}, "~S,~A,~N,~N");
-Clazz.defineMethod (c$, "parseId",
-function () {
-if (this.name == null) {
-System.err.println ("POSSIBLE IMPLEMENTATION ERROR: null sequence name passed to constructor.");
-this.name = "";
-}if (this.limitrx.search (this.name)) {
-this.name = this.limitrx.left ();
-this.endrx.search (this.limitrx.stringMatched ());
-this.setStart (Integer.parseInt (this.limitrx.stringMatched ().substring (1, this.endrx.matchedFrom () - 1)));
-this.setEnd (Integer.parseInt (this.endrx.stringMatched ()));
-}});
-Clazz.defineMethod (c$, "checkValidRange",
-function () {
-{
-var endRes = 0;
-for (var j = 0; j < this.sequence.length; j++) {
-if (!jalview.util.Comparison.isGap (this.sequence[j])) {
-endRes++;
-}}
-if (endRes > 0) {
-endRes += this.start - 1;
-}if (this.end < endRes) {
-this.end = endRes;
-}}});
-Clazz.makeConstructor (c$,
-function (name, sequence) {
-this.construct (name, sequence, 1, -1);
-}, "~S,~S");
-Clazz.makeConstructor (c$,
-function (seq) {
-this.construct (seq, seq.getAnnotation ());
-}, "jalview.datamodel.SequenceI");
-Clazz.makeConstructor (c$,
-function (seq, alAnnotation) {
-Clazz.superConstructor (this, jalview.datamodel.Sequence, []);
-this.initSeqFrom (seq, alAnnotation);
-}, "jalview.datamodel.SequenceI,~A");
-Clazz.defineMethod (c$, "initSeqFrom",
-function (seq, alAnnotation) {
-this.initSeqAndName (seq.getName (), seq.getSequence (), seq.getStart (), seq.getEnd ());
-this.description = seq.getDescription ();
-if (seq.getSequenceFeatures () != null) {
-var sf = seq.getSequenceFeatures ();
-for (var i = 0; i < sf.length; i++) {
-this.addSequenceFeature ( new jalview.datamodel.SequenceFeature (sf[i]));
-}
-}this.setDatasetSequence (seq.getDatasetSequence ());
-if (this.datasetSequence == null && seq.getDBRef () != null) {
-var dbr = seq.getDBRef ();
-for (var i = 0; i < dbr.length; i++) {
-this.addDBRef ( new jalview.datamodel.DBRefEntry (dbr[i]));
-}
-}if (seq.getAnnotation () != null) {
-var sqann = seq.getAnnotation ();
-for (var i = 0; i < sqann.length; i++) {
-if (sqann[i] == null) {
-continue;
-}var found = (alAnnotation == null);
-if (!found) {
-for (var apos = 0; !found && apos < alAnnotation.length; apos++) {
-found = (alAnnotation[apos] === sqann[i]);
-}
-}if (found) {
-var newann = new jalview.datamodel.AlignmentAnnotation (sqann[i]);
-this.addAlignmentAnnotation (newann);
-}}
-}if (seq.getPDBId () != null) {
-var ids = seq.getPDBId ();
-var e = ids.elements ();
-while (e.hasMoreElements ()) {
-this.addPDBId ( new jalview.datamodel.PDBEntry (e.nextElement ()));
-}
-}}, "jalview.datamodel.SequenceI,~A");
-Clazz.defineMethod (c$, "setSequenceFeatures",
-function (features) {
-this.sequenceFeatures = features;
-}, "~A");
-Clazz.overrideMethod (c$, "addSequenceFeature",
-function (sf) {
-if (this.sequenceFeatures == null) {
-this.sequenceFeatures = new Array (0);
-}for (var i = 0; i < this.sequenceFeatures.length; i++) {
-if (this.sequenceFeatures[i].equals (sf)) {
-return;
-}}
-var temp = new Array (this.sequenceFeatures.length + 1);
-System.arraycopy (this.sequenceFeatures, 0, temp, 0, this.sequenceFeatures.length);
-temp[this.sequenceFeatures.length] = sf;
-this.sequenceFeatures = temp;
-}, "jalview.datamodel.SequenceFeature");
-Clazz.overrideMethod (c$, "deleteFeature",
-function (sf) {
-if (this.sequenceFeatures == null) {
-return;
-}var index = 0;
-for (index = 0; index < this.sequenceFeatures.length; index++) {
-if (this.sequenceFeatures[index].equals (sf)) {
-break;
-}}
-if (index == this.sequenceFeatures.length) {
-return;
-}var sfLength = this.sequenceFeatures.length;
-if (sfLength < 2) {
-this.sequenceFeatures = null;
-} else {
-var temp = new Array (sfLength - 1);
-System.arraycopy (this.sequenceFeatures, 0, temp, 0, index);
-if (index < sfLength) {
-System.arraycopy (this.sequenceFeatures, index + 1, temp, index, this.sequenceFeatures.length - index - 1);
-}this.sequenceFeatures = temp;
-}}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "getSequenceFeatures",
-function () {
-var features = this.sequenceFeatures;
-var seq = this;
-var count = 0;
-while (features == null && seq.getDatasetSequence () != null && count++ < 10) {
-seq = seq.getDatasetSequence ();
-features = (seq).sequenceFeatures;
-}
-return features;
-});
-Clazz.overrideMethod (c$, "addPDBId",
-function (entry) {
-if (this.pdbIds == null) {
-this.pdbIds = new java.util.Vector ();
-}if (this.pdbIds.contains (entry)) {
-jalview.datamodel.Sequence.updatePDBEntry (this.pdbIds.get (this.pdbIds.indexOf (entry)), entry);
-} else {
-this.pdbIds.addElement (entry);
-}}, "jalview.datamodel.PDBEntry");
-c$.updatePDBEntry = Clazz.defineMethod (c$, "updatePDBEntry",
-($fz = function (oldEntry, newEntry) {
-if (newEntry.getFile () != null) {
-oldEntry.setFile (newEntry.getFile ());
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.PDBEntry,jalview.datamodel.PDBEntry");
-Clazz.defineMethod (c$, "setPDBId",
-function (id) {
-this.pdbIds = id;
-}, "java.util.Vector");
-Clazz.defineMethod (c$, "getPDBId",
-function () {
-return this.pdbIds;
-});
-Clazz.overrideMethod (c$, "getDisplayId",
-function (jvsuffix) {
-var result = new StringBuffer (this.name);
-if (jvsuffix) {
-result.append ("/" + this.start + "-" + this.end);
-}return result.toString ();
-}, "~B");
-Clazz.overrideMethod (c$, "setName",
-function (name) {
-this.name = name;
-this.parseId ();
-}, "~S");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.name;
-});
-Clazz.overrideMethod (c$, "setStart",
-function (start) {
-this.start = start;
-}, "~N");
-Clazz.defineMethod (c$, "getStart",
-function () {
-return this.start;
-});
-Clazz.overrideMethod (c$, "setEnd",
-function (end) {
-this.end = end;
-}, "~N");
-Clazz.defineMethod (c$, "getEnd",
-function () {
-return this.end;
-});
-Clazz.overrideMethod (c$, "getLength",
-function () {
-return this.sequence.length;
-});
-Clazz.defineMethod (c$, "setSequence",
-function (seq) {
-this.sequence = seq.toCharArray ();
-this.checkValidRange ();
-}, "~S");
-Clazz.defineMethod (c$, "getSequenceAsString",
-function () {
-return String.instantialize (this.sequence);
-});
-Clazz.defineMethod (c$, "getSequenceAsString",
-function (start, end) {
-return String.instantialize (this.getSequence (start, end));
-}, "~N,~N");
-Clazz.defineMethod (c$, "getSequence",
-function () {
-return this.sequence;
-});
-Clazz.defineMethod (c$, "getSequence",
-function (start, end) {
-if (start < 0) {
-start = 0;
-}if (start >= this.sequence.length) {
-return Clazz.newCharArray (0, '\0');
-}if (end >= this.sequence.length) {
-end = this.sequence.length;
-}var reply = Clazz.newCharArray (end - start, '\0');
-System.arraycopy (this.sequence, start, reply, 0, end - start);
-return reply;
-}, "~N,~N");
-Clazz.overrideMethod (c$, "getSubSequence",
-function (start, end) {
-if (start < 0) {
-start = 0;
-}var seq = this.getSequence (start, end);
-if (seq.length == 0) {
-return null;
-}var nstart = this.findPosition (start);
-var nend = this.findPosition (end) - 1;
-var nseq = new jalview.datamodel.Sequence (this.getName (), seq, nstart, nend);
-nseq.setDescription (this.description);
-if (this.datasetSequence != null) {
-nseq.setDatasetSequence (this.datasetSequence);
-} else {
-nseq.setDatasetSequence (this);
-}return nseq;
-}, "~N,~N");
-Clazz.overrideMethod (c$, "getCharAt",
-function (i) {
-if (i < this.sequence.length) {
-return this.sequence[i];
-} else {
-return ' ';
-}}, "~N");
-Clazz.defineMethod (c$, "setDescription",
-function (desc) {
-this.description = desc;
-}, "~S");
-Clazz.defineMethod (c$, "getDescription",
-function () {
-return this.description;
-});
-Clazz.overrideMethod (c$, "findIndex",
-function (pos) {
-var j = this.start;
-var i = 0;
-while ((i < this.sequence.length) && (j <= this.end) && (j <= pos)) {
-if (!jalview.util.Comparison.isGap (this.sequence[i])) {
-j++;
-}i++;
-}
-if ((j == this.end) && (j < pos)) {
-return this.end + 1;
-} else {
-return i;
-}}, "~N");
-Clazz.overrideMethod (c$, "findPosition",
-function (i) {
-var j = 0;
-var pos = this.start;
-var seqlen = this.sequence.length;
-while ((j < i) && (j < seqlen)) {
-if (!jalview.util.Comparison.isGap (this.sequence[j])) {
-pos++;
-}j++;
-}
-return pos;
-}, "~N");
-Clazz.overrideMethod (c$, "gapMap",
-function () {
-var seq = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (this.sequence));
-var map = Clazz.newIntArray (seq.length, 0);
-var j = 0;
-var p = 0;
-while (j < this.sequence.length) {
-if (!jalview.util.Comparison.isGap (this.sequence[j])) {
-map[p++] = j;
-}j++;
-}
-return map;
-});
-Clazz.overrideMethod (c$, "findPositionMap",
-function () {
-var map = Clazz.newIntArray (this.sequence.length, 0);
-var j = 0;
-var pos = this.start;
-var seqlen = this.sequence.length;
-while ((j < seqlen)) {
-map[j] = pos;
-if (!jalview.util.Comparison.isGap (this.sequence[j])) {
-pos++;
-}j++;
-}
-return map;
-});
-Clazz.overrideMethod (c$, "getInsertions",
-function () {
-var map = new java.util.ArrayList ();
-var lastj = -1;
-var j = 0;
-var pos = this.start;
-var seqlen = this.sequence.length;
-while ((j < seqlen)) {
-if (jalview.util.Comparison.isGap (this.sequence[j])) {
-if (lastj == -1) {
-lastj = j;
-}} else {
-if (lastj != -1) {
-map.add ( Clazz.newIntArray (-1, [lastj, j - 1]));
-lastj = -1;
-}}j++;
-}
-if (lastj != -1) {
-map.add ( Clazz.newIntArray (-1, [lastj, j - 1]));
-lastj = -1;
-}return map;
-});
-Clazz.overrideMethod (c$, "deleteChars",
-function (i, j) {
-var newstart = this.start;
-var newend = this.end;
-if (i >= this.sequence.length || i < 0) {
-return;
-}var tmp = jalview.util.StringUtils.deleteChars (this.sequence, i, j);
-var createNewDs = false;
-var eindex = -1;
-var sindex = -1;
-var ecalc = false;
-var scalc = false;
-for (var s = i; s < j; s++) {
-if (jalview.schemes.ResidueProperties.aaIndex[this.sequence[s].charCodeAt (0)] != 23) {
-if (createNewDs) {
-newend--;
-} else {
-if (!scalc) {
-sindex = this.findIndex (this.start) - 1;
-scalc = true;
-}if (sindex == s) {
-newstart = this.findPosition (j);
-break;
-} else {
-if (!ecalc) {
-eindex = this.findIndex (this.end) - 1;
-ecalc = true;
-}if (eindex < j) {
-newend = this.findPosition (i - 1);
-break;
-} else {
-createNewDs = true;
-newend--;
-}}}}}
-if (createNewDs && this.datasetSequence != null) {
-var ds = new jalview.datamodel.Sequence (this.datasetSequence);
-ds.deleteChars (i, j);
-this.datasetSequence = ds;
-}this.start = newstart;
-this.end = newend;
-this.sequence = tmp;
-}, "~N,~N");
-Clazz.defineMethod (c$, "insertCharAt",
-function (i, length, c) {
-var tmp = Clazz.newCharArray (this.sequence.length + length, '\0');
-if (i >= this.sequence.length) {
-System.arraycopy (this.sequence, 0, tmp, 0, this.sequence.length);
-i = this.sequence.length;
-} else {
-System.arraycopy (this.sequence, 0, tmp, 0, i);
-}var index = i;
-while (length > 0) {
-tmp[index++] = c;
-length--;
-}
-if (i < this.sequence.length) {
-System.arraycopy (this.sequence, i, tmp, index, this.sequence.length - i);
-}this.sequence = tmp;
-}, "~N,~N,~S");
-Clazz.defineMethod (c$, "insertCharAt",
-function (i, c) {
-this.insertCharAt (i, 1, c);
-}, "~N,~S");
-Clazz.overrideMethod (c$, "getVamsasId",
-function () {
-return this.vamsasId;
-});
-Clazz.overrideMethod (c$, "setVamsasId",
-function (id) {
-this.vamsasId = id;
-}, "~S");
-Clazz.defineMethod (c$, "setDBRef",
-function (dbref) {
-this.dbrefs = dbref;
-}, "~A");
-Clazz.defineMethod (c$, "getDBRef",
-function () {
-if (this.dbrefs == null && this.datasetSequence != null && this !== this.datasetSequence) {
-return this.datasetSequence.getDBRef ();
-}return this.dbrefs;
-});
-Clazz.overrideMethod (c$, "addDBRef",
-function (entry) {
-if (this.dbrefs == null) {
-this.dbrefs = new Array (0);
-}var i;
-var iSize = this.dbrefs.length;
-for (i = 0; i < iSize; i++) {
-if (this.dbrefs[i].equalRef (entry)) {
-if (entry.getMap () != null) {
-if (this.dbrefs[i].getMap () == null) {
-this.dbrefs[i] = entry;
-}}return;
-}}
-var temp = new Array (iSize + 1);
-System.arraycopy (this.dbrefs, 0, temp, 0, iSize);
-temp[temp.length - 1] = entry;
-this.dbrefs = temp;
-}, "jalview.datamodel.DBRefEntry");
-Clazz.defineMethod (c$, "setDatasetSequence",
-function (seq) {
-this.datasetSequence = seq;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getDatasetSequence",
-function () {
-return this.datasetSequence;
-});
-Clazz.defineMethod (c$, "getAnnotation",
-function () {
-return this.annotation == null ? null : this.annotation.toArray ( new Array (this.annotation.size ()));
-});
-Clazz.overrideMethod (c$, "hasAnnotation",
-function (ann) {
-return this.annotation == null ? false : this.annotation.contains (ann);
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "addAlignmentAnnotation",
-function (annotation) {
-if (this.annotation == null) {
-this.annotation = new java.util.Vector ();
-}if (!this.annotation.contains (annotation)) {
-this.annotation.addElement (annotation);
-}annotation.setSequenceRef (this);
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.overrideMethod (c$, "removeAlignmentAnnotation",
-function (annotation) {
-if (this.annotation != null) {
-this.annotation.removeElement (annotation);
-if (this.annotation.size () == 0) {
-this.annotation = null;
-}}}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "isValidDatasetSequence",
-($fz = function () {
-if (this.datasetSequence != null) {
-return false;
-}for (var i = 0; i < this.sequence.length; i++) {
-if (jalview.util.Comparison.isGap (this.sequence[i])) {
-return false;
-}}
-return true;
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "deriveSequence",
-function () {
-var seq = new jalview.datamodel.Sequence (this);
-if (this.datasetSequence != null) {
-seq.setDatasetSequence (this.datasetSequence);
-} else {
-if (this.isValidDatasetSequence ()) {
-seq.setDatasetSequence (this);
-} else {
-var ds = seq;
-ds.setSequence (jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (this.sequence)));
-this.setDatasetSequence (ds);
-ds.setSequenceFeatures (this.getSequenceFeatures ());
-seq = this;
-}}return seq;
-});
-Clazz.overrideMethod (c$, "createDatasetSequence",
-function () {
-if (this.datasetSequence == null) {
-this.datasetSequence = new jalview.datamodel.Sequence (this.getName (), jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, this.getSequenceAsString ()), this.getStart (), this.getEnd ());
-this.datasetSequence.setSequenceFeatures (this.getSequenceFeatures ());
-this.datasetSequence.setDescription (this.getDescription ());
-this.setSequenceFeatures (null);
-this.datasetSequence.setDBRef (this.getDBRef ());
-this.setDBRef (null);
-this.datasetSequence.setPDBId (this.getPDBId ());
-this.setPDBId (null);
-this.datasetSequence.updatePDBIds ();
-if (this.annotation != null) {
-for (var aa, $aa = this.annotation.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
-var _aa = new jalview.datamodel.AlignmentAnnotation (aa);
-_aa.sequenceRef = this.datasetSequence;
-_aa.adjustForAlignment ();
-this.datasetSequence.addAlignmentAnnotation (_aa);
-}
-}}return this.datasetSequence;
-});
-Clazz.overrideMethod (c$, "setAlignmentAnnotation",
-function (annotations) {
-if (this.annotation != null) {
-this.annotation.removeAllElements ();
-}if (annotations != null) {
-for (var i = 0; i < annotations.length; i++) {
-if (annotations[i] != null) {
-this.addAlignmentAnnotation (annotations[i]);
-}}
-}}, "~A");
-Clazz.defineMethod (c$, "getAnnotation",
-function (label) {
-if (this.annotation == null || this.annotation.size () == 0) {
-return null;
-}var subset = new java.util.Vector ();
-var e = this.annotation.elements ();
-while (e.hasMoreElements ()) {
-var ann = e.nextElement ();
-if (ann.label != null && ann.label.equals (label)) {
-subset.addElement (ann);
-}}
-if (subset.size () == 0) {
-return null;
-}var anns = new Array (subset.size ());
-var i = 0;
-e = subset.elements ();
-while (e.hasMoreElements ()) {
-anns[i++] = e.nextElement ();
-}
-subset.removeAllElements ();
-return anns;
-}, "~S");
-Clazz.defineMethod (c$, "updatePDBIds",
-function () {
-if (this.datasetSequence != null) {
-return this.datasetSequence.updatePDBIds ();
-}if (this.dbrefs == null || this.dbrefs.length == 0) {
-return false;
-}var newpdb = new java.util.Vector ();
-for (var i = 0; i < this.dbrefs.length; i++) {
-if (jalview.datamodel.DBRefSource.PDB.equals (this.dbrefs[i].getSource ())) {
-var pdbe = new jalview.datamodel.PDBEntry ();
-pdbe.setId (this.dbrefs[i].getAccessionId ());
-if (this.pdbIds == null || this.pdbIds.size () == 0) {
-newpdb.addElement (pdbe);
-} else {
-var en = this.pdbIds.elements ();
-var matched = false;
-while (!matched && en.hasMoreElements ()) {
-var anentry = en.nextElement ();
-if (anentry.getId ().equals (pdbe.getId ())) {
-matched = true;
-}}
-if (!matched) {
-newpdb.addElement (pdbe);
-}}}}
-if (newpdb.size () > 0) {
-var en = newpdb.elements ();
-while (en.hasMoreElements ()) {
-this.addPDBId (en.nextElement ());
-}
-return true;
-}return false;
-});
-Clazz.defineMethod (c$, "transferAnnotation",
-function (entry, mp) {
-if (this.datasetSequence != null) {
-this.datasetSequence.transferAnnotation (entry, mp);
-return;
-}if (entry.getDatasetSequence () != null) {
-this.transferAnnotation (entry.getDatasetSequence (), mp);
-return;
-}if (entry.getSequenceFeatures () != null) {
-var sfs = entry.getSequenceFeatures ();
-for (var si = 0; si < sfs.length; si++) {
-var sf = (mp != null) ? mp.locateFeature (sfs[si]) : Clazz.newArray (-1, [ new jalview.datamodel.SequenceFeature (sfs[si])]);
-if (sf != null && sf.length > 0) {
-for (var sfi = 0; sfi < sf.length; sfi++) {
-this.addSequenceFeature (sf[sfi]);
-}
-}}
-}if (entry.getPDBId () != null) {
-var e = entry.getPDBId ().elements ();
-while (e.hasMoreElements ()) {
-var pdb = e.nextElement ();
-this.addPDBId (pdb);
-}
-}var entryRefs = entry.getDBRef ();
-if (entryRefs != null) {
-for (var r = 0; r < entryRefs.length; r++) {
-var newref = new jalview.datamodel.DBRefEntry (entryRefs[r]);
-if (newref.getMap () != null && mp != null) {
-}this.addDBRef (newref);
-}
-}}, "jalview.datamodel.SequenceI,jalview.datamodel.Mapping");
-Clazz.overrideMethod (c$, "getIndex",
-function () {
-return this.index;
-});
-Clazz.overrideMethod (c$, "setIndex",
-function (value) {
-this.index = value;
-}, "~N");
-Clazz.overrideMethod (c$, "setRNA",
-function (r) {
-this.rna = r;
-}, "jalview.jsdev.api.VarnaRNA");
-Clazz.overrideMethod (c$, "getRNA",
-function () {
-return this.rna;
-});
-Clazz.overrideMethod (c$, "getAlignmentAnnotations",
-function (calcId, label) {
-var result = new java.util.ArrayList ();
-if (this.annotation != null) {
-for (var ann, $ann = this.annotation.iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {
-if (ann.calcId != null && ann.calcId.equals (calcId) && ann.label != null && ann.label.equals (label)) {
-result.add (ann);
-}}
-}return result;
-}, "~S,~S");
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.ASequence", "$.SequenceI", "jalview.jsdev.RegExp"], "jalview.datamodel.Sequence", ["jalview.analysis.AlignSeq", "jalview.datamodel.AlignmentAnnotation", "$.DBRefEntry", "$.DBRefSource", "$.PDBEntry", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "$.StringUtils", "java.lang.StringBuffer", "java.util.ArrayList", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.datasetSequence = null;
+this.name = null;
+this.sequence = null;
+this.description = null;
+this.start = 0;
+this.end = 0;
+this.pdbIds = null;
+this.vamsasId = null;
+this.dbrefs = null;
+this.rna = null;
+this.annotation = null;
+this.index = -1;
+this.sequenceFeatures = null;
+this.limitrx = null;
+this.endrx = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "Sequence", jalview.datamodel.ASequence, jalview.datamodel.SequenceI);
+Clazz.prepareFields (c$, function () {
+this.limitrx = jalview.jsdev.RegExp.newRegex (["[/][0-9]{1,}[-][0-9]{1,}$"]);
+this.endrx = jalview.jsdev.RegExp.newRegex (["[0-9]{1,}$"]);
+});
+Clazz.makeConstructor (c$,
+function (name, sequence, start, end) {
+Clazz.superConstructor (this, jalview.datamodel.Sequence, []);
+this.initSeqAndName (name, sequence.toCharArray (), start, end);
+}, "~S,~S,~N,~N");
+Clazz.makeConstructor (c$,
+function (name, sequence, start, end) {
+Clazz.superConstructor (this, jalview.datamodel.Sequence, []);
+this.initSeqAndName (name, sequence, start, end);
+}, "~S,~A,~N,~N");
+Clazz.defineMethod (c$, "initSeqAndName",
+function (name2, sequence2, start2, end2) {
+this.name = name2;
+this.sequence = sequence2;
+this.start = start2;
+this.end = end2;
+this.parseId ();
+this.checkValidRange ();
+}, "~S,~A,~N,~N");
+Clazz.defineMethod (c$, "parseId",
+function () {
+if (this.name == null) {
+System.err.println ("POSSIBLE IMPLEMENTATION ERROR: null sequence name passed to constructor.");
+this.name = "";
+}if (this.limitrx.search (this.name)) {
+this.name = this.limitrx.left ();
+this.endrx.search (this.limitrx.stringMatched ());
+this.setStart (Integer.parseInt (this.limitrx.stringMatched ().substring (1, this.endrx.matchedFrom () - 1)));
+this.setEnd (Integer.parseInt (this.endrx.stringMatched ()));
+}});
+Clazz.defineMethod (c$, "checkValidRange",
+function () {
+{
+var endRes = 0;
+for (var j = 0; j < this.sequence.length; j++) {
+if (!jalview.util.Comparison.isGap (this.sequence[j])) {
+endRes++;
+}}
+if (endRes > 0) {
+endRes += this.start - 1;
+}if (this.end < endRes) {
+this.end = endRes;
+}}});
+Clazz.makeConstructor (c$,
+function (name, sequence) {
+this.construct (name, sequence, 1, -1);
+}, "~S,~S");
+Clazz.makeConstructor (c$,
+function (seq) {
+this.construct (seq, seq.getAnnotation ());
+}, "jalview.datamodel.SequenceI");
+Clazz.makeConstructor (c$,
+function (seq, alAnnotation) {
+Clazz.superConstructor (this, jalview.datamodel.Sequence, []);
+this.initSeqFrom (seq, alAnnotation);
+}, "jalview.datamodel.SequenceI,~A");
+Clazz.defineMethod (c$, "initSeqFrom",
+function (seq, alAnnotation) {
+this.initSeqAndName (seq.getName (), seq.getSequence (), seq.getStart (), seq.getEnd ());
+this.description = seq.getDescription ();
+if (seq.getSequenceFeatures () != null) {
+var sf = seq.getSequenceFeatures ();
+for (var i = 0; i < sf.length; i++) {
+this.addSequenceFeature ( new jalview.datamodel.SequenceFeature (sf[i]));
+}
+}this.setDatasetSequence (seq.getDatasetSequence ());
+if (this.datasetSequence == null && seq.getDBRef () != null) {
+var dbr = seq.getDBRef ();
+for (var i = 0; i < dbr.length; i++) {
+this.addDBRef ( new jalview.datamodel.DBRefEntry (dbr[i]));
+}
+}if (seq.getAnnotation () != null) {
+var sqann = seq.getAnnotation ();
+for (var i = 0; i < sqann.length; i++) {
+if (sqann[i] == null) {
+continue;
+}var found = (alAnnotation == null);
+if (!found) {
+for (var apos = 0; !found && apos < alAnnotation.length; apos++) {
+found = (alAnnotation[apos] === sqann[i]);
+}
+}if (found) {
+var newann = new jalview.datamodel.AlignmentAnnotation (sqann[i]);
+this.addAlignmentAnnotation (newann);
+}}
+}if (seq.getPDBId () != null) {
+var ids = seq.getPDBId ();
+var e = ids.elements ();
+while (e.hasMoreElements ()) {
+this.addPDBId ( new jalview.datamodel.PDBEntry (e.nextElement ()));
+}
+}}, "jalview.datamodel.SequenceI,~A");
+Clazz.defineMethod (c$, "setSequenceFeatures",
+function (features) {
+this.sequenceFeatures = features;
+}, "~A");
+Clazz.overrideMethod (c$, "addSequenceFeature",
+function (sf) {
+if (this.sequenceFeatures == null) {
+this.sequenceFeatures = new Array (0);
+}for (var i = 0; i < this.sequenceFeatures.length; i++) {
+if (this.sequenceFeatures[i].equals (sf)) {
+return;
+}}
+var temp = new Array (this.sequenceFeatures.length + 1);
+System.arraycopy (this.sequenceFeatures, 0, temp, 0, this.sequenceFeatures.length);
+temp[this.sequenceFeatures.length] = sf;
+this.sequenceFeatures = temp;
+}, "jalview.datamodel.SequenceFeature");
+Clazz.overrideMethod (c$, "deleteFeature",
+function (sf) {
+if (this.sequenceFeatures == null) {
+return;
+}var index = 0;
+for (index = 0; index < this.sequenceFeatures.length; index++) {
+if (this.sequenceFeatures[index].equals (sf)) {
+break;
+}}
+if (index == this.sequenceFeatures.length) {
+return;
+}var sfLength = this.sequenceFeatures.length;
+if (sfLength < 2) {
+this.sequenceFeatures = null;
+} else {
+var temp = new Array (sfLength - 1);
+System.arraycopy (this.sequenceFeatures, 0, temp, 0, index);
+if (index < sfLength) {
+System.arraycopy (this.sequenceFeatures, index + 1, temp, index, this.sequenceFeatures.length - index - 1);
+}this.sequenceFeatures = temp;
+}}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "getSequenceFeatures",
+function () {
+var features = this.sequenceFeatures;
+var seq = this;
+var count = 0;
+while (features == null && seq.getDatasetSequence () != null && count++ < 10) {
+seq = seq.getDatasetSequence ();
+features = (seq).sequenceFeatures;
+}
+return features;
+});
+Clazz.overrideMethod (c$, "addPDBId",
+function (entry) {
+if (this.pdbIds == null) {
+this.pdbIds = new java.util.Vector ();
+}if (this.pdbIds.contains (entry)) {
+jalview.datamodel.Sequence.updatePDBEntry (this.pdbIds.get (this.pdbIds.indexOf (entry)), entry);
+} else {
+this.pdbIds.addElement (entry);
+}}, "jalview.datamodel.PDBEntry");
+c$.updatePDBEntry = Clazz.defineMethod (c$, "updatePDBEntry",
+($fz = function (oldEntry, newEntry) {
+if (newEntry.getFile () != null) {
+oldEntry.setFile (newEntry.getFile ());
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.PDBEntry,jalview.datamodel.PDBEntry");
+Clazz.defineMethod (c$, "setPDBId",
+function (id) {
+this.pdbIds = id;
+}, "java.util.Vector");
+Clazz.defineMethod (c$, "getPDBId",
+function () {
+return this.pdbIds;
+});
+Clazz.overrideMethod (c$, "getDisplayId",
+function (jvsuffix) {
+var result = new StringBuffer (this.name);
+if (jvsuffix) {
+result.append ("/" + this.start + "-" + this.end);
+}return result.toString ();
+}, "~B");
+Clazz.overrideMethod (c$, "setName",
+function (name) {
+this.name = name;
+this.parseId ();
+}, "~S");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.name;
+});
+Clazz.overrideMethod (c$, "setStart",
+function (start) {
+this.start = start;
+}, "~N");
+Clazz.defineMethod (c$, "getStart",
+function () {
+return this.start;
+});
+Clazz.overrideMethod (c$, "setEnd",
+function (end) {
+this.end = end;
+}, "~N");
+Clazz.defineMethod (c$, "getEnd",
+function () {
+return this.end;
+});
+Clazz.overrideMethod (c$, "getLength",
+function () {
+return this.sequence.length;
+});
+Clazz.defineMethod (c$, "setSequence",
+function (seq) {
+this.sequence = seq.toCharArray ();
+this.checkValidRange ();
+}, "~S");
+Clazz.defineMethod (c$, "getSequenceAsString",
+function () {
+return String.instantialize (this.sequence);
+});
+Clazz.defineMethod (c$, "getSequenceAsString",
+function (start, end) {
+return String.instantialize (this.getSequence (start, end));
+}, "~N,~N");
+Clazz.defineMethod (c$, "getSequence",
+function () {
+return this.sequence;
+});
+Clazz.defineMethod (c$, "getSequence",
+function (start, end) {
+if (start < 0) {
+start = 0;
+}if (start >= this.sequence.length) {
+return Clazz.newCharArray (0, '\0');
+}if (end >= this.sequence.length) {
+end = this.sequence.length;
+}var reply = Clazz.newCharArray (end - start, '\0');
+System.arraycopy (this.sequence, start, reply, 0, end - start);
+return reply;
+}, "~N,~N");
+Clazz.overrideMethod (c$, "getSubSequence",
+function (start, end) {
+if (start < 0) {
+start = 0;
+}var seq = this.getSequence (start, end);
+if (seq.length == 0) {
+return null;
+}var nstart = this.findPosition (start);
+var nend = this.findPosition (end) - 1;
+var nseq = new jalview.datamodel.Sequence (this.getName (), seq, nstart, nend);
+nseq.setDescription (this.description);
+if (this.datasetSequence != null) {
+nseq.setDatasetSequence (this.datasetSequence);
+} else {
+nseq.setDatasetSequence (this);
+}return nseq;
+}, "~N,~N");
+Clazz.overrideMethod (c$, "getCharAt",
+function (i) {
+if (i < this.sequence.length) {
+return this.sequence[i];
+} else {
+return ' ';
+}}, "~N");
+Clazz.defineMethod (c$, "setDescription",
+function (desc) {
+this.description = desc;
+}, "~S");
+Clazz.defineMethod (c$, "getDescription",
+function () {
+return this.description;
+});
+Clazz.overrideMethod (c$, "findIndex",
+function (pos) {
+var j = this.start;
+var i = 0;
+while ((i < this.sequence.length) && (j <= this.end) && (j <= pos)) {
+if (!jalview.util.Comparison.isGap (this.sequence[i])) {
+j++;
+}i++;
+}
+if ((j == this.end) && (j < pos)) {
+return this.end + 1;
+} else {
+return i;
+}}, "~N");
+Clazz.overrideMethod (c$, "findPosition",
+function (i) {
+var j = 0;
+var pos = this.start;
+var seqlen = this.sequence.length;
+while ((j < i) && (j < seqlen)) {
+if (!jalview.util.Comparison.isGap (this.sequence[j])) {
+pos++;
+}j++;
+}
+return pos;
+}, "~N");
+Clazz.overrideMethod (c$, "gapMap",
+function () {
+var seq = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (this.sequence));
+var map = Clazz.newIntArray (seq.length, 0);
+var j = 0;
+var p = 0;
+while (j < this.sequence.length) {
+if (!jalview.util.Comparison.isGap (this.sequence[j])) {
+map[p++] = j;
+}j++;
+}
+return map;
+});
+Clazz.overrideMethod (c$, "findPositionMap",
+function () {
+var map = Clazz.newIntArray (this.sequence.length, 0);
+var j = 0;
+var pos = this.start;
+var seqlen = this.sequence.length;
+while ((j < seqlen)) {
+map[j] = pos;
+if (!jalview.util.Comparison.isGap (this.sequence[j])) {
+pos++;
+}j++;
+}
+return map;
+});
+Clazz.overrideMethod (c$, "getInsertions",
+function () {
+var map = new java.util.ArrayList ();
+var lastj = -1;
+var j = 0;
+var pos = this.start;
+var seqlen = this.sequence.length;
+while ((j < seqlen)) {
+if (jalview.util.Comparison.isGap (this.sequence[j])) {
+if (lastj == -1) {
+lastj = j;
+}} else {
+if (lastj != -1) {
+map.add ( Clazz.newIntArray (-1, [lastj, j - 1]));
+lastj = -1;
+}}j++;
+}
+if (lastj != -1) {
+map.add ( Clazz.newIntArray (-1, [lastj, j - 1]));
+lastj = -1;
+}return map;
+});
+Clazz.overrideMethod (c$, "deleteChars",
+function (i, j) {
+var newstart = this.start;
+var newend = this.end;
+if (i >= this.sequence.length || i < 0) {
+return;
+}var tmp = jalview.util.StringUtils.deleteChars (this.sequence, i, j);
+var createNewDs = false;
+var eindex = -1;
+var sindex = -1;
+var ecalc = false;
+var scalc = false;
+for (var s = i; s < j; s++) {
+if (jalview.schemes.ResidueProperties.aaIndex[this.sequence[s].charCodeAt (0)] != 23) {
+if (createNewDs) {
+newend--;
+} else {
+if (!scalc) {
+sindex = this.findIndex (this.start) - 1;
+scalc = true;
+}if (sindex == s) {
+newstart = this.findPosition (j);
+break;
+} else {
+if (!ecalc) {
+eindex = this.findIndex (this.end) - 1;
+ecalc = true;
+}if (eindex < j) {
+newend = this.findPosition (i - 1);
+break;
+} else {
+createNewDs = true;
+newend--;
+}}}}}
+if (createNewDs && this.datasetSequence != null) {
+var ds = new jalview.datamodel.Sequence (this.datasetSequence);
+ds.deleteChars (i, j);
+this.datasetSequence = ds;
+}this.start = newstart;
+this.end = newend;
+this.sequence = tmp;
+}, "~N,~N");
+Clazz.defineMethod (c$, "insertCharAt",
+function (i, length, c) {
+var tmp = Clazz.newCharArray (this.sequence.length + length, '\0');
+if (i >= this.sequence.length) {
+System.arraycopy (this.sequence, 0, tmp, 0, this.sequence.length);
+i = this.sequence.length;
+} else {
+System.arraycopy (this.sequence, 0, tmp, 0, i);
+}var index = i;
+while (length > 0) {
+tmp[index++] = c;
+length--;
+}
+if (i < this.sequence.length) {
+System.arraycopy (this.sequence, i, tmp, index, this.sequence.length - i);
+}this.sequence = tmp;
+}, "~N,~N,~S");
+Clazz.defineMethod (c$, "insertCharAt",
+function (i, c) {
+this.insertCharAt (i, 1, c);
+}, "~N,~S");
+Clazz.overrideMethod (c$, "getVamsasId",
+function () {
+return this.vamsasId;
+});
+Clazz.overrideMethod (c$, "setVamsasId",
+function (id) {
+this.vamsasId = id;
+}, "~S");
+Clazz.defineMethod (c$, "setDBRef",
+function (dbref) {
+this.dbrefs = dbref;
+}, "~A");
+Clazz.defineMethod (c$, "getDBRef",
+function () {
+if (this.dbrefs == null && this.datasetSequence != null && this !== this.datasetSequence) {
+return this.datasetSequence.getDBRef ();
+}return this.dbrefs;
+});
+Clazz.overrideMethod (c$, "addDBRef",
+function (entry) {
+if (this.dbrefs == null) {
+this.dbrefs = new Array (0);
+}var i;
+var iSize = this.dbrefs.length;
+for (i = 0; i < iSize; i++) {
+if (this.dbrefs[i].equalRef (entry)) {
+if (entry.getMap () != null) {
+if (this.dbrefs[i].getMap () == null) {
+this.dbrefs[i] = entry;
+}}return;
+}}
+var temp = new Array (iSize + 1);
+System.arraycopy (this.dbrefs, 0, temp, 0, iSize);
+temp[temp.length - 1] = entry;
+this.dbrefs = temp;
+}, "jalview.datamodel.DBRefEntry");
+Clazz.defineMethod (c$, "setDatasetSequence",
+function (seq) {
+this.datasetSequence = seq;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getDatasetSequence",
+function () {
+return this.datasetSequence;
+});
+Clazz.defineMethod (c$, "getAnnotation",
+function () {
+return this.annotation == null ? null : this.annotation.toArray ( new Array (this.annotation.size ()));
+});
+Clazz.overrideMethod (c$, "hasAnnotation",
+function (ann) {
+return this.annotation == null ? false : this.annotation.contains (ann);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "addAlignmentAnnotation",
+function (annotation) {
+if (this.annotation == null) {
+this.annotation = new java.util.Vector ();
+}if (!this.annotation.contains (annotation)) {
+this.annotation.addElement (annotation);
+}annotation.setSequenceRef (this);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "removeAlignmentAnnotation",
+function (annotation) {
+if (this.annotation != null) {
+this.annotation.removeElement (annotation);
+if (this.annotation.size () == 0) {
+this.annotation = null;
+}}}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "isValidDatasetSequence",
+($fz = function () {
+if (this.datasetSequence != null) {
+return false;
+}for (var i = 0; i < this.sequence.length; i++) {
+if (jalview.util.Comparison.isGap (this.sequence[i])) {
+return false;
+}}
+return true;
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "deriveSequence",
+function () {
+var seq = new jalview.datamodel.Sequence (this);
+if (this.datasetSequence != null) {
+seq.setDatasetSequence (this.datasetSequence);
+} else {
+if (this.isValidDatasetSequence ()) {
+seq.setDatasetSequence (this);
+} else {
+var ds = seq;
+ds.setSequence (jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, String.instantialize (this.sequence)));
+this.setDatasetSequence (ds);
+ds.setSequenceFeatures (this.getSequenceFeatures ());
+seq = this;
+}}return seq;
+});
+Clazz.overrideMethod (c$, "createDatasetSequence",
+function () {
+if (this.datasetSequence == null) {
+this.datasetSequence = new jalview.datamodel.Sequence (this.getName (), jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, this.getSequenceAsString ()), this.getStart (), this.getEnd ());
+this.datasetSequence.setSequenceFeatures (this.getSequenceFeatures ());
+this.datasetSequence.setDescription (this.getDescription ());
+this.setSequenceFeatures (null);
+this.datasetSequence.setDBRef (this.getDBRef ());
+this.setDBRef (null);
+this.datasetSequence.setPDBId (this.getPDBId ());
+this.setPDBId (null);
+this.datasetSequence.updatePDBIds ();
+if (this.annotation != null) {
+for (var aa, $aa = this.annotation.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
+var _aa = new jalview.datamodel.AlignmentAnnotation (aa);
+_aa.sequenceRef = this.datasetSequence;
+_aa.adjustForAlignment ();
+this.datasetSequence.addAlignmentAnnotation (_aa);
+}
+}}return this.datasetSequence;
+});
+Clazz.overrideMethod (c$, "setAlignmentAnnotation",
+function (annotations) {
+if (this.annotation != null) {
+this.annotation.removeAllElements ();
+}if (annotations != null) {
+for (var i = 0; i < annotations.length; i++) {
+if (annotations[i] != null) {
+this.addAlignmentAnnotation (annotations[i]);
+}}
+}}, "~A");
+Clazz.defineMethod (c$, "getAnnotation",
+function (label) {
+if (this.annotation == null || this.annotation.size () == 0) {
+return null;
+}var subset = new java.util.Vector ();
+var e = this.annotation.elements ();
+while (e.hasMoreElements ()) {
+var ann = e.nextElement ();
+if (ann.label != null && ann.label.equals (label)) {
+subset.addElement (ann);
+}}
+if (subset.size () == 0) {
+return null;
+}var anns = new Array (subset.size ());
+var i = 0;
+e = subset.elements ();
+while (e.hasMoreElements ()) {
+anns[i++] = e.nextElement ();
+}
+subset.removeAllElements ();
+return anns;
+}, "~S");
+Clazz.defineMethod (c$, "updatePDBIds",
+function () {
+if (this.datasetSequence != null) {
+return this.datasetSequence.updatePDBIds ();
+}if (this.dbrefs == null || this.dbrefs.length == 0) {
+return false;
+}var newpdb = new java.util.Vector ();
+for (var i = 0; i < this.dbrefs.length; i++) {
+if (jalview.datamodel.DBRefSource.PDB.equals (this.dbrefs[i].getSource ())) {
+var pdbe = new jalview.datamodel.PDBEntry ();
+pdbe.setId (this.dbrefs[i].getAccessionId ());
+if (this.pdbIds == null || this.pdbIds.size () == 0) {
+newpdb.addElement (pdbe);
+} else {
+var en = this.pdbIds.elements ();
+var matched = false;
+while (!matched && en.hasMoreElements ()) {
+var anentry = en.nextElement ();
+if (anentry.getId ().equals (pdbe.getId ())) {
+matched = true;
+}}
+if (!matched) {
+newpdb.addElement (pdbe);
+}}}}
+if (newpdb.size () > 0) {
+var en = newpdb.elements ();
+while (en.hasMoreElements ()) {
+this.addPDBId (en.nextElement ());
+}
+return true;
+}return false;
+});
+Clazz.defineMethod (c$, "transferAnnotation",
+function (entry, mp) {
+if (this.datasetSequence != null) {
+this.datasetSequence.transferAnnotation (entry, mp);
+return;
+}if (entry.getDatasetSequence () != null) {
+this.transferAnnotation (entry.getDatasetSequence (), mp);
+return;
+}if (entry.getSequenceFeatures () != null) {
+var sfs = entry.getSequenceFeatures ();
+for (var si = 0; si < sfs.length; si++) {
+var sf = (mp != null) ? mp.locateFeature (sfs[si]) : Clazz.newArray (-1, [ new jalview.datamodel.SequenceFeature (sfs[si])]);
+if (sf != null && sf.length > 0) {
+for (var sfi = 0; sfi < sf.length; sfi++) {
+this.addSequenceFeature (sf[sfi]);
+}
+}}
+}if (entry.getPDBId () != null) {
+var e = entry.getPDBId ().elements ();
+while (e.hasMoreElements ()) {
+var pdb = e.nextElement ();
+this.addPDBId (pdb);
+}
+}var entryRefs = entry.getDBRef ();
+if (entryRefs != null) {
+for (var r = 0; r < entryRefs.length; r++) {
+var newref = new jalview.datamodel.DBRefEntry (entryRefs[r]);
+if (newref.getMap () != null && mp != null) {
+}this.addDBRef (newref);
+}
+}}, "jalview.datamodel.SequenceI,jalview.datamodel.Mapping");
+Clazz.overrideMethod (c$, "getIndex",
+function () {
+return this.index;
+});
+Clazz.overrideMethod (c$, "setIndex",
+function (value) {
+this.index = value;
+}, "~N");
+Clazz.overrideMethod (c$, "setRNA",
+function (r) {
+this.rna = r;
+}, "jalview.jsdev.api.VarnaRNA");
+Clazz.overrideMethod (c$, "getRNA",
+function () {
+return this.rna;
+});
+Clazz.overrideMethod (c$, "getAlignmentAnnotations",
+function (calcId, label) {
+var result = new java.util.ArrayList ();
+if (this.annotation != null) {
+for (var ann, $ann = this.annotation.iterator (); $ann.hasNext () && ((ann = $ann.next ()) || true);) {
+if (ann.calcId != null && ann.calcId.equals (calcId) && ann.label != null && ann.label.equals (label)) {
+result.add (ann);
+}}
+}return result;
+}, "~S,~S");
+});
diff --git a/bin/jalview/datamodel/SequenceCollectionI.js b/bin/jalview/datamodel/SequenceCollectionI.js
index b0849db..6f0107b 100644
--- a/bin/jalview/datamodel/SequenceCollectionI.js
+++ b/bin/jalview/datamodel/SequenceCollectionI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.declareInterface (jalview.datamodel, "SequenceCollectionI");
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.declareInterface (jalview.datamodel, "SequenceCollectionI");
diff --git a/bin/jalview/datamodel/SequenceDummy.js b/bin/jalview/datamodel/SequenceDummy.js
index 38b0a3c..d5a179c 100644
--- a/bin/jalview/datamodel/SequenceDummy.js
+++ b/bin/jalview/datamodel/SequenceDummy.js
@@ -1,20 +1,20 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.Sequence", "$.SequenceI"], "jalview.datamodel.SequenceDummy", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.dummy = true;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "SequenceDummy", jalview.datamodel.Sequence, jalview.datamodel.SequenceI);
-Clazz.makeConstructor (c$,
-function (sequenceId) {
-Clazz.superConstructor (this, jalview.datamodel.SequenceDummy, [sequenceId, "THISAPLACEHOLDER"]);
-}, "~S");
-Clazz.defineMethod (c$, "become",
-function (mseq) {
-this.initSeqFrom (mseq, null);
-this.dummy = false;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "isDummy",
-function () {
-return this.dummy;
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.Sequence", "$.SequenceI"], "jalview.datamodel.SequenceDummy", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.dummy = true;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "SequenceDummy", jalview.datamodel.Sequence, jalview.datamodel.SequenceI);
+Clazz.makeConstructor (c$,
+function (sequenceId) {
+Clazz.superConstructor (this, jalview.datamodel.SequenceDummy, [sequenceId, "THISAPLACEHOLDER"]);
+}, "~S");
+Clazz.defineMethod (c$, "become",
+function (mseq) {
+this.initSeqFrom (mseq, null);
+this.dummy = false;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "isDummy",
+function () {
+return this.dummy;
+});
+});
diff --git a/bin/jalview/datamodel/SequenceFeature.js b/bin/jalview/datamodel/SequenceFeature.js
index f8ce548..d2f14a8 100644
--- a/bin/jalview/datamodel/SequenceFeature.js
+++ b/bin/jalview/datamodel/SequenceFeature.js
@@ -1,170 +1,170 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.SequenceFeature", ["java.util.Hashtable", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.begin = 0;
-this.end = 0;
-this.score = 0;
-this.type = null;
-this.description = null;
-this.otherDetails = null;
-this.links = null;
-this.featureGroup = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "SequenceFeature");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (cpy) {
-if (cpy != null) {
-this.begin = cpy.begin;
-this.end = cpy.end;
-this.score = cpy.score;
-if (cpy.type != null) {
-this.type = String.instantialize (cpy.type);
-}if (cpy.description != null) {
-this.description = String.instantialize (cpy.description);
-}if (cpy.featureGroup != null) {
-this.featureGroup = String.instantialize (cpy.featureGroup);
-}if (cpy.otherDetails != null) {
-try {
-this.otherDetails = cpy.otherDetails.clone ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-}if (cpy.links != null && cpy.links.size () > 0) {
-this.links = new java.util.Vector ();
-for (var i = 0, iSize = cpy.links.size (); i < iSize; i++) {
-this.links.addElement (cpy.links.elementAt (i));
-}
-}}}, "jalview.datamodel.SequenceFeature");
-Clazz.makeConstructor (c$,
-function (type, desc, status, begin, end, featureGroup) {
-this.type = type;
-this.description = desc;
-this.setValue ("status", status);
-this.begin = begin;
-this.end = end;
-this.featureGroup = featureGroup;
-}, "~S,~S,~S,~N,~N,~S");
-Clazz.makeConstructor (c$,
-function (type, desc, begin, end, score, featureGroup) {
-this.type = type;
-this.description = desc;
-this.begin = begin;
-this.end = end;
-this.score = score;
-this.featureGroup = featureGroup;
-}, "~S,~S,~N,~N,~N,~S");
-Clazz.defineMethod (c$, "equals",
-function (sf) {
-if (this.begin != sf.begin || this.end != sf.end || this.score != sf.score) {
-return false;
-}if (!(this.type + this.description + this.featureGroup).equals (sf.type + sf.description + sf.featureGroup)) {
-return false;
-}return true;
-}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "getBegin",
-function () {
-return this.begin;
-});
-Clazz.defineMethod (c$, "setBegin",
-function (start) {
-this.begin = start;
-}, "~N");
-Clazz.defineMethod (c$, "getEnd",
-function () {
-return this.end;
-});
-Clazz.defineMethod (c$, "setEnd",
-function (end) {
-this.end = end;
-}, "~N");
-Clazz.defineMethod (c$, "getType",
-function () {
-return this.type;
-});
-Clazz.defineMethod (c$, "setType",
-function (type) {
-this.type = type;
-}, "~S");
-Clazz.defineMethod (c$, "getDescription",
-function () {
-return this.description;
-});
-Clazz.defineMethod (c$, "setDescription",
-function (desc) {
-this.description = desc;
-}, "~S");
-Clazz.defineMethod (c$, "getFeatureGroup",
-function () {
-return this.featureGroup;
-});
-Clazz.defineMethod (c$, "setFeatureGroup",
-function (featureGroup) {
-this.featureGroup = featureGroup;
-}, "~S");
-Clazz.defineMethod (c$, "addLink",
-function (labelLink) {
-if (this.links == null) {
-this.links = new java.util.Vector ();
-}this.links.insertElementAt (labelLink, 0);
-}, "~S");
-Clazz.defineMethod (c$, "getScore",
-function () {
-return this.score;
-});
-Clazz.defineMethod (c$, "setScore",
-function (value) {
-this.score = value;
-}, "~N");
-Clazz.defineMethod (c$, "getValue",
-function (key) {
-if (this.otherDetails == null) {
-return null;
-} else {
-return this.otherDetails.get (key);
-}}, "~S");
-Clazz.defineMethod (c$, "setValue",
-function (key, value) {
-if (value != null) {
-if (this.otherDetails == null) {
-this.otherDetails = new java.util.Hashtable ();
-}this.otherDetails.put (key, value);
-}}, "~S,~O");
-Clazz.defineMethod (c$, "setStatus",
-function (status) {
-this.setValue ("status", status);
-}, "~S");
-Clazz.defineMethod (c$, "getStatus",
-function () {
-if (this.otherDetails != null) {
-var stat = this.otherDetails.get ("status");
-if (stat != null) {
-return String.instantialize (stat);
-}}return null;
-});
-Clazz.defineMethod (c$, "setPosition",
-function (pos) {
-this.begin = pos;
-this.end = pos;
-}, "~N");
-Clazz.defineMethod (c$, "getPosition",
-function () {
-return this.begin;
-});
-Clazz.defineMethod (c$, "getStrand",
-function () {
-var str;
-if (this.otherDetails == null || (str = this.otherDetails.get ("STRAND").toString ()) == null) {
-return 0;
-}if (str.equals ("-")) {
-return -1;
-}if (str.equals ("+")) {
-return 1;
-}return 0;
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.SequenceFeature", ["java.util.Hashtable", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.begin = 0;
+this.end = 0;
+this.score = 0;
+this.type = null;
+this.description = null;
+this.otherDetails = null;
+this.links = null;
+this.featureGroup = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "SequenceFeature");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (cpy) {
+if (cpy != null) {
+this.begin = cpy.begin;
+this.end = cpy.end;
+this.score = cpy.score;
+if (cpy.type != null) {
+this.type = String.instantialize (cpy.type);
+}if (cpy.description != null) {
+this.description = String.instantialize (cpy.description);
+}if (cpy.featureGroup != null) {
+this.featureGroup = String.instantialize (cpy.featureGroup);
+}if (cpy.otherDetails != null) {
+try {
+this.otherDetails = cpy.otherDetails.clone ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+}if (cpy.links != null && cpy.links.size () > 0) {
+this.links = new java.util.Vector ();
+for (var i = 0, iSize = cpy.links.size (); i < iSize; i++) {
+this.links.addElement (cpy.links.elementAt (i));
+}
+}}}, "jalview.datamodel.SequenceFeature");
+Clazz.makeConstructor (c$,
+function (type, desc, status, begin, end, featureGroup) {
+this.type = type;
+this.description = desc;
+this.setValue ("status", status);
+this.begin = begin;
+this.end = end;
+this.featureGroup = featureGroup;
+}, "~S,~S,~S,~N,~N,~S");
+Clazz.makeConstructor (c$,
+function (type, desc, begin, end, score, featureGroup) {
+this.type = type;
+this.description = desc;
+this.begin = begin;
+this.end = end;
+this.score = score;
+this.featureGroup = featureGroup;
+}, "~S,~S,~N,~N,~N,~S");
+Clazz.defineMethod (c$, "equals",
+function (sf) {
+if (this.begin != sf.begin || this.end != sf.end || this.score != sf.score) {
+return false;
+}if (!(this.type + this.description + this.featureGroup).equals (sf.type + sf.description + sf.featureGroup)) {
+return false;
+}return true;
+}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "getBegin",
+function () {
+return this.begin;
+});
+Clazz.defineMethod (c$, "setBegin",
+function (start) {
+this.begin = start;
+}, "~N");
+Clazz.defineMethod (c$, "getEnd",
+function () {
+return this.end;
+});
+Clazz.defineMethod (c$, "setEnd",
+function (end) {
+this.end = end;
+}, "~N");
+Clazz.defineMethod (c$, "getType",
+function () {
+return this.type;
+});
+Clazz.defineMethod (c$, "setType",
+function (type) {
+this.type = type;
+}, "~S");
+Clazz.defineMethod (c$, "getDescription",
+function () {
+return this.description;
+});
+Clazz.defineMethod (c$, "setDescription",
+function (desc) {
+this.description = desc;
+}, "~S");
+Clazz.defineMethod (c$, "getFeatureGroup",
+function () {
+return this.featureGroup;
+});
+Clazz.defineMethod (c$, "setFeatureGroup",
+function (featureGroup) {
+this.featureGroup = featureGroup;
+}, "~S");
+Clazz.defineMethod (c$, "addLink",
+function (labelLink) {
+if (this.links == null) {
+this.links = new java.util.Vector ();
+}this.links.insertElementAt (labelLink, 0);
+}, "~S");
+Clazz.defineMethod (c$, "getScore",
+function () {
+return this.score;
+});
+Clazz.defineMethod (c$, "setScore",
+function (value) {
+this.score = value;
+}, "~N");
+Clazz.defineMethod (c$, "getValue",
+function (key) {
+if (this.otherDetails == null) {
+return null;
+} else {
+return this.otherDetails.get (key);
+}}, "~S");
+Clazz.defineMethod (c$, "setValue",
+function (key, value) {
+if (value != null) {
+if (this.otherDetails == null) {
+this.otherDetails = new java.util.Hashtable ();
+}this.otherDetails.put (key, value);
+}}, "~S,~O");
+Clazz.defineMethod (c$, "setStatus",
+function (status) {
+this.setValue ("status", status);
+}, "~S");
+Clazz.defineMethod (c$, "getStatus",
+function () {
+if (this.otherDetails != null) {
+var stat = this.otherDetails.get ("status");
+if (stat != null) {
+return String.instantialize (stat);
+}}return null;
+});
+Clazz.defineMethod (c$, "setPosition",
+function (pos) {
+this.begin = pos;
+this.end = pos;
+}, "~N");
+Clazz.defineMethod (c$, "getPosition",
+function () {
+return this.begin;
+});
+Clazz.defineMethod (c$, "getStrand",
+function () {
+var str;
+if (this.otherDetails == null || (str = this.otherDetails.get ("STRAND").toString ()) == null) {
+return 0;
+}if (str.equals ("-")) {
+return -1;
+}if (str.equals ("+")) {
+return 1;
+}return 0;
+});
+});
diff --git a/bin/jalview/datamodel/SequenceGroup.class b/bin/jalview/datamodel/SequenceGroup.class
index f773fbc..d962521 100644
Binary files a/bin/jalview/datamodel/SequenceGroup.class and b/bin/jalview/datamodel/SequenceGroup.class differ
diff --git a/bin/jalview/datamodel/SequenceGroup.js b/bin/jalview/datamodel/SequenceGroup.js
index 0e59a62..b8ea520 100644
--- a/bin/jalview/datamodel/SequenceGroup.js
+++ b/bin/jalview/datamodel/SequenceGroup.js
@@ -1,601 +1,601 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.AnnotatedCollectionI", "java.awt.Color", "java.util.ArrayList"], "jalview.datamodel.SequenceGroup", ["jalview.analysis.AAFrequency", "$.Conservation", "jalview.datamodel.AlignmentAnnotation", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.groupName = null;
-this.description = null;
-this.conserve = null;
-this.aaFrequency = null;
-this.displayBoxes = true;
-this.displayText = true;
-this.colourText = false;
-this.showNonconserved = false;
-this.sequences = null;
-this.seqrep = null;
-this.width = -1;
-this.cs = null;
-this.startRes = 0;
-this.endRes = 0;
-this.outlineColour = null;
-this.idColour = null;
-this.thresholdTextColour = 0;
-this.textColour = null;
-this.textColour2 = null;
-this.ignoreGapsInConsensus = true;
-this.showSequenceLogo = false;
-this.normaliseSequenceLogo = false;
-this.consPercGaps = 25;
-this.consensusData = null;
-this.hidereps = false;
-this.hidecols = false;
-this.consensus = null;
-this.conservation = null;
-this.showConsensusHistogram = false;
-this.context = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "SequenceGroup", null, jalview.datamodel.AnnotatedCollectionI);
-Clazz.prepareFields (c$, function () {
-this.sequences = new java.util.ArrayList ();
-this.outlineColour = java.awt.Color.black;
-this.textColour = java.awt.Color.black;
-this.textColour2 = java.awt.Color.white;
-});
-Clazz.defineMethod (c$, "isShowSequenceLogo",
-function () {
-return this.showSequenceLogo;
-});
-Clazz.makeConstructor (c$,
-function () {
-this.groupName = "JGroup:" + this.hashCode ();
-});
-Clazz.makeConstructor (c$,
-function (sequences, groupName, scheme, displayBoxes, displayText, colourText, start, end) {
-this.sequences = sequences;
-this.groupName = groupName;
-this.displayBoxes = displayBoxes;
-this.displayText = displayText;
-this.colourText = colourText;
-this.cs = scheme;
-this.startRes = start;
-this.endRes = end;
-this.recalcConservation ();
-}, "java.util.List,~S,jalview.schemes.ColourSchemeI,~B,~B,~B,~N,~N");
-Clazz.makeConstructor (c$,
-function (seqsel) {
-if (seqsel != null) {
-this.sequences = new java.util.ArrayList ();
-this.sequences.addAll (seqsel.sequences);
-if (seqsel.groupName != null) {
-this.groupName = String.instantialize (seqsel.groupName);
-}this.displayBoxes = seqsel.displayBoxes;
-this.displayText = seqsel.displayText;
-this.colourText = seqsel.colourText;
-this.startRes = seqsel.startRes;
-this.endRes = seqsel.endRes;
-this.cs = seqsel.cs;
-if (seqsel.description != null) {
-this.description = String.instantialize (seqsel.description);
-}this.hidecols = seqsel.hidecols;
-this.hidereps = seqsel.hidereps;
-this.idColour = seqsel.idColour;
-this.outlineColour = seqsel.outlineColour;
-this.seqrep = seqsel.seqrep;
-this.textColour = seqsel.textColour;
-this.textColour2 = seqsel.textColour2;
-this.thresholdTextColour = seqsel.thresholdTextColour;
-this.width = seqsel.width;
-this.ignoreGapsInConsensus = seqsel.ignoreGapsInConsensus;
-if (seqsel.conserve != null) {
-this.recalcConservation ();
-}}}, "jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "getSelectionAsNewSequences",
-function (align) {
-var iSize = this.sequences.size ();
-var seqs = new Array (iSize);
-var inorder = this.getSequencesInOrder (align);
-for (var i = 0, ipos = 0; i < inorder.length; i++) {
-var seq = inorder[i];
-seqs[ipos] = seq.getSubSequence (this.startRes, this.endRes + 1);
-if (seqs[ipos] != null) {
-seqs[ipos].setDescription (seq.getDescription ());
-seqs[ipos].setDBRef (seq.getDBRef ());
-seqs[ipos].setSequenceFeatures (seq.getSequenceFeatures ());
-if (seq.getDatasetSequence () != null) {
-seqs[ipos].setDatasetSequence (seq.getDatasetSequence ());
-}if (seq.getAnnotation () != null) {
-var alann = align.getAlignmentAnnotation ();
-for (var a = 0; a < seq.getAnnotation ().length; a++) {
-var tocopy = seq.getAnnotation ()[a];
-if (alann != null) {
-var found = false;
-for (var pos = 0; pos < alann.length; pos++) {
-if (alann[pos] === tocopy) {
-found = true;
-break;
-}}
-if (!found) {
-continue;
-}}var newannot = new jalview.datamodel.AlignmentAnnotation (seq.getAnnotation ()[a]);
-newannot.restrict (this.startRes, this.endRes);
-newannot.setSequenceRef (seqs[ipos]);
-newannot.adjustForAlignment ();
-seqs[ipos].addAlignmentAnnotation (newannot);
-}
-}ipos++;
-} else {
-iSize--;
-}}
-if (iSize != inorder.length) {
-var nseqs = new Array (iSize);
-System.arraycopy (seqs, 0, nseqs, 0, iSize);
-seqs = nseqs;
-}return seqs;
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "findEndRes",
-function (seq) {
-var eres = 0;
-var ch;
-for (var j = 0; j < this.endRes + 1 && j < seq.getLength (); j++) {
-ch = seq.getCharAt (j);
-if (!jalview.util.Comparison.isGap ((ch))) {
-eres++;
-}}
-if (eres > 0) {
-eres += seq.getStart () - 1;
-}return eres;
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getSequences",
-function () {
-return this.sequences;
-});
-Clazz.defineMethod (c$, "getSequences",
-function (hiddenReps) {
-if (hiddenReps == null) {
-return this.sequences;
-} else {
-var allSequences = new java.util.ArrayList ();
-for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-allSequences.add (seq);
-if (hiddenReps.containsKey (seq)) {
-var hsg = hiddenReps.get (seq);
-for (var seq2, $seq2 = hsg.getSequences ().iterator (); $seq2.hasNext () && ((seq2 = $seq2.next ()) || true);) {
-if (seq2 !== seq && !allSequences.contains (seq2)) {
-allSequences.add (seq2);
-}}
-}}
-return allSequences;
-}}, "java.util.Map");
-Clazz.defineMethod (c$, "getSequencesAsArray",
-function (map) {
-var tmp = this.getSequences (map);
-if (tmp == null) {
-return null;
-}return tmp.toArray ( new Array (tmp.size ()));
-}, "java.util.Map");
-Clazz.defineMethod (c$, "adjustForRemoveLeft",
-function (col) {
-if (this.startRes >= col) {
-this.startRes = this.startRes - col;
-}if (this.endRes >= col) {
-this.endRes = this.endRes - col;
-if (this.startRes > this.endRes) {
-this.startRes = 0;
-}} else {
-return false;
-}return true;
-}, "~N");
-Clazz.defineMethod (c$, "adjustForRemoveRight",
-function (col) {
-if (this.startRes > col) {
-return false;
-}if (this.endRes >= col) {
-this.endRes = col;
-}return true;
-}, "~N");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.groupName;
-});
-Clazz.defineMethod (c$, "getDescription",
-function () {
-return this.description;
-});
-Clazz.defineMethod (c$, "setName",
-function (name) {
-this.groupName = name;
-}, "~S");
-Clazz.defineMethod (c$, "setDescription",
-function (desc) {
-this.description = desc;
-}, "~S");
-Clazz.defineMethod (c$, "getConservation",
-function () {
-return this.conserve;
-});
-Clazz.defineMethod (c$, "setConservation",
-function (c) {
-this.conserve = c;
-}, "jalview.analysis.Conservation");
-Clazz.defineMethod (c$, "addSequence",
-function (s, recalc) {
-{
-if (s != null && !this.sequences.contains (s)) {
-this.sequences.add (s);
-}if (recalc) {
-this.recalcConservation ();
-}}}, "jalview.datamodel.SequenceI,~B");
-Clazz.defineMethod (c$, "getConsPercGaps",
-function () {
-return this.consPercGaps;
-});
-Clazz.defineMethod (c$, "setConsPercGaps",
-function (consPercGaps) {
-this.consPercGaps = consPercGaps;
-}, "~N");
-Clazz.defineMethod (c$, "recalcConservation",
-function () {
-if (this.cs == null && this.consensus == null && this.conservation == null) {
-return;
-}try {
-var cnsns = jalview.analysis.AAFrequency.calculate (this.sequences, this.startRes, this.endRes + 1, this.showSequenceLogo);
-if (this.consensus != null) {
-this._updateConsensusRow (cnsns, this.sequences.size ());
-}if (this.cs != null) {
-this.cs.setConsensus (cnsns);
-}if ((this.conservation != null) || (this.cs != null && this.cs.conservationApplied ())) {
-var c = new jalview.analysis.Conservation (this.groupName, jalview.schemes.ResidueProperties.propHash, 3, this.sequences, this.startRes, this.endRes + 1);
-c.calculate ();
-c.verdict (false, this.consPercGaps);
-if (this.conservation != null) {
-this._updateConservationRow (c);
-}if (this.cs != null) {
-if (this.cs.conservationApplied ()) {
-this.cs.setConservation (c);
-}}}if (this.cs != null) {
-this.cs.alignmentChanged (this.context != null ? this.context : this, null);
-}} catch (err) {
-if (Clazz.exceptionOf (err, OutOfMemoryError)) {
-System.out.println ("Out of memory loading groups: " + err);
-} else {
-throw err;
-}
-}
-});
-Clazz.defineMethod (c$, "_updateConservationRow",
-($fz = function (c) {
-if (this.conservation == null) {
-this.getConservation ();
-}this.conservation.label = "Conservation for " + this.getName ();
-this.conservation.description = "Conservation for group " + this.getName () + " less than " + this.consPercGaps + "% gaps";
-var aWidth = (this.conservation.annotations != null) ? (this.endRes < this.conservation.annotations.length ? this.conservation.annotations.length : this.endRes + 1) : this.endRes + 1;
-this.conservation.annotations = null;
-this.conservation.annotations = new Array (aWidth);
-c.completeAnnotations (this.conservation, null, this.startRes, this.endRes + 1);
-}, $fz.isPrivate = true, $fz), "jalview.analysis.Conservation");
-Clazz.defineMethod (c$, "_updateConsensusRow",
-($fz = function (cnsns, nseq) {
-if (this.consensus == null) {
-this.getConsensus ();
-}this.consensus.label = "Consensus for " + this.getName ();
-this.consensus.description = "Percent Identity";
-this.consensusData = cnsns;
-var aWidth = (this.consensus.annotations != null) ? (this.endRes < this.consensus.annotations.length ? this.consensus.annotations.length : this.endRes + 1) : this.endRes + 1;
-this.consensus.annotations = null;
-this.consensus.annotations = new Array (aWidth);
-jalview.analysis.AAFrequency.completeConsensus (this.consensus, cnsns, this.startRes, this.endRes + 1, this.ignoreGapsInConsensus, this.showSequenceLogo, nseq);
-}, $fz.isPrivate = true, $fz), "~A,~N");
-Clazz.defineMethod (c$, "addOrRemove",
-function (s, recalc) {
-{
-if (this.sequences.contains (s)) {
-this.deleteSequence (s, recalc);
-} else {
-this.addSequence (s, recalc);
-}}}, "jalview.datamodel.SequenceI,~B");
-Clazz.defineMethod (c$, "deleteSequence",
-function (s, recalc) {
-{
-this.sequences.remove (s);
-if (recalc) {
-this.recalcConservation ();
-}}}, "jalview.datamodel.SequenceI,~B");
-Clazz.overrideMethod (c$, "getStartRes",
-function () {
-return this.startRes;
-});
-Clazz.overrideMethod (c$, "getEndRes",
-function () {
-return this.endRes;
-});
-Clazz.defineMethod (c$, "setStartRes",
-function (i) {
-this.startRes = i;
-}, "~N");
-Clazz.defineMethod (c$, "setEndRes",
-function (i) {
-this.endRes = i;
-}, "~N");
-Clazz.defineMethod (c$, "getSize",
-function () {
-return this.sequences.size ();
-});
-Clazz.defineMethod (c$, "getSequenceAt",
-function (i) {
-return this.sequences.get (i);
-}, "~N");
-Clazz.defineMethod (c$, "setColourText",
-function (state) {
-this.colourText = state;
-}, "~B");
-Clazz.defineMethod (c$, "getColourText",
-function () {
-return this.colourText;
-});
-Clazz.defineMethod (c$, "setDisplayText",
-function (state) {
-this.displayText = state;
-}, "~B");
-Clazz.defineMethod (c$, "getDisplayText",
-function () {
-return this.displayText;
-});
-Clazz.defineMethod (c$, "setDisplayBoxes",
-function (state) {
-this.displayBoxes = state;
-}, "~B");
-Clazz.defineMethod (c$, "getDisplayBoxes",
-function () {
-return this.displayBoxes;
-});
-Clazz.overrideMethod (c$, "getWidth",
-function () {
-{
-var first = true;
-for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-if (first || seq.getLength () > this.width) {
-this.width = seq.getLength ();
-first = false;
-}}
-return this.width;
-}});
-Clazz.defineMethod (c$, "setOutlineColour",
-function (c) {
-this.outlineColour = c;
-}, "java.awt.Color");
-Clazz.defineMethod (c$, "getOutlineColour",
-function () {
-return this.outlineColour;
-});
-Clazz.defineMethod (c$, "getSequencesInOrder",
-function (al) {
-return this.getSequencesInOrder (al, true);
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "getSequencesInOrder",
-function (al, trim) {
-{
-var sSize = this.sequences.size ();
-var alHeight = al.getHeight ();
-var seqs = new Array ((trim) ? sSize : alHeight);
-var index = 0;
-for (var i = 0; i < alHeight && index < sSize; i++) {
-if (this.sequences.contains (al.getSequenceAt (i))) {
-seqs[(trim) ? index : i] = al.getSequenceAt (i);
-index++;
-}}
-if (index == 0) {
-return null;
-}if (!trim) {
-return seqs;
-}if (index < seqs.length) {
-var dummy = seqs;
-seqs = new Array (index);
-while (--index >= 0) {
-seqs[index] = dummy[index];
-dummy[index] = null;
-}
-}return seqs;
-}}, "jalview.datamodel.AlignmentI,~B");
-Clazz.defineMethod (c$, "getIdColour",
-function () {
-return this.idColour;
-});
-Clazz.defineMethod (c$, "setIdColour",
-function (idColour) {
-this.idColour = idColour;
-}, "java.awt.Color");
-Clazz.overrideMethod (c$, "getSeqrep",
-function () {
-return this.seqrep;
-});
-Clazz.overrideMethod (c$, "setSeqrep",
-function (seqrep) {
-this.seqrep = seqrep;
-}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "hasSeqrep",
-function () {
-return this.seqrep != null;
-});
-Clazz.defineMethod (c$, "setHidereps",
-function (visibility) {
-this.hidereps = visibility;
-}, "~B");
-Clazz.defineMethod (c$, "isHidereps",
-function () {
-return this.hidereps;
-});
-Clazz.defineMethod (c$, "setHideCols",
-function (visibility) {
-this.hidecols = visibility;
-}, "~B");
-Clazz.defineMethod (c$, "isHideCols",
-function () {
-return this.hidecols;
-});
-Clazz.defineMethod (c$, "intersect",
-function (alignment, map) {
-var sgroup = new jalview.datamodel.SequenceGroup (this);
-var insect = this.getSequencesInOrder (alignment);
-sgroup.sequences = new java.util.ArrayList ();
-for (var s = 0; insect != null && s < insect.length; s++) {
-if (map == null || map.containsKey (insect[s])) {
-sgroup.sequences.add (insect[s]);
-}}
-return sgroup;
-}, "jalview.datamodel.AlignmentI,java.util.Map");
-Clazz.defineMethod (c$, "getShowNonconserved",
-function () {
-return this.showNonconserved;
-});
-Clazz.defineMethod (c$, "setShowNonconserved",
-function (displayNonconserved) {
-this.showNonconserved = displayNonconserved;
-}, "~B");
-Clazz.defineMethod (c$, "setConsensus",
-function (aan) {
-if (this.consensus == null) {
-this.consensus = aan;
-}}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "getConsensus",
-function () {
-var aWidth = this.getWidth ();
-if (aWidth < 0) {
-return null;
-}if (this.consensus == null) {
-this.consensus = new jalview.datamodel.AlignmentAnnotation ("", "", new Array (1), 0, 100, 1);
-this.consensus.hasText = true;
-this.consensus.autoCalculated = true;
-this.consensus.groupRef = this;
-this.consensus.label = "Consensus for " + this.getName ();
-this.consensus.description = "Percent Identity";
-}return this.consensus;
-});
-Clazz.defineMethod (c$, "setConservationRow",
-function (aan) {
-if (this.conservation == null) {
-this.conservation = aan;
-}}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "getConservationRow",
-function () {
-if (this.conservation == null) {
-this.conservation = new jalview.datamodel.AlignmentAnnotation ("", "", new Array (1), 0, 11, 1);
-}this.conservation.hasText = true;
-this.conservation.autoCalculated = true;
-this.conservation.groupRef = this;
-this.conservation.label = "Conservation for " + this.getName ();
-this.conservation.description = "Conservation for group " + this.getName () + " less than " + this.consPercGaps + "% gaps";
-return this.conservation;
-});
-Clazz.defineMethod (c$, "hasAnnotationRows",
-function () {
-return this.consensus != null || this.conservation != null;
-});
-Clazz.defineMethod (c$, "getConsensusSeq",
-function () {
-this.getConsensus ();
-var seqs = new StringBuffer ();
-for (var i = 0; i < this.consensus.annotations.length; i++) {
-if (this.consensus.annotations[i] != null) {
-if (this.consensus.annotations[i].description.charAt (0) == '[') {
-seqs.append (this.consensus.annotations[i].description.charAt (1));
-} else {
-seqs.append (this.consensus.annotations[i].displayCharacter);
-}}}
-var sq = new jalview.datamodel.Sequence ("Group" + this.getName () + " Consensus", seqs.toString ());
-sq.setDescription ("Percentage Identity Consensus " + ((this.ignoreGapsInConsensus) ? " without gaps" : ""));
-return sq;
-});
-Clazz.defineMethod (c$, "setIgnoreGapsConsensus",
-function (state) {
-if (this.ignoreGapsInConsensus != state && this.consensus != null) {
-this.ignoreGapsInConsensus = state;
-this.recalcConservation ();
-}this.ignoreGapsInConsensus = state;
-}, "~B");
-Clazz.defineMethod (c$, "getIgnoreGapsConsensus",
-function () {
-return this.ignoreGapsInConsensus;
-});
-Clazz.defineMethod (c$, "setshowSequenceLogo",
-function (showSequenceLogo) {
-if (this.showSequenceLogo != showSequenceLogo && this.consensus != null) {
-this.showSequenceLogo = showSequenceLogo;
-this.recalcConservation ();
-}this.showSequenceLogo = showSequenceLogo;
-}, "~B");
-Clazz.defineMethod (c$, "setShowConsensusHistogram",
-function (showConsHist) {
-if (this.showConsensusHistogram != showConsHist && this.consensus != null) {
-this.showConsensusHistogram = showConsHist;
-this.recalcConservation ();
-}this.showConsensusHistogram = showConsHist;
-}, "~B");
-Clazz.defineMethod (c$, "isShowConsensusHistogram",
-function () {
-return this.showConsensusHistogram;
-});
-Clazz.defineMethod (c$, "setNormaliseSequenceLogo",
-function (norm) {
-this.normaliseSequenceLogo = norm;
-}, "~B");
-Clazz.defineMethod (c$, "isNormaliseSequenceLogo",
-function () {
-return this.normaliseSequenceLogo;
-});
-Clazz.overrideMethod (c$, "getAlignmentAnnotation",
-function () {
-var annot = new java.util.ArrayList ();
-{
-for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-var aa = seq.getAnnotation ();
-if (aa != null) {
-for (var al, $al = 0, $$al = aa; $al < $$al.length && ((al = $$al[$al]) || true); $al++) {
-if (al.groupRef === this) {
-annot.add (al);
-}}
-}}
-if (this.consensus != null) {
-annot.add (this.consensus);
-}if (this.conservation != null) {
-annot.add (this.conservation);
-}}return annot.toArray ( new Array (0));
-});
-Clazz.overrideMethod (c$, "findAnnotation",
-function (calcId) {
-var aa = new java.util.ArrayList ();
-for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {
-if (a.getCalcId () === calcId) {
-aa.add (a);
-}}
-return aa;
-}, "~S");
-Clazz.overrideMethod (c$, "findAnnotations",
-function (seq, calcId, label) {
-var aa = new java.util.ArrayList ();
-for (var ann, $ann = 0, $$ann = this.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
-if (ann.getCalcId () != null && ann.getCalcId ().equals (calcId) && ann.sequenceRef != null && ann.sequenceRef === seq && ann.label != null && ann.label.equals (label)) {
-aa.add (ann);
-}}
-return aa;
-}, "jalview.datamodel.SequenceI,~S,~S");
-Clazz.defineMethod (c$, "hasAnnotation",
-function (calcId) {
-if (calcId != null && !"".equals (calcId)) {
-for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {
-if (a.getCalcId () === calcId) {
-return true;
-}}
-}return false;
-}, "~S");
-Clazz.defineMethod (c$, "clear",
-function () {
-{
-this.sequences.clear ();
-}});
-Clazz.defineMethod (c$, "setContext",
-function (context) {
-this.context = context;
-}, "jalview.datamodel.AnnotatedCollectionI");
-Clazz.overrideMethod (c$, "getContext",
-function () {
-return this.context;
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.AnnotatedCollectionI", "java.awt.Color", "java.util.ArrayList"], "jalview.datamodel.SequenceGroup", ["jalview.analysis.AAFrequency", "$.Conservation", "jalview.datamodel.AlignmentAnnotation", "$.Sequence", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.groupName = null;
+this.description = null;
+this.conserve = null;
+this.aaFrequency = null;
+this.displayBoxes = true;
+this.displayText = true;
+this.colourText = false;
+this.showNonconserved = false;
+this.sequences = null;
+this.seqrep = null;
+this.width = -1;
+this.cs = null;
+this.startRes = 0;
+this.endRes = 0;
+this.outlineColour = null;
+this.idColour = null;
+this.thresholdTextColour = 0;
+this.textColour = null;
+this.textColour2 = null;
+this.ignoreGapsInConsensus = true;
+this.showSequenceLogo = false;
+this.normaliseSequenceLogo = false;
+this.consPercGaps = 25;
+this.consensusData = null;
+this.hidereps = false;
+this.hidecols = false;
+this.consensus = null;
+this.conservation = null;
+this.showConsensusHistogram = false;
+this.context = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "SequenceGroup", null, jalview.datamodel.AnnotatedCollectionI);
+Clazz.prepareFields (c$, function () {
+this.sequences = new java.util.ArrayList ();
+this.outlineColour = java.awt.Color.black;
+this.textColour = java.awt.Color.black;
+this.textColour2 = java.awt.Color.white;
+});
+Clazz.defineMethod (c$, "isShowSequenceLogo",
+function () {
+return this.showSequenceLogo;
+});
+Clazz.makeConstructor (c$,
+function () {
+this.groupName = "JGroup:" + this.hashCode ();
+});
+Clazz.makeConstructor (c$,
+function (sequences, groupName, scheme, displayBoxes, displayText, colourText, start, end) {
+this.sequences = sequences;
+this.groupName = groupName;
+this.displayBoxes = displayBoxes;
+this.displayText = displayText;
+this.colourText = colourText;
+this.cs = scheme;
+this.startRes = start;
+this.endRes = end;
+this.recalcConservation ();
+}, "java.util.List,~S,jalview.schemes.ColourSchemeI,~B,~B,~B,~N,~N");
+Clazz.makeConstructor (c$,
+function (seqsel) {
+if (seqsel != null) {
+this.sequences = new java.util.ArrayList ();
+this.sequences.addAll (seqsel.sequences);
+if (seqsel.groupName != null) {
+this.groupName = String.instantialize (seqsel.groupName);
+}this.displayBoxes = seqsel.displayBoxes;
+this.displayText = seqsel.displayText;
+this.colourText = seqsel.colourText;
+this.startRes = seqsel.startRes;
+this.endRes = seqsel.endRes;
+this.cs = seqsel.cs;
+if (seqsel.description != null) {
+this.description = String.instantialize (seqsel.description);
+}this.hidecols = seqsel.hidecols;
+this.hidereps = seqsel.hidereps;
+this.idColour = seqsel.idColour;
+this.outlineColour = seqsel.outlineColour;
+this.seqrep = seqsel.seqrep;
+this.textColour = seqsel.textColour;
+this.textColour2 = seqsel.textColour2;
+this.thresholdTextColour = seqsel.thresholdTextColour;
+this.width = seqsel.width;
+this.ignoreGapsInConsensus = seqsel.ignoreGapsInConsensus;
+if (seqsel.conserve != null) {
+this.recalcConservation ();
+}}}, "jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "getSelectionAsNewSequences",
+function (align) {
+var iSize = this.sequences.size ();
+var seqs = new Array (iSize);
+var inorder = this.getSequencesInOrder (align);
+for (var i = 0, ipos = 0; i < inorder.length; i++) {
+var seq = inorder[i];
+seqs[ipos] = seq.getSubSequence (this.startRes, this.endRes + 1);
+if (seqs[ipos] != null) {
+seqs[ipos].setDescription (seq.getDescription ());
+seqs[ipos].setDBRef (seq.getDBRef ());
+seqs[ipos].setSequenceFeatures (seq.getSequenceFeatures ());
+if (seq.getDatasetSequence () != null) {
+seqs[ipos].setDatasetSequence (seq.getDatasetSequence ());
+}if (seq.getAnnotation () != null) {
+var alann = align.getAlignmentAnnotation ();
+for (var a = 0; a < seq.getAnnotation ().length; a++) {
+var tocopy = seq.getAnnotation ()[a];
+if (alann != null) {
+var found = false;
+for (var pos = 0; pos < alann.length; pos++) {
+if (alann[pos] === tocopy) {
+found = true;
+break;
+}}
+if (!found) {
+continue;
+}}var newannot = new jalview.datamodel.AlignmentAnnotation (seq.getAnnotation ()[a]);
+newannot.restrict (this.startRes, this.endRes);
+newannot.setSequenceRef (seqs[ipos]);
+newannot.adjustForAlignment ();
+seqs[ipos].addAlignmentAnnotation (newannot);
+}
+}ipos++;
+} else {
+iSize--;
+}}
+if (iSize != inorder.length) {
+var nseqs = new Array (iSize);
+System.arraycopy (seqs, 0, nseqs, 0, iSize);
+seqs = nseqs;
+}return seqs;
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "findEndRes",
+function (seq) {
+var eres = 0;
+var ch;
+for (var j = 0; j < this.endRes + 1 && j < seq.getLength (); j++) {
+ch = seq.getCharAt (j);
+if (!jalview.util.Comparison.isGap ((ch))) {
+eres++;
+}}
+if (eres > 0) {
+eres += seq.getStart () - 1;
+}return eres;
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getSequences",
+function () {
+return this.sequences;
+});
+Clazz.defineMethod (c$, "getSequences",
+function (hiddenReps) {
+if (hiddenReps == null) {
+return this.sequences;
+} else {
+var allSequences = new java.util.ArrayList ();
+for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+allSequences.add (seq);
+if (hiddenReps.containsKey (seq)) {
+var hsg = hiddenReps.get (seq);
+for (var seq2, $seq2 = hsg.getSequences ().iterator (); $seq2.hasNext () && ((seq2 = $seq2.next ()) || true);) {
+if (seq2 !== seq && !allSequences.contains (seq2)) {
+allSequences.add (seq2);
+}}
+}}
+return allSequences;
+}}, "java.util.Map");
+Clazz.defineMethod (c$, "getSequencesAsArray",
+function (map) {
+var tmp = this.getSequences (map);
+if (tmp == null) {
+return null;
+}return tmp.toArray ( new Array (tmp.size ()));
+}, "java.util.Map");
+Clazz.defineMethod (c$, "adjustForRemoveLeft",
+function (col) {
+if (this.startRes >= col) {
+this.startRes = this.startRes - col;
+}if (this.endRes >= col) {
+this.endRes = this.endRes - col;
+if (this.startRes > this.endRes) {
+this.startRes = 0;
+}} else {
+return false;
+}return true;
+}, "~N");
+Clazz.defineMethod (c$, "adjustForRemoveRight",
+function (col) {
+if (this.startRes > col) {
+return false;
+}if (this.endRes >= col) {
+this.endRes = col;
+}return true;
+}, "~N");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.groupName;
+});
+Clazz.defineMethod (c$, "getDescription",
+function () {
+return this.description;
+});
+Clazz.defineMethod (c$, "setName",
+function (name) {
+this.groupName = name;
+}, "~S");
+Clazz.defineMethod (c$, "setDescription",
+function (desc) {
+this.description = desc;
+}, "~S");
+Clazz.defineMethod (c$, "getConservation",
+function () {
+return this.conserve;
+});
+Clazz.defineMethod (c$, "setConservation",
+function (c) {
+this.conserve = c;
+}, "jalview.analysis.Conservation");
+Clazz.defineMethod (c$, "addSequence",
+function (s, recalc) {
+{
+if (s != null && !this.sequences.contains (s)) {
+this.sequences.add (s);
+}if (recalc) {
+this.recalcConservation ();
+}}}, "jalview.datamodel.SequenceI,~B");
+Clazz.defineMethod (c$, "getConsPercGaps",
+function () {
+return this.consPercGaps;
+});
+Clazz.defineMethod (c$, "setConsPercGaps",
+function (consPercGaps) {
+this.consPercGaps = consPercGaps;
+}, "~N");
+Clazz.defineMethod (c$, "recalcConservation",
+function () {
+if (this.cs == null && this.consensus == null && this.conservation == null) {
+return;
+}try {
+var cnsns = jalview.analysis.AAFrequency.calculate (this.sequences, this.startRes, this.endRes + 1, this.showSequenceLogo);
+if (this.consensus != null) {
+this._updateConsensusRow (cnsns, this.sequences.size ());
+}if (this.cs != null) {
+this.cs.setConsensus (cnsns);
+}if ((this.conservation != null) || (this.cs != null && this.cs.conservationApplied ())) {
+var c = new jalview.analysis.Conservation (this.groupName, jalview.schemes.ResidueProperties.propHash, 3, this.sequences, this.startRes, this.endRes + 1);
+c.calculate ();
+c.verdict (false, this.consPercGaps);
+if (this.conservation != null) {
+this._updateConservationRow (c);
+}if (this.cs != null) {
+if (this.cs.conservationApplied ()) {
+this.cs.setConservation (c);
+}}}if (this.cs != null) {
+this.cs.alignmentChanged (this.context != null ? this.context : this, null);
+}} catch (err) {
+if (Clazz.exceptionOf (err, OutOfMemoryError)) {
+System.out.println ("Out of memory loading groups: " + err);
+} else {
+throw err;
+}
+}
+});
+Clazz.defineMethod (c$, "_updateConservationRow",
+($fz = function (c) {
+if (this.conservation == null) {
+this.getConservation ();
+}this.conservation.label = "Conservation for " + this.getName ();
+this.conservation.description = "Conservation for group " + this.getName () + " less than " + this.consPercGaps + "% gaps";
+var aWidth = (this.conservation.annotations != null) ? (this.endRes < this.conservation.annotations.length ? this.conservation.annotations.length : this.endRes + 1) : this.endRes + 1;
+this.conservation.annotations = null;
+this.conservation.annotations = new Array (aWidth);
+c.completeAnnotations (this.conservation, null, this.startRes, this.endRes + 1);
+}, $fz.isPrivate = true, $fz), "jalview.analysis.Conservation");
+Clazz.defineMethod (c$, "_updateConsensusRow",
+($fz = function (cnsns, nseq) {
+if (this.consensus == null) {
+this.getConsensus ();
+}this.consensus.label = "Consensus for " + this.getName ();
+this.consensus.description = "Percent Identity";
+this.consensusData = cnsns;
+var aWidth = (this.consensus.annotations != null) ? (this.endRes < this.consensus.annotations.length ? this.consensus.annotations.length : this.endRes + 1) : this.endRes + 1;
+this.consensus.annotations = null;
+this.consensus.annotations = new Array (aWidth);
+jalview.analysis.AAFrequency.completeConsensus (this.consensus, cnsns, this.startRes, this.endRes + 1, this.ignoreGapsInConsensus, this.showSequenceLogo, nseq);
+}, $fz.isPrivate = true, $fz), "~A,~N");
+Clazz.defineMethod (c$, "addOrRemove",
+function (s, recalc) {
+{
+if (this.sequences.contains (s)) {
+this.deleteSequence (s, recalc);
+} else {
+this.addSequence (s, recalc);
+}}}, "jalview.datamodel.SequenceI,~B");
+Clazz.defineMethod (c$, "deleteSequence",
+function (s, recalc) {
+{
+this.sequences.remove (s);
+if (recalc) {
+this.recalcConservation ();
+}}}, "jalview.datamodel.SequenceI,~B");
+Clazz.overrideMethod (c$, "getStartRes",
+function () {
+return this.startRes;
+});
+Clazz.overrideMethod (c$, "getEndRes",
+function () {
+return this.endRes;
+});
+Clazz.defineMethod (c$, "setStartRes",
+function (i) {
+this.startRes = i;
+}, "~N");
+Clazz.defineMethod (c$, "setEndRes",
+function (i) {
+this.endRes = i;
+}, "~N");
+Clazz.defineMethod (c$, "getSize",
+function () {
+return this.sequences.size ();
+});
+Clazz.defineMethod (c$, "getSequenceAt",
+function (i) {
+return this.sequences.get (i);
+}, "~N");
+Clazz.defineMethod (c$, "setColourText",
+function (state) {
+this.colourText = state;
+}, "~B");
+Clazz.defineMethod (c$, "getColourText",
+function () {
+return this.colourText;
+});
+Clazz.defineMethod (c$, "setDisplayText",
+function (state) {
+this.displayText = state;
+}, "~B");
+Clazz.defineMethod (c$, "getDisplayText",
+function () {
+return this.displayText;
+});
+Clazz.defineMethod (c$, "setDisplayBoxes",
+function (state) {
+this.displayBoxes = state;
+}, "~B");
+Clazz.defineMethod (c$, "getDisplayBoxes",
+function () {
+return this.displayBoxes;
+});
+Clazz.overrideMethod (c$, "getWidth",
+function () {
+{
+var first = true;
+for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+if (first || seq.getLength () > this.width) {
+this.width = seq.getLength ();
+first = false;
+}}
+return this.width;
+}});
+Clazz.defineMethod (c$, "setOutlineColour",
+function (c) {
+this.outlineColour = c;
+}, "java.awt.Color");
+Clazz.defineMethod (c$, "getOutlineColour",
+function () {
+return this.outlineColour;
+});
+Clazz.defineMethod (c$, "getSequencesInOrder",
+function (al) {
+return this.getSequencesInOrder (al, true);
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "getSequencesInOrder",
+function (al, trim) {
+{
+var sSize = this.sequences.size ();
+var alHeight = al.getHeight ();
+var seqs = new Array ((trim) ? sSize : alHeight);
+var index = 0;
+for (var i = 0; i < alHeight && index < sSize; i++) {
+if (this.sequences.contains (al.getSequenceAt (i))) {
+seqs[(trim) ? index : i] = al.getSequenceAt (i);
+index++;
+}}
+if (index == 0) {
+return null;
+}if (!trim) {
+return seqs;
+}if (index < seqs.length) {
+var dummy = seqs;
+seqs = new Array (index);
+while (--index >= 0) {
+seqs[index] = dummy[index];
+dummy[index] = null;
+}
+}return seqs;
+}}, "jalview.datamodel.AlignmentI,~B");
+Clazz.defineMethod (c$, "getIdColour",
+function () {
+return this.idColour;
+});
+Clazz.defineMethod (c$, "setIdColour",
+function (idColour) {
+this.idColour = idColour;
+}, "java.awt.Color");
+Clazz.overrideMethod (c$, "getSeqrep",
+function () {
+return this.seqrep;
+});
+Clazz.overrideMethod (c$, "setSeqrep",
+function (seqrep) {
+this.seqrep = seqrep;
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "hasSeqrep",
+function () {
+return this.seqrep != null;
+});
+Clazz.defineMethod (c$, "setHidereps",
+function (visibility) {
+this.hidereps = visibility;
+}, "~B");
+Clazz.defineMethod (c$, "isHidereps",
+function () {
+return this.hidereps;
+});
+Clazz.defineMethod (c$, "setHideCols",
+function (visibility) {
+this.hidecols = visibility;
+}, "~B");
+Clazz.defineMethod (c$, "isHideCols",
+function () {
+return this.hidecols;
+});
+Clazz.defineMethod (c$, "intersect",
+function (alignment, map) {
+var sgroup = new jalview.datamodel.SequenceGroup (this);
+var insect = this.getSequencesInOrder (alignment);
+sgroup.sequences = new java.util.ArrayList ();
+for (var s = 0; insect != null && s < insect.length; s++) {
+if (map == null || map.containsKey (insect[s])) {
+sgroup.sequences.add (insect[s]);
+}}
+return sgroup;
+}, "jalview.datamodel.AlignmentI,java.util.Map");
+Clazz.defineMethod (c$, "getShowNonconserved",
+function () {
+return this.showNonconserved;
+});
+Clazz.defineMethod (c$, "setShowNonconserved",
+function (displayNonconserved) {
+this.showNonconserved = displayNonconserved;
+}, "~B");
+Clazz.defineMethod (c$, "setConsensus",
+function (aan) {
+if (this.consensus == null) {
+this.consensus = aan;
+}}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "getConsensus",
+function () {
+var aWidth = this.getWidth ();
+if (aWidth < 0) {
+return null;
+}if (this.consensus == null) {
+this.consensus = new jalview.datamodel.AlignmentAnnotation ("", "", new Array (1), 0, 100, 1);
+this.consensus.hasText = true;
+this.consensus.autoCalculated = true;
+this.consensus.groupRef = this;
+this.consensus.label = "Consensus for " + this.getName ();
+this.consensus.description = "Percent Identity";
+}return this.consensus;
+});
+Clazz.defineMethod (c$, "setConservationRow",
+function (aan) {
+if (this.conservation == null) {
+this.conservation = aan;
+}}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "getConservationRow",
+function () {
+if (this.conservation == null) {
+this.conservation = new jalview.datamodel.AlignmentAnnotation ("", "", new Array (1), 0, 11, 1);
+}this.conservation.hasText = true;
+this.conservation.autoCalculated = true;
+this.conservation.groupRef = this;
+this.conservation.label = "Conservation for " + this.getName ();
+this.conservation.description = "Conservation for group " + this.getName () + " less than " + this.consPercGaps + "% gaps";
+return this.conservation;
+});
+Clazz.defineMethod (c$, "hasAnnotationRows",
+function () {
+return this.consensus != null || this.conservation != null;
+});
+Clazz.defineMethod (c$, "getConsensusSeq",
+function () {
+this.getConsensus ();
+var seqs = new StringBuffer ();
+for (var i = 0; i < this.consensus.annotations.length; i++) {
+if (this.consensus.annotations[i] != null) {
+if (this.consensus.annotations[i].description.charAt (0) == '[') {
+seqs.append (this.consensus.annotations[i].description.charAt (1));
+} else {
+seqs.append (this.consensus.annotations[i].displayCharacter);
+}}}
+var sq = new jalview.datamodel.Sequence ("Group" + this.getName () + " Consensus", seqs.toString ());
+sq.setDescription ("Percentage Identity Consensus " + ((this.ignoreGapsInConsensus) ? " without gaps" : ""));
+return sq;
+});
+Clazz.defineMethod (c$, "setIgnoreGapsConsensus",
+function (state) {
+if (this.ignoreGapsInConsensus != state && this.consensus != null) {
+this.ignoreGapsInConsensus = state;
+this.recalcConservation ();
+}this.ignoreGapsInConsensus = state;
+}, "~B");
+Clazz.defineMethod (c$, "getIgnoreGapsConsensus",
+function () {
+return this.ignoreGapsInConsensus;
+});
+Clazz.defineMethod (c$, "setshowSequenceLogo",
+function (showSequenceLogo) {
+if (this.showSequenceLogo != showSequenceLogo && this.consensus != null) {
+this.showSequenceLogo = showSequenceLogo;
+this.recalcConservation ();
+}this.showSequenceLogo = showSequenceLogo;
+}, "~B");
+Clazz.defineMethod (c$, "setShowConsensusHistogram",
+function (showConsHist) {
+if (this.showConsensusHistogram != showConsHist && this.consensus != null) {
+this.showConsensusHistogram = showConsHist;
+this.recalcConservation ();
+}this.showConsensusHistogram = showConsHist;
+}, "~B");
+Clazz.defineMethod (c$, "isShowConsensusHistogram",
+function () {
+return this.showConsensusHistogram;
+});
+Clazz.defineMethod (c$, "setNormaliseSequenceLogo",
+function (norm) {
+this.normaliseSequenceLogo = norm;
+}, "~B");
+Clazz.defineMethod (c$, "isNormaliseSequenceLogo",
+function () {
+return this.normaliseSequenceLogo;
+});
+Clazz.overrideMethod (c$, "getAlignmentAnnotation",
+function () {
+var annot = new java.util.ArrayList ();
+{
+for (var seq, $seq = this.sequences.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var aa = seq.getAnnotation ();
+if (aa != null) {
+for (var al, $al = 0, $$al = aa; $al < $$al.length && ((al = $$al[$al]) || true); $al++) {
+if (al.groupRef === this) {
+annot.add (al);
+}}
+}}
+if (this.consensus != null) {
+annot.add (this.consensus);
+}if (this.conservation != null) {
+annot.add (this.conservation);
+}}return annot.toArray ( new Array (0));
+});
+Clazz.overrideMethod (c$, "findAnnotation",
+function (calcId) {
+var aa = new java.util.ArrayList ();
+for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {
+if (a.getCalcId () === calcId) {
+aa.add (a);
+}}
+return aa;
+}, "~S");
+Clazz.overrideMethod (c$, "findAnnotations",
+function (seq, calcId, label) {
+var aa = new java.util.ArrayList ();
+for (var ann, $ann = 0, $$ann = this.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
+if (ann.getCalcId () != null && ann.getCalcId ().equals (calcId) && ann.sequenceRef != null && ann.sequenceRef === seq && ann.label != null && ann.label.equals (label)) {
+aa.add (ann);
+}}
+return aa;
+}, "jalview.datamodel.SequenceI,~S,~S");
+Clazz.defineMethod (c$, "hasAnnotation",
+function (calcId) {
+if (calcId != null && !"".equals (calcId)) {
+for (var a, $a = 0, $$a = this.getAlignmentAnnotation (); $a < $$a.length && ((a = $$a[$a]) || true); $a++) {
+if (a.getCalcId () === calcId) {
+return true;
+}}
+}return false;
+}, "~S");
+Clazz.defineMethod (c$, "clear",
+function () {
+{
+this.sequences.clear ();
+}});
+Clazz.defineMethod (c$, "setContext",
+function (context) {
+this.context = context;
+}, "jalview.datamodel.AnnotatedCollectionI");
+Clazz.overrideMethod (c$, "getContext",
+function () {
+return this.context;
+});
+});
diff --git a/bin/jalview/datamodel/SequenceI.js b/bin/jalview/datamodel/SequenceI.js
index 242d5a5..dcf0724 100644
--- a/bin/jalview/datamodel/SequenceI.js
+++ b/bin/jalview/datamodel/SequenceI.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.ASequenceI"], "jalview.datamodel.SequenceI", null, function () {
-Clazz.declareInterface (jalview.datamodel, "SequenceI", jalview.datamodel.ASequenceI);
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.ASequenceI"], "jalview.datamodel.SequenceI", null, function () {
+Clazz.declareInterface (jalview.datamodel, "SequenceI", jalview.datamodel.ASequenceI);
+});
diff --git a/bin/jalview/datamodel/SequenceNode.js b/bin/jalview/datamodel/SequenceNode.js
index 54cb491..2069471 100644
--- a/bin/jalview/datamodel/SequenceNode.js
+++ b/bin/jalview/datamodel/SequenceNode.js
@@ -1,64 +1,64 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["jalview.datamodel.BinaryNode", "java.awt.Color"], "jalview.datamodel.SequenceNode", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.dist = 0;
-this.count = 0;
-this.height = 0;
-this.ycount = 0;
-this.color = null;
-this.dummy = false;
-this.placeholder = false;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "SequenceNode", jalview.datamodel.BinaryNode);
-Clazz.prepareFields (c$, function () {
-this.color = java.awt.Color.black;
-});
-Clazz.makeConstructor (c$,
-function (val, parent, dist, name) {
-Clazz.superConstructor (this, jalview.datamodel.SequenceNode, [val, parent, name]);
-this.dist = dist;
-}, "~O,jalview.datamodel.SequenceNode,~N,~S");
-Clazz.makeConstructor (c$,
-function (val, parent, name, dist, bootstrap, dummy) {
-Clazz.superConstructor (this, jalview.datamodel.SequenceNode, [val, parent, name]);
-this.dist = dist;
-this.bootstrap = bootstrap;
-this.dummy = dummy;
-}, "~O,jalview.datamodel.SequenceNode,~S,~N,~N,~B");
-Clazz.defineMethod (c$, "isDummy",
-function () {
-return this.dummy;
-});
-Clazz.defineMethod (c$, "isPlaceholder",
-function () {
-return this.placeholder;
-});
-Clazz.defineMethod (c$, "setDummy",
-function (newstate) {
-var oldstate = this.dummy;
-this.dummy = newstate;
-return oldstate;
-}, "~B");
-Clazz.defineMethod (c$, "setPlaceholder",
-function (Placeholder) {
-this.placeholder = Placeholder;
-}, "~B");
-Clazz.defineMethod (c$, "AscendTree",
-function () {
-var c = this;
-do {
-c = c.parent ();
-} while ((c != null) && c.dummy);
-return c;
-});
-Clazz.defineMethod (c$, "isSequenceLabel",
-function () {
-if (this.name != null && this.name.length > 0) {
-for (var c = 0, s = this.name.length; c < s; c++) {
-var q = this.name.charAt (c);
-if ('0' <= q && q <= '9') continue;
-return true;
-}
-}return false;
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["jalview.datamodel.BinaryNode", "java.awt.Color"], "jalview.datamodel.SequenceNode", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.dist = 0;
+this.count = 0;
+this.height = 0;
+this.ycount = 0;
+this.color = null;
+this.dummy = false;
+this.placeholder = false;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "SequenceNode", jalview.datamodel.BinaryNode);
+Clazz.prepareFields (c$, function () {
+this.color = java.awt.Color.black;
+});
+Clazz.makeConstructor (c$,
+function (val, parent, dist, name) {
+Clazz.superConstructor (this, jalview.datamodel.SequenceNode, [val, parent, name]);
+this.dist = dist;
+}, "~O,jalview.datamodel.SequenceNode,~N,~S");
+Clazz.makeConstructor (c$,
+function (val, parent, name, dist, bootstrap, dummy) {
+Clazz.superConstructor (this, jalview.datamodel.SequenceNode, [val, parent, name]);
+this.dist = dist;
+this.bootstrap = bootstrap;
+this.dummy = dummy;
+}, "~O,jalview.datamodel.SequenceNode,~S,~N,~N,~B");
+Clazz.defineMethod (c$, "isDummy",
+function () {
+return this.dummy;
+});
+Clazz.defineMethod (c$, "isPlaceholder",
+function () {
+return this.placeholder;
+});
+Clazz.defineMethod (c$, "setDummy",
+function (newstate) {
+var oldstate = this.dummy;
+this.dummy = newstate;
+return oldstate;
+}, "~B");
+Clazz.defineMethod (c$, "setPlaceholder",
+function (Placeholder) {
+this.placeholder = Placeholder;
+}, "~B");
+Clazz.defineMethod (c$, "AscendTree",
+function () {
+var c = this;
+do {
+c = c.parent ();
+} while ((c != null) && c.dummy);
+return c;
+});
+Clazz.defineMethod (c$, "isSequenceLabel",
+function () {
+if (this.name != null && this.name.length > 0) {
+for (var c = 0, s = this.name.length; c < s; c++) {
+var q = this.name.charAt (c);
+if ('0' <= q && q <= '9') continue;
+return true;
+}
+}return false;
+});
+});
diff --git a/bin/jalview/datamodel/SequencePoint.js b/bin/jalview/datamodel/SequencePoint.js
index 0616692..549eae1 100644
--- a/bin/jalview/datamodel/SequencePoint.js
+++ b/bin/jalview/datamodel/SequencePoint.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.decorateAsClass (function () {
-this.isPlaceholder = false;
-this.sequence = null;
-this.coord = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "SequencePoint");
-Clazz.makeConstructor (c$,
-function (sequence, coord) {
-this.sequence = sequence;
-this.coord = coord;
-}, "jalview.datamodel.SequenceI,~A");
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.decorateAsClass (function () {
+this.isPlaceholder = false;
+this.sequence = null;
+this.coord = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "SequencePoint");
+Clazz.makeConstructor (c$,
+function (sequence, coord) {
+this.sequence = sequence;
+this.coord = coord;
+}, "jalview.datamodel.SequenceI,~A");
diff --git a/bin/jalview/datamodel/StructureViewerModel.js b/bin/jalview/datamodel/StructureViewerModel.js
index e21d3fc..cc11e43 100644
--- a/bin/jalview/datamodel/StructureViewerModel.js
+++ b/bin/jalview/datamodel/StructureViewerModel.js
@@ -1,156 +1,156 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (["java.util.HashMap"], "jalview.datamodel.StructureViewerModel", ["java.util.ArrayList"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.x = 0;
-this.y = 0;
-this.width = 0;
-this.height = 0;
-this.alignWithPanel = false;
-this.colourWithAlignPanel = false;
-this.colourByViewer = false;
-this.stateData = "";
-this.viewId = null;
-this.type = null;
-this.fileData = null;
-if (!Clazz.isClassDefined ("jalview.datamodel.StructureViewerModel.StructureData")) {
-jalview.datamodel.StructureViewerModel.$StructureViewerModel$StructureData$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "StructureViewerModel");
-Clazz.prepareFields (c$, function () {
-this.fileData = new java.util.HashMap ();
-});
-Clazz.makeConstructor (c$,
-function (x, y, width, height, alignWithPanel, colourWithAlignPanel, colourByViewer, viewId, type) {
-this.x = x;
-this.y = y;
-this.width = width;
-this.height = height;
-this.alignWithPanel = alignWithPanel;
-this.colourWithAlignPanel = colourWithAlignPanel;
-this.colourByViewer = colourByViewer;
-this.viewId = viewId;
-this.type = type;
-}, "~N,~N,~N,~N,~B,~B,~B,~S,~S");
-Clazz.defineMethod (c$, "getX",
-function () {
-return this.x;
-});
-Clazz.defineMethod (c$, "setX",
-function (x) {
-this.x = x;
-}, "~N");
-Clazz.defineMethod (c$, "getY",
-function () {
-return this.y;
-});
-Clazz.defineMethod (c$, "setY",
-function (y) {
-this.y = y;
-}, "~N");
-Clazz.defineMethod (c$, "getWidth",
-function () {
-return this.width;
-});
-Clazz.defineMethod (c$, "setWidth",
-function (width) {
-this.width = width;
-}, "~N");
-Clazz.defineMethod (c$, "getHeight",
-function () {
-return this.height;
-});
-Clazz.defineMethod (c$, "setHeight",
-function (height) {
-this.height = height;
-}, "~N");
-Clazz.defineMethod (c$, "isAlignWithPanel",
-function () {
-return this.alignWithPanel;
-});
-Clazz.defineMethod (c$, "setAlignWithPanel",
-function (alignWithPanel) {
-this.alignWithPanel = alignWithPanel;
-}, "~B");
-Clazz.defineMethod (c$, "isColourWithAlignPanel",
-function () {
-return this.colourWithAlignPanel;
-});
-Clazz.defineMethod (c$, "setColourWithAlignPanel",
-function (colourWithAlignPanel) {
-this.colourWithAlignPanel = colourWithAlignPanel;
-}, "~B");
-Clazz.defineMethod (c$, "isColourByViewer",
-function () {
-return this.colourByViewer;
-});
-Clazz.defineMethod (c$, "setColourByViewer",
-function (colourByViewer) {
-this.colourByViewer = colourByViewer;
-}, "~B");
-Clazz.defineMethod (c$, "getStateData",
-function () {
-return this.stateData;
-});
-Clazz.defineMethod (c$, "setStateData",
-function (stateData) {
-this.stateData = stateData;
-}, "~S");
-Clazz.defineMethod (c$, "getFileData",
-function () {
-return this.fileData;
-});
-Clazz.defineMethod (c$, "setFileData",
-function (fileData) {
-this.fileData = fileData;
-}, "java.util.Map");
-Clazz.defineMethod (c$, "getViewId",
-function () {
-return this.viewId;
-});
-Clazz.defineMethod (c$, "getType",
-function () {
-return this.type;
-});
-c$.$StructureViewerModel$StructureData$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.filePath = null;
-this.pdbId = null;
-this.seqList = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel.StructureViewerModel, "StructureData");
-Clazz.makeConstructor (c$,
-function (a, b) {
-this.filePath = a;
-this.pdbId = b;
-this.seqList = new java.util.ArrayList ();
-}, "~S,~S");
-Clazz.defineMethod (c$, "getFilePath",
-function () {
-return this.filePath;
-});
-Clazz.defineMethod (c$, "setFilePath",
-function (a) {
-this.filePath = a;
-}, "~S");
-Clazz.defineMethod (c$, "getPdbId",
-function () {
-return this.pdbId;
-});
-Clazz.defineMethod (c$, "setPdbId",
-function (a) {
-this.pdbId = a;
-}, "~S");
-Clazz.defineMethod (c$, "getSeqList",
-function () {
-return this.seqList;
-});
-Clazz.defineMethod (c$, "setSeqList",
-function (a) {
-this.seqList = a;
-}, "java.util.List");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (["java.util.HashMap"], "jalview.datamodel.StructureViewerModel", ["java.util.ArrayList"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.x = 0;
+this.y = 0;
+this.width = 0;
+this.height = 0;
+this.alignWithPanel = false;
+this.colourWithAlignPanel = false;
+this.colourByViewer = false;
+this.stateData = "";
+this.viewId = null;
+this.type = null;
+this.fileData = null;
+if (!Clazz.isClassDefined ("jalview.datamodel.StructureViewerModel.StructureData")) {
+jalview.datamodel.StructureViewerModel.$StructureViewerModel$StructureData$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "StructureViewerModel");
+Clazz.prepareFields (c$, function () {
+this.fileData = new java.util.HashMap ();
+});
+Clazz.makeConstructor (c$,
+function (x, y, width, height, alignWithPanel, colourWithAlignPanel, colourByViewer, viewId, type) {
+this.x = x;
+this.y = y;
+this.width = width;
+this.height = height;
+this.alignWithPanel = alignWithPanel;
+this.colourWithAlignPanel = colourWithAlignPanel;
+this.colourByViewer = colourByViewer;
+this.viewId = viewId;
+this.type = type;
+}, "~N,~N,~N,~N,~B,~B,~B,~S,~S");
+Clazz.defineMethod (c$, "getX",
+function () {
+return this.x;
+});
+Clazz.defineMethod (c$, "setX",
+function (x) {
+this.x = x;
+}, "~N");
+Clazz.defineMethod (c$, "getY",
+function () {
+return this.y;
+});
+Clazz.defineMethod (c$, "setY",
+function (y) {
+this.y = y;
+}, "~N");
+Clazz.defineMethod (c$, "getWidth",
+function () {
+return this.width;
+});
+Clazz.defineMethod (c$, "setWidth",
+function (width) {
+this.width = width;
+}, "~N");
+Clazz.defineMethod (c$, "getHeight",
+function () {
+return this.height;
+});
+Clazz.defineMethod (c$, "setHeight",
+function (height) {
+this.height = height;
+}, "~N");
+Clazz.defineMethod (c$, "isAlignWithPanel",
+function () {
+return this.alignWithPanel;
+});
+Clazz.defineMethod (c$, "setAlignWithPanel",
+function (alignWithPanel) {
+this.alignWithPanel = alignWithPanel;
+}, "~B");
+Clazz.defineMethod (c$, "isColourWithAlignPanel",
+function () {
+return this.colourWithAlignPanel;
+});
+Clazz.defineMethod (c$, "setColourWithAlignPanel",
+function (colourWithAlignPanel) {
+this.colourWithAlignPanel = colourWithAlignPanel;
+}, "~B");
+Clazz.defineMethod (c$, "isColourByViewer",
+function () {
+return this.colourByViewer;
+});
+Clazz.defineMethod (c$, "setColourByViewer",
+function (colourByViewer) {
+this.colourByViewer = colourByViewer;
+}, "~B");
+Clazz.defineMethod (c$, "getStateData",
+function () {
+return this.stateData;
+});
+Clazz.defineMethod (c$, "setStateData",
+function (stateData) {
+this.stateData = stateData;
+}, "~S");
+Clazz.defineMethod (c$, "getFileData",
+function () {
+return this.fileData;
+});
+Clazz.defineMethod (c$, "setFileData",
+function (fileData) {
+this.fileData = fileData;
+}, "java.util.Map");
+Clazz.defineMethod (c$, "getViewId",
+function () {
+return this.viewId;
+});
+Clazz.defineMethod (c$, "getType",
+function () {
+return this.type;
+});
+c$.$StructureViewerModel$StructureData$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.filePath = null;
+this.pdbId = null;
+this.seqList = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel.StructureViewerModel, "StructureData");
+Clazz.makeConstructor (c$,
+function (a, b) {
+this.filePath = a;
+this.pdbId = b;
+this.seqList = new java.util.ArrayList ();
+}, "~S,~S");
+Clazz.defineMethod (c$, "getFilePath",
+function () {
+return this.filePath;
+});
+Clazz.defineMethod (c$, "setFilePath",
+function (a) {
+this.filePath = a;
+}, "~S");
+Clazz.defineMethod (c$, "getPdbId",
+function () {
+return this.pdbId;
+});
+Clazz.defineMethod (c$, "setPdbId",
+function (a) {
+this.pdbId = a;
+}, "~S");
+Clazz.defineMethod (c$, "getSeqList",
+function () {
+return this.seqList;
+});
+Clazz.defineMethod (c$, "setSeqList",
+function (a) {
+this.seqList = a;
+}, "java.util.List");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/datamodel/UniprotEntry.js b/bin/jalview/datamodel/UniprotEntry.js
index 24b3ce2..5b80f48 100644
--- a/bin/jalview/datamodel/UniprotEntry.js
+++ b/bin/jalview/datamodel/UniprotEntry.js
@@ -1,58 +1,58 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.decorateAsClass (function () {
-this.sequence = null;
-this.name = null;
-this.accession = null;
-this.feature = null;
-this.dbrefs = null;
-this.protName = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "UniprotEntry");
-Clazz.defineMethod (c$, "setAccession",
-function (items) {
-this.accession = items;
-}, "java.util.Vector");
-Clazz.defineMethod (c$, "setFeature",
-function (items) {
-this.feature = items;
-}, "java.util.Vector");
-Clazz.defineMethod (c$, "getFeature",
-function () {
-return this.feature;
-});
-Clazz.defineMethod (c$, "getAccession",
-function () {
-return this.accession;
-});
-Clazz.defineMethod (c$, "setProtein",
-function (names) {
-this.protName = names;
-}, "jalview.datamodel.UniprotProteinName");
-Clazz.defineMethod (c$, "getProtein",
-function () {
-return this.protName;
-});
-Clazz.defineMethod (c$, "setName",
-function (na) {
-this.name = na;
-}, "java.util.Vector");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.name;
-});
-Clazz.defineMethod (c$, "getUniprotSequence",
-function () {
-return this.sequence;
-});
-Clazz.defineMethod (c$, "setUniprotSequence",
-function (seq) {
-this.sequence = seq;
-}, "jalview.datamodel.UniprotSequence");
-Clazz.defineMethod (c$, "getDbReference",
-function () {
-return this.dbrefs;
-});
-Clazz.defineMethod (c$, "setDbReference",
-function (dbref) {
-this.dbrefs = dbref;
-}, "java.util.Vector");
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.decorateAsClass (function () {
+this.sequence = null;
+this.name = null;
+this.accession = null;
+this.feature = null;
+this.dbrefs = null;
+this.protName = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "UniprotEntry");
+Clazz.defineMethod (c$, "setAccession",
+function (items) {
+this.accession = items;
+}, "java.util.Vector");
+Clazz.defineMethod (c$, "setFeature",
+function (items) {
+this.feature = items;
+}, "java.util.Vector");
+Clazz.defineMethod (c$, "getFeature",
+function () {
+return this.feature;
+});
+Clazz.defineMethod (c$, "getAccession",
+function () {
+return this.accession;
+});
+Clazz.defineMethod (c$, "setProtein",
+function (names) {
+this.protName = names;
+}, "jalview.datamodel.UniprotProteinName");
+Clazz.defineMethod (c$, "getProtein",
+function () {
+return this.protName;
+});
+Clazz.defineMethod (c$, "setName",
+function (na) {
+this.name = na;
+}, "java.util.Vector");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.name;
+});
+Clazz.defineMethod (c$, "getUniprotSequence",
+function () {
+return this.sequence;
+});
+Clazz.defineMethod (c$, "setUniprotSequence",
+function (seq) {
+this.sequence = seq;
+}, "jalview.datamodel.UniprotSequence");
+Clazz.defineMethod (c$, "getDbReference",
+function () {
+return this.dbrefs;
+});
+Clazz.defineMethod (c$, "setDbReference",
+function (dbref) {
+this.dbrefs = dbref;
+}, "java.util.Vector");
diff --git a/bin/jalview/datamodel/UniprotFile.js b/bin/jalview/datamodel/UniprotFile.js
index f779f79..e0f80f8 100644
--- a/bin/jalview/datamodel/UniprotFile.js
+++ b/bin/jalview/datamodel/UniprotFile.js
@@ -1,13 +1,13 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.decorateAsClass (function () {
-this._items = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "UniprotFile");
-Clazz.defineMethod (c$, "setUniprotEntries",
-function (items) {
-this._items = items;
-}, "java.util.Vector");
-Clazz.defineMethod (c$, "getUniprotEntries",
-function () {
-return this._items;
-});
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.decorateAsClass (function () {
+this._items = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "UniprotFile");
+Clazz.defineMethod (c$, "setUniprotEntries",
+function (items) {
+this._items = items;
+}, "java.util.Vector");
+Clazz.defineMethod (c$, "getUniprotEntries",
+function () {
+return this._items;
+});
diff --git a/bin/jalview/datamodel/UniprotProteinName.js b/bin/jalview/datamodel/UniprotProteinName.js
index fd4ce5b..931e26c 100644
--- a/bin/jalview/datamodel/UniprotProteinName.js
+++ b/bin/jalview/datamodel/UniprotProteinName.js
@@ -1,13 +1,13 @@
-Clazz.declarePackage ("jalview.datamodel");
-c$ = Clazz.decorateAsClass (function () {
-this.names = null;
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "UniprotProteinName");
-Clazz.defineMethod (c$, "setName",
-function (names) {
-this.names = names;
-}, "java.util.Vector");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.names;
-});
+Clazz.declarePackage ("jalview.datamodel");
+c$ = Clazz.decorateAsClass (function () {
+this.names = null;
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "UniprotProteinName");
+Clazz.defineMethod (c$, "setName",
+function (names) {
+this.names = names;
+}, "java.util.Vector");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.names;
+});
diff --git a/bin/jalview/datamodel/UniprotSequence.js b/bin/jalview/datamodel/UniprotSequence.js
index 039f1db..d6ae549 100644
--- a/bin/jalview/datamodel/UniprotSequence.js
+++ b/bin/jalview/datamodel/UniprotSequence.js
@@ -1,21 +1,21 @@
-Clazz.declarePackage ("jalview.datamodel");
-Clazz.load (null, "jalview.datamodel.UniprotSequence", ["java.lang.StringBuilder"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this._content = "";
-Clazz.instantialize (this, arguments);
-}, jalview.datamodel, "UniprotSequence");
-Clazz.defineMethod (c$, "setContent",
-function (seq) {
-if (seq != null) {
-var sb = new StringBuilder (seq.length);
-for (var i = 0; i < seq.length; i++) {
-if (seq.charAt (i) != ' ') {
-sb.append (seq.charAt (i));
-}}
-this._content = sb.toString ();
-}}, "~S");
-Clazz.defineMethod (c$, "getContent",
-function () {
-return this._content;
-});
-});
+Clazz.declarePackage ("jalview.datamodel");
+Clazz.load (null, "jalview.datamodel.UniprotSequence", ["java.lang.StringBuilder"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this._content = "";
+Clazz.instantialize (this, arguments);
+}, jalview.datamodel, "UniprotSequence");
+Clazz.defineMethod (c$, "setContent",
+function (seq) {
+if (seq != null) {
+var sb = new StringBuilder (seq.length);
+for (var i = 0; i < seq.length; i++) {
+if (seq.charAt (i) != ' ') {
+sb.append (seq.charAt (i));
+}}
+this._content = sb.toString ();
+}}, "~S");
+Clazz.defineMethod (c$, "getContent",
+function () {
+return this._content;
+});
+});
diff --git a/bin/jalview/ext/jmol/JmolCommands.class b/bin/jalview/ext/jmol/JmolCommands.class
index 5debe8d..36f4b3f 100644
Binary files a/bin/jalview/ext/jmol/JmolCommands.class and b/bin/jalview/ext/jmol/JmolCommands.class differ
diff --git a/bin/jalview/ext/jmol/JmolCommands.js b/bin/jalview/ext/jmol/JmolCommands.js
index 495572c..b08a4e3 100644
--- a/bin/jalview/ext/jmol/JmolCommands.js
+++ b/bin/jalview/ext/jmol/JmolCommands.js
@@ -1,69 +1,69 @@
-Clazz.declarePackage ("jalview.ext.jmol");
-Clazz.load (null, "jalview.ext.jmol.JmolCommands", ["jalview.structure.StructureMappingcommandSet", "jalview.util.Comparison", "java.lang.StringBuffer", "java.util.ArrayList"], function () {
-c$ = Clazz.declareType (jalview.ext.jmol, "JmolCommands");
-c$.getColourBySequenceCommand = Clazz.defineMethod (c$, "getColourBySequenceCommand",
-function (ssm, files, sequence, sr, fr, alignment) {
-var cset = new java.util.ArrayList ();
-for (var pdbfnum = 0; pdbfnum < files.length; pdbfnum++) {
-var mapping = ssm.getMapping (files[pdbfnum]);
-var command = new StringBuffer ();
-var smc;
-var str = new java.util.ArrayList ();
-if (mapping == null || mapping.length < 1) {
-continue;
-}var lastPos = -1;
-for (var s = 0; s < sequence[pdbfnum].length; s++) {
-for (var sp, m = 0; m < mapping.length; m++) {
-if (mapping[m].getSequence () === sequence[pdbfnum][s] && (sp = alignment.findIndex (sequence[pdbfnum][s])) > -1) {
-var asp = alignment.getSequenceAt (sp);
-for (var r = 0; r < asp.getLength (); r++) {
-if (jalview.util.Comparison.isGap (asp.getCharAt (r))) {
-continue;
-}var pos = mapping[m].getPDBResNum (asp.findPosition (r));
-if (pos < 1 || pos == lastPos) {
-continue;
-}lastPos = pos;
-var col = sr.getResidueBoxColour (sequence[pdbfnum][s], r);
-if (fr != null) {
-col = fr.findFeatureColour (col, sequence[pdbfnum][s], r);
-}var newSelcom = (mapping[m].getChain () !== " " ? ":" + mapping[m].getChain () : "") + "/" + (pdbfnum + 1) + ".1" + ";color[" + col.getRed () + "," + col.getGreen () + "," + col.getBlue () + "]";
-if (command.length () > newSelcom.length && command.substring (command.length () - newSelcom.length).equals (newSelcom)) {
-command = jalview.ext.jmol.JmolCommands.condenseCommand (command, pos);
-continue;
-}command.append (";");
-if (command.length () > 51200) {
-str.add (command.toString ());
-command.setLength (0);
-}command.append ("select " + pos);
-command.append (newSelcom);
-}
-break;
-}}
-}
-{
-str.add (command.toString ());
-command.setLength (0);
-}cset.add ( new jalview.structure.StructureMappingcommandSet (jalview.ext.jmol.JmolCommands, files[pdbfnum], str.toArray ( new Array (str.size ()))));
-}
-return cset.toArray ( new Array (cset.size ()));
-}, "jalview.structure.StructureSelectionManager,~A,~A,jalview.api.SequenceRenderer,jalview.api.FeatureRenderer,jalview.datamodel.AlignmentI");
-c$.condenseCommand = Clazz.defineMethod (c$, "condenseCommand",
-function (command, pos) {
-var p = command.length ();
-var q = p;
-do {
-p -= 6;
-if (p < 1) {
-p = 0;
-};} while ((q = command.indexOf ("select", p)) == -1 && p > 0);
-var sb = new StringBuffer (command.substring (0, q + 7));
-command = command.$delete (0, q + 7);
-var start;
-if (command.indexOf ("-") > -1) {
-start = command.substring (0, command.indexOf ("-"));
-} else {
-start = command.substring (0, command.indexOf (":"));
-}sb.append (start + "-" + pos + command.substring (command.indexOf (":")));
-return sb;
-}, "StringBuffer,~N");
-});
+Clazz.declarePackage ("jalview.ext.jmol");
+Clazz.load (null, "jalview.ext.jmol.JmolCommands", ["jalview.structure.StructureMappingcommandSet", "jalview.util.Comparison", "java.lang.StringBuffer", "java.util.ArrayList"], function () {
+c$ = Clazz.declareType (jalview.ext.jmol, "JmolCommands");
+c$.getColourBySequenceCommand = Clazz.defineMethod (c$, "getColourBySequenceCommand",
+function (ssm, files, sequence, sr, fr, alignment) {
+var cset = new java.util.ArrayList ();
+for (var pdbfnum = 0; pdbfnum < files.length; pdbfnum++) {
+var mapping = ssm.getMapping (files[pdbfnum]);
+var command = new StringBuffer ();
+var smc;
+var str = new java.util.ArrayList ();
+if (mapping == null || mapping.length < 1) {
+continue;
+}var lastPos = -1;
+for (var s = 0; s < sequence[pdbfnum].length; s++) {
+for (var sp, m = 0; m < mapping.length; m++) {
+if (mapping[m].getSequence () === sequence[pdbfnum][s] && (sp = alignment.findIndex (sequence[pdbfnum][s])) > -1) {
+var asp = alignment.getSequenceAt (sp);
+for (var r = 0; r < asp.getLength (); r++) {
+if (jalview.util.Comparison.isGap (asp.getCharAt (r))) {
+continue;
+}var pos = mapping[m].getPDBResNum (asp.findPosition (r));
+if (pos < 1 || pos == lastPos) {
+continue;
+}lastPos = pos;
+var col = sr.getResidueBoxColour (sequence[pdbfnum][s], r);
+if (fr != null) {
+col = fr.findFeatureColour (col, sequence[pdbfnum][s], r);
+}var newSelcom = (mapping[m].getChain () !== " " ? ":" + mapping[m].getChain () : "") + "/" + (pdbfnum + 1) + ".1" + ";color[" + col.getRed () + "," + col.getGreen () + "," + col.getBlue () + "]";
+if (command.length () > newSelcom.length && command.substring (command.length () - newSelcom.length).equals (newSelcom)) {
+command = jalview.ext.jmol.JmolCommands.condenseCommand (command, pos);
+continue;
+}command.append (";");
+if (command.length () > 51200) {
+str.add (command.toString ());
+command.setLength (0);
+}command.append ("select " + pos);
+command.append (newSelcom);
+}
+break;
+}}
+}
+{
+str.add (command.toString ());
+command.setLength (0);
+}cset.add ( new jalview.structure.StructureMappingcommandSet (jalview.ext.jmol.JmolCommands, files[pdbfnum], str.toArray ( new Array (str.size ()))));
+}
+return cset.toArray ( new Array (cset.size ()));
+}, "jalview.structure.StructureSelectionManager,~A,~A,jalview.api.SequenceRenderer,jalview.api.FeatureRenderer,jalview.datamodel.AlignmentI");
+c$.condenseCommand = Clazz.defineMethod (c$, "condenseCommand",
+function (command, pos) {
+var p = command.length ();
+var q = p;
+do {
+p -= 6;
+if (p < 1) {
+p = 0;
+};} while ((q = command.indexOf ("select", p)) == -1 && p > 0);
+var sb = new StringBuffer (command.substring (0, q + 7));
+command = command.$delete (0, q + 7);
+var start;
+if (command.indexOf ("-") > -1) {
+start = command.substring (0, command.indexOf ("-"));
+} else {
+start = command.substring (0, command.indexOf (":"));
+}sb.append (start + "-" + pos + command.substring (command.indexOf (":")));
+return sb;
+}, "StringBuffer,~N");
+});
diff --git a/bin/jalview/ext/varna/JalviewVarnaBinding.js b/bin/jalview/ext/varna/JalviewVarnaBinding.js
index f8bdf18..61bd3e7 100644
--- a/bin/jalview/ext/varna/JalviewVarnaBinding.js
+++ b/bin/jalview/ext/varna/JalviewVarnaBinding.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.ext.varna");
-Clazz.load (["jalview.api.StructureSelectionManagerProvider", "jalview.structure.StructureListener", "jalview.structures.models.SequenceStructureBindingModel", "java.awt.event.ComponentListener"], "jalview.ext.varna.JalviewVarnaBinding", null, function () {
-c$ = Clazz.declareType (jalview.ext.varna, "JalviewVarnaBinding", jalview.structures.models.SequenceStructureBindingModel, [jalview.structure.StructureListener, java.awt.event.ComponentListener, jalview.api.StructureSelectionManagerProvider]);
-});
+Clazz.declarePackage ("jalview.ext.varna");
+Clazz.load (["jalview.api.StructureSelectionManagerProvider", "jalview.structure.StructureListener", "jalview.structures.models.SequenceStructureBindingModel", "java.awt.event.ComponentListener"], "jalview.ext.varna.JalviewVarnaBinding", null, function () {
+c$ = Clazz.declareType (jalview.ext.varna, "JalviewVarnaBinding", jalview.structures.models.SequenceStructureBindingModel, [jalview.structure.StructureListener, java.awt.event.ComponentListener, jalview.api.StructureSelectionManagerProvider]);
+});
diff --git a/bin/jalview/ext/varna/RnaModel.js b/bin/jalview/ext/varna/RnaModel.js
index 9916e8e..f125256 100644
--- a/bin/jalview/ext/varna/RnaModel.js
+++ b/bin/jalview/ext/varna/RnaModel.js
@@ -1,17 +1,17 @@
-Clazz.declarePackage ("jalview.ext.varna");
-c$ = Clazz.decorateAsClass (function () {
-this.title = null;
-this.ann = null;
-this.seq = null;
-this.gapped = false;
-this.rna = null;
-Clazz.instantialize (this, arguments);
-}, jalview.ext.varna, "RnaModel");
-Clazz.makeConstructor (c$,
-function (t, aa, s, r, g) {
-this.title = t;
-this.ann = aa;
-this.seq = s;
-this.rna = r;
-this.gapped = g;
-}, "~S,jalview.datamodel.AlignmentAnnotation,jalview.datamodel.SequenceI,fr.orsay.lri.varna.models.rna.RNA,~B");
+Clazz.declarePackage ("jalview.ext.varna");
+c$ = Clazz.decorateAsClass (function () {
+this.title = null;
+this.ann = null;
+this.seq = null;
+this.gapped = false;
+this.rna = null;
+Clazz.instantialize (this, arguments);
+}, jalview.ext.varna, "RnaModel");
+Clazz.makeConstructor (c$,
+function (t, aa, s, r, g) {
+this.title = t;
+this.ann = aa;
+this.seq = s;
+this.rna = r;
+this.gapped = g;
+}, "~S,jalview.datamodel.AlignmentAnnotation,jalview.datamodel.SequenceI,fr.orsay.lri.varna.models.rna.RNA,~B");
diff --git a/bin/jalview/ext/varna/VarnaCommands.class b/bin/jalview/ext/varna/VarnaCommands.class
index 7a0d88f..27a2330 100644
Binary files a/bin/jalview/ext/varna/VarnaCommands.class and b/bin/jalview/ext/varna/VarnaCommands.class differ
diff --git a/bin/jalview/ext/varna/VarnaCommands.js b/bin/jalview/ext/varna/VarnaCommands.js
index b609d09..6562f80 100644
--- a/bin/jalview/ext/varna/VarnaCommands.js
+++ b/bin/jalview/ext/varna/VarnaCommands.js
@@ -1,66 +1,66 @@
-Clazz.declarePackage ("jalview.ext.varna");
-Clazz.load (null, "jalview.ext.varna.VarnaCommands", ["jalview.util.Comparison", "java.lang.StringBuffer", "java.util.ArrayList"], function () {
-c$ = Clazz.declareType (jalview.ext.varna, "VarnaCommands");
-c$.getColourBySequenceCommand = Clazz.defineMethod (c$, "getColourBySequenceCommand",
-function (ssm, files, sequence, sr, fr, alignment) {
-var str = new java.util.ArrayList ();
-var command = new StringBuffer ();
-for (var pdbfnum = 0; pdbfnum < files.length; pdbfnum++) {
-var mapping = ssm.getMapping (files[pdbfnum]);
-if (mapping == null || mapping.length < 1) {
-continue;
-}var lastPos = -1;
-for (var s = 0; s < sequence[pdbfnum].length; s++) {
-for (var sp, m = 0; m < mapping.length; m++) {
-if (mapping[m].getSequence () === sequence[pdbfnum][s] && (sp = alignment.findIndex (sequence[pdbfnum][s])) > -1) {
-var asp = alignment.getSequenceAt (sp);
-for (var r = 0; r < asp.getLength (); r++) {
-if (jalview.util.Comparison.isGap (asp.getCharAt (r))) {
-continue;
-}var pos = mapping[m].getPDBResNum (asp.findPosition (r));
-if (pos < 1 || pos == lastPos) {
-continue;
-}lastPos = pos;
-var col = sr.getResidueBoxColour (sequence[pdbfnum][s], r);
-if (fr != null) {
-col = fr.findFeatureColour (col, sequence[pdbfnum][s], r);
-}var newSelcom = (mapping[m].getChain () !== " " ? ":" + mapping[m].getChain () : "") + "/" + (pdbfnum + 1) + ".1" + ";color[" + col.getRed () + "," + col.getGreen () + "," + col.getBlue () + "]";
-if (command.length () > newSelcom.length && command.substring (command.length () - newSelcom.length).equals (newSelcom)) {
-command = jalview.ext.varna.VarnaCommands.condenseCommand (command, pos);
-continue;
-}command.append (";");
-if (command.length () > 51200) {
-str.add (command.toString ());
-command.setLength (0);
-}command.append ("select " + pos);
-command.append (newSelcom);
-}
-break;
-}}
-}
-}
-{
-str.add (command.toString ());
-command.setLength (0);
-}return str.toArray ( new Array (str.size ()));
-}, "jalview.structure.StructureSelectionManager,~A,~A,jalview.api.SequenceRenderer,jalview.api.FeatureRenderer,jalview.datamodel.AlignmentI");
-c$.condenseCommand = Clazz.defineMethod (c$, "condenseCommand",
-function (command, pos) {
-var p = command.length ();
-var q = p;
-do {
-p -= 6;
-if (p < 1) {
-p = 0;
-};} while ((q = command.indexOf ("select", p)) == -1 && p > 0);
-var sb = new StringBuffer (command.substring (0, q + 7));
-command = command.$delete (0, q + 7);
-var start;
-if (command.indexOf ("-") > -1) {
-start = command.substring (0, command.indexOf ("-"));
-} else {
-start = command.substring (0, command.indexOf (":"));
-}sb.append (start + "-" + pos + command.substring (command.indexOf (":")));
-return sb;
-}, "StringBuffer,~N");
-});
+Clazz.declarePackage ("jalview.ext.varna");
+Clazz.load (null, "jalview.ext.varna.VarnaCommands", ["jalview.util.Comparison", "java.lang.StringBuffer", "java.util.ArrayList"], function () {
+c$ = Clazz.declareType (jalview.ext.varna, "VarnaCommands");
+c$.getColourBySequenceCommand = Clazz.defineMethod (c$, "getColourBySequenceCommand",
+function (ssm, files, sequence, sr, fr, alignment) {
+var str = new java.util.ArrayList ();
+var command = new StringBuffer ();
+for (var pdbfnum = 0; pdbfnum < files.length; pdbfnum++) {
+var mapping = ssm.getMapping (files[pdbfnum]);
+if (mapping == null || mapping.length < 1) {
+continue;
+}var lastPos = -1;
+for (var s = 0; s < sequence[pdbfnum].length; s++) {
+for (var sp, m = 0; m < mapping.length; m++) {
+if (mapping[m].getSequence () === sequence[pdbfnum][s] && (sp = alignment.findIndex (sequence[pdbfnum][s])) > -1) {
+var asp = alignment.getSequenceAt (sp);
+for (var r = 0; r < asp.getLength (); r++) {
+if (jalview.util.Comparison.isGap (asp.getCharAt (r))) {
+continue;
+}var pos = mapping[m].getPDBResNum (asp.findPosition (r));
+if (pos < 1 || pos == lastPos) {
+continue;
+}lastPos = pos;
+var col = sr.getResidueBoxColour (sequence[pdbfnum][s], r);
+if (fr != null) {
+col = fr.findFeatureColour (col, sequence[pdbfnum][s], r);
+}var newSelcom = (mapping[m].getChain () !== " " ? ":" + mapping[m].getChain () : "") + "/" + (pdbfnum + 1) + ".1" + ";color[" + col.getRed () + "," + col.getGreen () + "," + col.getBlue () + "]";
+if (command.length () > newSelcom.length && command.substring (command.length () - newSelcom.length).equals (newSelcom)) {
+command = jalview.ext.varna.VarnaCommands.condenseCommand (command, pos);
+continue;
+}command.append (";");
+if (command.length () > 51200) {
+str.add (command.toString ());
+command.setLength (0);
+}command.append ("select " + pos);
+command.append (newSelcom);
+}
+break;
+}}
+}
+}
+{
+str.add (command.toString ());
+command.setLength (0);
+}return str.toArray ( new Array (str.size ()));
+}, "jalview.structure.StructureSelectionManager,~A,~A,jalview.api.SequenceRenderer,jalview.api.FeatureRenderer,jalview.datamodel.AlignmentI");
+c$.condenseCommand = Clazz.defineMethod (c$, "condenseCommand",
+function (command, pos) {
+var p = command.length ();
+var q = p;
+do {
+p -= 6;
+if (p < 1) {
+p = 0;
+};} while ((q = command.indexOf ("select", p)) == -1 && p > 0);
+var sb = new StringBuffer (command.substring (0, q + 7));
+command = command.$delete (0, q + 7);
+var start;
+if (command.indexOf ("-") > -1) {
+start = command.substring (0, command.indexOf ("-"));
+} else {
+start = command.substring (0, command.indexOf (":"));
+}sb.append (start + "-" + pos + command.substring (command.indexOf (":")));
+return sb;
+}, "StringBuffer,~N");
+});
diff --git a/bin/jalview/io/AlignFile.js b/bin/jalview/io/AlignFile.js
index f3247de..142c507 100644
--- a/bin/jalview/io/AlignFile.js
+++ b/bin/jalview/io/AlignFile.js
@@ -1,158 +1,158 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.FileParse"], "jalview.io.AlignFile", ["jalview.datamodel.Sequence", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Error", "java.util.ArrayList", "$.Hashtable", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.noSeqs = 0;
-this.maxLength = 0;
-this.seqs = null;
-this.annotations = null;
-this.seqGroups = null;
-this.properties = null;
-this.start = 0;
-this.end = 0;
-this.jvSuffix = true;
-this.parseCalled = false;
-this.newickStrings = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "AlignFile", jalview.io.FileParse);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.io.AlignFile, []);
-this.initData ();
-});
-Clazz.makeConstructor (c$,
-function (inFile, type) {
-this.construct (true, inFile, type);
-}, "~S,~S");
-Clazz.makeConstructor (c$,
-function (parseImmediately, inFile, type) {
-Clazz.superConstructor (this, jalview.io.AlignFile, [inFile, type]);
-this.initData ();
-if (parseImmediately) {
-this.doParse ();
-}}, "~B,~S,~S");
-Clazz.makeConstructor (c$,
-function (source) {
-this.construct (true, source);
-}, "jalview.io.FileParse");
-Clazz.makeConstructor (c$,
-function (parseImmediately, source) {
-Clazz.superConstructor (this, jalview.io.AlignFile, [source]);
-this.initData ();
-if (parseImmediately) {
-this.doParse ();
-}}, "~B,jalview.io.FileParse");
-Clazz.defineMethod (c$, "doParse",
-function () {
-if (this.parseCalled) {
-throw new java.io.IOException ("Implementation error: Parser called twice for same data.\nNeed to call initData() again before parsing can be reattempted.");
-}this.parseCalled = true;
-this.parse ();
-for (var i = 0, c = this.seqs.size (); i < c; i++) {
-this.seqs.get (i).setIndex (i);
-}
-});
-Clazz.defineMethod (c$, "getSeqs",
-function () {
-return this.seqs;
-});
-Clazz.defineMethod (c$, "getSeqGroups",
-function () {
-return this.seqGroups;
-});
-Clazz.defineMethod (c$, "getSeqsAsArray",
-function () {
-var s = new Array (this.seqs.size ());
-for (var i = 0; i < this.seqs.size (); i++) {
-s[i] = this.seqs.elementAt (i);
-}
-return s;
-});
-Clazz.defineMethod (c$, "addAnnotations",
-function (al) {
-this.addProperties (al);
-for (var i = 0; i < this.annotations.size (); i++) {
-var an = this.annotations.elementAt (i);
-an.validateRangeAndDisplay ();
-al.addAnnotation (an);
-}
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "addSeqGroups",
-function (al) {
-this.seqGroups = al.getGroups ();
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "addProperties",
-function (al) {
-if (this.properties != null && this.properties.size () > 0) {
-var keys = this.properties.keys ();
-var vals = this.properties.elements ();
-while (keys.hasMoreElements ()) {
-al.setProperty (keys.nextElement (), vals.nextElement ());
-}
-}}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "setAlignmentProperty",
-function (key, value) {
-if (key == null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_cannot_have_null_alignment"));
-}if (value == null) {
-return;
-}if (this.properties == null) {
-this.properties = new java.util.Hashtable ();
-}this.properties.put (key, value);
-}, "~O,~O");
-Clazz.defineMethod (c$, "getAlignmentProperty",
-function (key) {
-if (this.properties != null && key != null) {
-return this.properties.get (key);
-}return null;
-}, "~O");
-Clazz.defineMethod (c$, "initData",
-function () {
-this.seqs = new java.util.Vector ();
-this.annotations = new java.util.Vector ();
-this.seqGroups = new java.util.ArrayList ();
-this.parseCalled = false;
-});
-Clazz.defineMethod (c$, "setSeqs",
-function (s) {
-this.seqs = new java.util.Vector ();
-for (var i = 0; i < s.length; i++) {
-this.seqs.addElement (s[i]);
-}
-}, "~A");
-Clazz.defineMethod (c$, "addJVSuffix",
-function (b) {
-this.jvSuffix = b;
-}, "~B");
-Clazz.defineMethod (c$, "parseId",
-function (id) {
-var seq = null;
-id = id.trim ();
-var space = id.indexOf (" ");
-if (space > -1) {
-seq = new jalview.datamodel.Sequence (id.substring (0, space), "");
-seq.setDescription (id.substring (space + 1));
-} else {
-seq = new jalview.datamodel.Sequence (id, "");
-}return seq;
-}, "~S");
-Clazz.defineMethod (c$, "printId",
-function (seq) {
-return seq.getDisplayId (this.jvSuffix);
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "addNewickTree",
-function (treeName, newickString) {
-if (this.newickStrings == null) {
-this.newickStrings = new java.util.Vector ();
-}this.newickStrings.addElement ( Clazz.newArray (-1, [treeName, newickString]));
-}, "~S,~S");
-Clazz.defineMethod (c$, "getTreeCount",
-function () {
-return this.newickStrings == null ? 0 : this.newickStrings.size ();
-});
-Clazz.defineMethod (c$, "addGroups",
-function (al) {
-for (var sg, $sg = this.getSeqGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-al.addGroup (sg);
-}
-}, "jalview.datamodel.AlignmentI");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.FileParse"], "jalview.io.AlignFile", ["jalview.datamodel.Sequence", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Error", "java.util.ArrayList", "$.Hashtable", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.noSeqs = 0;
+this.maxLength = 0;
+this.seqs = null;
+this.annotations = null;
+this.seqGroups = null;
+this.properties = null;
+this.start = 0;
+this.end = 0;
+this.jvSuffix = true;
+this.parseCalled = false;
+this.newickStrings = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "AlignFile", jalview.io.FileParse);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.io.AlignFile, []);
+this.initData ();
+});
+Clazz.makeConstructor (c$,
+function (inFile, type) {
+this.construct (true, inFile, type);
+}, "~S,~S");
+Clazz.makeConstructor (c$,
+function (parseImmediately, inFile, type) {
+Clazz.superConstructor (this, jalview.io.AlignFile, [inFile, type]);
+this.initData ();
+if (parseImmediately) {
+this.doParse ();
+}}, "~B,~S,~S");
+Clazz.makeConstructor (c$,
+function (source) {
+this.construct (true, source);
+}, "jalview.io.FileParse");
+Clazz.makeConstructor (c$,
+function (parseImmediately, source) {
+Clazz.superConstructor (this, jalview.io.AlignFile, [source]);
+this.initData ();
+if (parseImmediately) {
+this.doParse ();
+}}, "~B,jalview.io.FileParse");
+Clazz.defineMethod (c$, "doParse",
+function () {
+if (this.parseCalled) {
+throw new java.io.IOException ("Implementation error: Parser called twice for same data.\nNeed to call initData() again before parsing can be reattempted.");
+}this.parseCalled = true;
+this.parse ();
+for (var i = 0, c = this.seqs.size (); i < c; i++) {
+this.seqs.get (i).setIndex (i);
+}
+});
+Clazz.defineMethod (c$, "getSeqs",
+function () {
+return this.seqs;
+});
+Clazz.defineMethod (c$, "getSeqGroups",
+function () {
+return this.seqGroups;
+});
+Clazz.defineMethod (c$, "getSeqsAsArray",
+function () {
+var s = new Array (this.seqs.size ());
+for (var i = 0; i < this.seqs.size (); i++) {
+s[i] = this.seqs.elementAt (i);
+}
+return s;
+});
+Clazz.defineMethod (c$, "addAnnotations",
+function (al) {
+this.addProperties (al);
+for (var i = 0; i < this.annotations.size (); i++) {
+var an = this.annotations.elementAt (i);
+an.validateRangeAndDisplay ();
+al.addAnnotation (an);
+}
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "addSeqGroups",
+function (al) {
+this.seqGroups = al.getGroups ();
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "addProperties",
+function (al) {
+if (this.properties != null && this.properties.size () > 0) {
+var keys = this.properties.keys ();
+var vals = this.properties.elements ();
+while (keys.hasMoreElements ()) {
+al.setProperty (keys.nextElement (), vals.nextElement ());
+}
+}}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "setAlignmentProperty",
+function (key, value) {
+if (key == null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_cannot_have_null_alignment"));
+}if (value == null) {
+return;
+}if (this.properties == null) {
+this.properties = new java.util.Hashtable ();
+}this.properties.put (key, value);
+}, "~O,~O");
+Clazz.defineMethod (c$, "getAlignmentProperty",
+function (key) {
+if (this.properties != null && key != null) {
+return this.properties.get (key);
+}return null;
+}, "~O");
+Clazz.defineMethod (c$, "initData",
+function () {
+this.seqs = new java.util.Vector ();
+this.annotations = new java.util.Vector ();
+this.seqGroups = new java.util.ArrayList ();
+this.parseCalled = false;
+});
+Clazz.defineMethod (c$, "setSeqs",
+function (s) {
+this.seqs = new java.util.Vector ();
+for (var i = 0; i < s.length; i++) {
+this.seqs.addElement (s[i]);
+}
+}, "~A");
+Clazz.defineMethod (c$, "addJVSuffix",
+function (b) {
+this.jvSuffix = b;
+}, "~B");
+Clazz.defineMethod (c$, "parseId",
+function (id) {
+var seq = null;
+id = id.trim ();
+var space = id.indexOf (" ");
+if (space > -1) {
+seq = new jalview.datamodel.Sequence (id.substring (0, space), "");
+seq.setDescription (id.substring (space + 1));
+} else {
+seq = new jalview.datamodel.Sequence (id, "");
+}return seq;
+}, "~S");
+Clazz.defineMethod (c$, "printId",
+function (seq) {
+return seq.getDisplayId (this.jvSuffix);
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "addNewickTree",
+function (treeName, newickString) {
+if (this.newickStrings == null) {
+this.newickStrings = new java.util.Vector ();
+}this.newickStrings.addElement ( Clazz.newArray (-1, [treeName, newickString]));
+}, "~S,~S");
+Clazz.defineMethod (c$, "getTreeCount",
+function () {
+return this.newickStrings == null ? 0 : this.newickStrings.size ();
+});
+Clazz.defineMethod (c$, "addGroups",
+function (al) {
+for (var sg, $sg = this.getSeqGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+al.addGroup (sg);
+}
+}, "jalview.datamodel.AlignmentI");
+});
diff --git a/bin/jalview/io/AlignmentProperties.js b/bin/jalview/io/AlignmentProperties.js
index 0092589..6030bea 100644
--- a/bin/jalview/io/AlignmentProperties.js
+++ b/bin/jalview/io/AlignmentProperties.js
@@ -1,78 +1,78 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (null, "jalview.io.AlignmentProperties", ["java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.alignment = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "AlignmentProperties");
-Clazz.makeConstructor (c$,
-function (alignment) {
-this.alignment = alignment;
-}, "jalview.datamodel.AlignmentI");
-Clazz.defineMethod (c$, "writeProperties",
-function (sb, html) {
-var nl = html ? " " : System.getProperty ("line.separator");
-var avg = 0;
-var min = 2147483647;
-var max = 0;
-for (var i = 0; i < this.alignment.getHeight (); i++) {
-var size = 1 + this.alignment.getSequenceAt (i).getEnd () - this.alignment.getSequenceAt (i).getStart ();
-avg += size;
-if (size > max) {
-max = size;
-}if (size < min) {
-min = size;
-}}
-avg = avg / this.alignment.getHeight ();
-sb.append (nl);
-sb.append ("Sequences: " + this.alignment.getHeight ());
-sb.append (nl);
-sb.append ("Minimum Sequence Length: " + min);
-sb.append (nl);
-sb.append ("Maximum Sequence Length: " + max);
-sb.append (nl);
-sb.append ("Average Length: " + Clazz.floatToInt (avg));
-if ((this.alignment).alignmentProperties != null) {
-sb.append (nl);
-sb.append (nl);
-if (html) {
-sb.append ("");
-}var props = (this.alignment).alignmentProperties;
-var en = props.keys ();
-while (en.hasMoreElements ()) {
-var key = en.nextElement ().toString ();
-var vals = props.get (key).toString ();
-if (html) {
-var val = new StringBuffer ();
-var pos = 0;
-var npos;
-do {
-npos = vals.indexOf ("\n", pos);
-if (npos == -1) {
-val.append (vals.substring (pos));
-} else {
-val.append (vals.substring (pos, npos));
-val.append (" ");
-}pos = npos + 1;
-} while (npos != -1);
-sb.append ("" + key + " " + val + " ");
-} else {
-sb.append (nl + key + "\t" + vals);
-}}
-if (html) {
-sb.append ("
");
-}}}, "StringBuffer,~B");
-Clazz.defineMethod (c$, "formatAsString",
-function () {
-return this.formatReport (false);
-});
-Clazz.defineMethod (c$, "formatReport",
-function (html) {
-var sb = new StringBuffer ();
-this.writeProperties (sb, html);
-return sb;
-}, "~B");
-Clazz.defineMethod (c$, "formatAsHtml",
-function () {
-return this.formatReport (true);
-});
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (null, "jalview.io.AlignmentProperties", ["java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.alignment = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "AlignmentProperties");
+Clazz.makeConstructor (c$,
+function (alignment) {
+this.alignment = alignment;
+}, "jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "writeProperties",
+function (sb, html) {
+var nl = html ? " " : System.getProperty ("line.separator");
+var avg = 0;
+var min = 2147483647;
+var max = 0;
+for (var i = 0; i < this.alignment.getHeight (); i++) {
+var size = 1 + this.alignment.getSequenceAt (i).getEnd () - this.alignment.getSequenceAt (i).getStart ();
+avg += size;
+if (size > max) {
+max = size;
+}if (size < min) {
+min = size;
+}}
+avg = avg / this.alignment.getHeight ();
+sb.append (nl);
+sb.append ("Sequences: " + this.alignment.getHeight ());
+sb.append (nl);
+sb.append ("Minimum Sequence Length: " + min);
+sb.append (nl);
+sb.append ("Maximum Sequence Length: " + max);
+sb.append (nl);
+sb.append ("Average Length: " + Clazz.floatToInt (avg));
+if ((this.alignment).alignmentProperties != null) {
+sb.append (nl);
+sb.append (nl);
+if (html) {
+sb.append ("");
+}var props = (this.alignment).alignmentProperties;
+var en = props.keys ();
+while (en.hasMoreElements ()) {
+var key = en.nextElement ().toString ();
+var vals = props.get (key).toString ();
+if (html) {
+var val = new StringBuffer ();
+var pos = 0;
+var npos;
+do {
+npos = vals.indexOf ("\n", pos);
+if (npos == -1) {
+val.append (vals.substring (pos));
+} else {
+val.append (vals.substring (pos, npos));
+val.append (" ");
+}pos = npos + 1;
+} while (npos != -1);
+sb.append ("" + key + " " + val + " ");
+} else {
+sb.append (nl + key + "\t" + vals);
+}}
+if (html) {
+sb.append ("
");
+}}}, "StringBuffer,~B");
+Clazz.defineMethod (c$, "formatAsString",
+function () {
+return this.formatReport (false);
+});
+Clazz.defineMethod (c$, "formatReport",
+function (html) {
+var sb = new StringBuffer ();
+this.writeProperties (sb, html);
+return sb;
+}, "~B");
+Clazz.defineMethod (c$, "formatAsHtml",
+function () {
+return this.formatReport (true);
+});
+});
diff --git a/bin/jalview/io/AnnotationFile.class b/bin/jalview/io/AnnotationFile.class
index 4aea77a..fd5b729 100644
Binary files a/bin/jalview/io/AnnotationFile.class and b/bin/jalview/io/AnnotationFile.class differ
diff --git a/bin/jalview/io/AnnotationFile.js b/bin/jalview/io/AnnotationFile.js
index 2aaf007..4c4c01e 100644
--- a/bin/jalview/io/AnnotationFile.js
+++ b/bin/jalview/io/AnnotationFile.js
@@ -1,1003 +1,1003 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (null, "jalview.io.AnnotationFile", ["jalview.analysis.Conservation", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.ColumnSelection", "$.GraphLine", "$.SequenceGroup", "jalview.io.AppletFormatAdapter", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.ColourSchemeProperty", "$.ResidueProperties", "$.UserColourScheme", "jalview.util.Comparison", "$.Format", "java.awt.Color", "java.io.BufferedReader", "$.InputStreamReader", "$.StringReader", "java.lang.Boolean", "$.Float", "$.StringBuffer", "java.util.ArrayList", "$.BitSet", "$.Date", "$.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.newline = null;
-this.text = null;
-if (!Clazz.isClassDefined ("jalview.io.AnnotationFile.ViewDef")) {
-jalview.io.AnnotationFile.$AnnotationFile$ViewDef$ ();
-}
-this.refSeq = null;
-this.refSeqId = null;
-this.nlinesread = 0;
-this.lastread = "";
-Clazz.instantialize (this, arguments);
-}, jalview.io, "AnnotationFile");
-Clazz.prepareFields (c$, function () {
-this.newline = System.getProperty ("line.separator");
-});
-Clazz.makeConstructor (c$,
-function () {
-this.init ();
-});
-Clazz.defineMethod (c$, "setNewlineString",
-function (nl) {
-this.newline = nl;
-this.init ();
-}, "~S");
-Clazz.defineMethod (c$, "getNewlineString",
-function () {
-return this.newline;
-});
-Clazz.defineMethod (c$, "init",
-($fz = function () {
-this.text = new StringBuffer ("JALVIEW_ANNOTATION" + this.newline + "# Created: " + new java.util.Date () + this.newline + this.newline);
-this.refSeq = null;
-this.refSeqId = null;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "printAnnotations",
-function (annotations, list, properties) {
-return this.printAnnotations (annotations, list, properties, null, null, null);
-}, "~A,java.util.List,java.util.Hashtable");
-Clazz.defineMethod (c$, "printAnnotations",
-function (annotations, list, properties, cs, al, view) {
-if (view != null) {
-if (view.viewname != null) {
-this.text.append ("VIEW_DEF\t" + view.viewname + "\n");
-}if (list == null) {
-list = view.visibleGroups;
-}if (cs == null) {
-cs = view.hiddencols;
-}if (al == null) {
-}}if (al != null && al.hasSeqrep ()) {
-this.text.append ("VIEW_SETREF\t" + al.getSeqrep ().getName () + "\n");
-}if (cs != null && cs.hasHiddenColumns ()) {
-this.text.append ("VIEW_HIDECOLS\t");
-var hc = cs.getHiddenColumns ();
-var comma = false;
-for (var r, $r = hc.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
-if (!comma) {
-comma = true;
-} else {
-this.text.append (",");
-}this.text.append (r[0]);
-this.text.append ("-");
-this.text.append (r[1]);
-}
-this.text.append ("\n");
-}if (annotations != null) {
-var oneColour = true;
-var row;
-var comma;
-var refSeq = null;
-var refGroup = null;
-var colours = new StringBuffer ();
-var graphLine = new StringBuffer ();
-var rowprops = new StringBuffer ();
-var graphGroup = new java.util.Hashtable ();
-var graphGroup_refs = new java.util.Hashtable ();
-var graphGroupSeen = new java.util.BitSet ();
-var color;
-for (var i = 0; i < annotations.length; i++) {
-row = annotations[i];
-if (!row.visible && !row.hasScore () && !(row.graphGroup > -1 && graphGroupSeen.get (row.graphGroup))) {
-continue;
-}color = null;
-oneColour = true;
-this.writeSequence_Ref (refSeq, row.sequenceRef);
-refSeq = row.sequenceRef;
-this.writeGroup_Ref (refGroup, row.groupRef);
-refGroup = row.groupRef;
-var hasGlyphs = row.hasIcons;
-var hasLabels = row.hasText;
-var hasValues = row.$hasScore;
-var hasText = false;
-for (var j = 0; row.annotations != null && j < row.annotations.length && (!hasGlyphs || !hasLabels || !hasValues); j++) {
-if (row.annotations[j] != null) {
-hasLabels = new Boolean (hasLabels | (row.annotations[j].displayCharacter != null && row.annotations[j].displayCharacter.length > 0 && !row.annotations[j].displayCharacter.equals (" "))).valueOf ();
-hasGlyphs = new Boolean (hasGlyphs | ((row.annotations[j].secondaryStructure).charCodeAt (0) != 0 && row.annotations[j].secondaryStructure != ' ')).valueOf ();
-hasValues = new Boolean (hasValues | (!Float.isNaN (row.annotations[j].value))).valueOf ();
-hasText = new Boolean (hasText | (row.annotations[j].description != null && row.annotations[j].description.length > 0)).valueOf ();
-}}
-if (row.graph == 0) {
-this.text.append ("NO_GRAPH\t");
-hasValues = false;
-} else {
-if (row.graph == 1) {
-this.text.append ("BAR_GRAPH\t");
-hasGlyphs = false;
-} else if (row.graph == 2) {
-hasGlyphs = false;
-this.text.append ("LINE_GRAPH\t");
-}if (row.getThreshold () != null) {
-graphLine.append ("GRAPHLINE\t");
-graphLine.append (row.label);
-graphLine.append ("\t");
-graphLine.append (row.getThreshold ().value);
-graphLine.append ("\t");
-graphLine.append (row.getThreshold ().label);
-graphLine.append ("\t");
-graphLine.append (jalview.util.Format.getHexString (row.getThreshold ().colour));
-graphLine.append (this.newline);
-}if (row.graphGroup > -1) {
-graphGroupSeen.set (row.graphGroup);
-var key = new Integer (row.graphGroup);
-if (graphGroup.containsKey (key)) {
-graphGroup.put (key, graphGroup.get (key) + "\t" + row.label);
-} else {
-graphGroup_refs.put (key, Clazz.newArray (-1, [refSeq, refGroup]));
-graphGroup.put (key, row.label);
-}}}this.text.append (row.label + "\t");
-if (row.description != null) {
-this.text.append (row.description + "\t");
-}for (var j = 0; row.annotations != null && j < row.annotations.length; j++) {
-if (refSeq != null && jalview.util.Comparison.isGap (refSeq.getCharAt (j))) {
-continue;
-}if (row.annotations[j] != null) {
-comma = "";
-if (hasGlyphs) {
-this.text.append (comma);
-if (row.annotations[j].secondaryStructure != ' ') {
-this.text.append (row.annotations[j].secondaryStructure);
-}comma = ",";
-}if (hasValues) {
-if (!Float.isNaN (row.annotations[j].value)) {
-this.text.append (comma + row.annotations[j].value);
-} else {
-System.err.println ("Skipping NaN - not valid value.");
-this.text.append (comma + 0);
-}comma = ",";
-}if (hasLabels) {
-if (row.annotations[j].displayCharacter != null && row.annotations[j].displayCharacter.length > 0 && !row.annotations[j].displayCharacter.equals (" ")) {
-this.text.append (comma + row.annotations[j].displayCharacter);
-comma = ",";
-}}if (hasText) {
-if (row.annotations[j].description != null && row.annotations[j].description.length > 0 && !row.annotations[j].description.equals (row.annotations[j].displayCharacter)) {
-this.text.append (comma + row.annotations[j].description);
-comma = ",";
-}}if (color != null && !color.equals (row.annotations[j].colour)) {
-oneColour = false;
-}color = row.annotations[j].colour;
-if (row.annotations[j].colour != null && row.annotations[j].colour !== java.awt.Color.black) {
-this.text.append (comma + "[" + jalview.util.Format.getHexString (row.annotations[j].colour) + "]");
-comma = ",";
-}}this.text.append ("|");
-}
-if (row.hasScore ()) {
-this.text.append ("\t" + row.score);
-}this.text.append (this.newline);
-if (color != null && color !== java.awt.Color.black && oneColour) {
-colours.append ("COLOUR\t");
-colours.append (row.label);
-colours.append ("\t");
-colours.append (jalview.util.Format.getHexString (color));
-colours.append (this.newline);
-}if (row.scaleColLabel || row.showAllColLabels || row.centreColLabels) {
-rowprops.append ("ROWPROPERTIES\t");
-rowprops.append (row.label);
-rowprops.append ("\tscaletofit=");
-rowprops.append (row.scaleColLabel);
-rowprops.append ("\tshowalllabs=");
-rowprops.append (row.showAllColLabels);
-rowprops.append ("\tcentrelabs=");
-rowprops.append (row.centreColLabels);
-rowprops.append (this.newline);
-}if (graphLine.length () > 0) {
-this.text.append (graphLine.toString ());
-graphLine.setLength (0);
-}}
-this.text.append (this.newline);
-this.text.append (colours.toString ());
-if (graphGroup.size () > 0) {
-var oldRefSeq = refSeq;
-var oldRefGroup = refGroup;
-for (var combine_statement, $combine_statement = graphGroup.entrySet ().iterator (); $combine_statement.hasNext () && ((combine_statement = $combine_statement.next ()) || true);) {
-var seqRefAndGroup = graphGroup_refs.get (combine_statement.getKey ());
-this.writeSequence_Ref (refSeq, seqRefAndGroup[0]);
-refSeq = seqRefAndGroup[0];
-this.writeGroup_Ref (refGroup, seqRefAndGroup[1]);
-refGroup = seqRefAndGroup[1];
-this.text.append ("COMBINE\t");
-this.text.append (combine_statement.getValue ());
-this.text.append (this.newline);
-}
-this.writeSequence_Ref (refSeq, oldRefSeq);
-refSeq = oldRefSeq;
-this.writeGroup_Ref (refGroup, oldRefGroup);
-refGroup = oldRefGroup;
-}this.text.append (rowprops.toString ());
-}if (list != null) {
-this.printGroups (list);
-}if (properties != null) {
-this.text.append (this.newline);
-this.text.append (this.newline);
-this.text.append ("ALIGNMENT");
-var en = properties.keys ();
-while (en.hasMoreElements ()) {
-var key = en.nextElement ().toString ();
-this.text.append ("\t");
-this.text.append (key);
-this.text.append ("=");
-this.text.append (properties.get (key));
-}
-}return this.text.toString ();
-}, "~A,java.util.List,java.util.Hashtable,jalview.datamodel.ColumnSelection,jalview.datamodel.AlignmentI,jalview.io.AnnotationFile.ViewDef");
-Clazz.defineMethod (c$, "writeGroup_Ref",
-($fz = function (refGroup, next_refGroup) {
-if (next_refGroup == null) {
-if (refGroup != null) {
-this.text.append (this.newline);
-this.text.append ("GROUP_REF\t");
-this.text.append ("ALIGNMENT");
-this.text.append (this.newline);
-}return true;
-} else {
-if (refGroup == null || refGroup !== next_refGroup) {
-this.text.append (this.newline);
-this.text.append ("GROUP_REF\t");
-this.text.append (next_refGroup.getName ());
-this.text.append (this.newline);
-return true;
-}}return false;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceGroup,jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "writeSequence_Ref",
-($fz = function (refSeq, next_refSeq) {
-if (next_refSeq == null) {
-if (refSeq != null) {
-this.text.append (this.newline);
-this.text.append ("SEQUENCE_REF\t");
-this.text.append ("ALIGNMENT");
-this.text.append (this.newline);
-return true;
-}} else {
-if (refSeq == null || refSeq !== next_refSeq) {
-this.text.append (this.newline);
-this.text.append ("SEQUENCE_REF\t");
-this.text.append (next_refSeq.getName ());
-this.text.append (this.newline);
-return true;
-}}return false;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "printGroups",
-function (list) {
-var seqrep = null;
-for (var sg, $sg = list.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (!sg.hasSeqrep ()) {
-this.text.append ("SEQUENCE_GROUP\t" + sg.getName () + "\t" + (sg.getStartRes () + 1) + "\t" + (sg.getEndRes () + 1) + "\t" + "-1\t");
-seqrep = null;
-} else {
-seqrep = sg.getSeqrep ();
-this.text.append ("SEQUENCE_REF\t");
-this.text.append (seqrep.getName ());
-this.text.append (this.newline);
-this.text.append ("SEQUENCE_GROUP\t");
-this.text.append (sg.getName ());
-this.text.append ("\t");
-this.text.append ((seqrep.findPosition (sg.getStartRes ())));
-this.text.append ("\t");
-this.text.append ((seqrep.findPosition (sg.getEndRes ())));
-this.text.append ("\t");
-this.text.append ("-1\t");
-}for (var s = 0; s < sg.getSize (); s++) {
-this.text.append (sg.getSequenceAt (s).getName ());
-this.text.append ("\t");
-}
-this.text.append (this.newline);
-this.text.append ("PROPERTIES\t");
-this.text.append (sg.getName ());
-this.text.append ("\t");
-if (sg.getDescription () != null) {
-this.text.append ("description=");
-this.text.append (sg.getDescription ());
-this.text.append ("\t");
-}if (sg.cs != null) {
-this.text.append ("colour=");
-this.text.append (jalview.schemes.ColourSchemeProperty.getColourName (sg.cs));
-this.text.append ("\t");
-if (sg.cs.getThreshold () != 0) {
-this.text.append ("pidThreshold=");
-this.text.append (sg.cs.getThreshold ());
-}if (sg.cs.conservationApplied ()) {
-this.text.append ("consThreshold=");
-this.text.append (sg.cs.getConservationInc ());
-this.text.append ("\t");
-}}this.text.append ("outlineColour=");
-this.text.append (jalview.util.Format.getHexString (sg.getOutlineColour ()));
-this.text.append ("\t");
-this.text.append ("displayBoxes=");
-this.text.append (sg.getDisplayBoxes ());
-this.text.append ("\t");
-this.text.append ("displayText=");
-this.text.append (sg.getDisplayText ());
-this.text.append ("\t");
-this.text.append ("colourText=");
-this.text.append (sg.getColourText ());
-this.text.append ("\t");
-this.text.append ("showUnconserved=");
-this.text.append (sg.getShowNonconserved ());
-this.text.append ("\t");
-if (sg.textColour !== java.awt.Color.black) {
-this.text.append ("textCol1=");
-this.text.append (jalview.util.Format.getHexString (sg.textColour));
-this.text.append ("\t");
-}if (sg.textColour2 !== java.awt.Color.white) {
-this.text.append ("textCol2=");
-this.text.append (jalview.util.Format.getHexString (sg.textColour2));
-this.text.append ("\t");
-}if (sg.thresholdTextColour != 0) {
-this.text.append ("textColThreshold=");
-this.text.append (sg.thresholdTextColour);
-this.text.append ("\t");
-}if (sg.idColour != null) {
-this.text.append ("idColour=");
-this.text.append (jalview.util.Format.getHexString (sg.idColour));
-this.text.append ("\t");
-}if (sg.isHidereps ()) {
-this.text.append ("hide=true\t");
-}if (sg.isHideCols ()) {
-this.text.append ("hidecols=true\t");
-}if (seqrep != null) {
-this.text.append (this.newline);
-this.text.append ("SEQUENCE_REF");
-}this.text.append (this.newline);
-this.text.append (this.newline);
-}
-}, "java.util.List");
-Clazz.defineMethod (c$, "annotateAlignmentView",
-function (viewport, file, protocol) {
-var colSel = viewport.getColumnSelection ();
-if (colSel == null) {
-colSel = new jalview.datamodel.ColumnSelection ();
-}var rslt = this.readAnnotationFile (viewport.getAlignment (), colSel, file, protocol);
-if (rslt && (colSel.hasSelectedColumns () || colSel.hasHiddenColumns ())) {
-viewport.setColumnSelection (colSel);
-}return rslt;
-}, "jalview.api.AlignViewportI,~S,~S");
-Clazz.defineMethod (c$, "readAnnotationFile",
-function (al, file, protocol) {
-return this.readAnnotationFile (al, null, file, protocol);
-}, "jalview.datamodel.AlignmentI,~S,~S");
-Clazz.defineMethod (c$, "readAnnotationFile",
-function (al, colSel, file, protocol) {
-var $in = null;
-try {
-if (protocol.equals (jalview.io.AppletFormatAdapter.FILE)) {
-$in = jalview.jsdev.GenericFileAdapter.getReader (file, false);
-} else if (protocol.equals (jalview.io.AppletFormatAdapter.URL)) {
-$in = jalview.jsdev.GenericFileAdapter.getReader (file, true);
-} else if (protocol.equals (jalview.io.AppletFormatAdapter.PASTE)) {
-$in = new java.io.BufferedReader ( new java.io.StringReader (file));
-} else if (protocol.equals (jalview.io.AppletFormatAdapter.CLASSLOADER)) {
-var is = this.getClass ().getResourceAsStream ("/" + file);
-if (is != null) {
-$in = new java.io.BufferedReader ( new java.io.InputStreamReader (is));
-}}if ($in != null) {
-return this.parseAnnotationFrom (al, colSel, $in);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-System.out.println ("Problem reading annotation file: " + ex);
-if (this.nlinesread > 0) {
-System.out.println ("Last read line " + this.nlinesread + ": '" + this.lastread + "' (first 80 chars) ...");
-}return false;
-} else {
-throw ex;
-}
-}
-return false;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,~S,~S");
-Clazz.defineMethod (c$, "parseAnnotationFrom",
-function (al, colSel, $in) {
-this.nlinesread = 0;
-var combineAnnotation_calls = new java.util.ArrayList ();
-var deferredAnnotation_calls = new java.util.ArrayList ();
-var modified = false;
-var groupRef = null;
-var groupRefRows = new java.util.Hashtable ();
-var autoAnnots = new java.util.Hashtable ();
-{
-var line;
-var label;
-var description;
-var token;
-var graphStyle;
-var index;
-var refSeqIndex = 1;
-var existingAnnotations = 0;
-var overrideAutoAnnot = false;
-if (al.getAlignmentAnnotation () != null) {
-existingAnnotations = al.getAlignmentAnnotation ().length;
-if (existingAnnotations > 0) {
-var aa = al.getAlignmentAnnotation ();
-for (var aai = 0; aai < aa.length; aai++) {
-if (aa[aai].autoCalculated) {
-autoAnnots.put (this.autoAnnotsKey (aa[aai], aa[aai].sequenceRef, (aa[aai].groupRef == null ? null : aa[aai].groupRef.getName ())), new Integer (1));
-}}
-}}var alWidth = al.getWidth ();
-var st;
-var annotations;
-var annotation = null;
-var jvAnnotationFile = false;
-while ((line = $in.readLine ()) != null) {
-this.nlinesread++;
-this.lastread = String.instantialize (line);
-if (line.indexOf ("#") == 0) {
-continue;
-}if (line.indexOf ("JALVIEW_ANNOTATION") > -1) {
-jvAnnotationFile = true;
-break;
-}}
-if (!jvAnnotationFile) {
-$in.close ();
-return false;
-}while ((line = $in.readLine ()) != null) {
-this.nlinesread++;
-this.lastread = String.instantialize (line);
-if (line.indexOf ("#") == 0 || line.indexOf ("JALVIEW_ANNOTATION") > -1 || line.length == 0) {
-continue;
-}st = new java.util.StringTokenizer (line, "\t");
-token = st.nextToken ();
-if (token.equalsIgnoreCase ("COLOUR")) {
-this.colourAnnotations (al, st.nextToken (), st.nextToken ());
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase (jalview.io.AnnotationFile.COMBINE)) {
-combineAnnotation_calls.add ( Clazz.newArray (-1, [st, this.refSeq, groupRef]));
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("ROWPROPERTIES")) {
-this.addRowProperties (al, st);
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase (jalview.io.AnnotationFile.GRAPHLINE)) {
-deferredAnnotation_calls.add ( Clazz.newArray (-1, [jalview.io.AnnotationFile.GRAPHLINE, st, this.refSeq, groupRef]));
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("SEQUENCE_REF")) {
-if (st.hasMoreTokens ()) {
-this.refSeq = al.findName (this.refSeqId = st.nextToken ());
-if (this.refSeq == null) {
-this.refSeqId = null;
-}try {
-refSeqIndex = Integer.parseInt (st.nextToken ());
-if (refSeqIndex < 1) {
-refSeqIndex = 1;
-System.out.println ("WARNING: SEQUENCE_REF index must be > 0 in AnnotationFile");
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-refSeqIndex = 1;
-} else {
-throw ex;
-}
-}
-} else {
-this.refSeq = null;
-this.refSeqId = null;
-}continue;
-} else if (token.equalsIgnoreCase ("GROUP_REF")) {
-groupRef = null;
-if (st.hasMoreTokens ()) {
-groupRef = st.nextToken ();
-if (groupRef.length < 1) {
-groupRef = null;
-} else {
-if (groupRefRows.get (groupRef) == null) {
-groupRefRows.put (groupRef, new java.util.Vector ());
-}}}continue;
-} else if (token.equalsIgnoreCase ("SEQUENCE_GROUP")) {
-this.addGroup (al, st);
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("PROPERTIES")) {
-this.addProperties (al, st);
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("BELOW_ALIGNMENT")) {
-this.setBelowAlignment (al, st);
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("ALIGNMENT")) {
-this.addAlignmentDetails (al, st);
-modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("VIEW_SETREF")) {
-if (this.refSeq != null) {
-al.setSeqrep (this.refSeq);
-}modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("VIEW_HIDECOLS")) {
-if (st.hasMoreTokens ()) {
-if (colSel == null) {
-colSel = new jalview.datamodel.ColumnSelection ();
-}this.parseHideCols (colSel, st.nextToken ());
-}modified = true;
-continue;
-} else if (token.equalsIgnoreCase ("HIDE_INSERTIONS")) {
-var sr = this.refSeq == null ? al.getSeqrep () : this.refSeq;
-if (sr == null) {
-sr = al.getSequenceAt (0);
-}if (sr != null) {
-if (colSel == null) {
-System.err.println ("Cannot process HIDE_INSERTIONS without an alignment view: Ignoring line: " + line);
-} else {
-colSel.hideInsertionsFor (sr);
-}}modified = true;
-continue;
-}graphStyle = jalview.datamodel.AlignmentAnnotation.getGraphValueFromString (token);
-label = st.nextToken ();
-index = 0;
-annotations = new Array (alWidth);
-description = null;
-var score = NaN;
-if (st.hasMoreTokens ()) {
-line = st.nextToken ();
-if (line.indexOf ("|") == -1) {
-description = line;
-if (st.hasMoreTokens ()) {
-line = st.nextToken ();
-}}if (st.hasMoreTokens ()) {
-score = Float.$valueOf (st.nextToken ()).floatValue ();
-}st = new java.util.StringTokenizer (line, "|", true);
-var emptyColumn = true;
-var onlyOneElement = (st.countTokens () == 1);
-while (st.hasMoreElements () && index < alWidth) {
-token = st.nextToken ().trim ();
-if (onlyOneElement) {
-try {
-score = Float.$valueOf (token).floatValue ();
-break;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-}if (token.equals ("|")) {
-if (emptyColumn) {
-index++;
-}emptyColumn = true;
-} else {
-annotations[index++] = this.parseAnnotation (token, graphStyle);
-emptyColumn = false;
-}}
-}annotation = new jalview.datamodel.AlignmentAnnotation (label, description, (index == 0) ? null : annotations, 0, 0, graphStyle);
-annotation.score = score;
-if (!overrideAutoAnnot && autoAnnots.containsKey (this.autoAnnotsKey (annotation, this.refSeq, groupRef))) {
-continue;
-}if (this.refSeq != null) {
-annotation.belowAlignment = false;
-var referedSeq = this.refSeq;
-do {
-var ann = new jalview.datamodel.AlignmentAnnotation (annotation);
-annotation.createSequenceMapping (referedSeq, refSeqIndex, false);
-annotation.adjustForAlignment ();
-referedSeq.addAlignmentAnnotation (annotation);
-al.addAnnotation (annotation);
-al.setAnnotationIndex (annotation, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
-if (groupRef != null) {
-(groupRefRows.get (groupRef)).addElement (annotation);
-}annotation = ann;
-} while (this.refSeqId != null && (referedSeq = al.findName (referedSeq, this.refSeqId, true)) != null);
-} else {
-al.addAnnotation (annotation);
-al.setAnnotationIndex (annotation, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
-if (groupRef != null) {
-(groupRefRows.get (groupRef)).addElement (annotation);
-}}modified = true;
-}
-var groupRefLookup = new java.util.Hashtable ();
-var en = groupRefRows.keys ();
-while (en.hasMoreElements ()) {
-groupRef = en.nextElement ();
-var matched = false;
-for (var theGroup, $theGroup = al.getGroups ().iterator (); $theGroup.hasNext () && ((theGroup = $theGroup.next ()) || true);) {
-if (theGroup.getName ().equals (groupRef)) {
-if (matched) {
-System.err.println ("Ignoring 1:many group reference mappings for group name '" + groupRef + "'");
-} else {
-matched = true;
-var rowset = groupRefRows.get (groupRef);
-groupRefLookup.put (groupRef, theGroup);
-if (rowset != null && rowset.size () > 0) {
-var alan = null;
-for (var elm = 0, elmSize = rowset.size (); elm < elmSize; elm++) {
-alan = rowset.elementAt (elm);
-alan.groupRef = theGroup;
-}
-}}}}
-(groupRefRows.get (groupRef)).removeAllElements ();
-}
-for (var _deferred_args, $_deferred_args = deferredAnnotation_calls.iterator (); $_deferred_args.hasNext () && ((_deferred_args = $_deferred_args.next ()) || true);) {
-if (_deferred_args[0] === jalview.io.AnnotationFile.GRAPHLINE) {
-this.addLine (al, _deferred_args[1], _deferred_args[2], (_deferred_args[3] == null) ? null : groupRefLookup.get (_deferred_args[3]));
-}}
-var combinecount = 0;
-for (var _combine_args, $_combine_args = combineAnnotation_calls.iterator (); $_combine_args.hasNext () && ((_combine_args = $_combine_args.next ()) || true);) {
-this.combineAnnotations (al, ++combinecount, _combine_args[0], _combine_args[1], (_combine_args[2] == null) ? null : groupRefLookup.get (_combine_args[2]));
-}
-}return modified;
-}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,java.io.BufferedReader");
-Clazz.defineMethod (c$, "parseHideCols",
-($fz = function (colSel, nextToken) {
-var inval = new java.util.StringTokenizer (nextToken, ",");
-while (inval.hasMoreTokens ()) {
-var range = inval.nextToken ().trim ();
-var from;
-var to = range.indexOf ("-");
-if (to == -1) {
-from = to = Integer.parseInt (range);
-if (from >= 0) {
-colSel.hideColumns (from, to);
-}} else {
-from = Integer.parseInt (range.substring (0, to));
-if (to < range.length - 1) {
-to = Integer.parseInt (range.substring (to + 1));
-} else {
-to = from;
-}if (from > 0 && to >= from) {
-colSel.hideColumns (from, to);
-}}}
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.ColumnSelection,~S");
-Clazz.defineMethod (c$, "autoAnnotsKey",
-($fz = function (annotation, refSeq, groupRef) {
-return annotation.graph + "\t" + annotation.label + "\t" + annotation.description + "\t" + (refSeq != null ? refSeq.getDisplayId (true) : "");
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.SequenceI,~S");
-Clazz.defineMethod (c$, "parseAnnotation",
-function (string, graphStyle) {
-var hasSymbols = (graphStyle == 0);
-var desc = null;
-var displayChar = null;
-var ss = ' ';
-var value = 0;
-var parsedValue = false;
-var dcset = false;
-var colour = null;
-var i = string.indexOf ("[");
-var j = string.indexOf ("]");
-if (i > -1 && j > -1) {
-var ucs = new jalview.schemes.UserColourScheme ();
-colour = ucs.getColourFromString (string.substring (i + 1, j));
-if (i > 0 && string.charAt (i - 1) == ',') {
-i--;
-}string = string.substring (0, i) + string.substring (j + 1);
-}var st = new java.util.StringTokenizer (string, ",", true);
-var token;
-var seenContent = false;
-var pass = 0;
-while (st.hasMoreTokens ()) {
-pass++;
-token = st.nextToken ().trim ();
-if (token.equals (",")) {
-if (!seenContent && parsedValue && !dcset) {
-dcset = true;
-displayChar = " ";
-}seenContent = false;
-continue;
-} else {
-seenContent = true;
-}if (!parsedValue) {
-try {
-displayChar = token;
-value = new Float (token).floatValue ();
-parsedValue = true;
-continue;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-} else {
-if (token.length == 1) {
-displayChar = token;
-}}if (hasSymbols && (token.equals ("H") || token.equals ("E") || token.equals ("S") || token.equals (" "))) {
-ss = token.charAt (0);
-if (displayChar.equals (token.substring (0, 1))) {
-displayChar = "";
-}} else if (desc == null || (parsedValue && pass > 2)) {
-desc = token;
-}}
-if (displayChar != null && desc != null && desc.length == 1) {
-if (displayChar.length > 1) {
-var tmp = displayChar;
-displayChar = desc;
-desc = tmp;
-} else {
-if (displayChar.equals (desc)) {
-desc = null;
-}}}var anot = new jalview.datamodel.Annotation (displayChar, desc, ss, value);
-anot.colour = colour;
-return anot;
-}, "~S,~N");
-Clazz.defineMethod (c$, "colourAnnotations",
-function (al, label, colour) {
-var ucs = new jalview.schemes.UserColourScheme (colour);
-var annotations;
-for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
-if (al.getAlignmentAnnotation ()[i].label.equalsIgnoreCase (label)) {
-annotations = al.getAlignmentAnnotation ()[i].annotations;
-for (var j = 0; j < annotations.length; j++) {
-if (annotations[j] != null) {
-annotations[j].colour = ucs.findColour ('A');
-}}
-}}
-}, "jalview.datamodel.AlignmentI,~S,~S");
-Clazz.defineMethod (c$, "combineAnnotations",
-function (al, combineCount, st, seqRef, groupRef) {
-var group = st.nextToken ();
-var graphGroup = 0;
-if (al.getAlignmentAnnotation () != null) {
-for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
-var aa = al.getAlignmentAnnotation ()[i];
-if (aa.graphGroup > graphGroup) {
-graphGroup = aa.graphGroup + 1;
-}if (aa.sequenceRef === seqRef && aa.groupRef === groupRef && aa.label.equalsIgnoreCase (group)) {
-if (aa.graphGroup > -1) {
-graphGroup = aa.graphGroup;
-} else {
-if (graphGroup <= combineCount) {
-graphGroup = combineCount + 1;
-}aa.graphGroup = graphGroup;
-}break;
-}}
-while (st.hasMoreTokens ()) {
-group = st.nextToken ();
-for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
-var aa = al.getAlignmentAnnotation ()[i];
-if (aa.sequenceRef === seqRef && aa.groupRef === groupRef && aa.label.equalsIgnoreCase (group)) {
-aa.graphGroup = graphGroup;
-break;
-}}
-}
-} else {
-System.err.println ("Couldn't combine annotations. None are added to alignment yet!");
-}}, "jalview.datamodel.AlignmentI,~N,java.util.StringTokenizer,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "addLine",
-function (al, st, seqRef, groupRef) {
-var group = st.nextToken ();
-var annotation = null;
-var alannot = al.getAlignmentAnnotation ();
-var value = new Float (st.nextToken ()).floatValue ();
-var label = st.hasMoreTokens () ? st.nextToken () : null;
-var colour = null;
-if (st.hasMoreTokens ()) {
-var ucs = new jalview.schemes.UserColourScheme (st.nextToken ());
-colour = ucs.findColour ('A');
-}if (alannot != null) {
-for (var i = 0; i < alannot.length; i++) {
-if (alannot[i].label.equalsIgnoreCase (group) && (seqRef == null || alannot[i].sequenceRef === seqRef) && (groupRef == null || alannot[i].groupRef === groupRef)) {
-alannot[i].setThreshold ( new jalview.datamodel.GraphLine (value, label, colour));
-}}
-}if (annotation == null) {
-return;
-}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "addGroup",
-function (al, st) {
-var sg = new jalview.datamodel.SequenceGroup ();
-sg.setName (st.nextToken ());
-var rng = "";
-try {
-rng = st.nextToken ();
-if (rng.length > 0 && !rng.startsWith ("*")) {
-sg.setStartRes (Integer.parseInt (rng) - 1);
-} else {
-sg.setStartRes (0);
-}rng = st.nextToken ();
-if (rng.length > 0 && !rng.startsWith ("*")) {
-sg.setEndRes (Integer.parseInt (rng) - 1);
-} else {
-sg.setEndRes (al.getWidth () - 1);
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Couldn't parse Group Start or End Field as '*' or a valid column or sequence index: '" + rng + "' - assuming alignment width for group.");
-sg.setStartRes (0);
-sg.setEndRes (al.getWidth () - 1);
-} else {
-throw e;
-}
-}
-var index = st.nextToken ();
-if (index.equals ("-1")) {
-while (st.hasMoreElements ()) {
-sg.addSequence (al.findName (st.nextToken ()), false);
-}
-} else {
-var st2 = new java.util.StringTokenizer (index, ",");
-while (st2.hasMoreTokens ()) {
-var tmp = st2.nextToken ();
-if (tmp.equals ("*")) {
-for (var i = 0; i < al.getHeight (); i++) {
-sg.addSequence (al.getSequenceAt (i), false);
-}
-} else if (tmp.indexOf ("-") >= 0) {
-var st3 = new java.util.StringTokenizer (tmp, "-");
-var start = (Integer.parseInt (st3.nextToken ()));
-var end = (Integer.parseInt (st3.nextToken ()));
-if (end > start) {
-for (var i = start; i <= end; i++) {
-sg.addSequence (al.getSequenceAt (i - 1), false);
-}
-}} else {
-sg.addSequence (al.getSequenceAt (Integer.parseInt (tmp) - 1), false);
-}}
-}if (this.refSeq != null) {
-sg.setStartRes (this.refSeq.findIndex (sg.getStartRes () + 1) - 1);
-sg.setEndRes (this.refSeq.findIndex (sg.getEndRes () + 1) - 1);
-sg.setSeqrep (this.refSeq);
-}if (sg.getSize () > 0) {
-al.addGroup (sg);
-}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
-Clazz.defineMethod (c$, "addRowProperties",
-function (al, st) {
-var label = st.nextToken ();
-var keyValue;
-var key;
-var value;
-var scaletofit = false;
-var centerlab = false;
-var showalllabs = false;
-while (st.hasMoreTokens ()) {
-keyValue = st.nextToken ();
-key = keyValue.substring (0, keyValue.indexOf ("="));
-value = keyValue.substring (keyValue.indexOf ("=") + 1);
-if (key.equalsIgnoreCase ("scaletofit")) {
-scaletofit = Boolean.$valueOf (value).booleanValue ();
-}if (key.equalsIgnoreCase ("showalllabs")) {
-showalllabs = Boolean.$valueOf (value).booleanValue ();
-}if (key.equalsIgnoreCase ("centrelabs")) {
-centerlab = Boolean.$valueOf (value).booleanValue ();
-}var alr = al.getAlignmentAnnotation ();
-if (alr != null) {
-for (var i = 0; i < alr.length; i++) {
-if (alr[i].label.equalsIgnoreCase (label)) {
-alr[i].centreColLabels = centerlab;
-alr[i].scaleColLabel = scaletofit;
-alr[i].showAllColLabels = showalllabs;
-}}
-}}
-}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
-Clazz.defineMethod (c$, "addProperties",
-function (al, st) {
-if (al.getGroups () == null) {
-return;
-}var name = st.nextToken ();
-var sg = null;
-for (var _sg, $_sg = al.getGroups ().iterator (); $_sg.hasNext () && ((_sg = $_sg.next ()) || true);) {
-if ((sg = _sg).getName ().equals (name)) {
-break;
-} else {
-sg = null;
-}}
-if (sg != null) {
-var keyValue;
-var key;
-var value;
-var def = sg.cs;
-sg.cs = null;
-while (st.hasMoreTokens ()) {
-keyValue = st.nextToken ();
-key = keyValue.substring (0, keyValue.indexOf ("="));
-value = keyValue.substring (keyValue.indexOf ("=") + 1);
-if (key.equalsIgnoreCase ("description")) {
-sg.setDescription (value);
-} else if (key.equalsIgnoreCase ("colour")) {
-sg.cs = jalview.schemes.ColourSchemeProperty.getColour (al, value);
-} else if (key.equalsIgnoreCase ("pidThreshold")) {
-sg.cs.setThreshold (Integer.parseInt (value), true);
-} else if (key.equalsIgnoreCase ("consThreshold")) {
-sg.cs.setConservationInc (Integer.parseInt (value));
-var c = new jalview.analysis.Conservation ("Group", jalview.schemes.ResidueProperties.propHash, 3, sg.getSequences (null), sg.getStartRes (), sg.getEndRes () + 1);
-c.calculate ();
-c.verdict (false, 25);
-sg.cs.setConservation (c);
-} else if (key.equalsIgnoreCase ("outlineColour")) {
-sg.setOutlineColour ( new jalview.schemes.UserColourScheme (value).findColour ('A'));
-} else if (key.equalsIgnoreCase ("displayBoxes")) {
-sg.setDisplayBoxes (Boolean.$valueOf (value).booleanValue ());
-} else if (key.equalsIgnoreCase ("showUnconserved")) {
-sg.setShowNonconserved (Boolean.$valueOf (value).booleanValue ());
-} else if (key.equalsIgnoreCase ("displayText")) {
-sg.setDisplayText (Boolean.$valueOf (value).booleanValue ());
-} else if (key.equalsIgnoreCase ("colourText")) {
-sg.setColourText (Boolean.$valueOf (value).booleanValue ());
-} else if (key.equalsIgnoreCase ("textCol1")) {
-sg.textColour = new jalview.schemes.UserColourScheme (value).findColour ('A');
-} else if (key.equalsIgnoreCase ("textCol2")) {
-sg.textColour2 = new jalview.schemes.UserColourScheme (value).findColour ('A');
-} else if (key.equalsIgnoreCase ("textColThreshold")) {
-sg.thresholdTextColour = Integer.parseInt (value);
-} else if (key.equalsIgnoreCase ("idColour")) {
-sg.setIdColour ((def = new jalview.schemes.UserColourScheme (value)).findColour ('A'));
-} else if (key.equalsIgnoreCase ("hide")) {
-sg.setHidereps (true);
-} else if (key.equalsIgnoreCase ("hidecols")) {
-sg.setHideCols (true);
-}sg.recalcConservation ();
-}
-if (sg.cs == null) {
-sg.cs = def;
-}}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
-Clazz.defineMethod (c$, "setBelowAlignment",
-function (al, st) {
-var token;
-var aa;
-var ala = al.getAlignmentAnnotation ();
-if (ala == null) {
-System.err.print ("Warning - no annotation to set below for sequence associated annotation:");
-}while (st.hasMoreTokens ()) {
-token = st.nextToken ();
-if (ala == null) {
-System.err.print (" " + token);
-} else {
-for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
-aa = al.getAlignmentAnnotation ()[i];
-if (aa.sequenceRef === this.refSeq && aa.label.equals (token)) {
-aa.belowAlignment = true;
-}}
-}}
-if (ala == null) {
-System.err.print ("\n");
-}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
-Clazz.defineMethod (c$, "addAlignmentDetails",
-function (al, st) {
-var keyValue;
-var key;
-var value;
-while (st.hasMoreTokens ()) {
-keyValue = st.nextToken ();
-key = keyValue.substring (0, keyValue.indexOf ("="));
-value = keyValue.substring (keyValue.indexOf ("=") + 1);
-al.setProperty (key, value);
-}
-}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
-Clazz.defineMethod (c$, "printCSVAnnotations",
-function (annotations) {
-var sp = new StringBuffer ();
-for (var i = 0; i < annotations.length; i++) {
-var atos = annotations[i].toString ();
-var p = 0;
-do {
-var cp = atos.indexOf ("\n", p);
-sp.append (annotations[i].label);
-sp.append (",");
-if (cp > p) {
-sp.append (atos.substring (p, cp + 1));
-} else {
-sp.append (atos.substring (p));
-sp.append (this.newline);
-}p = cp + 1;
-} while (p > 0);
-}
-return sp.toString ();
-}, "~A");
-Clazz.defineMethod (c$, "printAnnotationsForView",
-function (viewport) {
-return this.printAnnotations (viewport.isShowAnnotation () ? viewport.getAlignment ().getAlignmentAnnotation () : null, viewport.getAlignment ().getGroups (), viewport.getAlignment ().getProperties (), viewport.getColumnSelection (), viewport.getAlignment (), null);
-}, "jalview.api.AlignViewportI");
-Clazz.defineMethod (c$, "printAnnotationsForAlignment",
-function (al) {
-return this.printAnnotations (al.getAlignmentAnnotation (), al.getGroups (), al.getProperties (), null, al, null);
-}, "jalview.datamodel.AlignmentI");
-c$.$AnnotationFile$ViewDef$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.viewname = null;
-this.hidseqs = null;
-this.hiddencols = null;
-this.visibleGroups = null;
-this.hiddenRepSeqs = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io.AnnotationFile, "ViewDef");
-Clazz.makeConstructor (c$,
-function (a, b, c, d) {
-this.viewname = a;
-this.hidseqs = b;
-this.hiddencols = c;
-this.hiddenRepSeqs = d;
-}, "~S,jalview.datamodel.HiddenSequences,jalview.datamodel.ColumnSelection,java.util.Hashtable");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"GRAPHLINE", "GRAPHLINE",
-"COMBINE", "COMBINE");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (null, "jalview.io.AnnotationFile", ["jalview.analysis.Conservation", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.ColumnSelection", "$.GraphLine", "$.SequenceGroup", "jalview.io.AppletFormatAdapter", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.ColourSchemeProperty", "$.ResidueProperties", "$.UserColourScheme", "jalview.util.Comparison", "$.Format", "java.awt.Color", "java.io.BufferedReader", "$.InputStreamReader", "$.StringReader", "java.lang.Boolean", "$.Float", "$.StringBuffer", "java.util.ArrayList", "$.BitSet", "$.Date", "$.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.newline = null;
+this.text = null;
+if (!Clazz.isClassDefined ("jalview.io.AnnotationFile.ViewDef")) {
+jalview.io.AnnotationFile.$AnnotationFile$ViewDef$ ();
+}
+this.refSeq = null;
+this.refSeqId = null;
+this.nlinesread = 0;
+this.lastread = "";
+Clazz.instantialize (this, arguments);
+}, jalview.io, "AnnotationFile");
+Clazz.prepareFields (c$, function () {
+this.newline = System.getProperty ("line.separator");
+});
+Clazz.makeConstructor (c$,
+function () {
+this.init ();
+});
+Clazz.defineMethod (c$, "setNewlineString",
+function (nl) {
+this.newline = nl;
+this.init ();
+}, "~S");
+Clazz.defineMethod (c$, "getNewlineString",
+function () {
+return this.newline;
+});
+Clazz.defineMethod (c$, "init",
+($fz = function () {
+this.text = new StringBuffer ("JALVIEW_ANNOTATION" + this.newline + "# Created: " + new java.util.Date () + this.newline + this.newline);
+this.refSeq = null;
+this.refSeqId = null;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "printAnnotations",
+function (annotations, list, properties) {
+return this.printAnnotations (annotations, list, properties, null, null, null);
+}, "~A,java.util.List,java.util.Hashtable");
+Clazz.defineMethod (c$, "printAnnotations",
+function (annotations, list, properties, cs, al, view) {
+if (view != null) {
+if (view.viewname != null) {
+this.text.append ("VIEW_DEF\t" + view.viewname + "\n");
+}if (list == null) {
+list = view.visibleGroups;
+}if (cs == null) {
+cs = view.hiddencols;
+}if (al == null) {
+}}if (al != null && al.hasSeqrep ()) {
+this.text.append ("VIEW_SETREF\t" + al.getSeqrep ().getName () + "\n");
+}if (cs != null && cs.hasHiddenColumns ()) {
+this.text.append ("VIEW_HIDECOLS\t");
+var hc = cs.getHiddenColumns ();
+var comma = false;
+for (var r, $r = hc.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
+if (!comma) {
+comma = true;
+} else {
+this.text.append (",");
+}this.text.append ("" + r[0]);
+this.text.append ("-");
+this.text.append ("" + r[1]);
+}
+this.text.append ("\n");
+}if (annotations != null) {
+var oneColour = true;
+var row;
+var comma;
+var refSeq = null;
+var refGroup = null;
+var colours = new StringBuffer ();
+var graphLine = new StringBuffer ();
+var rowprops = new StringBuffer ();
+var graphGroup = new java.util.Hashtable ();
+var graphGroup_refs = new java.util.Hashtable ();
+var graphGroupSeen = new java.util.BitSet ();
+var color;
+for (var i = 0; i < annotations.length; i++) {
+row = annotations[i];
+if (!row.visible && !row.hasScore () && !(row.graphGroup > -1 && graphGroupSeen.get (row.graphGroup))) {
+continue;
+}color = null;
+oneColour = true;
+this.writeSequence_Ref (refSeq, row.sequenceRef);
+refSeq = row.sequenceRef;
+this.writeGroup_Ref (refGroup, row.groupRef);
+refGroup = row.groupRef;
+var hasGlyphs = row.hasIcons;
+var hasLabels = row.hasText;
+var hasValues = row.$hasScore;
+var hasText = false;
+for (var j = 0; row.annotations != null && j < row.annotations.length && (!hasGlyphs || !hasLabels || !hasValues); j++) {
+if (row.annotations[j] != null) {
+hasLabels = new Boolean (hasLabels | (row.annotations[j].displayCharacter != null && row.annotations[j].displayCharacter.length > 0 && !row.annotations[j].displayCharacter.equals (" "))).valueOf ();
+hasGlyphs = new Boolean (hasGlyphs | ((row.annotations[j].secondaryStructure).charCodeAt (0) != 0 && row.annotations[j].secondaryStructure != ' ')).valueOf ();
+hasValues = new Boolean (hasValues | (!Float.isNaN (row.annotations[j].value))).valueOf ();
+hasText = new Boolean (hasText | (row.annotations[j].description != null && row.annotations[j].description.length > 0)).valueOf ();
+}}
+if (row.graph == 0) {
+this.text.append ("NO_GRAPH\t");
+hasValues = false;
+} else {
+if (row.graph == 1) {
+this.text.append ("BAR_GRAPH\t");
+hasGlyphs = false;
+} else if (row.graph == 2) {
+hasGlyphs = false;
+this.text.append ("LINE_GRAPH\t");
+}if (row.getThreshold () != null) {
+graphLine.append ("GRAPHLINE\t");
+graphLine.append (row.label);
+graphLine.append ("\t");
+graphLine.append (row.getThreshold ().value);
+graphLine.append ("\t");
+graphLine.append (row.getThreshold ().label);
+graphLine.append ("\t");
+graphLine.append (jalview.util.Format.getHexString (row.getThreshold ().colour));
+graphLine.append (this.newline);
+}if (row.graphGroup > -1) {
+graphGroupSeen.set (row.graphGroup);
+var key = new Integer (row.graphGroup);
+if (graphGroup.containsKey (key)) {
+graphGroup.put (key, graphGroup.get (key) + "\t" + row.label);
+} else {
+graphGroup_refs.put (key, Clazz.newArray (-1, [refSeq, refGroup]));
+graphGroup.put (key, row.label);
+}}}this.text.append (row.label + "\t");
+if (row.description != null) {
+this.text.append (row.description + "\t");
+}for (var j = 0; row.annotations != null && j < row.annotations.length; j++) {
+if (refSeq != null && jalview.util.Comparison.isGap (refSeq.getCharAt (j))) {
+continue;
+}if (row.annotations[j] != null) {
+comma = "";
+if (hasGlyphs) {
+this.text.append (comma);
+if (row.annotations[j].secondaryStructure != ' ') {
+this.text.append (row.annotations[j].secondaryStructure);
+}comma = ",";
+}if (hasValues) {
+if (!Float.isNaN (row.annotations[j].value)) {
+this.text.append (comma + row.annotations[j].value);
+} else {
+System.err.println ("Skipping NaN - not valid value.");
+this.text.append (comma + 0);
+}comma = ",";
+}if (hasLabels) {
+if (row.annotations[j].displayCharacter != null && row.annotations[j].displayCharacter.length > 0 && !row.annotations[j].displayCharacter.equals (" ")) {
+this.text.append (comma + row.annotations[j].displayCharacter);
+comma = ",";
+}}if (hasText) {
+if (row.annotations[j].description != null && row.annotations[j].description.length > 0 && !row.annotations[j].description.equals (row.annotations[j].displayCharacter)) {
+this.text.append (comma + row.annotations[j].description);
+comma = ",";
+}}if (color != null && !color.equals (row.annotations[j].colour)) {
+oneColour = false;
+}color = row.annotations[j].colour;
+if (row.annotations[j].colour != null && row.annotations[j].colour !== java.awt.Color.black) {
+this.text.append (comma + "[" + jalview.util.Format.getHexString (row.annotations[j].colour) + "]");
+comma = ",";
+}}this.text.append ("|");
+}
+if (row.hasScore ()) {
+this.text.append ("\t" + row.score);
+}this.text.append (this.newline);
+if (color != null && color !== java.awt.Color.black && oneColour) {
+colours.append ("COLOUR\t");
+colours.append (row.label);
+colours.append ("\t");
+colours.append (jalview.util.Format.getHexString (color));
+colours.append (this.newline);
+}if (row.scaleColLabel || row.showAllColLabels || row.centreColLabels) {
+rowprops.append ("ROWPROPERTIES\t");
+rowprops.append (row.label);
+rowprops.append ("\tscaletofit=");
+rowprops.append (row.scaleColLabel);
+rowprops.append ("\tshowalllabs=");
+rowprops.append (row.showAllColLabels);
+rowprops.append ("\tcentrelabs=");
+rowprops.append (row.centreColLabels);
+rowprops.append (this.newline);
+}if (graphLine.length () > 0) {
+this.text.append (graphLine.toString ());
+graphLine.setLength (0);
+}}
+this.text.append (this.newline);
+this.text.append (colours.toString ());
+if (graphGroup.size () > 0) {
+var oldRefSeq = refSeq;
+var oldRefGroup = refGroup;
+for (var combine_statement, $combine_statement = graphGroup.entrySet ().iterator (); $combine_statement.hasNext () && ((combine_statement = $combine_statement.next ()) || true);) {
+var seqRefAndGroup = graphGroup_refs.get (combine_statement.getKey ());
+this.writeSequence_Ref (refSeq, seqRefAndGroup[0]);
+refSeq = seqRefAndGroup[0];
+this.writeGroup_Ref (refGroup, seqRefAndGroup[1]);
+refGroup = seqRefAndGroup[1];
+this.text.append ("COMBINE\t");
+this.text.append (combine_statement.getValue ());
+this.text.append (this.newline);
+}
+this.writeSequence_Ref (refSeq, oldRefSeq);
+refSeq = oldRefSeq;
+this.writeGroup_Ref (refGroup, oldRefGroup);
+refGroup = oldRefGroup;
+}this.text.append (rowprops.toString ());
+}if (list != null) {
+this.printGroups (list);
+}if (properties != null) {
+this.text.append (this.newline);
+this.text.append (this.newline);
+this.text.append ("ALIGNMENT");
+var en = properties.keys ();
+while (en.hasMoreElements ()) {
+var key = en.nextElement ().toString ();
+this.text.append ("\t");
+this.text.append (key);
+this.text.append ("=");
+this.text.append (properties.get (key));
+}
+}return this.text.toString ();
+}, "~A,java.util.List,java.util.Hashtable,jalview.datamodel.ColumnSelection,jalview.datamodel.AlignmentI,jalview.io.AnnotationFile.ViewDef");
+Clazz.defineMethod (c$, "writeGroup_Ref",
+($fz = function (refGroup, next_refGroup) {
+if (next_refGroup == null) {
+if (refGroup != null) {
+this.text.append (this.newline);
+this.text.append ("GROUP_REF\t");
+this.text.append ("ALIGNMENT");
+this.text.append (this.newline);
+}return true;
+} else {
+if (refGroup == null || refGroup !== next_refGroup) {
+this.text.append (this.newline);
+this.text.append ("GROUP_REF\t");
+this.text.append (next_refGroup.getName ());
+this.text.append (this.newline);
+return true;
+}}return false;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceGroup,jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "writeSequence_Ref",
+($fz = function (refSeq, next_refSeq) {
+if (next_refSeq == null) {
+if (refSeq != null) {
+this.text.append (this.newline);
+this.text.append ("SEQUENCE_REF\t");
+this.text.append ("ALIGNMENT");
+this.text.append (this.newline);
+return true;
+}} else {
+if (refSeq == null || refSeq !== next_refSeq) {
+this.text.append (this.newline);
+this.text.append ("SEQUENCE_REF\t");
+this.text.append (next_refSeq.getName ());
+this.text.append (this.newline);
+return true;
+}}return false;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "printGroups",
+function (list) {
+var seqrep = null;
+for (var sg, $sg = list.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (!sg.hasSeqrep ()) {
+this.text.append ("SEQUENCE_GROUP\t" + sg.getName () + "\t" + (sg.getStartRes () + 1) + "\t" + (sg.getEndRes () + 1) + "\t" + "-1\t");
+seqrep = null;
+} else {
+seqrep = sg.getSeqrep ();
+this.text.append ("SEQUENCE_REF\t");
+this.text.append (seqrep.getName ());
+this.text.append (this.newline);
+this.text.append ("SEQUENCE_GROUP\t");
+this.text.append (sg.getName ());
+this.text.append ("\t");
+this.text.append ("" + (seqrep.findPosition (sg.getStartRes ())));
+this.text.append ("\t");
+this.text.append ((seqrep.findPosition (sg.getEndRes ())));
+this.text.append ("\t");
+this.text.append ("-1\t");
+}for (var s = 0; s < sg.getSize (); s++) {
+this.text.append (sg.getSequenceAt (s).getName ());
+this.text.append ("\t");
+}
+this.text.append (this.newline);
+this.text.append ("PROPERTIES\t");
+this.text.append (sg.getName ());
+this.text.append ("\t");
+if (sg.getDescription () != null) {
+this.text.append ("description=");
+this.text.append (sg.getDescription ());
+this.text.append ("\t");
+}if (sg.cs != null) {
+this.text.append ("colour=");
+this.text.append (jalview.schemes.ColourSchemeProperty.getColourName (sg.cs));
+this.text.append ("\t");
+if (sg.cs.getThreshold () != 0) {
+this.text.append ("pidThreshold=");
+this.text.append (sg.cs.getThreshold ());
+}if (sg.cs.conservationApplied ()) {
+this.text.append ("consThreshold=");
+this.text.append (sg.cs.getConservationInc ());
+this.text.append ("\t");
+}}this.text.append ("outlineColour=");
+this.text.append (jalview.util.Format.getHexString (sg.getOutlineColour ()));
+this.text.append ("\t");
+this.text.append ("displayBoxes=");
+this.text.append (sg.getDisplayBoxes ());
+this.text.append ("\t");
+this.text.append ("displayText=");
+this.text.append (sg.getDisplayText ());
+this.text.append ("\t");
+this.text.append ("colourText=");
+this.text.append (sg.getColourText ());
+this.text.append ("\t");
+this.text.append ("showUnconserved=");
+this.text.append (sg.getShowNonconserved ());
+this.text.append ("\t");
+if (sg.textColour !== java.awt.Color.black) {
+this.text.append ("textCol1=");
+this.text.append (jalview.util.Format.getHexString (sg.textColour));
+this.text.append ("\t");
+}if (sg.textColour2 !== java.awt.Color.white) {
+this.text.append ("textCol2=");
+this.text.append (jalview.util.Format.getHexString (sg.textColour2));
+this.text.append ("\t");
+}if (sg.thresholdTextColour != 0) {
+this.text.append ("textColThreshold=");
+this.text.append (sg.thresholdTextColour);
+this.text.append ("\t");
+}if (sg.idColour != null) {
+this.text.append ("idColour=");
+this.text.append (jalview.util.Format.getHexString (sg.idColour));
+this.text.append ("\t");
+}if (sg.isHidereps ()) {
+this.text.append ("hide=true\t");
+}if (sg.isHideCols ()) {
+this.text.append ("hidecols=true\t");
+}if (seqrep != null) {
+this.text.append (this.newline);
+this.text.append ("SEQUENCE_REF");
+}this.text.append (this.newline);
+this.text.append (this.newline);
+}
+}, "java.util.List");
+Clazz.defineMethod (c$, "annotateAlignmentView",
+function (viewport, file, protocol) {
+var colSel = viewport.getColumnSelection ();
+if (colSel == null) {
+colSel = new jalview.datamodel.ColumnSelection ();
+}var rslt = this.readAnnotationFile (viewport.getAlignment (), colSel, file, protocol);
+if (rslt && (colSel.hasSelectedColumns () || colSel.hasHiddenColumns ())) {
+viewport.setColumnSelection (colSel);
+}return rslt;
+}, "jalview.api.AlignViewportI,~S,~S");
+Clazz.defineMethod (c$, "readAnnotationFile",
+function (al, file, protocol) {
+return this.readAnnotationFile (al, null, file, protocol);
+}, "jalview.datamodel.AlignmentI,~S,~S");
+Clazz.defineMethod (c$, "readAnnotationFile",
+function (al, colSel, file, protocol) {
+var $in = null;
+try {
+if (protocol.equals (jalview.io.AppletFormatAdapter.FILE)) {
+$in = jalview.jsdev.GenericFileAdapter.getReader (file, false);
+} else if (protocol.equals (jalview.io.AppletFormatAdapter.URL)) {
+$in = jalview.jsdev.GenericFileAdapter.getReader (file, true);
+} else if (protocol.equals (jalview.io.AppletFormatAdapter.PASTE)) {
+$in = new java.io.BufferedReader ( new java.io.StringReader (file));
+} else if (protocol.equals (jalview.io.AppletFormatAdapter.CLASSLOADER)) {
+var is = this.getClass ().getResourceAsStream ("/" + file);
+if (is != null) {
+$in = new java.io.BufferedReader ( new java.io.InputStreamReader (is));
+}}if ($in != null) {
+return this.parseAnnotationFrom (al, colSel, $in);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+System.out.println ("Problem reading annotation file: " + ex);
+if (this.nlinesread > 0) {
+System.out.println ("Last read line " + this.nlinesread + ": '" + this.lastread + "' (first 80 chars) ...");
+}return false;
+} else {
+throw ex;
+}
+}
+return false;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,~S,~S");
+Clazz.defineMethod (c$, "parseAnnotationFrom",
+function (al, colSel, $in) {
+this.nlinesread = 0;
+var combineAnnotation_calls = new java.util.ArrayList ();
+var deferredAnnotation_calls = new java.util.ArrayList ();
+var modified = false;
+var groupRef = null;
+var groupRefRows = new java.util.Hashtable ();
+var autoAnnots = new java.util.Hashtable ();
+{
+var line;
+var label;
+var description;
+var token;
+var graphStyle;
+var index;
+var refSeqIndex = 1;
+var existingAnnotations = 0;
+var overrideAutoAnnot = false;
+if (al.getAlignmentAnnotation () != null) {
+existingAnnotations = al.getAlignmentAnnotation ().length;
+if (existingAnnotations > 0) {
+var aa = al.getAlignmentAnnotation ();
+for (var aai = 0; aai < aa.length; aai++) {
+if (aa[aai].autoCalculated) {
+autoAnnots.put (this.autoAnnotsKey (aa[aai], aa[aai].sequenceRef, (aa[aai].groupRef == null ? null : aa[aai].groupRef.getName ())), new Integer (1));
+}}
+}}var alWidth = al.getWidth ();
+var st;
+var annotations;
+var annotation = null;
+var jvAnnotationFile = false;
+while ((line = $in.readLine ()) != null) {
+this.nlinesread++;
+this.lastread = String.instantialize (line);
+if (line.indexOf ("#") == 0) {
+continue;
+}if (line.indexOf ("JALVIEW_ANNOTATION") > -1) {
+jvAnnotationFile = true;
+break;
+}}
+if (!jvAnnotationFile) {
+$in.close ();
+return false;
+}while ((line = $in.readLine ()) != null) {
+this.nlinesread++;
+this.lastread = String.instantialize (line);
+if (line.indexOf ("#") == 0 || line.indexOf ("JALVIEW_ANNOTATION") > -1 || line.length == 0) {
+continue;
+}st = new java.util.StringTokenizer (line, "\t");
+token = st.nextToken ();
+if (token.equalsIgnoreCase ("COLOUR")) {
+this.colourAnnotations (al, st.nextToken (), st.nextToken ());
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase (jalview.io.AnnotationFile.COMBINE)) {
+combineAnnotation_calls.add ( Clazz.newArray (-1, [st, this.refSeq, groupRef]));
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("ROWPROPERTIES")) {
+this.addRowProperties (al, st);
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase (jalview.io.AnnotationFile.GRAPHLINE)) {
+deferredAnnotation_calls.add ( Clazz.newArray (-1, [jalview.io.AnnotationFile.GRAPHLINE, st, this.refSeq, groupRef]));
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("SEQUENCE_REF")) {
+if (st.hasMoreTokens ()) {
+this.refSeq = al.findName (this.refSeqId = st.nextToken ());
+if (this.refSeq == null) {
+this.refSeqId = null;
+}try {
+refSeqIndex = Integer.parseInt (st.nextToken ());
+if (refSeqIndex < 1) {
+refSeqIndex = 1;
+System.out.println ("WARNING: SEQUENCE_REF index must be > 0 in AnnotationFile");
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+refSeqIndex = 1;
+} else {
+throw ex;
+}
+}
+} else {
+this.refSeq = null;
+this.refSeqId = null;
+}continue;
+} else if (token.equalsIgnoreCase ("GROUP_REF")) {
+groupRef = null;
+if (st.hasMoreTokens ()) {
+groupRef = st.nextToken ();
+if (groupRef.length < 1) {
+groupRef = null;
+} else {
+if (groupRefRows.get (groupRef) == null) {
+groupRefRows.put (groupRef, new java.util.Vector ());
+}}}continue;
+} else if (token.equalsIgnoreCase ("SEQUENCE_GROUP")) {
+this.addGroup (al, st);
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("PROPERTIES")) {
+this.addProperties (al, st);
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("BELOW_ALIGNMENT")) {
+this.setBelowAlignment (al, st);
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("ALIGNMENT")) {
+this.addAlignmentDetails (al, st);
+modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("VIEW_SETREF")) {
+if (this.refSeq != null) {
+al.setSeqrep (this.refSeq);
+}modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("VIEW_HIDECOLS")) {
+if (st.hasMoreTokens ()) {
+if (colSel == null) {
+colSel = new jalview.datamodel.ColumnSelection ();
+}this.parseHideCols (colSel, st.nextToken ());
+}modified = true;
+continue;
+} else if (token.equalsIgnoreCase ("HIDE_INSERTIONS")) {
+var sr = this.refSeq == null ? al.getSeqrep () : this.refSeq;
+if (sr == null) {
+sr = al.getSequenceAt (0);
+}if (sr != null) {
+if (colSel == null) {
+System.err.println ("Cannot process HIDE_INSERTIONS without an alignment view: Ignoring line: " + line);
+} else {
+colSel.hideInsertionsFor (sr);
+}}modified = true;
+continue;
+}graphStyle = jalview.datamodel.AlignmentAnnotation.getGraphValueFromString (token);
+label = st.nextToken ();
+index = 0;
+annotations = new Array (alWidth);
+description = null;
+var score = NaN;
+if (st.hasMoreTokens ()) {
+line = st.nextToken ();
+if (line.indexOf ("|") == -1) {
+description = line;
+if (st.hasMoreTokens ()) {
+line = st.nextToken ();
+}}if (st.hasMoreTokens ()) {
+score = Float.$valueOf (st.nextToken ()).floatValue ();
+}st = new java.util.StringTokenizer (line, "|", true);
+var emptyColumn = true;
+var onlyOneElement = (st.countTokens () == 1);
+while (st.hasMoreElements () && index < alWidth) {
+token = st.nextToken ().trim ();
+if (onlyOneElement) {
+try {
+score = Float.$valueOf (token).floatValue ();
+break;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+}if (token.equals ("|")) {
+if (emptyColumn) {
+index++;
+}emptyColumn = true;
+} else {
+annotations[index++] = this.parseAnnotation (token, graphStyle);
+emptyColumn = false;
+}}
+}annotation = new jalview.datamodel.AlignmentAnnotation (label, description, (index == 0) ? null : annotations, 0, 0, graphStyle);
+annotation.score = score;
+if (!overrideAutoAnnot && autoAnnots.containsKey (this.autoAnnotsKey (annotation, this.refSeq, groupRef))) {
+continue;
+}if (this.refSeq != null) {
+annotation.belowAlignment = false;
+var referedSeq = this.refSeq;
+do {
+var ann = new jalview.datamodel.AlignmentAnnotation (annotation);
+annotation.createSequenceMapping (referedSeq, refSeqIndex, false);
+annotation.adjustForAlignment ();
+referedSeq.addAlignmentAnnotation (annotation);
+al.addAnnotation (annotation);
+al.setAnnotationIndex (annotation, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
+if (groupRef != null) {
+(groupRefRows.get (groupRef)).addElement (annotation);
+}annotation = ann;
+} while (this.refSeqId != null && (referedSeq = al.findName (referedSeq, this.refSeqId, true)) != null);
+} else {
+al.addAnnotation (annotation);
+al.setAnnotationIndex (annotation, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
+if (groupRef != null) {
+(groupRefRows.get (groupRef)).addElement (annotation);
+}}modified = true;
+}
+var groupRefLookup = new java.util.Hashtable ();
+var en = groupRefRows.keys ();
+while (en.hasMoreElements ()) {
+groupRef = en.nextElement ();
+var matched = false;
+for (var theGroup, $theGroup = al.getGroups ().iterator (); $theGroup.hasNext () && ((theGroup = $theGroup.next ()) || true);) {
+if (theGroup.getName ().equals (groupRef)) {
+if (matched) {
+System.err.println ("Ignoring 1:many group reference mappings for group name '" + groupRef + "'");
+} else {
+matched = true;
+var rowset = groupRefRows.get (groupRef);
+groupRefLookup.put (groupRef, theGroup);
+if (rowset != null && rowset.size () > 0) {
+var alan = null;
+for (var elm = 0, elmSize = rowset.size (); elm < elmSize; elm++) {
+alan = rowset.elementAt (elm);
+alan.groupRef = theGroup;
+}
+}}}}
+(groupRefRows.get (groupRef)).removeAllElements ();
+}
+for (var _deferred_args, $_deferred_args = deferredAnnotation_calls.iterator (); $_deferred_args.hasNext () && ((_deferred_args = $_deferred_args.next ()) || true);) {
+if (_deferred_args[0] === jalview.io.AnnotationFile.GRAPHLINE) {
+this.addLine (al, _deferred_args[1], _deferred_args[2], (_deferred_args[3] == null) ? null : groupRefLookup.get (_deferred_args[3]));
+}}
+var combinecount = 0;
+for (var _combine_args, $_combine_args = combineAnnotation_calls.iterator (); $_combine_args.hasNext () && ((_combine_args = $_combine_args.next ()) || true);) {
+this.combineAnnotations (al, ++combinecount, _combine_args[0], _combine_args[1], (_combine_args[2] == null) ? null : groupRefLookup.get (_combine_args[2]));
+}
+}return modified;
+}, "jalview.datamodel.AlignmentI,jalview.datamodel.ColumnSelection,java.io.BufferedReader");
+Clazz.defineMethod (c$, "parseHideCols",
+($fz = function (colSel, nextToken) {
+var inval = new java.util.StringTokenizer (nextToken, ",");
+while (inval.hasMoreTokens ()) {
+var range = inval.nextToken ().trim ();
+var from;
+var to = range.indexOf ("-");
+if (to == -1) {
+from = to = Integer.parseInt (range);
+if (from >= 0) {
+colSel.hideColumns (from, to);
+}} else {
+from = Integer.parseInt (range.substring (0, to));
+if (to < range.length - 1) {
+to = Integer.parseInt (range.substring (to + 1));
+} else {
+to = from;
+}if (from > 0 && to >= from) {
+colSel.hideColumns (from, to);
+}}}
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.ColumnSelection,~S");
+Clazz.defineMethod (c$, "autoAnnotsKey",
+($fz = function (annotation, refSeq, groupRef) {
+return annotation.graph + "\t" + annotation.label + "\t" + annotation.description + "\t" + (refSeq != null ? refSeq.getDisplayId (true) : "");
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,jalview.datamodel.SequenceI,~S");
+Clazz.defineMethod (c$, "parseAnnotation",
+function (string, graphStyle) {
+var hasSymbols = (graphStyle == 0);
+var desc = null;
+var displayChar = null;
+var ss = ' ';
+var value = 0;
+var parsedValue = false;
+var dcset = false;
+var colour = null;
+var i = string.indexOf ("[");
+var j = string.indexOf ("]");
+if (i > -1 && j > -1) {
+var ucs = new jalview.schemes.UserColourScheme ();
+colour = ucs.getColourFromString (string.substring (i + 1, j));
+if (i > 0 && string.charAt (i - 1) == ',') {
+i--;
+}string = string.substring (0, i) + string.substring (j + 1);
+}var st = new java.util.StringTokenizer (string, ",", true);
+var token;
+var seenContent = false;
+var pass = 0;
+while (st.hasMoreTokens ()) {
+pass++;
+token = st.nextToken ().trim ();
+if (token.equals (",")) {
+if (!seenContent && parsedValue && !dcset) {
+dcset = true;
+displayChar = " ";
+}seenContent = false;
+continue;
+} else {
+seenContent = true;
+}if (!parsedValue) {
+try {
+displayChar = token;
+value = new Float (token).floatValue ();
+parsedValue = true;
+continue;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+} else {
+if (token.length == 1) {
+displayChar = token;
+}}if (hasSymbols && (token.equals ("H") || token.equals ("E") || token.equals ("S") || token.equals (" "))) {
+ss = token.charAt (0);
+if (displayChar.equals (token.substring (0, 1))) {
+displayChar = "";
+}} else if (desc == null || (parsedValue && pass > 2)) {
+desc = token;
+}}
+if (displayChar != null && desc != null && desc.length == 1) {
+if (displayChar.length > 1) {
+var tmp = displayChar;
+displayChar = desc;
+desc = tmp;
+} else {
+if (displayChar.equals (desc)) {
+desc = null;
+}}}var anot = new jalview.datamodel.Annotation (displayChar, desc, ss, value);
+anot.colour = colour;
+return anot;
+}, "~S,~N");
+Clazz.defineMethod (c$, "colourAnnotations",
+function (al, label, colour) {
+var ucs = new jalview.schemes.UserColourScheme (colour);
+var annotations;
+for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
+if (al.getAlignmentAnnotation ()[i].label.equalsIgnoreCase (label)) {
+annotations = al.getAlignmentAnnotation ()[i].annotations;
+for (var j = 0; j < annotations.length; j++) {
+if (annotations[j] != null) {
+annotations[j].colour = ucs.findColour ('A');
+}}
+}}
+}, "jalview.datamodel.AlignmentI,~S,~S");
+Clazz.defineMethod (c$, "combineAnnotations",
+function (al, combineCount, st, seqRef, groupRef) {
+var group = st.nextToken ();
+var graphGroup = 0;
+if (al.getAlignmentAnnotation () != null) {
+for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
+var aa = al.getAlignmentAnnotation ()[i];
+if (aa.graphGroup > graphGroup) {
+graphGroup = aa.graphGroup + 1;
+}if (aa.sequenceRef === seqRef && aa.groupRef === groupRef && aa.label.equalsIgnoreCase (group)) {
+if (aa.graphGroup > -1) {
+graphGroup = aa.graphGroup;
+} else {
+if (graphGroup <= combineCount) {
+graphGroup = combineCount + 1;
+}aa.graphGroup = graphGroup;
+}break;
+}}
+while (st.hasMoreTokens ()) {
+group = st.nextToken ();
+for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
+var aa = al.getAlignmentAnnotation ()[i];
+if (aa.sequenceRef === seqRef && aa.groupRef === groupRef && aa.label.equalsIgnoreCase (group)) {
+aa.graphGroup = graphGroup;
+break;
+}}
+}
+} else {
+System.err.println ("Couldn't combine annotations. None are added to alignment yet!");
+}}, "jalview.datamodel.AlignmentI,~N,java.util.StringTokenizer,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "addLine",
+function (al, st, seqRef, groupRef) {
+var group = st.nextToken ();
+var annotation = null;
+var alannot = al.getAlignmentAnnotation ();
+var value = new Float (st.nextToken ()).floatValue ();
+var label = st.hasMoreTokens () ? st.nextToken () : null;
+var colour = null;
+if (st.hasMoreTokens ()) {
+var ucs = new jalview.schemes.UserColourScheme (st.nextToken ());
+colour = ucs.findColour ('A');
+}if (alannot != null) {
+for (var i = 0; i < alannot.length; i++) {
+if (alannot[i].label.equalsIgnoreCase (group) && (seqRef == null || alannot[i].sequenceRef === seqRef) && (groupRef == null || alannot[i].groupRef === groupRef)) {
+alannot[i].setThreshold ( new jalview.datamodel.GraphLine (value, label, colour));
+}}
+}if (annotation == null) {
+return;
+}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer,jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "addGroup",
+function (al, st) {
+var sg = new jalview.datamodel.SequenceGroup ();
+sg.setName (st.nextToken ());
+var rng = "";
+try {
+rng = st.nextToken ();
+if (rng.length > 0 && !rng.startsWith ("*")) {
+sg.setStartRes (Integer.parseInt (rng) - 1);
+} else {
+sg.setStartRes (0);
+}rng = st.nextToken ();
+if (rng.length > 0 && !rng.startsWith ("*")) {
+sg.setEndRes (Integer.parseInt (rng) - 1);
+} else {
+sg.setEndRes (al.getWidth () - 1);
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Couldn't parse Group Start or End Field as '*' or a valid column or sequence index: '" + rng + "' - assuming alignment width for group.");
+sg.setStartRes (0);
+sg.setEndRes (al.getWidth () - 1);
+} else {
+throw e;
+}
+}
+var index = st.nextToken ();
+if (index.equals ("-1")) {
+while (st.hasMoreElements ()) {
+sg.addSequence (al.findName (st.nextToken ()), false);
+}
+} else {
+var st2 = new java.util.StringTokenizer (index, ",");
+while (st2.hasMoreTokens ()) {
+var tmp = st2.nextToken ();
+if (tmp.equals ("*")) {
+for (var i = 0; i < al.getHeight (); i++) {
+sg.addSequence (al.getSequenceAt (i), false);
+}
+} else if (tmp.indexOf ("-") >= 0) {
+var st3 = new java.util.StringTokenizer (tmp, "-");
+var start = (Integer.parseInt (st3.nextToken ()));
+var end = (Integer.parseInt (st3.nextToken ()));
+if (end > start) {
+for (var i = start; i <= end; i++) {
+sg.addSequence (al.getSequenceAt (i - 1), false);
+}
+}} else {
+sg.addSequence (al.getSequenceAt (Integer.parseInt (tmp) - 1), false);
+}}
+}if (this.refSeq != null) {
+sg.setStartRes (this.refSeq.findIndex (sg.getStartRes () + 1) - 1);
+sg.setEndRes (this.refSeq.findIndex (sg.getEndRes () + 1) - 1);
+sg.setSeqrep (this.refSeq);
+}if (sg.getSize () > 0) {
+al.addGroup (sg);
+}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
+Clazz.defineMethod (c$, "addRowProperties",
+function (al, st) {
+var label = st.nextToken ();
+var keyValue;
+var key;
+var value;
+var scaletofit = false;
+var centerlab = false;
+var showalllabs = false;
+while (st.hasMoreTokens ()) {
+keyValue = st.nextToken ();
+key = keyValue.substring (0, keyValue.indexOf ("="));
+value = keyValue.substring (keyValue.indexOf ("=") + 1);
+if (key.equalsIgnoreCase ("scaletofit")) {
+scaletofit = Boolean.$valueOf (value).booleanValue ();
+}if (key.equalsIgnoreCase ("showalllabs")) {
+showalllabs = Boolean.$valueOf (value).booleanValue ();
+}if (key.equalsIgnoreCase ("centrelabs")) {
+centerlab = Boolean.$valueOf (value).booleanValue ();
+}var alr = al.getAlignmentAnnotation ();
+if (alr != null) {
+for (var i = 0; i < alr.length; i++) {
+if (alr[i].label.equalsIgnoreCase (label)) {
+alr[i].centreColLabels = centerlab;
+alr[i].scaleColLabel = scaletofit;
+alr[i].showAllColLabels = showalllabs;
+}}
+}}
+}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
+Clazz.defineMethod (c$, "addProperties",
+function (al, st) {
+if (al.getGroups () == null) {
+return;
+}var name = st.nextToken ();
+var sg = null;
+for (var _sg, $_sg = al.getGroups ().iterator (); $_sg.hasNext () && ((_sg = $_sg.next ()) || true);) {
+if ((sg = _sg).getName ().equals (name)) {
+break;
+} else {
+sg = null;
+}}
+if (sg != null) {
+var keyValue;
+var key;
+var value;
+var def = sg.cs;
+sg.cs = null;
+while (st.hasMoreTokens ()) {
+keyValue = st.nextToken ();
+key = keyValue.substring (0, keyValue.indexOf ("="));
+value = keyValue.substring (keyValue.indexOf ("=") + 1);
+if (key.equalsIgnoreCase ("description")) {
+sg.setDescription (value);
+} else if (key.equalsIgnoreCase ("colour")) {
+sg.cs = jalview.schemes.ColourSchemeProperty.getColour (al, value);
+} else if (key.equalsIgnoreCase ("pidThreshold")) {
+sg.cs.setThreshold (Integer.parseInt (value), true);
+} else if (key.equalsIgnoreCase ("consThreshold")) {
+sg.cs.setConservationInc (Integer.parseInt (value));
+var c = new jalview.analysis.Conservation ("Group", jalview.schemes.ResidueProperties.propHash, 3, sg.getSequences (null), sg.getStartRes (), sg.getEndRes () + 1);
+c.calculate ();
+c.verdict (false, 25);
+sg.cs.setConservation (c);
+} else if (key.equalsIgnoreCase ("outlineColour")) {
+sg.setOutlineColour ( new jalview.schemes.UserColourScheme (value).findColour ('A'));
+} else if (key.equalsIgnoreCase ("displayBoxes")) {
+sg.setDisplayBoxes (Boolean.$valueOf (value).booleanValue ());
+} else if (key.equalsIgnoreCase ("showUnconserved")) {
+sg.setShowNonconserved (Boolean.$valueOf (value).booleanValue ());
+} else if (key.equalsIgnoreCase ("displayText")) {
+sg.setDisplayText (Boolean.$valueOf (value).booleanValue ());
+} else if (key.equalsIgnoreCase ("colourText")) {
+sg.setColourText (Boolean.$valueOf (value).booleanValue ());
+} else if (key.equalsIgnoreCase ("textCol1")) {
+sg.textColour = new jalview.schemes.UserColourScheme (value).findColour ('A');
+} else if (key.equalsIgnoreCase ("textCol2")) {
+sg.textColour2 = new jalview.schemes.UserColourScheme (value).findColour ('A');
+} else if (key.equalsIgnoreCase ("textColThreshold")) {
+sg.thresholdTextColour = Integer.parseInt (value);
+} else if (key.equalsIgnoreCase ("idColour")) {
+sg.setIdColour ((def = new jalview.schemes.UserColourScheme (value)).findColour ('A'));
+} else if (key.equalsIgnoreCase ("hide")) {
+sg.setHidereps (true);
+} else if (key.equalsIgnoreCase ("hidecols")) {
+sg.setHideCols (true);
+}sg.recalcConservation ();
+}
+if (sg.cs == null) {
+sg.cs = def;
+}}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
+Clazz.defineMethod (c$, "setBelowAlignment",
+function (al, st) {
+var token;
+var aa;
+var ala = al.getAlignmentAnnotation ();
+if (ala == null) {
+System.err.print ("Warning - no annotation to set below for sequence associated annotation:");
+}while (st.hasMoreTokens ()) {
+token = st.nextToken ();
+if (ala == null) {
+System.err.print (" " + token);
+} else {
+for (var i = 0; i < al.getAlignmentAnnotation ().length; i++) {
+aa = al.getAlignmentAnnotation ()[i];
+if (aa.sequenceRef === this.refSeq && aa.label.equals (token)) {
+aa.belowAlignment = true;
+}}
+}}
+if (ala == null) {
+System.err.print ("\n");
+}}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
+Clazz.defineMethod (c$, "addAlignmentDetails",
+function (al, st) {
+var keyValue;
+var key;
+var value;
+while (st.hasMoreTokens ()) {
+keyValue = st.nextToken ();
+key = keyValue.substring (0, keyValue.indexOf ("="));
+value = keyValue.substring (keyValue.indexOf ("=") + 1);
+al.setProperty (key, value);
+}
+}, "jalview.datamodel.AlignmentI,java.util.StringTokenizer");
+Clazz.defineMethod (c$, "printCSVAnnotations",
+function (annotations) {
+var sp = new StringBuffer ();
+for (var i = 0; i < annotations.length; i++) {
+var atos = annotations[i].toString ();
+var p = 0;
+do {
+var cp = atos.indexOf ("\n", p);
+sp.append (annotations[i].label);
+sp.append (",");
+if (cp > p) {
+sp.append (atos.substring (p, cp + 1));
+} else {
+sp.append (atos.substring (p));
+sp.append (this.newline);
+}p = cp + 1;
+} while (p > 0);
+}
+return sp.toString ();
+}, "~A");
+Clazz.defineMethod (c$, "printAnnotationsForView",
+function (viewport) {
+return this.printAnnotations (viewport.isShowAnnotation () ? viewport.getAlignment ().getAlignmentAnnotation () : null, viewport.getAlignment ().getGroups (), viewport.getAlignment ().getProperties (), viewport.getColumnSelection (), viewport.getAlignment (), null);
+}, "jalview.api.AlignViewportI");
+Clazz.defineMethod (c$, "printAnnotationsForAlignment",
+function (al) {
+return this.printAnnotations (al.getAlignmentAnnotation (), al.getGroups (), al.getProperties (), null, al, null);
+}, "jalview.datamodel.AlignmentI");
+c$.$AnnotationFile$ViewDef$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.viewname = null;
+this.hidseqs = null;
+this.hiddencols = null;
+this.visibleGroups = null;
+this.hiddenRepSeqs = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io.AnnotationFile, "ViewDef");
+Clazz.makeConstructor (c$,
+function (a, b, c, d) {
+this.viewname = a;
+this.hidseqs = b;
+this.hiddencols = c;
+this.hiddenRepSeqs = d;
+}, "~S,jalview.datamodel.HiddenSequences,jalview.datamodel.ColumnSelection,java.util.Hashtable");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"GRAPHLINE", "GRAPHLINE",
+"COMBINE", "COMBINE");
+});
diff --git a/bin/jalview/io/AppletFormatAdapter.class b/bin/jalview/io/AppletFormatAdapter.class
index 6c39b9d..2c63ec8 100644
Binary files a/bin/jalview/io/AppletFormatAdapter.class and b/bin/jalview/io/AppletFormatAdapter.class differ
diff --git a/bin/jalview/io/AppletFormatAdapter.js b/bin/jalview/io/AppletFormatAdapter.js
index 681a44d..f4dab9f 100644
--- a/bin/jalview/io/AppletFormatAdapter.js
+++ b/bin/jalview/io/AppletFormatAdapter.js
@@ -1,389 +1,389 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (null, "jalview.io.AppletFormatAdapter", ["MCview.PDBfile", "jalview.datamodel.Alignment", "jalview.io.FileParse", "$.IdentifyFile", "jalview.jsdev.GenericFileAdapter", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Exception", "$.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.viewpanel = null;
-this.annotFromStructure = false;
-this.localSecondaryStruct = false;
-this.serviceSecondaryStruct = false;
-this.alignFile = null;
-this.inFile = null;
-this.newline = null;
-this.exportSettings = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "AppletFormatAdapter");
-Clazz.prepareFields (c$, function () {
-this.newline = System.getProperty ("line.separator");
-});
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (viewpanel) {
-this.viewpanel = viewpanel;
-}, "jalview.api.AlignmentViewPanel");
-Clazz.makeConstructor (c$,
-function (alignPanel, settings) {
-this.viewpanel = alignPanel;
-this.exportSettings = settings;
-}, "jalview.api.AlignmentViewPanel,jalview.api.AlignExportSettingI");
-c$.prettyPrint = Clazz.defineMethod (c$, "prettyPrint",
-function (els) {
-var list = new StringBuffer ();
-for (var i = 0, iSize = els.length - 1; i < iSize; i++) {
-list.append (els[i]);
-list.append (", ");
-}
-list.append (" and " + els[els.length - 1] + ".");
-return list.toString ();
-}, "~A");
-Clazz.defineMethod (c$, "setNewlineString",
-function (nl) {
-this.newline = nl;
-}, "~S");
-Clazz.defineMethod (c$, "getNewlineString",
-function () {
-return this.newline;
-});
-c$.isValidFormat = Clazz.defineMethod (c$, "isValidFormat",
-function (format) {
-return jalview.io.AppletFormatAdapter.isValidFormat (format, false);
-}, "~S");
-c$.isValidFormat = Clazz.defineMethod (c$, "isValidFormat",
-function (format, forwriting) {
-var valid = false;
-var format_list = (forwriting) ? jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS : jalview.io.AppletFormatAdapter.READABLE_FORMATS;
-for (var element, $element = 0, $$element = format_list; $element < $$element.length && ((element = $$element[$element]) || true); $element++) {
-if (element.equalsIgnoreCase (format)) {
-return true;
-}}
-return valid;
-}, "~S,~B");
-Clazz.defineMethod (c$, "readFile",
-function (inFile, type, format) {
-this.inFile = inFile;
-try {
-if (format.equals ("FASTA")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [inFile, type]);
-} else if (format.equals ("MSF")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", [inFile, type]);
-} else if (format.equals ("PileUp")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", [inFile, type]);
-} else if (format.equals ("CLUSTAL")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", [inFile, type]);
-} else if (format.equals ("BLC")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", [inFile, type]);
-} else if (format.equals ("PIR")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", [inFile, type]);
-} else if (format.equals ("PFAM")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", [inFile, type]);
-} else if (format.equals ("JnetFile")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [inFile, type]);
-(this.alignFile).removeNonSequences ();
-} else if (format.equals ("PDB")) {
-this.alignFile = new MCview.PDBfile (this.annotFromStructure, this.localSecondaryStruct, this.serviceSecondaryStruct, inFile, type);
-} else if (format.equals ("STH")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [inFile, type]);
-} else if (format.equals ("SimpleBLAST")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("SimpleBlastFile", [inFile, type]);
-} else if (format.equals ("PHYLIP")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", [inFile, type]);
-} else if (format.equals ("JSON")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", [inFile, type]);
-} else if (format.equals ("HTML")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("HtmlFile", [inFile, type]);
-} else if (format.equals ("RNAML")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", [inFile, type]);
-} else if (format.equals ("GFF v2 or v3")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("Gff3File", [inFile, type]);
-}return this.buildAlignmentFrom (this.alignFile);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to read alignment using the '" + format + "' reader.\n" + e);
-if (e.getMessage () != null && e.getMessage ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
-throw new java.io.IOException (e.getMessage ());
-}if (type.equalsIgnoreCase ("Paste")) {
-try {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [">UNKNOWN\n" + inFile, "Paste"]);
-return this.buildAlignmentFrom (this.alignFile);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-if (ex.toString ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
-throw new java.io.IOException (e.getMessage ());
-}ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}throw new java.io.IOException (jalview.io.AppletFormatAdapter.SUPPORTED_FORMATS);
-} else {
-throw e;
-}
-}
-}, "~S,~S,~S");
-Clazz.defineMethod (c$, "readFromFile",
-function (source, format) {
-this.inFile = source.getInFile ();
-var type = source.type;
-try {
-if (format.equals ("FASTA")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [source]);
-} else if (format.equals ("MSF")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", [source]);
-} else if (format.equals ("PileUp")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", [source]);
-} else if (format.equals ("CLUSTAL")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", [source]);
-} else if (format.equals ("BLC")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", [source]);
-} else if (format.equals ("PIR")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", [source]);
-} else if (format.equals ("PFAM")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", [source]);
-} else if (format.equals ("JnetFile")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [source]);
-(this.alignFile).removeNonSequences ();
-} else if (format.equals ("PDB")) {
-this.alignFile = new MCview.PDBfile (this.annotFromStructure, this.localSecondaryStruct, this.serviceSecondaryStruct, source);
-} else if (format.equals ("STH")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [source]);
-} else if (format.equals ("RNAML")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", [source]);
-} else if (format.equals ("SimpleBLAST")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("SimpleBlastFile", [source]);
-} else if (format.equals ("PHYLIP")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", [source]);
-} else if (format.equals ("GFF v2 or v3")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("Gff3File", [this.inFile, type]);
-} else if (format.equals ("JSON")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", [source]);
-} else if (format.equals ("HTML")) {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("HtmlFile", [source]);
-}return this.buildAlignmentFrom (this.alignFile);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-e.printStackTrace ();
-System.err.println ("Failed to read alignment using the '" + format + "' reader.\n" + e);
-if (e.getMessage () != null && e.getMessage ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
-throw new java.io.IOException (e.getMessage ());
-}if (type.equalsIgnoreCase ("Paste")) {
-try {
-this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [">UNKNOWN\n" + this.inFile, "Paste"]);
-return this.buildAlignmentFrom (this.alignFile);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-if (ex.toString ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
-throw new java.io.IOException (e.getMessage ());
-}ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}throw new java.io.IOException (jalview.io.AppletFormatAdapter.SUPPORTED_FORMATS);
-} else {
-throw e;
-}
-}
-}, "jalview.io.FileParse,~S");
-Clazz.defineMethod (c$, "buildAlignmentFrom",
-($fz = function (alignFile2) {
-var al = new jalview.datamodel.Alignment (this.alignFile.getSeqsAsArray ());
-this.alignFile.addAnnotations (al);
-this.alignFile.addGroups (al);
-return al;
-}, $fz.isPrivate = true, $fz), "jalview.io.AlignFile");
-Clazz.defineMethod (c$, "formatSequences",
-function (format, jvsuffix, ap, selectedOnly) {
-var selvew = ap.getAlignViewport ().getAlignmentView (selectedOnly, false);
-var aselview = selvew.getVisibleAlignment (ap.getAlignViewport ().getGapCharacter ());
-var ala = (ap.getAlignViewport ().getVisibleAlignmentAnnotation (selectedOnly));
-if (ala != null) {
-for (var aa, $aa = ala.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
-aselview.addAnnotation (aa);
-}
-}this.viewpanel = ap;
-return this.formatSequences (format, aselview, jvsuffix);
-}, "~S,~B,jalview.api.AlignmentViewPanel,~B");
-Clazz.defineMethod (c$, "formatSequences",
-function (format, alignment, jvsuffix) {
-try {
-var afile = null;
-if (format.equalsIgnoreCase ("FASTA")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", []);
-} else if (format.equalsIgnoreCase ("MSF")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", []);
-} else if (format.equalsIgnoreCase ("PileUp")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", []);
-} else if (format.equalsIgnoreCase ("CLUSTAL")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", []);
-} else if (format.equalsIgnoreCase ("BLC")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", []);
-} else if (format.equalsIgnoreCase ("PIR")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", []);
-} else if (format.equalsIgnoreCase ("PFAM")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", []);
-} else if (format.equalsIgnoreCase ("STH")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [alignment]);
-} else if (format.equalsIgnoreCase ("AMSA")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("AMSAFile", [alignment]);
-} else if (format.equalsIgnoreCase ("PHYLIP")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", []);
-} else if (format.equalsIgnoreCase ("JSON")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", []);
-} else if (format.equalsIgnoreCase ("RNAML")) {
-afile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", []);
-} else {
-throw new Exception (jalview.util.MessageManager.getString ("error.implementation_error_unknown_file_format_string"));
-}afile.setNewlineString (this.newline);
-afile.addJVSuffix (jvsuffix);
-afile.setExportSettings (this.exportSettings);
-afile.configureForView (this.viewpanel);
-if (this.viewpanel == null || this.viewpanel.getAlignment () == null || this.viewpanel.getAlignment () !== alignment) {
-afile.setSeqs (alignment.getSequencesArray ());
-} else {
-afile.setSeqs (this.viewpanel.getAlignment ().getSequencesArray ());
-}var afileresp = afile.print ();
-if (afile.hasWarningMessage ()) {
-System.err.println ("Warning raised when writing as " + format + " : " + afile.getWarningMessage ());
-}return afileresp;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Failed to write alignment as a '" + format + "' file\n");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-return null;
-}, "~S,jalview.datamodel.AlignmentI,~B");
-c$.checkProtocol = Clazz.defineMethod (c$, "checkProtocol",
-function (file) {
-var protocol = jalview.io.AppletFormatAdapter.FILE;
-var ft = file.toLowerCase ().trim ();
-if (ft.indexOf ("http:") == 0 || ft.indexOf ("https:") == 0 || ft.indexOf ("file:") == 0) {
-protocol = jalview.io.AppletFormatAdapter.URL;
-}return protocol;
-}, "~S");
-c$.resolveProtocol = Clazz.defineMethod (c$, "resolveProtocol",
-function (file, format) {
-return jalview.io.AppletFormatAdapter.resolveProtocol (file, format, false);
-}, "~S,~S");
-c$.resolveProtocol = Clazz.defineMethod (c$, "resolveProtocol",
-function (file, format, debug) {
-var protocol = null;
-if (debug) {
-System.out.println ("resolving datasource started with:\n>>file\n" + file + ">>endfile");
-}try {
-var rtn = false;
-var is = System.getSecurityManager ().getClass ().getResourceAsStream ("/" + file);
-if (is != null) {
-rtn = true;
-is.close ();
-}if (debug) {
-System.err.println ("Resource '" + file + "' was " + (rtn ? "" : "not") + " located by classloader.");
-};if (rtn) {
-protocol = jalview.io.AppletFormatAdapter.CLASSLOADER;
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Exception checking resources: " + file + " " + ex);
-} else {
-throw ex;
-}
-}
-if (file.indexOf ("://") > -1) {
-protocol = jalview.io.AppletFormatAdapter.URL;
-} else {
-protocol = jalview.io.AppletFormatAdapter.FILE;
-}var fp = null;
-try {
-if (debug) {
-System.out.println ("Trying to get contents of resource as " + protocol + ":");
-}fp = new jalview.io.FileParse (file, protocol);
-if (!fp.isValid ()) {
-fp = null;
-} else {
-if (debug) {
-System.out.println ("Successful.");
-}}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-if (debug) {
-System.err.println ("Exception when accessing content: " + e);
-}fp = null;
-} else {
-throw e;
-}
-}
-if (fp == null) {
-if (debug) {
-System.out.println ("Accessing as paste.");
-}protocol = jalview.io.AppletFormatAdapter.PASTE;
-fp = null;
-try {
-fp = new jalview.io.FileParse (file, protocol);
-if (!fp.isValid ()) {
-fp = null;
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Failed to access content as paste!");
-e.printStackTrace ();
-fp = null;
-} else {
-throw e;
-}
-}
-}if (fp == null) {
-return null;
-}if (format == null || format.length == 0) {
-return protocol;
-} else {
-try {
-var idformat = new jalview.io.IdentifyFile ().Identify (file, protocol);
-if (idformat == null) {
-if (debug) {
-System.out.println ("Format not identified. Inaccessible file.");
-}return null;
-}if (debug) {
-System.out.println ("Format identified as " + idformat + "and expected as " + format);
-}if (idformat.equals (format)) {
-if (debug) {
-System.out.println ("Protocol identified as " + protocol);
-}return protocol;
-} else {
-if (debug) {
-System.out.println ("File deemed not accessible via " + protocol);
-}fp.close ();
-return null;
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-if (debug) {
-System.err.println ("File deemed not accessible via " + protocol);
-e.printStackTrace ();
-};} else {
-throw e;
-}
-}
-}return null;
-}, "~S,~S,~B");
-Clazz.defineMethod (c$, "getAlignFile",
-function () {
-return this.alignFile;
-});
-Clazz.defineMethod (c$, "setAlignFile",
-function (alignFile) {
-this.alignFile = alignFile;
-}, "jalview.io.AlignFile");
-Clazz.defineStatics (c$,
-"FILE", "File",
-"URL", "URL",
-"PASTE", "Paste",
-"CLASSLOADER", "ClassLoader");
-c$.READABLE_FORMATS = c$.prototype.READABLE_FORMATS = Clazz.newArray (-1, ["BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "STH", "PDB", "JnetFile", "RNAML", "PHYLIP", "JSON", "GFF v2 or v3", "HTML"]);
-c$.READABLE_EXTENSIONS = c$.prototype.READABLE_EXTENSIONS = Clazz.newArray (-1, ["fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "sto,stk", "xml,rnaml", "phy", "json", ".gff2,gff3", "jar,jvp", "html"]);
-c$.READABLE_FNAMES = c$.prototype.READABLE_FNAMES = Clazz.newArray (-1, ["Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Stockholm", "RNAML", "PHYLIP", "JSON", "GFF v2 or v3", "Jalview", "HTML"]);
-c$.WRITEABLE_FORMATS = c$.prototype.WRITEABLE_FORMATS = Clazz.newArray (-1, ["BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "AMSA", "STH", "PHYLIP", "JSON"]);
-c$.WRITABLE_EXTENSIONS = c$.prototype.WRITABLE_EXTENSIONS = Clazz.newArray (-1, ["fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "sto,stk", "phy", "json", "jvp"]);
-c$.WRITABLE_FNAMES = c$.prototype.WRITABLE_FNAMES = Clazz.newArray (-1, ["Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "STH", "PHYLIP", "JSON", "Jalview"]);
-Clazz.defineStatics (c$,
-"INVALID_CHARACTERS", "Contains invalid characters");
-c$.SUPPORTED_FORMATS = c$.prototype.SUPPORTED_FORMATS = "Formats currently supported are\n" + jalview.io.AppletFormatAdapter.prettyPrint (jalview.io.AppletFormatAdapter.READABLE_FORMATS);
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (null, "jalview.io.AppletFormatAdapter", ["MCview.PDBfile", "jalview.datamodel.Alignment", "jalview.io.FileParse", "$.IdentifyFile", "jalview.jsdev.GenericFileAdapter", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Exception", "$.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.viewpanel = null;
+this.annotFromStructure = false;
+this.localSecondaryStruct = false;
+this.serviceSecondaryStruct = false;
+this.alignFile = null;
+this.inFile = null;
+this.newline = null;
+this.exportSettings = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "AppletFormatAdapter");
+Clazz.prepareFields (c$, function () {
+this.newline = System.getProperty ("line.separator");
+});
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (viewpanel) {
+this.viewpanel = viewpanel;
+}, "jalview.api.AlignmentViewPanel");
+Clazz.makeConstructor (c$,
+function (alignPanel, settings) {
+this.viewpanel = alignPanel;
+this.exportSettings = settings;
+}, "jalview.api.AlignmentViewPanel,jalview.api.AlignExportSettingI");
+c$.prettyPrint = Clazz.defineMethod (c$, "prettyPrint",
+function (els) {
+var list = new StringBuffer ();
+for (var i = 0, iSize = els.length - 1; i < iSize; i++) {
+list.append (els[i]);
+list.append (", ");
+}
+list.append (" and " + els[els.length - 1] + ".");
+return list.toString ();
+}, "~A");
+Clazz.defineMethod (c$, "setNewlineString",
+function (nl) {
+this.newline = nl;
+}, "~S");
+Clazz.defineMethod (c$, "getNewlineString",
+function () {
+return this.newline;
+});
+c$.isValidFormat = Clazz.defineMethod (c$, "isValidFormat",
+function (format) {
+return jalview.io.AppletFormatAdapter.isValidFormat (format, false);
+}, "~S");
+c$.isValidFormat = Clazz.defineMethod (c$, "isValidFormat",
+function (format, forwriting) {
+var valid = false;
+var format_list = (forwriting) ? jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS : jalview.io.AppletFormatAdapter.READABLE_FORMATS;
+for (var element, $element = 0, $$element = format_list; $element < $$element.length && ((element = $$element[$element]) || true); $element++) {
+if (element.equalsIgnoreCase (format)) {
+return true;
+}}
+return valid;
+}, "~S,~B");
+Clazz.defineMethod (c$, "readFile",
+function (inFile, type, format) {
+this.inFile = inFile;
+try {
+if (format.equals ("FASTA")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [inFile, type]);
+} else if (format.equals ("MSF")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", [inFile, type]);
+} else if (format.equals ("PileUp")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", [inFile, type]);
+} else if (format.equals ("CLUSTAL")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", [inFile, type]);
+} else if (format.equals ("BLC")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", [inFile, type]);
+} else if (format.equals ("PIR")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", [inFile, type]);
+} else if (format.equals ("PFAM")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", [inFile, type]);
+} else if (format.equals ("JnetFile")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [inFile, type]);
+(this.alignFile).removeNonSequences ();
+} else if (format.equals ("PDB")) {
+this.alignFile = new MCview.PDBfile (this.annotFromStructure, this.localSecondaryStruct, this.serviceSecondaryStruct, inFile, type);
+} else if (format.equals ("STH")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [inFile, type]);
+} else if (format.equals ("SimpleBLAST")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("SimpleBlastFile", [inFile, type]);
+} else if (format.equals ("PHYLIP")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", [inFile, type]);
+} else if (format.equals ("JSON")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", [inFile, type]);
+} else if (format.equals ("HTML")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("HtmlFile", [inFile, type]);
+} else if (format.equals ("RNAML")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", [inFile, type]);
+} else if (format.equals ("GFF v2 or v3")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("Gff3File", [inFile, type]);
+}return this.buildAlignmentFrom (this.alignFile);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to read alignment using the '" + format + "' reader.\n" + e);
+if (e.getMessage () != null && e.getMessage ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
+throw new java.io.IOException (e.getMessage ());
+}if (type.equalsIgnoreCase ("Paste")) {
+try {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [">UNKNOWN\n" + inFile, "Paste"]);
+return this.buildAlignmentFrom (this.alignFile);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+if (ex.toString ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
+throw new java.io.IOException (e.getMessage ());
+}ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}throw new java.io.IOException (jalview.io.AppletFormatAdapter.SUPPORTED_FORMATS);
+} else {
+throw e;
+}
+}
+}, "~S,~S,~S");
+Clazz.defineMethod (c$, "readFromFile",
+function (source, format) {
+this.inFile = source.getInFile ();
+var type = source.type;
+try {
+if (format.equals ("FASTA")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [source]);
+} else if (format.equals ("MSF")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", [source]);
+} else if (format.equals ("PileUp")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", [source]);
+} else if (format.equals ("CLUSTAL")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", [source]);
+} else if (format.equals ("BLC")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", [source]);
+} else if (format.equals ("PIR")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", [source]);
+} else if (format.equals ("PFAM")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", [source]);
+} else if (format.equals ("JnetFile")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [source]);
+(this.alignFile).removeNonSequences ();
+} else if (format.equals ("PDB")) {
+this.alignFile = new MCview.PDBfile (this.annotFromStructure, this.localSecondaryStruct, this.serviceSecondaryStruct, source);
+} else if (format.equals ("STH")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [source]);
+} else if (format.equals ("RNAML")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", [source]);
+} else if (format.equals ("SimpleBLAST")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("SimpleBlastFile", [source]);
+} else if (format.equals ("PHYLIP")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", [source]);
+} else if (format.equals ("GFF v2 or v3")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("Gff3File", [this.inFile, type]);
+} else if (format.equals ("JSON")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", [source]);
+} else if (format.equals ("HTML")) {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("HtmlFile", [source]);
+}return this.buildAlignmentFrom (this.alignFile);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+e.printStackTrace ();
+System.err.println ("Failed to read alignment using the '" + format + "' reader.\n" + e);
+if (e.getMessage () != null && e.getMessage ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
+throw new java.io.IOException (e.getMessage ());
+}if (type.equalsIgnoreCase ("Paste")) {
+try {
+this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [">UNKNOWN\n" + this.inFile, "Paste"]);
+return this.buildAlignmentFrom (this.alignFile);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+if (ex.toString ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {
+throw new java.io.IOException (e.getMessage ());
+}ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}throw new java.io.IOException (jalview.io.AppletFormatAdapter.SUPPORTED_FORMATS);
+} else {
+throw e;
+}
+}
+}, "jalview.io.FileParse,~S");
+Clazz.defineMethod (c$, "buildAlignmentFrom",
+($fz = function (alignFile2) {
+var al = new jalview.datamodel.Alignment (this.alignFile.getSeqsAsArray ());
+this.alignFile.addAnnotations (al);
+this.alignFile.addGroups (al);
+return al;
+}, $fz.isPrivate = true, $fz), "jalview.io.AlignFile");
+Clazz.defineMethod (c$, "formatSequences",
+function (format, jvsuffix, ap, selectedOnly) {
+var selvew = ap.getAlignViewport ().getAlignmentView (selectedOnly, false);
+var aselview = selvew.getVisibleAlignment (ap.getAlignViewport ().getGapCharacter ());
+var ala = (ap.getAlignViewport ().getVisibleAlignmentAnnotation (selectedOnly));
+if (ala != null) {
+for (var aa, $aa = ala.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
+aselview.addAnnotation (aa);
+}
+}this.viewpanel = ap;
+return this.formatSequences (format, aselview, jvsuffix);
+}, "~S,~B,jalview.api.AlignmentViewPanel,~B");
+Clazz.defineMethod (c$, "formatSequences",
+function (format, alignment, jvsuffix) {
+try {
+var afile = null;
+if (format.equalsIgnoreCase ("FASTA")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", []);
+} else if (format.equalsIgnoreCase ("MSF")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", []);
+} else if (format.equalsIgnoreCase ("PileUp")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", []);
+} else if (format.equalsIgnoreCase ("CLUSTAL")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", []);
+} else if (format.equalsIgnoreCase ("BLC")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", []);
+} else if (format.equalsIgnoreCase ("PIR")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", []);
+} else if (format.equalsIgnoreCase ("PFAM")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", []);
+} else if (format.equalsIgnoreCase ("STH")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [alignment]);
+} else if (format.equalsIgnoreCase ("AMSA")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("AMSAFile", [alignment]);
+} else if (format.equalsIgnoreCase ("PHYLIP")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", []);
+} else if (format.equalsIgnoreCase ("JSON")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", []);
+} else if (format.equalsIgnoreCase ("RNAML")) {
+afile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", []);
+} else {
+throw new Exception (jalview.util.MessageManager.getString ("error.implementation_error_unknown_file_format_string"));
+}afile.setNewlineString (this.newline);
+afile.addJVSuffix (jvsuffix);
+afile.setExportSettings (this.exportSettings);
+afile.configureForView (this.viewpanel);
+if (this.viewpanel == null || this.viewpanel.getAlignment () == null || this.viewpanel.getAlignment () !== alignment) {
+afile.setSeqs (alignment.getSequencesArray ());
+} else {
+afile.setSeqs (this.viewpanel.getAlignment ().getSequencesArray ());
+}var afileresp = afile.print ();
+if (afile.hasWarningMessage ()) {
+System.err.println ("Warning raised when writing as " + format + " : " + afile.getWarningMessage ());
+}return afileresp;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Failed to write alignment as a '" + format + "' file\n");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+return null;
+}, "~S,jalview.datamodel.AlignmentI,~B");
+c$.checkProtocol = Clazz.defineMethod (c$, "checkProtocol",
+function (file) {
+var protocol = jalview.io.AppletFormatAdapter.FILE;
+var ft = file.toLowerCase ().trim ();
+if (ft.indexOf ("http:") == 0 || ft.indexOf ("https:") == 0 || ft.indexOf ("file:") == 0) {
+protocol = jalview.io.AppletFormatAdapter.URL;
+}return protocol;
+}, "~S");
+c$.resolveProtocol = Clazz.defineMethod (c$, "resolveProtocol",
+function (file, format) {
+return jalview.io.AppletFormatAdapter.resolveProtocol (file, format, false);
+}, "~S,~S");
+c$.resolveProtocol = Clazz.defineMethod (c$, "resolveProtocol",
+function (file, format, debug) {
+var protocol = null;
+if (debug) {
+System.out.println ("resolving datasource started with:\n>>file\n" + file + ">>endfile");
+}try {
+var rtn = false;
+var is = System.getSecurityManager ().getClass ().getResourceAsStream ("/" + file);
+if (is != null) {
+rtn = true;
+is.close ();
+}if (debug) {
+System.err.println ("Resource '" + file + "' was " + (rtn ? "" : "not") + " located by classloader.");
+};if (rtn) {
+protocol = jalview.io.AppletFormatAdapter.CLASSLOADER;
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Exception checking resources: " + file + " " + ex);
+} else {
+throw ex;
+}
+}
+if (file.indexOf ("://") > -1) {
+protocol = jalview.io.AppletFormatAdapter.URL;
+} else {
+protocol = jalview.io.AppletFormatAdapter.FILE;
+}var fp = null;
+try {
+if (debug) {
+System.out.println ("Trying to get contents of resource as " + protocol + ":");
+}fp = new jalview.io.FileParse (file, protocol);
+if (!fp.isValid ()) {
+fp = null;
+} else {
+if (debug) {
+System.out.println ("Successful.");
+}}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+if (debug) {
+System.err.println ("Exception when accessing content: " + e);
+}fp = null;
+} else {
+throw e;
+}
+}
+if (fp == null) {
+if (debug) {
+System.out.println ("Accessing as paste.");
+}protocol = jalview.io.AppletFormatAdapter.PASTE;
+fp = null;
+try {
+fp = new jalview.io.FileParse (file, protocol);
+if (!fp.isValid ()) {
+fp = null;
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Failed to access content as paste!");
+e.printStackTrace ();
+fp = null;
+} else {
+throw e;
+}
+}
+}if (fp == null) {
+return null;
+}if (format == null || format.length == 0) {
+return protocol;
+} else {
+try {
+var idformat = new jalview.io.IdentifyFile ().Identify (file, protocol);
+if (idformat == null) {
+if (debug) {
+System.out.println ("Format not identified. Inaccessible file.");
+}return null;
+}if (debug) {
+System.out.println ("Format identified as " + idformat + "and expected as " + format);
+}if (idformat.equals (format)) {
+if (debug) {
+System.out.println ("Protocol identified as " + protocol);
+}return protocol;
+} else {
+if (debug) {
+System.out.println ("File deemed not accessible via " + protocol);
+}fp.close ();
+return null;
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+if (debug) {
+System.err.println ("File deemed not accessible via " + protocol);
+e.printStackTrace ();
+};} else {
+throw e;
+}
+}
+}return null;
+}, "~S,~S,~B");
+Clazz.defineMethod (c$, "getAlignFile",
+function () {
+return this.alignFile;
+});
+Clazz.defineMethod (c$, "setAlignFile",
+function (alignFile) {
+this.alignFile = alignFile;
+}, "jalview.io.AlignFile");
+Clazz.defineStatics (c$,
+"FILE", "File",
+"URL", "URL",
+"PASTE", "Paste",
+"CLASSLOADER", "ClassLoader");
+c$.READABLE_FORMATS = c$.prototype.READABLE_FORMATS = Clazz.newArray (-1, ["BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "STH", "PDB", "JnetFile", "RNAML", "PHYLIP", "JSON", "GFF v2 or v3", "HTML"]);
+c$.READABLE_EXTENSIONS = c$.prototype.READABLE_EXTENSIONS = Clazz.newArray (-1, ["fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "sto,stk", "xml,rnaml", "phy", "json", ".gff2,gff3", "jar,jvp", "html"]);
+c$.READABLE_FNAMES = c$.prototype.READABLE_FNAMES = Clazz.newArray (-1, ["Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Stockholm", "RNAML", "PHYLIP", "JSON", "GFF v2 or v3", "Jalview", "HTML"]);
+c$.WRITEABLE_FORMATS = c$.prototype.WRITEABLE_FORMATS = Clazz.newArray (-1, ["BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "AMSA", "STH", "PHYLIP", "JSON"]);
+c$.WRITABLE_EXTENSIONS = c$.prototype.WRITABLE_EXTENSIONS = Clazz.newArray (-1, ["fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "sto,stk", "phy", "json", "jvp"]);
+c$.WRITABLE_FNAMES = c$.prototype.WRITABLE_FNAMES = Clazz.newArray (-1, ["Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "STH", "PHYLIP", "JSON", "Jalview"]);
+Clazz.defineStatics (c$,
+"INVALID_CHARACTERS", "Contains invalid characters");
+c$.SUPPORTED_FORMATS = c$.prototype.SUPPORTED_FORMATS = "Formats currently supported are\n" + jalview.io.AppletFormatAdapter.prettyPrint (jalview.io.AppletFormatAdapter.READABLE_FORMATS);
+});
diff --git a/bin/jalview/io/FastaFile.class b/bin/jalview/io/FastaFile.class
index 8111432..d7fe1ef 100644
Binary files a/bin/jalview/io/FastaFile.class and b/bin/jalview/io/FastaFile.class differ
diff --git a/bin/jalview/io/FastaFile.js b/bin/jalview/io/FastaFile.js
index 38f827f..5dc3155 100644
--- a/bin/jalview/io/FastaFile.js
+++ b/bin/jalview/io/FastaFile.js
@@ -1,94 +1,94 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile"], "jalview.io.FastaFile", ["jalview.datamodel.AlignmentAnnotation", "$.Annotation", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.len = 72;
-this.out = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "FastaFile", jalview.io.AlignFile);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.io.FastaFile, []);
-});
-Clazz.overrideMethod (c$, "parse",
-function () {
-var sb = new StringBuffer ();
-var firstLine = true;
-var line;
-var uline;
-var seq = null;
-var annotation = false;
-while ((uline = this.nextLine ()) != null) {
-line = uline.trim ();
-if (line.length > 0) {
-if (line.charAt (0) == '>') {
-if (line.startsWith (">#_")) {
-if (annotation) {
-this.annotations.addElement (this.makeAnnotation (seq, sb));
-}} else {
-annotation = false;
-}if (!firstLine) {
-seq.setSequence (sb.toString ());
-if (!annotation) {
-this.seqs.addElement (seq);
-}}seq = this.parseId (line.substring (1));
-firstLine = false;
-sb = new StringBuffer ();
-if (line.startsWith (">#_")) {
-annotation = true;
-}} else {
-sb.append (annotation ? uline : line);
-}}}
-if (annotation) {
-this.annotations.addElement (this.makeAnnotation (seq, sb));
-} else if (!firstLine) {
-seq.setSequence (sb.toString ());
-this.seqs.addElement (seq);
-}});
-Clazz.defineMethod (c$, "makeAnnotation",
-($fz = function (seq, sb) {
-var anots = new Array (sb.length ());
-var cb;
-for (var i = 0; i < anots.length; i++) {
-var cn = sb.charAt (i);
-if (cn != ' ') {
-anots[i] = new jalview.datamodel.Annotation ("" + cn, null, ' ', NaN);
-}}
-var aa = new jalview.datamodel.AlignmentAnnotation (seq.getName ().substring (2), seq.getDescription (), anots);
-return aa;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,StringBuffer");
-Clazz.defineMethod (c$, "addAnnotations",
-function (al) {
-this.addProperties (al);
-for (var i = 0; i < this.annotations.size (); i++) {
-var aa = this.annotations.elementAt (i);
-aa.setPadGaps (true, al.getGapCharacter ());
-al.addAnnotation (aa);
-}
-}, "jalview.datamodel.Alignment");
-Clazz.defineMethod (c$, "print",
-function (s) {
-this.out = new StringBuffer ();
-var i = 0;
-while ((i < s.length) && (s[i] != null)) {
-this.out.append (">" + this.printId (s[i]));
-if (s[i].getDescription () != null) {
-this.out.append (" " + s[i].getDescription ());
-}this.out.append (this.newline);
-var nochunks = (Clazz.doubleToInt (s[i].getLength () / this.len)) + 1;
-for (var j = 0; j < nochunks; j++) {
-var start = j * this.len;
-var end = start + this.len;
-if (end < s[i].getLength ()) {
-this.out.append (s[i].getSequenceAsString (start, end) + this.newline);
-} else if (start < s[i].getLength ()) {
-this.out.append (s[i].getSequenceAsString (start, s[i].getLength ()) + this.newline);
-}}
-i++;
-}
-return this.out.toString ();
-}, "~A");
-Clazz.defineMethod (c$, "print",
-function () {
-return this.print (this.getSeqsAsArray ());
-});
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile"], "jalview.io.FastaFile", ["jalview.datamodel.AlignmentAnnotation", "$.Annotation", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.len = 72;
+this.out = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "FastaFile", jalview.io.AlignFile);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.io.FastaFile, []);
+});
+Clazz.overrideMethod (c$, "parse",
+function () {
+var sb = new StringBuffer ();
+var firstLine = true;
+var line;
+var uline;
+var seq = null;
+var annotation = false;
+while ((uline = this.nextLine ()) != null) {
+line = uline.trim ();
+if (line.length > 0) {
+if (line.charAt (0) == '>') {
+if (line.startsWith (">#_")) {
+if (annotation) {
+this.annotations.addElement (this.makeAnnotation (seq, sb));
+}} else {
+annotation = false;
+}if (!firstLine) {
+seq.setSequence (sb.toString ());
+if (!annotation) {
+this.seqs.addElement (seq);
+}}seq = this.parseId (line.substring (1));
+firstLine = false;
+sb = new StringBuffer ();
+if (line.startsWith (">#_")) {
+annotation = true;
+}} else {
+sb.append (annotation ? uline : line);
+}}}
+if (annotation) {
+this.annotations.addElement (this.makeAnnotation (seq, sb));
+} else if (!firstLine) {
+seq.setSequence (sb.toString ());
+this.seqs.addElement (seq);
+}});
+Clazz.defineMethod (c$, "makeAnnotation",
+($fz = function (seq, sb) {
+var anots = new Array (sb.length ());
+var cb;
+for (var i = 0; i < anots.length; i++) {
+var cn = sb.charAt (i);
+if (cn != ' ') {
+anots[i] = new jalview.datamodel.Annotation ("" + cn, null, ' ', NaN);
+}}
+var aa = new jalview.datamodel.AlignmentAnnotation (seq.getName ().substring (2), seq.getDescription (), anots);
+return aa;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceI,StringBuffer");
+Clazz.defineMethod (c$, "addAnnotations",
+function (al) {
+this.addProperties (al);
+for (var i = 0; i < this.annotations.size (); i++) {
+var aa = this.annotations.elementAt (i);
+aa.setPadGaps (true, al.getGapCharacter ());
+al.addAnnotation (aa);
+}
+}, "jalview.datamodel.Alignment");
+Clazz.defineMethod (c$, "print",
+function (s) {
+this.out = new StringBuffer ();
+var i = 0;
+while ((i < s.length) && (s[i] != null)) {
+this.out.append (">" + this.printId (s[i]));
+if (s[i].getDescription () != null) {
+this.out.append (" " + s[i].getDescription ());
+}this.out.append (this.newline);
+var nochunks = (Clazz.doubleToInt (s[i].getLength () / this.len)) + 1;
+for (var j = 0; j < nochunks; j++) {
+var start = j * this.len;
+var end = start + this.len;
+if (end < s[i].getLength ()) {
+this.out.append (s[i].getSequenceAsString (start, end) + this.newline);
+} else if (start < s[i].getLength ()) {
+this.out.append (s[i].getSequenceAsString (start, s[i].getLength ()) + this.newline);
+}}
+i++;
+}
+return this.out.toString ();
+}, "~A");
+Clazz.defineMethod (c$, "print",
+function () {
+return this.print (this.getSeqsAsArray ());
+});
+});
diff --git a/bin/jalview/io/FeaturesFile.class b/bin/jalview/io/FeaturesFile.class
index 1efc2f6..2d37a41 100644
Binary files a/bin/jalview/io/FeaturesFile.class and b/bin/jalview/io/FeaturesFile.class differ
diff --git a/bin/jalview/io/FeaturesFile.js b/bin/jalview/io/FeaturesFile.js
index 7bdc9f9..458787b 100644
--- a/bin/jalview/io/FeaturesFile.js
+++ b/bin/jalview/io/FeaturesFile.js
@@ -1,772 +1,772 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile", "java.lang.Enum", "$.Exception"], "jalview.io.FeaturesFile", ["jalview.analysis.SequenceIdMatcher", "jalview.datamodel.AlignedCodonFrame", "$.SequenceDummy", "$.SequenceFeature", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.Format", "$.MapList", "$.ParseHtmlBodyAndLinks", "java.awt.Color", "java.lang.Float", "$.StringBuffer", "java.util.ArrayList", "$.Arrays", "$.HashMap", "$.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.doGffSource = true;
-this.gffversion = 0;
-if (!Clazz.isClassDefined ("jalview.io.FeaturesFile.InvalidGFF3FieldException")) {
-jalview.io.FeaturesFile.$FeaturesFile$InvalidGFF3FieldException$ ();
-}
-this.lastmatchedAl = null;
-this.matcher = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "FeaturesFile", jalview.io.AlignFile);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.io.FeaturesFile, []);
-});
-Clazz.defineMethod (c$, "parse",
-function (align, colours, removeHTML) {
-return this.parse (align, colours, null, removeHTML, false);
-}, "jalview.datamodel.AlignmentI,java.util.Hashtable,~B");
-Clazz.defineMethod (c$, "parse",
-function (align, colours, removeHTML, relaxedIdMatching) {
-return this.parse (align, colours, null, removeHTML, relaxedIdMatching);
-}, "jalview.datamodel.AlignmentI,java.util.Map,~B,~B");
-Clazz.defineMethod (c$, "parse",
-function (align, colours, featureLink, removeHTML) {
-return this.parse (align, colours, featureLink, removeHTML, false);
-}, "jalview.datamodel.AlignmentI,java.util.Map,java.util.Map,~B");
-Clazz.defineMethod (c$, "parse",
-function (align, colours, featureLink, removeHTML, relaxedIdmatching) {
-var line = null;
-try {
-var seq = null;
-var newseqs = new java.util.ArrayList ();
-var type;
-var desc;
-var token = null;
-var index;
-var start;
-var end;
-var score;
-var st;
-var sf;
-var featureGroup = null;
-var groupLink = null;
-var typeLink = new java.util.Hashtable ();
-var GFFFile = true;
-var gffProps = new java.util.HashMap ();
-while ((line = this.nextLine ()) != null) {
-if (line.startsWith ("#")) {
-if (line.startsWith ("##")) {
-this.processGffPragma (line, gffProps, align, newseqs);
-line = "";
-}continue;
-}st = new java.util.StringTokenizer (line, "\t");
-if (st.countTokens () == 1) {
-if (line.trim ().equalsIgnoreCase ("GFF")) {
-GFFFile = true;
-continue;
-}}if (st.countTokens () > 1 && st.countTokens () < 4) {
-GFFFile = false;
-type = st.nextToken ();
-if (type.equalsIgnoreCase ("startgroup")) {
-featureGroup = st.nextToken ();
-if (st.hasMoreElements ()) {
-groupLink = st.nextToken ();
-featureLink.put (featureGroup, groupLink);
-}} else if (type.equalsIgnoreCase ("endgroup")) {
-st.nextToken ();
-featureGroup = null;
-groupLink = null;
-} else {
-var colour = null;
-var colscheme = st.nextToken ();
-if (colscheme.indexOf ("|") > -1 || colscheme.trim ().equalsIgnoreCase ("label")) {
-var gcol = new java.util.StringTokenizer (colscheme, "|", true);
-var threshtype = -1;
-var min = 1.4E-45;
-var max = 3.4028235E38;
-var threshval = NaN;
-var labelCol = false;
-var mincol = gcol.nextToken ();
-if (mincol === "|") {
-System.err.println ("Expected either 'label' or a colour specification in the line: " + line);
-continue;
-}var maxcol = null;
-if (mincol.toLowerCase ().indexOf ("label") == 0) {
-labelCol = true;
-mincol = (gcol.hasMoreTokens () ? gcol.nextToken () : null);
-mincol = (gcol.hasMoreTokens () ? gcol.nextToken () : null);
-}var abso = null;
-var minval;
-var maxval;
-if (mincol != null) {
-if (mincol.equals ("|")) {
-mincol = "";
-} else {
-gcol.nextToken ();
-}maxcol = gcol.nextToken ();
-if (maxcol.equals ("|")) {
-maxcol = "";
-} else {
-gcol.nextToken ();
-}abso = gcol.nextToken ();
-gcol.nextToken ();
-if (abso.toLowerCase ().indexOf ("abso") != 0) {
-minval = abso;
-abso = null;
-} else {
-minval = gcol.nextToken ();
-gcol.nextToken ();
-}maxval = gcol.nextToken ();
-if (gcol.hasMoreTokens ()) {
-gcol.nextToken ();
-}try {
-if (minval.length > 0) {
-min = new Float (minval).floatValue ();
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Couldn't parse the minimum value for graduated colour for type (" + colscheme + ") - did you misspell 'auto' for the optional automatic colour switch ?");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-try {
-if (maxval.length > 0) {
-max = new Float (maxval).floatValue ();
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Couldn't parse the maximum value for graduated colour for type (" + colscheme + ")");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-} else {
-mincol = "FFFFFF";
-maxcol = "000000";
-}try {
-colour = new jalview.schemes.GraduatedColor ( new jalview.schemes.UserColourScheme (mincol).findColour ('A'), new jalview.schemes.UserColourScheme (maxcol).findColour ('A'), min, max);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Couldn't parse the graduated colour scheme (" + colscheme + ")");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-if (colour != null) {
-(colour).setColourByLabel (labelCol);
-(colour).setAutoScaled (abso == null);
-var ttype = null;
-var tval = null;
-if (gcol.hasMoreTokens ()) {
-ttype = gcol.nextToken ();
-if (ttype.toLowerCase ().startsWith ("below")) {
-(colour).setThreshType (0);
-} else if (ttype.toLowerCase ().startsWith ("above")) {
-(colour).setThreshType (1);
-} else {
-(colour).setThreshType (-1);
-if (!ttype.toLowerCase ().startsWith ("no")) {
-System.err.println ("Ignoring unrecognised threshold type : " + ttype);
-}}}if ((colour).getThreshType () != -1) {
-try {
-gcol.nextToken ();
-tval = gcol.nextToken ();
-(colour).setThresh ( new Float (tval).floatValue ());
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Couldn't parse threshold value as a float: (" + tval + ")");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-}if (gcol.hasMoreTokens ()) {
-System.err.println ("Ignoring additional tokens in parameters in graduated colour specification\n");
-while (gcol.hasMoreTokens ()) {
-System.err.println ("|" + gcol.nextToken ());
-}
-System.err.println ("\n");
-}}} else {
-var ucs = new jalview.schemes.UserColourScheme (colscheme);
-colour = ucs.findColour ('A');
-}if (colour != null) {
-colours.put (type, colour);
-}if (st.hasMoreElements ()) {
-var link = st.nextToken ();
-typeLink.put (type, link);
-if (featureLink == null) {
-featureLink = new java.util.Hashtable ();
-}featureLink.put (type, link);
-}}continue;
-}var seqId = "";
-while (st.hasMoreElements ()) {
-if (GFFFile) {
-seqId = token = st.nextToken ();
-seq = this.findName (align, seqId, relaxedIdmatching, newseqs);
-if (seq != null) {
-desc = st.nextToken ();
-var group = null;
-if (this.doGffSource && desc.indexOf (' ') == -1) {
-group = String.instantialize (desc);
-}type = st.nextToken ();
-try {
-var stt = st.nextToken ();
-if (stt.length == 0 || stt.equals ("-")) {
-start = 0;
-} else {
-start = Integer.parseInt (stt);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-start = 0;
-} else {
-throw ex;
-}
-}
-try {
-var stt = st.nextToken ();
-if (stt.length == 0 || stt.equals ("-")) {
-end = 0;
-} else {
-end = Integer.parseInt (stt);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-end = 0;
-} else {
-throw ex;
-}
-}
-if (end == 0) {
-start = 0;
-}try {
-score = new Float (st.nextToken ()).floatValue ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-score = 0;
-} else {
-throw ex;
-}
-}
-sf = new jalview.datamodel.SequenceFeature (type, desc, start, end, score, group);
-try {
-sf.setValue ("STRAND", st.nextToken ());
-sf.setValue ("FRAME", st.nextToken ());
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-if (st.hasMoreTokens ()) {
-var attributes = new StringBuffer ();
-var sep = false;
-while (st.hasMoreTokens ()) {
-attributes.append ((sep ? "\t" : "") + st.nextElement ());
-sep = true;
-}
-sf.setValue ("ATTRIBUTES", attributes.toString ());
-}if (this.processOrAddSeqFeature (align, newseqs, seq, sf, GFFFile, relaxedIdmatching)) {
-while ((seq = align.findName (seq, seqId, true)) != null) {
-seq.addSequenceFeature ( new jalview.datamodel.SequenceFeature (sf));
-}
-}break;
-}}if (GFFFile && seq == null) {
-desc = token;
-} else {
-desc = st.nextToken ();
-}if (!st.hasMoreTokens ()) {
-System.err.println ("DEBUG: Run out of tokens when trying to identify the destination for the feature.. giving up.");
-return false;
-}token = st.nextToken ();
-if (!token.equals ("ID_NOT_SPECIFIED")) {
-seq = this.findName (align, seqId = token, relaxedIdmatching, null);
-st.nextToken ();
-} else {
-seqId = null;
-try {
-index = Integer.parseInt (st.nextToken ());
-seq = align.getSequenceAt (index);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-seq = null;
-} else {
-throw ex;
-}
-}
-}if (seq == null) {
-System.out.println ("Sequence not found: " + line);
-break;
-}start = Integer.parseInt (st.nextToken ());
-end = Integer.parseInt (st.nextToken ());
-type = st.nextToken ();
-if (!colours.containsKey (type)) {
-var ucs = new jalview.schemes.UserColourScheme (type);
-colours.put (type, ucs.findColour ('A'));
-}sf = new jalview.datamodel.SequenceFeature (type, desc, "", start, end, featureGroup);
-if (st.hasMoreTokens ()) {
-try {
-score = new Float (st.nextToken ()).floatValue ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-score = 0;
-} else {
-throw ex;
-}
-}
-sf.setScore (score);
-}if (groupLink != null && removeHTML) {
-sf.addLink (groupLink);
-sf.description += "%LINK%";
-}if (typeLink.containsKey (type) && removeHTML) {
-sf.addLink (typeLink.get (type).toString ());
-sf.description += "%LINK%";
-}this.parseDescriptionHTML (sf, removeHTML);
-seq.addSequenceFeature (sf);
-while (seqId != null && (seq = align.findName (seq, seqId, false)) != null) {
-seq.addSequenceFeature ( new jalview.datamodel.SequenceFeature (sf));
-}
-GFFFile = false;
-}
-}
-this.resetMatcher ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-this.warningMessage = ((this.warningMessage == null) ? "" : this.warningMessage) + "Parsing error at\n" + line;
-System.out.println ("Error parsing feature file: " + ex + "\n" + line);
-ex.printStackTrace (System.err);
-this.resetMatcher ();
-return false;
-} else {
-throw ex;
-}
-}
-return true;
-}, "jalview.datamodel.AlignmentI,java.util.Map,java.util.Map,~B,~B");
-Clazz.defineMethod (c$, "processGffPragma",
-($fz = function (line, gffProps, align, newseqs) {
-var spacepos = line.indexOf (' ');
-var pragma = spacepos == -1 ? line.substring (2).trim () : line.substring (2, spacepos);
-var gffpragma = jalview.io.FeaturesFile.GFFPRAGMA.get (pragma.toLowerCase ());
-if (gffpragma == null) {
-return;
-}switch (gffpragma) {
-case jalview.io.FeaturesFile.GffPragmas.gff_version:
-try {
-this.gffversion = Integer.parseInt (line.substring (spacepos + 1));
-} finally {
-}
-break;
-case jalview.io.FeaturesFile.GffPragmas.feature_ontology:
-break;
-case jalview.io.FeaturesFile.GffPragmas.attribute_ontology:
-break;
-case jalview.io.FeaturesFile.GffPragmas.source_ontology:
-break;
-case jalview.io.FeaturesFile.GffPragmas.species_build:
-break;
-case jalview.io.FeaturesFile.GffPragmas.hash:
-break;
-case jalview.io.FeaturesFile.GffPragmas.fasta:
-this.process_as_fasta (align, newseqs);
-break;
-default:
-System.err.println ("Ignoring unknown pragma:\n" + line);
-}
-}, $fz.isPrivate = true, $fz), "~S,java.util.Map,jalview.datamodel.AlignmentI,java.util.ArrayList");
-Clazz.defineMethod (c$, "process_as_fasta",
-($fz = function (align, newseqs) {
-try {
-this.mark ();
-} catch (q) {
-if (Clazz.exceptionOf (q, java.io.IOException)) {
-} else {
-throw q;
-}
-}
-var parser = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", []);
-var includedseqs = parser.getSeqs ();
-var smatcher = new jalview.analysis.SequenceIdMatcher (newseqs);
-for (var p = 0, pSize = includedseqs.size (); p < pSize; p++) {
-var dummyseq = smatcher.findIdMatch (includedseqs.get (p));
-if (dummyseq != null) {
-var mseq = includedseqs.get (p);
-if (Clazz.instanceOf (dummyseq, jalview.datamodel.SequenceDummy)) {
-(dummyseq).become (mseq);
-includedseqs.set (p, dummyseq);
-}}}
-for (var seq, $seq = includedseqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-align.addSequence (seq);
-}
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");
-Clazz.defineMethod (c$, "processOrAddSeqFeature",
-function (align, newseqs, seq, sf, gFFFile, relaxedIdMatching) {
-var attr = sf.getValue ("ATTRIBUTES");
-var add = true;
-if (gFFFile && attr != null) {
-var nattr = 8;
-for (var attset, $attset = 0, $$attset = attr.$plit ("\t"); $attset < $$attset.length && ((attset = $$attset[$attset]) || true); $attset++) {
-if (attset == null || attset.trim ().length == 0) {
-continue;
-}nattr++;
-var set = new java.util.HashMap ();
-for (var pair, $pair = 0, $$pair = attset.trim ().$plit (";"); $pair < $$pair.length && ((pair = $$pair[$pair]) || true); $pair++) {
-pair = pair.trim ();
-if (pair.length == 0) {
-continue;
-}var eqpos = pair.indexOf ('=');
-var sppos = pair.indexOf (' ');
-var key = null;
-var value = null;
-if (sppos > -1 && (eqpos == -1 || sppos < eqpos)) {
-key = pair.substring (0, sppos);
-value = pair.substring (sppos + 1);
-} else {
-if (eqpos > -1 && (sppos == -1 || eqpos < sppos)) {
-key = pair.substring (0, eqpos);
-value = pair.substring (eqpos + 1);
-} else {
-key = pair;
-}}if (key != null) {
-var vals = set.get (key);
-if (vals == null) {
-vals = new java.util.ArrayList ();
-set.put (key, vals);
-}if (value != null) {
-vals.add (value.trim ());
-}}}
-try {
-add = new Boolean (add & this.processGffKey (set, nattr, seq, sf, align, newseqs, relaxedIdMatching)).valueOf ();
-} catch (ivfe) {
-if (Clazz.exceptionOf (ivfe, jalview.io.FeaturesFile.InvalidGFF3FieldException)) {
-System.err.println (ivfe);
-} else {
-throw ivfe;
-}
-}
-}
-}if (add) {
-seq.addSequenceFeature (sf);
-}return add;
-}, "jalview.datamodel.AlignmentI,java.util.List,jalview.datamodel.SequenceI,jalview.datamodel.SequenceFeature,~B,~B");
-Clazz.defineMethod (c$, "processGffKey",
-function (set, nattr, seq, sf, align, newseqs, relaxedIdMatching) {
-var attr;
-if (sf.getType ().equals ("similarity")) {
-var strand = sf.getStrand ();
-var querySeq = this.findNames (align, newseqs, relaxedIdMatching, set.get (attr = "Query"));
-if (querySeq == null || querySeq.size () != 1) {
-throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Expecting exactly one sequence in Query field (got " + set.get (attr) + ")");
-}if (set.containsKey (attr = "Align")) {
-var alco = new jalview.datamodel.AlignedCodonFrame ();
-var codonmapping = this.constructCodonMappingFromAlign (set, attr, strand);
-alco.addMap (seq, querySeq.get (0), codonmapping);
-align.addCodonFrame (alco);
-return false;
-}}return true;
-}, "java.util.Map,~N,jalview.datamodel.SequenceI,jalview.datamodel.SequenceFeature,jalview.datamodel.AlignmentI,java.util.List,~B");
-Clazz.defineMethod (c$, "constructCodonMappingFromAlign",
-($fz = function (set, attr, strand) {
-if (strand == 0) {
-throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Invalid strand for a codon mapping (cannot be 0)");
-}var fromrange = new java.util.ArrayList ();
-var torange = new java.util.ArrayList ();
-var lastppos = 0;
-var lastpframe = 0;
-for (var range, $range = set.get (attr).iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
-var ints = new java.util.ArrayList ();
-var st = new java.util.StringTokenizer (range, " ");
-while (st.hasMoreTokens ()) {
-var num = st.nextToken ();
-try {
-ints.add ( new Integer (num));
-} catch (nfe) {
-if (Clazz.exceptionOf (nfe, NumberFormatException)) {
-throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Invalid number in field " + num);
-} else {
-throw nfe;
-}
-}
-}
-if (ints.size () != 3) {
-throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Invalid number of fields for this attribute (" + ints.size () + ")");
-}fromrange.add ( new Integer (ints.get (0).intValue ()));
-fromrange.add ( new Integer (ints.get (0).intValue () + strand * ints.get (2).intValue ()));
-if (ints.get (1).equals (new Integer (lastppos)) && lastpframe > 0) {
-lastppos += (ints.get (2)).intValue () / 3;
-lastpframe = (ints.get (2)).intValue () % 3;
-torange.set (torange.size () - 1, new Integer (lastppos));
-} else {
-torange.add (ints.get (1));
-lastppos = (ints.get (1)).intValue () + (ints.get (2)).intValue () / 3;
-lastpframe = (ints.get (2)).intValue () % 3;
-torange.add ( new Integer (lastppos));
-}}
-if (fromrange.size () % 2 == 1) {
-throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Couldn't parse the DNA alignment range correctly");
-}if (torange.size () % 2 == 1) {
-throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Couldn't parse the protein alignment range correctly");
-}var frommap = Clazz.newIntArray (fromrange.size (), 0);
-var tomap = Clazz.newIntArray (torange.size (), 0);
-var p = 0;
-for (var ip, $ip = fromrange.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
-frommap[p++] = ip.intValue ();
-}
-p = 0;
-for (var ip, $ip = torange.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
-tomap[p++] = ip.intValue ();
-}
-return new jalview.util.MapList (frommap, tomap, 3, 1);
-}, $fz.isPrivate = true, $fz), "java.util.Map,~S,~N");
-Clazz.defineMethod (c$, "findNames",
-($fz = function (align, newseqs, relaxedIdMatching, list) {
-var found = new java.util.ArrayList ();
-for (var seqId, $seqId = list.iterator (); $seqId.hasNext () && ((seqId = $seqId.next ()) || true);) {
-var seq = this.findName (align, seqId, relaxedIdMatching, newseqs);
-if (seq != null) {
-found.add (seq);
-}}
-return found;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List,~B,java.util.List");
-Clazz.defineMethod (c$, "resetMatcher",
-($fz = function () {
-this.lastmatchedAl = null;
-this.matcher = null;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "findName",
-($fz = function (align, seqId, relaxedIdMatching, newseqs) {
-var match = null;
-if (relaxedIdMatching) {
-if (this.lastmatchedAl !== align) {
-this.matcher = new jalview.analysis.SequenceIdMatcher ((this.lastmatchedAl = align).getSequencesArray ());
-if (newseqs != null) {
-this.matcher.addAll (newseqs);
-}}match = this.matcher.findIdMatch (seqId);
-} else {
-match = align.findName (seqId, true);
-if (match == null && newseqs != null) {
-for (var m, $m = newseqs.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
-if (seqId.equals (m.getName ())) {
-return m;
-}}
-}}if (match == null && newseqs != null) {
-match = new jalview.datamodel.SequenceDummy (seqId);
-if (relaxedIdMatching) {
-this.matcher.addAll (java.util.Arrays.asList ( Clazz.newArray (-1, [match])));
-}newseqs.add (match);
-}return match;
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~S,~B,java.util.List");
-Clazz.defineMethod (c$, "parseDescriptionHTML",
-function (sf, removeHTML) {
-if (sf.getDescription () == null) {
-return;
-}var parsed = new jalview.util.ParseHtmlBodyAndLinks (sf.getDescription (), removeHTML, this.newline);
-sf.description = (removeHTML) ? parsed.getNonHtmlContent () : sf.description;
-for (var link, $link = parsed.getLinks ().iterator (); $link.hasNext () && ((link = $link.next ()) || true);) {
-sf.addLink (link);
-}
-}, "jalview.datamodel.SequenceFeature,~B");
-Clazz.defineMethod (c$, "printJalviewFormat",
-function (seqs, visible) {
-return this.printJalviewFormat (seqs, visible, true, true);
-}, "~A,java.util.Map");
-Clazz.defineMethod (c$, "printJalviewFormat",
-function (seqs, visible, visOnly, nonpos) {
-var out = new StringBuffer ();
-var next;
-var featuresGen = false;
-if (visOnly && !nonpos && (visible == null || visible.size () < 1)) {
-return "No Features Visible";
-}if (visible != null && visOnly) {
-var en = visible.keySet ().iterator ();
-var type;
-var color;
-while (en.hasNext ()) {
-type = en.next ().toString ();
-if (Clazz.instanceOf (visible.get (type), jalview.schemes.GraduatedColor)) {
-var gc = visible.get (type);
-color = (gc.isColourByLabel () ? "label|" : "") + jalview.util.Format.getHexString (gc.getMinColor ()) + "|" + jalview.util.Format.getHexString (gc.getMaxColor ()) + (gc.isAutoScale () ? "|" : "|abso|") + gc.getMin () + "|" + gc.getMax () + "|";
-if (gc.getThreshType () != -1) {
-if (gc.getThreshType () == 0) {
-color += "below";
-} else {
-if (gc.getThreshType () != 1) {
-System.err.println ("WARNING: Unsupported threshold type (" + gc.getThreshType () + ") : Assuming 'above'");
-}color += "above";
-}color += "|" + gc.getThresh ();
-} else {
-color += "none";
-}} else if (Clazz.instanceOf (visible.get (type), java.awt.Color)) {
-color = jalview.util.Format.getHexString (visible.get (type));
-} else {
-color = jalview.util.Format.getHexString ( new java.awt.Color (Integer.parseInt (visible.get (type).toString ())));
-}out.append (type);
-out.append ("\t");
-out.append (color);
-out.append (this.newline);
-}
-}var groups = new java.util.Vector ();
-var groupIndex = 0;
-var isnonpos = false;
-for (var i = 0; i < seqs.length; i++) {
-next = seqs[i].getSequenceFeatures ();
-if (next != null) {
-for (var j = 0; j < next.length; j++) {
-isnonpos = next[j].begin == 0 && next[j].end == 0;
-if ((!nonpos && isnonpos) || (!isnonpos && visOnly && !visible.containsKey (next[j].type))) {
-continue;
-}if (next[j].featureGroup != null && !groups.contains (next[j].featureGroup)) {
-groups.addElement (next[j].featureGroup);
-}}
-}}
-var group = null;
-do {
-if (groups.size () > 0 && groupIndex < groups.size ()) {
-group = groups.elementAt (groupIndex).toString ();
-out.append (this.newline);
-out.append ("STARTGROUP\t");
-out.append (group);
-out.append (this.newline);
-} else {
-group = null;
-}for (var i = 0; i < seqs.length; i++) {
-next = seqs[i].getSequenceFeatures ();
-if (next != null) {
-for (var j = 0; j < next.length; j++) {
-isnonpos = next[j].begin == 0 && next[j].end == 0;
-if ((!nonpos && isnonpos) || (!isnonpos && visOnly && !visible.containsKey (next[j].type))) {
-continue;
-}if (group != null && (next[j].featureGroup == null || !next[j].featureGroup.equals (group))) {
-continue;
-}if (group == null && next[j].featureGroup != null) {
-continue;
-}featuresGen = true;
-if (next[j].description == null || next[j].description.equals ("")) {
-out.append (next[j].type + "\t");
-} else {
-if (next[j].links != null && next[j].getDescription ().indexOf ("") == -1) {
-out.append ("");
-}out.append (next[j].description + " ");
-if (next[j].links != null) {
-for (var l = 0; l < next[j].links.size (); l++) {
-var label = next[j].links.elementAt (l).toString ();
-var href = label.substring (label.indexOf ("|") + 1);
-label = label.substring (0, label.indexOf ("|"));
-if (next[j].description.indexOf (href) == -1) {
-out.append ("" + label + " ");
-}}
-if (next[j].getDescription ().indexOf ("") == -1) {
-out.append ("");
-}}out.append ("\t");
-}out.append (seqs[i].getName ());
-out.append ("\t-1\t");
-out.append (next[j].begin);
-out.append ("\t");
-out.append (next[j].end);
-out.append ("\t");
-out.append (next[j].type);
-if (!Float.isNaN (next[j].score)) {
-out.append ("\t");
-out.append (next[j].score);
-}out.append (this.newline);
-}
-}}
-if (group != null) {
-out.append ("ENDGROUP\t");
-out.append (group);
-out.append (this.newline);
-groupIndex++;
-} else {
-break;
-}} while (groupIndex < groups.size () + 1);
-if (!featuresGen) {
-return "No Features Visible";
-}return out.toString ();
-}, "~A,java.util.Map,~B,~B");
-Clazz.defineMethod (c$, "printGFFFormat",
-function (seqs, visible) {
-return this.printGFFFormat (seqs, visible, true, true);
-}, "~A,java.util.Map");
-Clazz.defineMethod (c$, "printGFFFormat",
-function (seqs, visible, visOnly, nonpos) {
-var out = new StringBuffer ();
-var next;
-var source;
-var isnonpos;
-for (var i = 0; i < seqs.length; i++) {
-if (seqs[i].getSequenceFeatures () != null) {
-next = seqs[i].getSequenceFeatures ();
-for (var j = 0; j < next.length; j++) {
-isnonpos = next[j].begin == 0 && next[j].end == 0;
-if ((!nonpos && isnonpos) || (!isnonpos && visOnly && !visible.containsKey (next[j].type))) {
-continue;
-}source = next[j].featureGroup;
-if (source == null) {
-source = next[j].getDescription ();
-}out.append (seqs[i].getName ());
-out.append ("\t");
-out.append (source);
-out.append ("\t");
-out.append (next[j].type);
-out.append ("\t");
-out.append (next[j].begin);
-out.append ("\t");
-out.append (next[j].end);
-out.append ("\t");
-out.append (next[j].score);
-out.append ("\t");
-if (next[j].getValue ("STRAND") != null) {
-out.append (next[j].getValue ("STRAND"));
-out.append ("\t");
-} else {
-out.append (".\t");
-}if (next[j].getValue ("FRAME") != null) {
-out.append (next[j].getValue ("FRAME"));
-} else {
-out.append (".");
-}if (next[j].getValue ("ATTRIBUTES") != null) {
-out.append (next[j].getValue ("ATTRIBUTES"));
-}out.append (this.newline);
-}
-}}
-return out.toString ();
-}, "~A,java.util.Map,~B,~B");
-Clazz.defineMethod (c$, "parse",
-function () {
-});
-Clazz.overrideMethod (c$, "print",
-function () {
-return "USE printGFFFormat() or printJalviewFormat()";
-});
-c$.$FeaturesFile$InvalidGFF3FieldException$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.field = null;
-this.value = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io.FeaturesFile, "InvalidGFF3FieldException", Exception);
-Clazz.makeConstructor (c$,
-function (a, b, c) {
-Clazz.superConstructor (this, jalview.io.FeaturesFile.InvalidGFF3FieldException, [c + " (Field was " + a + " and value was " + b.get (a).toString ()]);
-this.field = a;
-this.value = b.get (a).toString ();
-}, "~S,java.util.Map,~S");
-c$ = Clazz.p0p ();
-};
-Clazz.pu$h ();
-c$ = Clazz.declareType (jalview.io.FeaturesFile, "GffPragmas", Enum);
-Clazz.defineEnumConstant (c$, "gff_version", 0, []);
-Clazz.defineEnumConstant (c$, "sequence_region", 1, []);
-Clazz.defineEnumConstant (c$, "feature_ontology", 2, []);
-Clazz.defineEnumConstant (c$, "attribute_ontology", 3, []);
-Clazz.defineEnumConstant (c$, "source_ontology", 4, []);
-Clazz.defineEnumConstant (c$, "species_build", 5, []);
-Clazz.defineEnumConstant (c$, "fasta", 6, []);
-Clazz.defineEnumConstant (c$, "hash", 7, []);
-c$ = Clazz.p0p ();
-Clazz.defineStatics (c$,
-"GFFPRAGMA", null);
-{
-jalview.io.FeaturesFile.GFFPRAGMA = new java.util.HashMap ();
-jalview.io.FeaturesFile.GFFPRAGMA.put ("sequence-region", jalview.io.FeaturesFile.GffPragmas.sequence_region);
-jalview.io.FeaturesFile.GFFPRAGMA.put ("feature-ontology", jalview.io.FeaturesFile.GffPragmas.feature_ontology);
-jalview.io.FeaturesFile.GFFPRAGMA.put ("#", jalview.io.FeaturesFile.GffPragmas.hash);
-jalview.io.FeaturesFile.GFFPRAGMA.put ("fasta", jalview.io.FeaturesFile.GffPragmas.fasta);
-jalview.io.FeaturesFile.GFFPRAGMA.put ("species-build", jalview.io.FeaturesFile.GffPragmas.species_build);
-jalview.io.FeaturesFile.GFFPRAGMA.put ("source-ontology", jalview.io.FeaturesFile.GffPragmas.source_ontology);
-jalview.io.FeaturesFile.GFFPRAGMA.put ("attribute-ontology", jalview.io.FeaturesFile.GffPragmas.attribute_ontology);
-}});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile", "java.lang.Enum", "$.Exception"], "jalview.io.FeaturesFile", ["jalview.analysis.SequenceIdMatcher", "jalview.datamodel.AlignedCodonFrame", "$.SequenceDummy", "$.SequenceFeature", "jalview.jsdev.GenericFileAdapter", "jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.Format", "$.MapList", "$.ParseHtmlBodyAndLinks", "java.awt.Color", "java.lang.Float", "$.StringBuffer", "java.util.ArrayList", "$.Arrays", "$.HashMap", "$.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.doGffSource = true;
+this.gffversion = 0;
+if (!Clazz.isClassDefined ("jalview.io.FeaturesFile.InvalidGFF3FieldException")) {
+jalview.io.FeaturesFile.$FeaturesFile$InvalidGFF3FieldException$ ();
+}
+this.lastmatchedAl = null;
+this.matcher = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "FeaturesFile", jalview.io.AlignFile);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.io.FeaturesFile, []);
+});
+Clazz.defineMethod (c$, "parse",
+function (align, colours, removeHTML) {
+return this.parse (align, colours, null, removeHTML, false);
+}, "jalview.datamodel.AlignmentI,java.util.Hashtable,~B");
+Clazz.defineMethod (c$, "parse",
+function (align, colours, removeHTML, relaxedIdMatching) {
+return this.parse (align, colours, null, removeHTML, relaxedIdMatching);
+}, "jalview.datamodel.AlignmentI,java.util.Map,~B,~B");
+Clazz.defineMethod (c$, "parse",
+function (align, colours, featureLink, removeHTML) {
+return this.parse (align, colours, featureLink, removeHTML, false);
+}, "jalview.datamodel.AlignmentI,java.util.Map,java.util.Map,~B");
+Clazz.defineMethod (c$, "parse",
+function (align, colours, featureLink, removeHTML, relaxedIdmatching) {
+var line = null;
+try {
+var seq = null;
+var newseqs = new java.util.ArrayList ();
+var type;
+var desc;
+var token = null;
+var index;
+var start;
+var end;
+var score;
+var st;
+var sf;
+var featureGroup = null;
+var groupLink = null;
+var typeLink = new java.util.Hashtable ();
+var GFFFile = true;
+var gffProps = new java.util.HashMap ();
+while ((line = this.nextLine ()) != null) {
+if (line.startsWith ("#")) {
+if (line.startsWith ("##")) {
+this.processGffPragma (line, gffProps, align, newseqs);
+line = "";
+}continue;
+}st = new java.util.StringTokenizer (line, "\t");
+if (st.countTokens () == 1) {
+if (line.trim ().equalsIgnoreCase ("GFF")) {
+GFFFile = true;
+continue;
+}}if (st.countTokens () > 1 && st.countTokens () < 4) {
+GFFFile = false;
+type = st.nextToken ();
+if (type.equalsIgnoreCase ("startgroup")) {
+featureGroup = st.nextToken ();
+if (st.hasMoreElements ()) {
+groupLink = st.nextToken ();
+featureLink.put (featureGroup, groupLink);
+}} else if (type.equalsIgnoreCase ("endgroup")) {
+st.nextToken ();
+featureGroup = null;
+groupLink = null;
+} else {
+var colour = null;
+var colscheme = st.nextToken ();
+if (colscheme.indexOf ("|") > -1 || colscheme.trim ().equalsIgnoreCase ("label")) {
+var gcol = new java.util.StringTokenizer (colscheme, "|", true);
+var threshtype = -1;
+var min = 1.4E-45;
+var max = 3.4028235E38;
+var threshval = NaN;
+var labelCol = false;
+var mincol = gcol.nextToken ();
+if (mincol === "|") {
+System.err.println ("Expected either 'label' or a colour specification in the line: " + line);
+continue;
+}var maxcol = null;
+if (mincol.toLowerCase ().indexOf ("label") == 0) {
+labelCol = true;
+mincol = (gcol.hasMoreTokens () ? gcol.nextToken () : null);
+mincol = (gcol.hasMoreTokens () ? gcol.nextToken () : null);
+}var abso = null;
+var minval;
+var maxval;
+if (mincol != null) {
+if (mincol.equals ("|")) {
+mincol = "";
+} else {
+gcol.nextToken ();
+}maxcol = gcol.nextToken ();
+if (maxcol.equals ("|")) {
+maxcol = "";
+} else {
+gcol.nextToken ();
+}abso = gcol.nextToken ();
+gcol.nextToken ();
+if (abso.toLowerCase ().indexOf ("abso") != 0) {
+minval = abso;
+abso = null;
+} else {
+minval = gcol.nextToken ();
+gcol.nextToken ();
+}maxval = gcol.nextToken ();
+if (gcol.hasMoreTokens ()) {
+gcol.nextToken ();
+}try {
+if (minval.length > 0) {
+min = new Float (minval).floatValue ();
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Couldn't parse the minimum value for graduated colour for type (" + colscheme + ") - did you misspell 'auto' for the optional automatic colour switch ?");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+try {
+if (maxval.length > 0) {
+max = new Float (maxval).floatValue ();
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Couldn't parse the maximum value for graduated colour for type (" + colscheme + ")");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+} else {
+mincol = "FFFFFF";
+maxcol = "000000";
+}try {
+colour = new jalview.schemes.GraduatedColor ( new jalview.schemes.UserColourScheme (mincol).findColour ('A'), new jalview.schemes.UserColourScheme (maxcol).findColour ('A'), min, max);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Couldn't parse the graduated colour scheme (" + colscheme + ")");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+if (colour != null) {
+(colour).setColourByLabel (labelCol);
+(colour).setAutoScaled (abso == null);
+var ttype = null;
+var tval = null;
+if (gcol.hasMoreTokens ()) {
+ttype = gcol.nextToken ();
+if (ttype.toLowerCase ().startsWith ("below")) {
+(colour).setThreshType (0);
+} else if (ttype.toLowerCase ().startsWith ("above")) {
+(colour).setThreshType (1);
+} else {
+(colour).setThreshType (-1);
+if (!ttype.toLowerCase ().startsWith ("no")) {
+System.err.println ("Ignoring unrecognised threshold type : " + ttype);
+}}}if ((colour).getThreshType () != -1) {
+try {
+gcol.nextToken ();
+tval = gcol.nextToken ();
+(colour).setThresh ( new Float (tval).floatValue ());
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Couldn't parse threshold value as a float: (" + tval + ")");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+}if (gcol.hasMoreTokens ()) {
+System.err.println ("Ignoring additional tokens in parameters in graduated colour specification\n");
+while (gcol.hasMoreTokens ()) {
+System.err.println ("|" + gcol.nextToken ());
+}
+System.err.println ("\n");
+}}} else {
+var ucs = new jalview.schemes.UserColourScheme (colscheme);
+colour = ucs.findColour ('A');
+}if (colour != null) {
+colours.put (type, colour);
+}if (st.hasMoreElements ()) {
+var link = st.nextToken ();
+typeLink.put (type, link);
+if (featureLink == null) {
+featureLink = new java.util.Hashtable ();
+}featureLink.put (type, link);
+}}continue;
+}var seqId = "";
+while (st.hasMoreElements ()) {
+if (GFFFile) {
+seqId = token = st.nextToken ();
+seq = this.findName (align, seqId, relaxedIdmatching, newseqs);
+if (seq != null) {
+desc = st.nextToken ();
+var group = null;
+if (this.doGffSource && desc.indexOf (' ') == -1) {
+group = String.instantialize (desc);
+}type = st.nextToken ();
+try {
+var stt = st.nextToken ();
+if (stt.length == 0 || stt.equals ("-")) {
+start = 0;
+} else {
+start = Integer.parseInt (stt);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+start = 0;
+} else {
+throw ex;
+}
+}
+try {
+var stt = st.nextToken ();
+if (stt.length == 0 || stt.equals ("-")) {
+end = 0;
+} else {
+end = Integer.parseInt (stt);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+end = 0;
+} else {
+throw ex;
+}
+}
+if (end == 0) {
+start = 0;
+}try {
+score = new Float (st.nextToken ()).floatValue ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+score = 0;
+} else {
+throw ex;
+}
+}
+sf = new jalview.datamodel.SequenceFeature (type, desc, start, end, score, group);
+try {
+sf.setValue ("STRAND", st.nextToken ());
+sf.setValue ("FRAME", st.nextToken ());
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+if (st.hasMoreTokens ()) {
+var attributes = new StringBuffer ();
+var sep = false;
+while (st.hasMoreTokens ()) {
+attributes.append ((sep ? "\t" : "") + st.nextElement ());
+sep = true;
+}
+sf.setValue ("ATTRIBUTES", attributes.toString ());
+}if (this.processOrAddSeqFeature (align, newseqs, seq, sf, GFFFile, relaxedIdmatching)) {
+while ((seq = align.findName (seq, seqId, true)) != null) {
+seq.addSequenceFeature ( new jalview.datamodel.SequenceFeature (sf));
+}
+}break;
+}}if (GFFFile && seq == null) {
+desc = token;
+} else {
+desc = st.nextToken ();
+}if (!st.hasMoreTokens ()) {
+System.err.println ("DEBUG: Run out of tokens when trying to identify the destination for the feature.. giving up.");
+return false;
+}token = st.nextToken ();
+if (!token.equals ("ID_NOT_SPECIFIED")) {
+seq = this.findName (align, seqId = token, relaxedIdmatching, null);
+st.nextToken ();
+} else {
+seqId = null;
+try {
+index = Integer.parseInt (st.nextToken ());
+seq = align.getSequenceAt (index);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+seq = null;
+} else {
+throw ex;
+}
+}
+}if (seq == null) {
+System.out.println ("Sequence not found: " + line);
+break;
+}start = Integer.parseInt (st.nextToken ());
+end = Integer.parseInt (st.nextToken ());
+type = st.nextToken ();
+if (!colours.containsKey (type)) {
+var ucs = new jalview.schemes.UserColourScheme (type);
+colours.put (type, ucs.findColour ('A'));
+}sf = new jalview.datamodel.SequenceFeature (type, desc, "", start, end, featureGroup);
+if (st.hasMoreTokens ()) {
+try {
+score = new Float (st.nextToken ()).floatValue ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+score = 0;
+} else {
+throw ex;
+}
+}
+sf.setScore (score);
+}if (groupLink != null && removeHTML) {
+sf.addLink (groupLink);
+sf.description += "%LINK%";
+}if (typeLink.containsKey (type) && removeHTML) {
+sf.addLink (typeLink.get (type).toString ());
+sf.description += "%LINK%";
+}this.parseDescriptionHTML (sf, removeHTML);
+seq.addSequenceFeature (sf);
+while (seqId != null && (seq = align.findName (seq, seqId, false)) != null) {
+seq.addSequenceFeature ( new jalview.datamodel.SequenceFeature (sf));
+}
+GFFFile = false;
+}
+}
+this.resetMatcher ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+this.warningMessage = ((this.warningMessage == null) ? "" : this.warningMessage) + "Parsing error at\n" + line;
+System.out.println ("Error parsing feature file: " + ex + "\n" + line);
+ex.printStackTrace (System.err);
+this.resetMatcher ();
+return false;
+} else {
+throw ex;
+}
+}
+return true;
+}, "jalview.datamodel.AlignmentI,java.util.Map,java.util.Map,~B,~B");
+Clazz.defineMethod (c$, "processGffPragma",
+($fz = function (line, gffProps, align, newseqs) {
+var spacepos = line.indexOf (' ');
+var pragma = spacepos == -1 ? line.substring (2).trim () : line.substring (2, spacepos);
+var gffpragma = jalview.io.FeaturesFile.GFFPRAGMA.get (pragma.toLowerCase ());
+if (gffpragma == null) {
+return;
+}switch (gffpragma) {
+case jalview.io.FeaturesFile.GffPragmas.gff_version:
+try {
+this.gffversion = Integer.parseInt (line.substring (spacepos + 1));
+} finally {
+}
+break;
+case jalview.io.FeaturesFile.GffPragmas.feature_ontology:
+break;
+case jalview.io.FeaturesFile.GffPragmas.attribute_ontology:
+break;
+case jalview.io.FeaturesFile.GffPragmas.source_ontology:
+break;
+case jalview.io.FeaturesFile.GffPragmas.species_build:
+break;
+case jalview.io.FeaturesFile.GffPragmas.hash:
+break;
+case jalview.io.FeaturesFile.GffPragmas.fasta:
+this.process_as_fasta (align, newseqs);
+break;
+default:
+System.err.println ("Ignoring unknown pragma:\n" + line);
+}
+}, $fz.isPrivate = true, $fz), "~S,java.util.Map,jalview.datamodel.AlignmentI,java.util.ArrayList");
+Clazz.defineMethod (c$, "process_as_fasta",
+($fz = function (align, newseqs) {
+try {
+this.mark ();
+} catch (q) {
+if (Clazz.exceptionOf (q, java.io.IOException)) {
+} else {
+throw q;
+}
+}
+var parser = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", []);
+var includedseqs = parser.getSeqs ();
+var smatcher = new jalview.analysis.SequenceIdMatcher (newseqs);
+for (var p = 0, pSize = includedseqs.size (); p < pSize; p++) {
+var dummyseq = smatcher.findIdMatch (includedseqs.get (p));
+if (dummyseq != null) {
+var mseq = includedseqs.get (p);
+if (Clazz.instanceOf (dummyseq, jalview.datamodel.SequenceDummy)) {
+(dummyseq).become (mseq);
+includedseqs.set (p, dummyseq);
+}}}
+for (var seq, $seq = includedseqs.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+align.addSequence (seq);
+}
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List");
+Clazz.defineMethod (c$, "processOrAddSeqFeature",
+function (align, newseqs, seq, sf, gFFFile, relaxedIdMatching) {
+var attr = sf.getValue ("ATTRIBUTES");
+var add = true;
+if (gFFFile && attr != null) {
+var nattr = 8;
+for (var attset, $attset = 0, $$attset = attr.$plit ("\t"); $attset < $$attset.length && ((attset = $$attset[$attset]) || true); $attset++) {
+if (attset == null || attset.trim ().length == 0) {
+continue;
+}nattr++;
+var set = new java.util.HashMap ();
+for (var pair, $pair = 0, $$pair = attset.trim ().$plit (";"); $pair < $$pair.length && ((pair = $$pair[$pair]) || true); $pair++) {
+pair = pair.trim ();
+if (pair.length == 0) {
+continue;
+}var eqpos = pair.indexOf ('=');
+var sppos = pair.indexOf (' ');
+var key = null;
+var value = null;
+if (sppos > -1 && (eqpos == -1 || sppos < eqpos)) {
+key = pair.substring (0, sppos);
+value = pair.substring (sppos + 1);
+} else {
+if (eqpos > -1 && (sppos == -1 || eqpos < sppos)) {
+key = pair.substring (0, eqpos);
+value = pair.substring (eqpos + 1);
+} else {
+key = pair;
+}}if (key != null) {
+var vals = set.get (key);
+if (vals == null) {
+vals = new java.util.ArrayList ();
+set.put (key, vals);
+}if (value != null) {
+vals.add (value.trim ());
+}}}
+try {
+add = new Boolean (add & this.processGffKey (set, nattr, seq, sf, align, newseqs, relaxedIdMatching)).valueOf ();
+} catch (ivfe) {
+if (Clazz.exceptionOf (ivfe, jalview.io.FeaturesFile.InvalidGFF3FieldException)) {
+System.err.println (ivfe);
+} else {
+throw ivfe;
+}
+}
+}
+}if (add) {
+seq.addSequenceFeature (sf);
+}return add;
+}, "jalview.datamodel.AlignmentI,java.util.List,jalview.datamodel.SequenceI,jalview.datamodel.SequenceFeature,~B,~B");
+Clazz.defineMethod (c$, "processGffKey",
+function (set, nattr, seq, sf, align, newseqs, relaxedIdMatching) {
+var attr;
+if (sf.getType ().equals ("similarity")) {
+var strand = sf.getStrand ();
+var querySeq = this.findNames (align, newseqs, relaxedIdMatching, set.get (attr = "Query"));
+if (querySeq == null || querySeq.size () != 1) {
+throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Expecting exactly one sequence in Query field (got " + set.get (attr) + ")");
+}if (set.containsKey (attr = "Align")) {
+var alco = new jalview.datamodel.AlignedCodonFrame ();
+var codonmapping = this.constructCodonMappingFromAlign (set, attr, strand);
+alco.addMap (seq, querySeq.get (0), codonmapping);
+align.addCodonFrame (alco);
+return false;
+}}return true;
+}, "java.util.Map,~N,jalview.datamodel.SequenceI,jalview.datamodel.SequenceFeature,jalview.datamodel.AlignmentI,java.util.List,~B");
+Clazz.defineMethod (c$, "constructCodonMappingFromAlign",
+($fz = function (set, attr, strand) {
+if (strand == 0) {
+throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Invalid strand for a codon mapping (cannot be 0)");
+}var fromrange = new java.util.ArrayList ();
+var torange = new java.util.ArrayList ();
+var lastppos = 0;
+var lastpframe = 0;
+for (var range, $range = set.get (attr).iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
+var ints = new java.util.ArrayList ();
+var st = new java.util.StringTokenizer (range, " ");
+while (st.hasMoreTokens ()) {
+var num = st.nextToken ();
+try {
+ints.add ( new Integer (num));
+} catch (nfe) {
+if (Clazz.exceptionOf (nfe, NumberFormatException)) {
+throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Invalid number in field " + num);
+} else {
+throw nfe;
+}
+}
+}
+if (ints.size () != 3) {
+throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Invalid number of fields for this attribute (" + ints.size () + ")");
+}fromrange.add ( new Integer (ints.get (0).intValue ()));
+fromrange.add ( new Integer (ints.get (0).intValue () + strand * ints.get (2).intValue ()));
+if (ints.get (1).equals (new Integer (lastppos)) && lastpframe > 0) {
+lastppos += (ints.get (2)).intValue () / 3;
+lastpframe = (ints.get (2)).intValue () % 3;
+torange.set (torange.size () - 1, new Integer (lastppos));
+} else {
+torange.add (ints.get (1));
+lastppos = (ints.get (1)).intValue () + (ints.get (2)).intValue () / 3;
+lastpframe = (ints.get (2)).intValue () % 3;
+torange.add ( new Integer (lastppos));
+}}
+if (fromrange.size () % 2 == 1) {
+throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Couldn't parse the DNA alignment range correctly");
+}if (torange.size () % 2 == 1) {
+throw Clazz.innerTypeInstance (jalview.io.FeaturesFile.InvalidGFF3FieldException, this, null, attr, set, "Couldn't parse the protein alignment range correctly");
+}var frommap = Clazz.newIntArray (fromrange.size (), 0);
+var tomap = Clazz.newIntArray (torange.size (), 0);
+var p = 0;
+for (var ip, $ip = fromrange.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
+frommap[p++] = ip.intValue ();
+}
+p = 0;
+for (var ip, $ip = torange.iterator (); $ip.hasNext () && ((ip = $ip.next ()) || true);) {
+tomap[p++] = ip.intValue ();
+}
+return new jalview.util.MapList (frommap, tomap, 3, 1);
+}, $fz.isPrivate = true, $fz), "java.util.Map,~S,~N");
+Clazz.defineMethod (c$, "findNames",
+($fz = function (align, newseqs, relaxedIdMatching, list) {
+var found = new java.util.ArrayList ();
+for (var seqId, $seqId = list.iterator (); $seqId.hasNext () && ((seqId = $seqId.next ()) || true);) {
+var seq = this.findName (align, seqId, relaxedIdMatching, newseqs);
+if (seq != null) {
+found.add (seq);
+}}
+return found;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,java.util.List,~B,java.util.List");
+Clazz.defineMethod (c$, "resetMatcher",
+($fz = function () {
+this.lastmatchedAl = null;
+this.matcher = null;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "findName",
+($fz = function (align, seqId, relaxedIdMatching, newseqs) {
+var match = null;
+if (relaxedIdMatching) {
+if (this.lastmatchedAl !== align) {
+this.matcher = new jalview.analysis.SequenceIdMatcher ((this.lastmatchedAl = align).getSequencesArray ());
+if (newseqs != null) {
+this.matcher.addAll (newseqs);
+}}match = this.matcher.findIdMatch (seqId);
+} else {
+match = align.findName (seqId, true);
+if (match == null && newseqs != null) {
+for (var m, $m = newseqs.iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+if (seqId.equals (m.getName ())) {
+return m;
+}}
+}}if (match == null && newseqs != null) {
+match = new jalview.datamodel.SequenceDummy (seqId);
+if (relaxedIdMatching) {
+this.matcher.addAll (java.util.Arrays.asList ( Clazz.newArray (-1, [match])));
+}newseqs.add (match);
+}return match;
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentI,~S,~B,java.util.List");
+Clazz.defineMethod (c$, "parseDescriptionHTML",
+function (sf, removeHTML) {
+if (sf.getDescription () == null) {
+return;
+}var parsed = new jalview.util.ParseHtmlBodyAndLinks (sf.getDescription (), removeHTML, this.newline);
+sf.description = (removeHTML) ? parsed.getNonHtmlContent () : sf.description;
+for (var link, $link = parsed.getLinks ().iterator (); $link.hasNext () && ((link = $link.next ()) || true);) {
+sf.addLink (link);
+}
+}, "jalview.datamodel.SequenceFeature,~B");
+Clazz.defineMethod (c$, "printJalviewFormat",
+function (seqs, visible) {
+return this.printJalviewFormat (seqs, visible, true, true);
+}, "~A,java.util.Map");
+Clazz.defineMethod (c$, "printJalviewFormat",
+function (seqs, visible, visOnly, nonpos) {
+var out = new StringBuffer ();
+var next;
+var featuresGen = false;
+if (visOnly && !nonpos && (visible == null || visible.size () < 1)) {
+return "No Features Visible";
+}if (visible != null && visOnly) {
+var en = visible.keySet ().iterator ();
+var type;
+var color;
+while (en.hasNext ()) {
+type = en.next ().toString ();
+if (Clazz.instanceOf (visible.get (type), jalview.schemes.GraduatedColor)) {
+var gc = visible.get (type);
+color = (gc.isColourByLabel () ? "label|" : "") + jalview.util.Format.getHexString (gc.getMinColor ()) + "|" + jalview.util.Format.getHexString (gc.getMaxColor ()) + (gc.isAutoScale () ? "|" : "|abso|") + gc.getMin () + "|" + gc.getMax () + "|";
+if (gc.getThreshType () != -1) {
+if (gc.getThreshType () == 0) {
+color += "below";
+} else {
+if (gc.getThreshType () != 1) {
+System.err.println ("WARNING: Unsupported threshold type (" + gc.getThreshType () + ") : Assuming 'above'");
+}color += "above";
+}color += "|" + gc.getThresh ();
+} else {
+color += "none";
+}} else if (Clazz.instanceOf (visible.get (type), java.awt.Color)) {
+color = jalview.util.Format.getHexString (visible.get (type));
+} else {
+color = jalview.util.Format.getHexString ( new java.awt.Color (Integer.parseInt (visible.get (type).toString ())));
+}out.append (type);
+out.append ("\t");
+out.append (color);
+out.append (this.newline);
+}
+}var groups = new java.util.Vector ();
+var groupIndex = 0;
+var isnonpos = false;
+for (var i = 0; i < seqs.length; i++) {
+next = seqs[i].getSequenceFeatures ();
+if (next != null) {
+for (var j = 0; j < next.length; j++) {
+isnonpos = next[j].begin == 0 && next[j].end == 0;
+if ((!nonpos && isnonpos) || (!isnonpos && visOnly && !visible.containsKey (next[j].type))) {
+continue;
+}if (next[j].featureGroup != null && !groups.contains (next[j].featureGroup)) {
+groups.addElement (next[j].featureGroup);
+}}
+}}
+var group = null;
+do {
+if (groups.size () > 0 && groupIndex < groups.size ()) {
+group = groups.elementAt (groupIndex).toString ();
+out.append (this.newline);
+out.append ("STARTGROUP\t");
+out.append (group);
+out.append (this.newline);
+} else {
+group = null;
+}for (var i = 0; i < seqs.length; i++) {
+next = seqs[i].getSequenceFeatures ();
+if (next != null) {
+for (var j = 0; j < next.length; j++) {
+isnonpos = next[j].begin == 0 && next[j].end == 0;
+if ((!nonpos && isnonpos) || (!isnonpos && visOnly && !visible.containsKey (next[j].type))) {
+continue;
+}if (group != null && (next[j].featureGroup == null || !next[j].featureGroup.equals (group))) {
+continue;
+}if (group == null && next[j].featureGroup != null) {
+continue;
+}featuresGen = true;
+if (next[j].description == null || next[j].description.equals ("")) {
+out.append (next[j].type + "\t");
+} else {
+if (next[j].links != null && next[j].getDescription ().indexOf ("") == -1) {
+out.append ("");
+}out.append (next[j].description + " ");
+if (next[j].links != null) {
+for (var l = 0; l < next[j].links.size (); l++) {
+var label = next[j].links.elementAt (l).toString ();
+var href = label.substring (label.indexOf ("|") + 1);
+label = label.substring (0, label.indexOf ("|"));
+if (next[j].description.indexOf (href) == -1) {
+out.append ("" + label + " ");
+}}
+if (next[j].getDescription ().indexOf ("") == -1) {
+out.append ("");
+}}out.append ("\t");
+}out.append (seqs[i].getName ());
+out.append ("\t-1\t");
+out.append ("" + next[j].begin);
+out.append ("\t");
+out.append ("" + next[j].end);
+out.append ("\t");
+out.append (next[j].type);
+if (!Float.isNaN (next[j].score)) {
+out.append ("\t");
+out.append (next[j].score);
+}out.append (this.newline);
+}
+}}
+if (group != null) {
+out.append ("ENDGROUP\t");
+out.append (group);
+out.append (this.newline);
+groupIndex++;
+} else {
+break;
+}} while (groupIndex < groups.size () + 1);
+if (!featuresGen) {
+return "No Features Visible";
+}return out.toString ();
+}, "~A,java.util.Map,~B,~B");
+Clazz.defineMethod (c$, "printGFFFormat",
+function (seqs, visible) {
+return this.printGFFFormat (seqs, visible, true, true);
+}, "~A,java.util.Map");
+Clazz.defineMethod (c$, "printGFFFormat",
+function (seqs, visible, visOnly, nonpos) {
+var out = new StringBuffer ();
+var next;
+var source;
+var isnonpos;
+for (var i = 0; i < seqs.length; i++) {
+if (seqs[i].getSequenceFeatures () != null) {
+next = seqs[i].getSequenceFeatures ();
+for (var j = 0; j < next.length; j++) {
+isnonpos = next[j].begin == 0 && next[j].end == 0;
+if ((!nonpos && isnonpos) || (!isnonpos && visOnly && !visible.containsKey (next[j].type))) {
+continue;
+}source = next[j].featureGroup;
+if (source == null) {
+source = next[j].getDescription ();
+}out.append (seqs[i].getName ());
+out.append ("\t");
+out.append (source);
+out.append ("\t");
+out.append (next[j].type);
+out.append ("\t");
+out.append ("" + next[j].begin);
+out.append ("\t");
+out.append ("" + next[j].end);
+out.append ("\t");
+out.append (next[j].score);
+out.append ("\t");
+if (next[j].getValue ("STRAND") != null) {
+out.append (next[j].getValue ("STRAND"));
+out.append ("\t");
+} else {
+out.append (".\t");
+}if (next[j].getValue ("FRAME") != null) {
+out.append (next[j].getValue ("FRAME"));
+} else {
+out.append (".");
+}if (next[j].getValue ("ATTRIBUTES") != null) {
+out.append (next[j].getValue ("ATTRIBUTES"));
+}out.append (this.newline);
+}
+}}
+return out.toString ();
+}, "~A,java.util.Map,~B,~B");
+Clazz.defineMethod (c$, "parse",
+function () {
+});
+Clazz.overrideMethod (c$, "print",
+function () {
+return "USE printGFFFormat() or printJalviewFormat()";
+});
+c$.$FeaturesFile$InvalidGFF3FieldException$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.field = null;
+this.value = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io.FeaturesFile, "InvalidGFF3FieldException", Exception);
+Clazz.makeConstructor (c$,
+function (a, b, c) {
+Clazz.superConstructor (this, jalview.io.FeaturesFile.InvalidGFF3FieldException, [c + " (Field was " + a + " and value was " + b.get (a).toString ()]);
+this.field = a;
+this.value = b.get (a).toString ();
+}, "~S,java.util.Map,~S");
+c$ = Clazz.p0p ();
+};
+Clazz.pu$h ();
+c$ = Clazz.declareType (jalview.io.FeaturesFile, "GffPragmas", Enum);
+Clazz.defineEnumConstant (c$, "gff_version", 0, []);
+Clazz.defineEnumConstant (c$, "sequence_region", 1, []);
+Clazz.defineEnumConstant (c$, "feature_ontology", 2, []);
+Clazz.defineEnumConstant (c$, "attribute_ontology", 3, []);
+Clazz.defineEnumConstant (c$, "source_ontology", 4, []);
+Clazz.defineEnumConstant (c$, "species_build", 5, []);
+Clazz.defineEnumConstant (c$, "fasta", 6, []);
+Clazz.defineEnumConstant (c$, "hash", 7, []);
+c$ = Clazz.p0p ();
+Clazz.defineStatics (c$,
+"GFFPRAGMA", null);
+{
+jalview.io.FeaturesFile.GFFPRAGMA = new java.util.HashMap ();
+jalview.io.FeaturesFile.GFFPRAGMA.put ("sequence-region", jalview.io.FeaturesFile.GffPragmas.sequence_region);
+jalview.io.FeaturesFile.GFFPRAGMA.put ("feature-ontology", jalview.io.FeaturesFile.GffPragmas.feature_ontology);
+jalview.io.FeaturesFile.GFFPRAGMA.put ("#", jalview.io.FeaturesFile.GffPragmas.hash);
+jalview.io.FeaturesFile.GFFPRAGMA.put ("fasta", jalview.io.FeaturesFile.GffPragmas.fasta);
+jalview.io.FeaturesFile.GFFPRAGMA.put ("species-build", jalview.io.FeaturesFile.GffPragmas.species_build);
+jalview.io.FeaturesFile.GFFPRAGMA.put ("source-ontology", jalview.io.FeaturesFile.GffPragmas.source_ontology);
+jalview.io.FeaturesFile.GFFPRAGMA.put ("attribute-ontology", jalview.io.FeaturesFile.GffPragmas.attribute_ontology);
+}});
diff --git a/bin/jalview/io/FileParse.class b/bin/jalview/io/FileParse.class
index 86fbc3c..e2448f1 100644
Binary files a/bin/jalview/io/FileParse.class and b/bin/jalview/io/FileParse.class differ
diff --git a/bin/jalview/io/FileParse.js b/bin/jalview/io/FileParse.js
index 51d1e87..a16b90a 100644
--- a/bin/jalview/io/FileParse.js
+++ b/bin/jalview/io/FileParse.js
@@ -1,250 +1,250 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (null, "jalview.io.FileParse", ["jalview.io.AppletFormatAdapter", "jalview.util.MessageManager", "java.io.BufferedReader", "$.IOException", "$.InputStreamReader", "$.StringReader", "java.lang.Error", "java.net.URL", "java.util.zip.GZIPInputStream"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.dataName = "unknown source";
-this.inFile = null;
-this.viewport = null;
-this.exportSettings = null;
-this.index = 1;
-this.suffixSeparator = '#';
-this.newline = null;
-this.suffix = null;
-this.type = null;
-this.dataIn = null;
-this.errormessage = "UNITIALISED SOURCE";
-this.error = true;
-this.warningMessage = null;
-this.READAHEAD_LIMIT = 2048;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "FileParse");
-Clazz.prepareFields (c$, function () {
-this.newline = System.getProperty ("line.separator");
-});
-Clazz.defineMethod (c$, "setNewlineString",
-function (nl) {
-this.newline = nl;
-}, "~S");
-Clazz.defineMethod (c$, "getNewlineString",
-function () {
-return this.newline;
-});
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.makeConstructor (c$,
-function (from) {
-if (from == null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_null_fileparse"));
-}if (from === this) {
-return;
-}this.index = ++from.index;
-this.inFile = from.inFile;
-this.suffixSeparator = from.suffixSeparator;
-this.suffix = from.suffix;
-this.errormessage = from.errormessage;
-this.error = false;
-this.type = from.type;
-this.dataIn = from.dataIn;
-if (this.dataIn != null) {
-this.mark ();
-}this.dataName = from.dataName;
-}, "jalview.io.FileParse");
-Clazz.defineMethod (c$, "tryAsGzipSource",
-($fz = function (inputStream) {
-var inData = new java.io.BufferedReader ( new java.io.InputStreamReader ( new java.util.zip.GZIPInputStream (inputStream)));
-inData.mark (2048);
-inData.read ();
-inData.reset ();
-return inData;
-}, $fz.isPrivate = true, $fz), "java.io.InputStream");
-Clazz.defineMethod (c$, "checkURLSource",
-($fz = function (fileStr) {
-this.errormessage = "URL NOT FOUND";
-var url = new java.net.URL (fileStr);
-var e = null;
-if (fileStr.toLowerCase ().endsWith (".gz")) {
-try {
-var inputStream = url.openStream ();
-this.dataIn = this.tryAsGzipSource (inputStream);
-this.dataName = fileStr;
-return false;
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-e = ex;
-} else {
-throw ex;
-}
-}
-}try {
-this.dataIn = new java.io.BufferedReader ( new java.io.InputStreamReader (url.openStream ()));
-} catch (q) {
-if (Clazz.exceptionOf (q, java.io.IOException)) {
-if (e != null) {
-throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.failed_to_resolve_gzip_stream"), e);
-}throw q;
-} else {
-throw q;
-}
-}
-this.dataName = fileStr;
-return false;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "extractSuffix",
-($fz = function (fileStr) {
-var sfpos = fileStr.lastIndexOf (this.suffixSeparator);
-if (sfpos > -1 && sfpos < fileStr.length - 1) {
-this.suffix = fileStr.substring (sfpos + 1);
-return fileStr.substring (0, sfpos);
-}return null;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.makeConstructor (c$,
-function (fileStr, type) {
-this.type = type;
-this.error = false;
-if (type.equals (jalview.io.AppletFormatAdapter.FILE)) {
-{
-}} else if (type.equals (jalview.io.AppletFormatAdapter.URL)) {
-try {
-try {
-this.checkURLSource (fileStr);
-if (this.suffixSeparator == '#') {
-this.extractSuffix (fileStr);
-}} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-var suffixLess = this.extractSuffix (fileStr);
-if (suffixLess == null) {
-throw (e);
-} else {
-try {
-this.checkURLSource (suffixLess);
-} catch (e2) {
-if (Clazz.exceptionOf (e2, java.io.IOException)) {
-this.errormessage = "BAD URL WITH OR WITHOUT SUFFIX";
-throw (e);
-} else {
-throw e2;
-}
-}
-}} else {
-throw e;
-}
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-this.errormessage = "CANNOT ACCESS DATA AT URL '" + fileStr + "' (" + e.getMessage () + ")";
-this.error = true;
-} else {
-throw e;
-}
-}
-} else if (type.equals (jalview.io.AppletFormatAdapter.PASTE)) {
-this.errormessage = "PASTE INACCESSIBLE!";
-this.dataIn = new java.io.BufferedReader ( new java.io.StringReader (fileStr));
-this.dataName = "Paste";
-} else if (type.equals (jalview.io.AppletFormatAdapter.CLASSLOADER)) {
-this.errormessage = "RESOURCE CANNOT BE LOCATED";
-var is = this.getClass ().getResourceAsStream ("/" + fileStr);
-if (is == null) {
-var suffixLess = this.extractSuffix (fileStr);
-if (suffixLess != null) {
-is = this.getClass ().getResourceAsStream ("/" + suffixLess);
-}}if (is != null) {
-this.dataIn = new java.io.BufferedReader ( new java.io.InputStreamReader (is));
-this.dataName = fileStr;
-} else {
-this.error = true;
-}} else {
-this.errormessage = "PROBABLE IMPLEMENTATION ERROR : Datasource Type given as '" + (type != null ? type : "null") + "'";
-this.error = true;
-}if (this.dataIn == null || this.error) {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.failed_to_read_data_from_source", Clazz.newArray (-1, [this.errormessage])));
-}this.error = false;
-this.dataIn.mark (2048);
-}, "~S,~S");
-Clazz.defineMethod (c$, "mark",
-function () {
-if (this.dataIn != null) {
-this.dataIn.mark (2048);
-} else {
-throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.no_init_source_stream"));
-}});
-Clazz.defineMethod (c$, "nextLine",
-function () {
-if (!this.error) {
-return this.dataIn.readLine ();
-}throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.invalid_source_stream", Clazz.newArray (-1, [this.errormessage])));
-});
-Clazz.defineMethod (c$, "isExporting",
-function () {
-return !this.error && this.dataIn == null;
-});
-Clazz.defineMethod (c$, "isValid",
-function () {
-return !this.error;
-});
-Clazz.defineMethod (c$, "close",
-function () {
-this.errormessage = "EXCEPTION ON CLOSE";
-this.error = true;
-this.dataIn.close ();
-this.dataIn = null;
-this.errormessage = "SOURCE IS CLOSED";
-});
-Clazz.defineMethod (c$, "reset",
-function () {
-if (this.dataIn != null && !this.error) {
-this.dataIn.reset ();
-} else {
-throw new java.io.IOException (jalview.util.MessageManager.getString ("error.implementation_error_reset_called_for_invalid_source"));
-}});
-Clazz.defineMethod (c$, "hasWarningMessage",
-function () {
-return (this.warningMessage != null && this.warningMessage.length > 0);
-});
-Clazz.defineMethod (c$, "getWarningMessage",
-function () {
-return this.warningMessage;
-});
-Clazz.defineMethod (c$, "getInFile",
-function () {
-if (this.inFile != null) {
-return this.inFile.getAbsolutePath () + " (" + this.index + ")";
-} else {
-return "From Paste + (" + this.index + ")";
-}});
-Clazz.defineMethod (c$, "getDataName",
-function () {
-return this.dataName;
-});
-Clazz.defineMethod (c$, "setDataName",
-function (dataname) {
-this.dataName = dataname;
-}, "~S");
-Clazz.defineMethod (c$, "getReader",
-function () {
-if (this.dataIn != null) {
-return this.dataIn;
-}return null;
-});
-Clazz.defineMethod (c$, "getViewport",
-function () {
-return this.viewport;
-});
-Clazz.defineMethod (c$, "setViewport",
-function (viewport) {
-this.viewport = viewport;
-}, "jalview.api.AlignViewportI");
-Clazz.defineMethod (c$, "getExportSettings",
-function () {
-return this.exportSettings;
-});
-Clazz.defineMethod (c$, "setExportSettings",
-function (exportSettings) {
-this.exportSettings = exportSettings;
-}, "jalview.api.AlignExportSettingI");
-Clazz.defineMethod (c$, "configureForView",
-function (avpanel) {
-if (avpanel != null) {
-this.setViewport (avpanel.getAlignViewport ());
-}}, "jalview.api.AlignmentViewPanel");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (null, "jalview.io.FileParse", ["jalview.io.AppletFormatAdapter", "jalview.util.MessageManager", "java.io.BufferedReader", "$.IOException", "$.InputStreamReader", "$.StringReader", "java.lang.Error", "java.net.URL", "java.util.zip.GZIPInputStream"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.dataName = "unknown source";
+this.inFile = null;
+this.viewport = null;
+this.exportSettings = null;
+this.index = 1;
+this.suffixSeparator = '#';
+this.newline = null;
+this.suffix = null;
+this.type = null;
+this.dataIn = null;
+this.errormessage = "UNITIALISED SOURCE";
+this.error = true;
+this.warningMessage = null;
+this.READAHEAD_LIMIT = 2048;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "FileParse");
+Clazz.prepareFields (c$, function () {
+this.newline = System.getProperty ("line.separator");
+});
+Clazz.defineMethod (c$, "setNewlineString",
+function (nl) {
+this.newline = nl;
+}, "~S");
+Clazz.defineMethod (c$, "getNewlineString",
+function () {
+return this.newline;
+});
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.makeConstructor (c$,
+function (from) {
+if (from == null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_null_fileparse"));
+}if (from === this) {
+return;
+}this.index = ++from.index;
+this.inFile = from.inFile;
+this.suffixSeparator = from.suffixSeparator;
+this.suffix = from.suffix;
+this.errormessage = from.errormessage;
+this.error = false;
+this.type = from.type;
+this.dataIn = from.dataIn;
+if (this.dataIn != null) {
+this.mark ();
+}this.dataName = from.dataName;
+}, "jalview.io.FileParse");
+Clazz.defineMethod (c$, "tryAsGzipSource",
+($fz = function (inputStream) {
+var inData = new java.io.BufferedReader ( new java.io.InputStreamReader ( new java.util.zip.GZIPInputStream (inputStream)));
+inData.mark (2048);
+inData.read ();
+inData.reset ();
+return inData;
+}, $fz.isPrivate = true, $fz), "java.io.InputStream");
+Clazz.defineMethod (c$, "checkURLSource",
+($fz = function (fileStr) {
+this.errormessage = "URL NOT FOUND";
+var url = new java.net.URL (fileStr);
+var e = null;
+if (fileStr.toLowerCase ().endsWith (".gz")) {
+try {
+var inputStream = url.openStream ();
+this.dataIn = this.tryAsGzipSource (inputStream);
+this.dataName = fileStr;
+return false;
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+e = ex;
+} else {
+throw ex;
+}
+}
+}try {
+this.dataIn = new java.io.BufferedReader ( new java.io.InputStreamReader (url.openStream ()));
+} catch (q) {
+if (Clazz.exceptionOf (q, java.io.IOException)) {
+if (e != null) {
+throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.failed_to_resolve_gzip_stream"), e);
+}throw q;
+} else {
+throw q;
+}
+}
+this.dataName = fileStr;
+return false;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "extractSuffix",
+($fz = function (fileStr) {
+var sfpos = fileStr.lastIndexOf (this.suffixSeparator);
+if (sfpos > -1 && sfpos < fileStr.length - 1) {
+this.suffix = fileStr.substring (sfpos + 1);
+return fileStr.substring (0, sfpos);
+}return null;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.makeConstructor (c$,
+function (fileStr, type) {
+this.type = type;
+this.error = false;
+if (type.equals (jalview.io.AppletFormatAdapter.FILE)) {
+{
+}} else if (type.equals (jalview.io.AppletFormatAdapter.URL)) {
+try {
+try {
+this.checkURLSource (fileStr);
+if (this.suffixSeparator == '#') {
+this.extractSuffix (fileStr);
+}} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+var suffixLess = this.extractSuffix (fileStr);
+if (suffixLess == null) {
+throw (e);
+} else {
+try {
+this.checkURLSource (suffixLess);
+} catch (e2) {
+if (Clazz.exceptionOf (e2, java.io.IOException)) {
+this.errormessage = "BAD URL WITH OR WITHOUT SUFFIX";
+throw (e);
+} else {
+throw e2;
+}
+}
+}} else {
+throw e;
+}
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+this.errormessage = "CANNOT ACCESS DATA AT URL '" + fileStr + "' (" + e.getMessage () + ")";
+this.error = true;
+} else {
+throw e;
+}
+}
+} else if (type.equals (jalview.io.AppletFormatAdapter.PASTE)) {
+this.errormessage = "PASTE INACCESSIBLE!";
+this.dataIn = new java.io.BufferedReader ( new java.io.StringReader (fileStr));
+this.dataName = "Paste";
+} else if (type.equals (jalview.io.AppletFormatAdapter.CLASSLOADER)) {
+this.errormessage = "RESOURCE CANNOT BE LOCATED";
+var is = this.getClass ().getResourceAsStream ("/" + fileStr);
+if (is == null) {
+var suffixLess = this.extractSuffix (fileStr);
+if (suffixLess != null) {
+is = this.getClass ().getResourceAsStream ("/" + suffixLess);
+}}if (is != null) {
+this.dataIn = new java.io.BufferedReader ( new java.io.InputStreamReader (is));
+this.dataName = fileStr;
+} else {
+this.error = true;
+}} else {
+this.errormessage = "PROBABLE IMPLEMENTATION ERROR : Datasource Type given as '" + (type != null ? type : "null") + "'";
+this.error = true;
+}if (this.dataIn == null || this.error) {
+throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.failed_to_read_data_from_source", Clazz.newArray (-1, [this.errormessage])));
+}this.error = false;
+this.dataIn.mark (2048);
+}, "~S,~S");
+Clazz.defineMethod (c$, "mark",
+function () {
+if (this.dataIn != null) {
+this.dataIn.mark (2048);
+} else {
+throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.no_init_source_stream"));
+}});
+Clazz.defineMethod (c$, "nextLine",
+function () {
+if (!this.error) {
+return this.dataIn.readLine ();
+}throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.invalid_source_stream", Clazz.newArray (-1, [this.errormessage])));
+});
+Clazz.defineMethod (c$, "isExporting",
+function () {
+return !this.error && this.dataIn == null;
+});
+Clazz.defineMethod (c$, "isValid",
+function () {
+return !this.error;
+});
+Clazz.defineMethod (c$, "close",
+function () {
+this.errormessage = "EXCEPTION ON CLOSE";
+this.error = true;
+this.dataIn.close ();
+this.dataIn = null;
+this.errormessage = "SOURCE IS CLOSED";
+});
+Clazz.defineMethod (c$, "reset",
+function () {
+if (this.dataIn != null && !this.error) {
+this.dataIn.reset ();
+} else {
+throw new java.io.IOException (jalview.util.MessageManager.getString ("error.implementation_error_reset_called_for_invalid_source"));
+}});
+Clazz.defineMethod (c$, "hasWarningMessage",
+function () {
+return (this.warningMessage != null && this.warningMessage.length > 0);
+});
+Clazz.defineMethod (c$, "getWarningMessage",
+function () {
+return this.warningMessage;
+});
+Clazz.defineMethod (c$, "getInFile",
+function () {
+if (this.inFile != null) {
+return this.inFile.getAbsolutePath () + " (" + this.index + ")";
+} else {
+return "From Paste + (" + this.index + ")";
+}});
+Clazz.defineMethod (c$, "getDataName",
+function () {
+return this.dataName;
+});
+Clazz.defineMethod (c$, "setDataName",
+function (dataname) {
+this.dataName = dataname;
+}, "~S");
+Clazz.defineMethod (c$, "getReader",
+function () {
+if (this.dataIn != null) {
+return this.dataIn;
+}return null;
+});
+Clazz.defineMethod (c$, "getViewport",
+function () {
+return this.viewport;
+});
+Clazz.defineMethod (c$, "setViewport",
+function (viewport) {
+this.viewport = viewport;
+}, "jalview.api.AlignViewportI");
+Clazz.defineMethod (c$, "getExportSettings",
+function () {
+return this.exportSettings;
+});
+Clazz.defineMethod (c$, "setExportSettings",
+function (exportSettings) {
+this.exportSettings = exportSettings;
+}, "jalview.api.AlignExportSettingI");
+Clazz.defineMethod (c$, "configureForView",
+function (avpanel) {
+if (avpanel != null) {
+this.setViewport (avpanel.getAlignViewport ());
+}}, "jalview.api.AlignmentViewPanel");
+});
diff --git a/bin/jalview/io/IdentifyFile.class b/bin/jalview/io/IdentifyFile.class
index 7acd351..2b3d5d4 100644
Binary files a/bin/jalview/io/IdentifyFile.class and b/bin/jalview/io/IdentifyFile.class differ
diff --git a/bin/jalview/io/IdentifyFile.js b/bin/jalview/io/IdentifyFile.js
index 4d88cdd..cf35241 100644
--- a/bin/jalview/io/IdentifyFile.js
+++ b/bin/jalview/io/IdentifyFile.js
@@ -1,157 +1,157 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (null, "jalview.io.IdentifyFile", ["jalview.io.FileParse"], function () {
-c$ = Clazz.declareType (jalview.io, "IdentifyFile");
-Clazz.defineMethod (c$, "Identify",
-function (file, protocol) {
-var emessage = "UNIDENTIFIED FILE PARSING ERROR";
-var parser = null;
-try {
-parser = new jalview.io.FileParse (file, protocol);
-if (parser.isValid ()) {
-return this.Identify (parser);
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Error whilst identifying");
-e.printStackTrace (System.err);
-emessage = e.getMessage ();
-} else {
-throw e;
-}
-}
-if (parser != null) {
-return parser.errormessage;
-}return emessage;
-}, "~S,~S");
-Clazz.defineMethod (c$, "Identify",
-function (source) {
-return this.Identify (source, true);
-}, "jalview.io.FileParse");
-Clazz.defineMethod (c$, "Identify",
-function (source, closeSource) {
-var reply = "PFAM";
-var data;
-var length = 0;
-var lineswereskipped = false;
-var isBinary = false;
-try {
-if (!closeSource) {
-source.mark ();
-}while ((data = source.nextLine ()) != null) {
-length += data.trim ().length;
-if (!lineswereskipped) {
-for (var i = 0; !isBinary && i < data.length; i++) {
-var c = data.charAt (i);
-isBinary = (c.charCodeAt (0) < 32 && c != '\t' && c != '\n' && c != '\r' && c.charCodeAt (0) != 5 && c.charCodeAt (0) != 27);
-}
-}if (isBinary) {
-if (source.inFile != null) {
-var fileStr = source.inFile.getName ();
-if (fileStr.lastIndexOf (".jar") > -1 || fileStr.lastIndexOf (".zip") > -1) {
-reply = "Jalview";
-}}if (!lineswereskipped && data.startsWith ("PK")) {
-reply = "Jalview";
-break;
-}}data = data.toUpperCase ();
-if (data.startsWith ("##GFF-VERSION")) {
-reply = "GFF v2 or v3";
-break;
-}if (data.indexOf ("# STOCKHOLM") > -1) {
-reply = "STH";
-break;
-}if (data.matches ("])*>")) {
-reply = "HTML";
-break;
-}if (data.matches ("])*>")) {
-reply = "RNAML";
-break;
-}if (data.indexOf ("{\"") > -1) {
-reply = "JSON";
-break;
-}if ((data.length < 1) || (data.indexOf ("#") == 0)) {
-lineswereskipped = true;
-continue;
-}if (data.indexOf ("PILEUP") > -1) {
-reply = "PileUp";
-break;
-}if ((data.indexOf ("//") == 0) || ((data.indexOf ("!!") > -1) && (data.indexOf ("!!") < data.indexOf ("_MULTIPLE_ALIGNMENT ")))) {
-reply = "MSF";
-break;
-} else if (data.indexOf ("CLUSTAL") > -1) {
-reply = "CLUSTAL";
-break;
-} else if (data.indexOf (">") > -1) {
-var checkPIR = false;
-var starterm = false;
-if ((data.indexOf (">P1;") > -1) || (data.indexOf (">DL;") > -1)) {
-checkPIR = true;
-reply = "PIR";
-}data = source.nextLine ();
-if (data.indexOf (">") > -1) {
-reply = "BLC";
-} else {
-var data1 = source.nextLine ();
-var data2 = source.nextLine ();
-var c1;
-if (checkPIR) {
-starterm = (data1 != null && data1.indexOf ("*") > -1) || (data2 != null && data2.indexOf ("*") > -1);
-}if (data2 != null && (c1 = data.indexOf ("*")) > -1) {
-if (c1 == 0 && c1 == data2.indexOf ("*")) {
-reply = "BLC";
-} else {
-reply = "FASTA";
-}} else {
-reply = "FASTA";
-if (!checkPIR) {
-break;
-}}}if (checkPIR) {
-var dta = null;
-if (!starterm) {
-do {
-try {
-dta = source.nextLine ();
-} catch (ex) {
-if (Clazz.exceptionOf (ex, java.io.IOException)) {
-} else {
-throw ex;
-}
-}
-;if (dta != null && dta.indexOf ("*") > -1) {
-starterm = true;
-}} while (dta != null && !starterm);
-}if (starterm) {
-reply = "PIR";
-break;
-} else {
-reply = "FASTA";
-}}break;
-} else if (data.indexOf ("HEADER") == 0 || data.indexOf ("ATOM") == 0) {
-reply = "PDB";
-break;
-} else if (data.matches ("\\s*\\d+\\s+\\d+\\s*")) {
-reply = "PHYLIP";
-break;
-} else if (!lineswereskipped && data.charAt (0) != '*' && data.charAt (0) != ' ' && data.indexOf (":") < data.indexOf (",")) {
-reply = "JnetFile";
-break;
-}lineswereskipped = true;
-}
-if (closeSource) {
-source.close ();
-} else {
-source.reset ();
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("File Identification failed!\n" + ex);
-return source.errormessage;
-} else {
-throw ex;
-}
-}
-if (length == 0) {
-System.err.println ("File Identification failed! - Empty file was read.");
-return "EMPTY DATA FILE";
-}return reply;
-}, "jalview.io.FileParse,~B");
-Clazz.defineStatics (c$,
-"GFF3File", "GFF v2 or v3");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (null, "jalview.io.IdentifyFile", ["jalview.io.FileParse"], function () {
+c$ = Clazz.declareType (jalview.io, "IdentifyFile");
+Clazz.defineMethod (c$, "Identify",
+function (file, protocol) {
+var emessage = "UNIDENTIFIED FILE PARSING ERROR";
+var parser = null;
+try {
+parser = new jalview.io.FileParse (file, protocol);
+if (parser.isValid ()) {
+return this.Identify (parser);
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Error whilst identifying");
+e.printStackTrace (System.err);
+emessage = e.getMessage ();
+} else {
+throw e;
+}
+}
+if (parser != null) {
+return parser.errormessage;
+}return emessage;
+}, "~S,~S");
+Clazz.defineMethod (c$, "Identify",
+function (source) {
+return this.Identify (source, true);
+}, "jalview.io.FileParse");
+Clazz.defineMethod (c$, "Identify",
+function (source, closeSource) {
+var reply = "PFAM";
+var data;
+var length = 0;
+var lineswereskipped = false;
+var isBinary = false;
+try {
+if (!closeSource) {
+source.mark ();
+}while ((data = source.nextLine ()) != null) {
+length += data.trim ().length;
+if (!lineswereskipped) {
+for (var i = 0; !isBinary && i < data.length; i++) {
+var c = data.charAt (i);
+isBinary = (c.charCodeAt (0) < 32 && c != '\t' && c != '\n' && c != '\r' && c.charCodeAt (0) != 5 && c.charCodeAt (0) != 27);
+}
+}if (isBinary) {
+if (source.inFile != null) {
+var fileStr = source.inFile.getName ();
+if (fileStr.lastIndexOf (".jar") > -1 || fileStr.lastIndexOf (".zip") > -1) {
+reply = "Jalview";
+}}if (!lineswereskipped && data.startsWith ("PK")) {
+reply = "Jalview";
+break;
+}}data = data.toUpperCase ();
+if (data.startsWith ("##GFF-VERSION")) {
+reply = "GFF v2 or v3";
+break;
+}if (data.indexOf ("# STOCKHOLM") > -1) {
+reply = "STH";
+break;
+}if (data.matches ("])*>")) {
+reply = "HTML";
+break;
+}if (data.matches ("])*>")) {
+reply = "RNAML";
+break;
+}if (data.indexOf ("{\"") > -1) {
+reply = "JSON";
+break;
+}if ((data.length < 1) || (data.indexOf ("#") == 0)) {
+lineswereskipped = true;
+continue;
+}if (data.indexOf ("PILEUP") > -1) {
+reply = "PileUp";
+break;
+}if ((data.indexOf ("//") == 0) || ((data.indexOf ("!!") > -1) && (data.indexOf ("!!") < data.indexOf ("_MULTIPLE_ALIGNMENT ")))) {
+reply = "MSF";
+break;
+} else if (data.indexOf ("CLUSTAL") > -1) {
+reply = "CLUSTAL";
+break;
+} else if (data.indexOf (">") > -1) {
+var checkPIR = false;
+var starterm = false;
+if ((data.indexOf (">P1;") > -1) || (data.indexOf (">DL;") > -1)) {
+checkPIR = true;
+reply = "PIR";
+}data = source.nextLine ();
+if (data.indexOf (">") > -1) {
+reply = "BLC";
+} else {
+var data1 = source.nextLine ();
+var data2 = source.nextLine ();
+var c1;
+if (checkPIR) {
+starterm = (data1 != null && data1.indexOf ("*") > -1) || (data2 != null && data2.indexOf ("*") > -1);
+}if (data2 != null && (c1 = data.indexOf ("*")) > -1) {
+if (c1 == 0 && c1 == data2.indexOf ("*")) {
+reply = "BLC";
+} else {
+reply = "FASTA";
+}} else {
+reply = "FASTA";
+if (!checkPIR) {
+break;
+}}}if (checkPIR) {
+var dta = null;
+if (!starterm) {
+do {
+try {
+dta = source.nextLine ();
+} catch (ex) {
+if (Clazz.exceptionOf (ex, java.io.IOException)) {
+} else {
+throw ex;
+}
+}
+;if (dta != null && dta.indexOf ("*") > -1) {
+starterm = true;
+}} while (dta != null && !starterm);
+}if (starterm) {
+reply = "PIR";
+break;
+} else {
+reply = "FASTA";
+}}break;
+} else if (data.indexOf ("HEADER") == 0 || data.indexOf ("ATOM") == 0) {
+reply = "PDB";
+break;
+} else if (data.matches ("\\s*\\d+\\s+\\d+\\s*")) {
+reply = "PHYLIP";
+break;
+} else if (!lineswereskipped && data.charAt (0) != '*' && data.charAt (0) != ' ' && data.indexOf (":") < data.indexOf (",")) {
+reply = "JnetFile";
+break;
+}lineswereskipped = true;
+}
+if (closeSource) {
+source.close ();
+} else {
+source.reset ();
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("File Identification failed!\n" + ex);
+return source.errormessage;
+} else {
+throw ex;
+}
+}
+if (length == 0) {
+System.err.println ("File Identification failed! - Empty file was read.");
+return "EMPTY DATA FILE";
+}return reply;
+}, "jalview.io.FileParse,~B");
+Clazz.defineStatics (c$,
+"GFF3File", "GFF v2 or v3");
+});
diff --git a/bin/jalview/io/JPredFile.class b/bin/jalview/io/JPredFile.class
index d668d00..a3812ce 100644
Binary files a/bin/jalview/io/JPredFile.class and b/bin/jalview/io/JPredFile.class differ
diff --git a/bin/jalview/io/JPredFile.js b/bin/jalview/io/JPredFile.js
index 9dc5044..1975edb 100644
--- a/bin/jalview/io/JPredFile.js
+++ b/bin/jalview/io/JPredFile.js
@@ -1,185 +1,185 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile"], "jalview.io.JPredFile", ["jalview.datamodel.Alignment", "$.Sequence", "jalview.io.JnetAnnotationMaker", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Float", "$.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ids = null;
-this.conf = null;
-this.Scores = null;
-this.Symscores = null;
-this.QuerySeqPosition = 0;
-this.annotSeqs = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "JPredFile", jalview.io.AlignFile);
-Clazz.defineMethod (c$, "setQuerySeqPosition",
-function (QuerySeqPosition) {
-this.QuerySeqPosition = QuerySeqPosition;
-}, "~N");
-Clazz.defineMethod (c$, "getQuerySeqPosition",
-function () {
-return this.QuerySeqPosition;
-});
-Clazz.defineMethod (c$, "getScores",
-function () {
-return this.Scores;
-});
-Clazz.defineMethod (c$, "getSymscores",
-function () {
-return this.Symscores;
-});
-Clazz.defineMethod (c$, "initData",
-function () {
-Clazz.superCall (this, jalview.io.JPredFile, "initData", []);
-this.Scores = new java.util.Hashtable ();
-this.ids = null;
-this.conf = null;
-});
-Clazz.overrideMethod (c$, "parse",
-function () {
-var line;
-this.QuerySeqPosition = -1;
-this.noSeqs = 0;
-var seq_entries = new java.util.Vector ();
-var ids = new java.util.Vector ();
-var Symscores = new java.util.Hashtable ();
-while ((line = this.nextLine ()) != null) {
-var str = new java.util.StringTokenizer (line, ":");
-var id = "";
-if (!str.hasMoreTokens ()) {
-continue;
-}id = str.nextToken ();
-var seqsym = str.nextToken ();
-var symbols = new java.util.StringTokenizer (seqsym, ",");
-var numSymbols = symbols.countTokens ();
-if (numSymbols == 0) {
-continue;
-}if (seqsym.length != (2 * numSymbols)) {
-if (this.Scores.containsKey (id)) {
-var i = 1;
-while (this.Scores.containsKey (id + "_" + i)) {
-i++;
-}
-id = id + "_" + i;
-}var scores = new java.util.Vector ();
-var i = 0;
-var ascore = "dead";
-try {
-while (symbols.hasMoreTokens ()) {
-ascore = symbols.nextToken ();
-var score = new Float (ascore);
-scores.addElement (score);
-}
-this.Scores.put (id, scores);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-i = scores.size ();
-for (var j = 0; j < i; j++) {
-scores.setElementAt ((scores.elementAt (j)).toString (), j);
-}
-scores.addElement (ascore);
-while (symbols.hasMoreTokens ()) {
-ascore = symbols.nextToken ();
-scores.addElement (ascore);
-}
-this.Scores.put (id, scores);
-} else {
-throw e;
-}
-}
-} else if (id.equals ("jnetconf")) {
-id = "Prediction Confidence";
-this.conf = new java.util.Vector (numSymbols);
-for (var i = 0; i < numSymbols; i++) {
-this.conf.setElementAt (symbols.nextToken (), i);
-}
-} else {
-var newseq = new StringBuffer ();
-for (var i = 0; i < numSymbols; i++) {
-newseq.append (symbols.nextToken ());
-}
-if (id.indexOf (";") > -1) {
-seq_entries.addElement (newseq);
-var i = 1;
-var name = id.substring (id.indexOf (";") + 1);
-while (ids.lastIndexOf (name) > -1) {
-name = id.substring (id.indexOf (";") + 1) + "_" + ++i;
-}
-if (this.QuerySeqPosition == -1) this.QuerySeqPosition = ids.size ();
-ids.addElement (name);
-this.noSeqs++;
-} else {
-if (id.equals ("JNETPRED")) {
-id = "Predicted Secondary Structure";
-}seq_entries.addElement (newseq.toString ());
-ids.addElement (id);
-Symscores.put (id, new Integer (ids.size () - 1));
-}}}
-this.maxLength = seq_entries.elementAt (0).toString ().length;
-for (var i = 0; i < ids.size (); i++) {
-var newSeq = new jalview.datamodel.Sequence (ids.elementAt (i).toString (), seq_entries.elementAt (i).toString (), 1, seq_entries.elementAt (i).toString ().length);
-if (this.maxLength != seq_entries.elementAt (i).toString ().length) {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.jpredconcide_entry_has_unexpected_number_of_columns", Clazz.newArray (-1, [ids.elementAt (i).toString ()])));
-}if ((newSeq.getName ().startsWith ("QUERY") || newSeq.getName ().startsWith ("align;")) && (this.QuerySeqPosition == -1)) {
-this.QuerySeqPosition = this.seqs.size ();
-}this.seqs.addElement (newSeq);
-}
-if (this.seqs.size () > 0 && this.QuerySeqPosition > -1) {
-var tal = new jalview.datamodel.Alignment (this.getSeqsAsArray ());
-try {
-jalview.io.JnetAnnotationMaker.add_annotation (this, tal, this.QuerySeqPosition, true);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-tal = null;
-var ex = new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.couldnt_parse_concise_annotation_for_prediction", Clazz.newArray (-1, [e.getMessage ()])));
-e.printStackTrace ();
-throw ex;
-} else {
-throw e;
-}
-}
-this.annotations = new java.util.Vector ();
-var aan = tal.getAlignmentAnnotation ();
-for (var aai = 0; aan != null && aai < aan.length; aai++) {
-this.annotations.addElement (aan[aai]);
-}
-}});
-Clazz.overrideMethod (c$, "print",
-function () {
-return "Not Supported";
-});
-c$.main = Clazz.defineMethod (c$, "main",
-function (args) {
-try {
-var blc = new jalview.io.JPredFile (args[0], "File");
-for (var i = 0; i < blc.seqs.size (); i++) {
-System.out.println ((blc.seqs.elementAt (i)).getName () + "\n" + (blc.seqs.elementAt (i)).getSequenceAsString () + "\n");
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-System.err.println ("Exception " + e);
-} else {
-throw e;
-}
-}
-}, "~A");
-Clazz.defineMethod (c$, "removeNonSequences",
-function () {
-if (this.annotSeqs != null) {
-return;
-}this.annotSeqs = new java.util.Vector ();
-var newseqs = new java.util.Vector ();
-var i = 0;
-var j = this.seqs.size ();
-for (; i < this.QuerySeqPosition; i++) {
-this.annotSeqs.addElement (this.seqs.elementAt (i));
-}
-{
-var sq = this.seqs.elementAt (j - 1);
-if (sq.getName ().toUpperCase ().startsWith ("JPRED")) {
-this.annotSeqs.addElement (sq);
-this.seqs.removeElementAt (--j);
-}}for (; i < j; i++) {
-newseqs.addElement (this.seqs.elementAt (i));
-}
-this.seqs.removeAllElements ();
-this.seqs = newseqs;
-});
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile"], "jalview.io.JPredFile", ["jalview.datamodel.Alignment", "$.Sequence", "jalview.io.JnetAnnotationMaker", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Float", "$.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ids = null;
+this.conf = null;
+this.Scores = null;
+this.Symscores = null;
+this.QuerySeqPosition = 0;
+this.annotSeqs = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "JPredFile", jalview.io.AlignFile);
+Clazz.defineMethod (c$, "setQuerySeqPosition",
+function (QuerySeqPosition) {
+this.QuerySeqPosition = QuerySeqPosition;
+}, "~N");
+Clazz.defineMethod (c$, "getQuerySeqPosition",
+function () {
+return this.QuerySeqPosition;
+});
+Clazz.defineMethod (c$, "getScores",
+function () {
+return this.Scores;
+});
+Clazz.defineMethod (c$, "getSymscores",
+function () {
+return this.Symscores;
+});
+Clazz.defineMethod (c$, "initData",
+function () {
+Clazz.superCall (this, jalview.io.JPredFile, "initData", []);
+this.Scores = new java.util.Hashtable ();
+this.ids = null;
+this.conf = null;
+});
+Clazz.overrideMethod (c$, "parse",
+function () {
+var line;
+this.QuerySeqPosition = -1;
+this.noSeqs = 0;
+var seq_entries = new java.util.Vector ();
+var ids = new java.util.Vector ();
+var Symscores = new java.util.Hashtable ();
+while ((line = this.nextLine ()) != null) {
+var str = new java.util.StringTokenizer (line, ":");
+var id = "";
+if (!str.hasMoreTokens ()) {
+continue;
+}id = str.nextToken ();
+var seqsym = str.nextToken ();
+var symbols = new java.util.StringTokenizer (seqsym, ",");
+var numSymbols = symbols.countTokens ();
+if (numSymbols == 0) {
+continue;
+}if (seqsym.length != (2 * numSymbols)) {
+if (this.Scores.containsKey (id)) {
+var i = 1;
+while (this.Scores.containsKey (id + "_" + i)) {
+i++;
+}
+id = id + "_" + i;
+}var scores = new java.util.Vector ();
+var i = 0;
+var ascore = "dead";
+try {
+while (symbols.hasMoreTokens ()) {
+ascore = symbols.nextToken ();
+var score = new Float (ascore);
+scores.addElement (score);
+}
+this.Scores.put (id, scores);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+i = scores.size ();
+for (var j = 0; j < i; j++) {
+scores.setElementAt ((scores.elementAt (j)).toString (), j);
+}
+scores.addElement (ascore);
+while (symbols.hasMoreTokens ()) {
+ascore = symbols.nextToken ();
+scores.addElement (ascore);
+}
+this.Scores.put (id, scores);
+} else {
+throw e;
+}
+}
+} else if (id.equals ("jnetconf")) {
+id = "Prediction Confidence";
+this.conf = new java.util.Vector (numSymbols);
+for (var i = 0; i < numSymbols; i++) {
+this.conf.setElementAt (symbols.nextToken (), i);
+}
+} else {
+var newseq = new StringBuffer ();
+for (var i = 0; i < numSymbols; i++) {
+newseq.append (symbols.nextToken ());
+}
+if (id.indexOf (";") > -1) {
+seq_entries.addElement (newseq);
+var i = 1;
+var name = id.substring (id.indexOf (";") + 1);
+while (ids.lastIndexOf (name) > -1) {
+name = id.substring (id.indexOf (";") + 1) + "_" + ++i;
+}
+if (this.QuerySeqPosition == -1) this.QuerySeqPosition = ids.size ();
+ids.addElement (name);
+this.noSeqs++;
+} else {
+if (id.equals ("JNETPRED")) {
+id = "Predicted Secondary Structure";
+}seq_entries.addElement (newseq.toString ());
+ids.addElement (id);
+Symscores.put (id, new Integer (ids.size () - 1));
+}}}
+this.maxLength = seq_entries.elementAt (0).toString ().length;
+for (var i = 0; i < ids.size (); i++) {
+var newSeq = new jalview.datamodel.Sequence (ids.elementAt (i).toString (), seq_entries.elementAt (i).toString (), 1, seq_entries.elementAt (i).toString ().length);
+if (this.maxLength != seq_entries.elementAt (i).toString ().length) {
+throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.jpredconcide_entry_has_unexpected_number_of_columns", Clazz.newArray (-1, [ids.elementAt (i).toString ()])));
+}if ((newSeq.getName ().startsWith ("QUERY") || newSeq.getName ().startsWith ("align;")) && (this.QuerySeqPosition == -1)) {
+this.QuerySeqPosition = this.seqs.size ();
+}this.seqs.addElement (newSeq);
+}
+if (this.seqs.size () > 0 && this.QuerySeqPosition > -1) {
+var tal = new jalview.datamodel.Alignment (this.getSeqsAsArray ());
+try {
+jalview.io.JnetAnnotationMaker.add_annotation (this, tal, this.QuerySeqPosition, true);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+tal = null;
+var ex = new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.couldnt_parse_concise_annotation_for_prediction", Clazz.newArray (-1, [e.getMessage ()])));
+e.printStackTrace ();
+throw ex;
+} else {
+throw e;
+}
+}
+this.annotations = new java.util.Vector ();
+var aan = tal.getAlignmentAnnotation ();
+for (var aai = 0; aan != null && aai < aan.length; aai++) {
+this.annotations.addElement (aan[aai]);
+}
+}});
+Clazz.overrideMethod (c$, "print",
+function () {
+return "Not Supported";
+});
+c$.main = Clazz.defineMethod (c$, "main",
+function (args) {
+try {
+var blc = new jalview.io.JPredFile (args[0], "File");
+for (var i = 0; i < blc.seqs.size (); i++) {
+System.out.println ((blc.seqs.elementAt (i)).getName () + "\n" + (blc.seqs.elementAt (i)).getSequenceAsString () + "\n");
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+System.err.println ("Exception " + e);
+} else {
+throw e;
+}
+}
+}, "~A");
+Clazz.defineMethod (c$, "removeNonSequences",
+function () {
+if (this.annotSeqs != null) {
+return;
+}this.annotSeqs = new java.util.Vector ();
+var newseqs = new java.util.Vector ();
+var i = 0;
+var j = this.seqs.size ();
+for (; i < this.QuerySeqPosition; i++) {
+this.annotSeqs.addElement (this.seqs.elementAt (i));
+}
+{
+var sq = this.seqs.elementAt (j - 1);
+if (sq.getName ().toUpperCase ().startsWith ("JPRED")) {
+this.annotSeqs.addElement (sq);
+this.seqs.removeElementAt (--j);
+}}for (; i < j; i++) {
+newseqs.addElement (this.seqs.elementAt (i));
+}
+this.seqs.removeAllElements ();
+this.seqs = newseqs;
+});
+});
diff --git a/bin/jalview/io/JnetAnnotationMaker.class b/bin/jalview/io/JnetAnnotationMaker.class
index 9724528..38b1701 100644
Binary files a/bin/jalview/io/JnetAnnotationMaker.class and b/bin/jalview/io/JnetAnnotationMaker.class differ
diff --git a/bin/jalview/io/JnetAnnotationMaker.js b/bin/jalview/io/JnetAnnotationMaker.js
index f39d55b..e2f51a5 100644
--- a/bin/jalview/io/JnetAnnotationMaker.js
+++ b/bin/jalview/io/JnetAnnotationMaker.js
@@ -1,90 +1,90 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (null, "jalview.io.JnetAnnotationMaker", ["jalview.datamodel.AlignmentAnnotation", "$.Annotation", "jalview.util.MessageManager", "java.lang.Exception", "$.Float"], function () {
-c$ = Clazz.declareType (jalview.io, "JnetAnnotationMaker");
-c$.add_annotation = Clazz.defineMethod (c$, "add_annotation",
-function (prediction, al, firstSeq, noMsa) {
-jalview.io.JnetAnnotationMaker.add_annotation (prediction, al, firstSeq, noMsa, Clazz.castNullAs ("Array"));
-}, "jalview.io.AlignFile,jalview.datamodel.AlignmentI,~N,~B");
-c$.add_annotation = Clazz.defineMethod (c$, "add_annotation",
-function (prediction, al, firstSeq, noMsa, delMap) {
-var i = 0;
-var preds = prediction.getSeqsAsArray ();
-var seqRef = al.getSequenceAt (firstSeq);
-var width = preds[0].getSequence ().length;
-var gapmap = al.getSequenceAt (firstSeq).gapMap ();
-if ((delMap != null && delMap.length > width) || (delMap == null && gapmap.length != width)) {
-throw ( new Exception (jalview.util.MessageManager.formatMessage ("exception.number_of_residues_in_query_sequence_differ_from_prediction", Clazz.newArray (-1, [(delMap == null ? "" : jalview.util.MessageManager.getString ("label.mapped")), al.getSequenceAt (firstSeq).getName (), al.getSequenceAt (firstSeq).getSequenceAsString (), Integer.$valueOf (width).toString ()]))));
-}var annot;
-var annotations = null;
-var existingAnnotations = 0;
-if (al.getAlignmentAnnotation () != null) {
-existingAnnotations = al.getAlignmentAnnotation ().length;
-}var sol = new Array (al.getWidth ());
-var firstsol = true;
-while (i < preds.length) {
-var id = preds[i].getName ().toUpperCase ();
-if (id.startsWith ("LUPAS") || id.startsWith ("JNET") || id.startsWith ("JPRED")) {
-if (id.startsWith ("JNETSOL")) {
-var amnt = (id.endsWith ("25") ? 3 : id.endsWith ("5") ? 6 : 9);
-for (var spos = 0; spos < width; spos++) {
-var sposw = (delMap == null) ? gapmap[spos] : gapmap[delMap[spos]];
-if (firstsol) {
-sol[sposw] = new jalview.datamodel.Annotation (0);
-}if (preds[i].getCharAt (spos) == 'B' && (sol[sposw].value == 0 || sol[sposw].value < amnt)) {
-sol[sposw].value = amnt;
-}}
-firstsol = false;
-} else {
-annotations = new Array (al.getWidth ());
-if (id.equals ("JNETPRED") || id.equals ("JNETPSSM") || id.equals ("JNETFREQ") || id.equals ("JNETHMM") || id.equals ("JNETALIGN") || id.equals ("JPRED")) {
-if (delMap == null) {
-for (var j = 0; j < width; j++) {
-annotations[gapmap[j]] = new jalview.datamodel.Annotation ("", "", preds[i].getCharAt (j), 0);
-}
-} else {
-for (var j = 0; j < width; j++) {
-annotations[gapmap[delMap[j]]] = new jalview.datamodel.Annotation ("", "", preds[i].getCharAt (j), 0);
-}
-}} else if (id.equals ("JNETCONF")) {
-if (delMap == null) {
-for (var j = 0; j < width; j++) {
-var value = new Float (preds[i].getCharAt (j) + "").floatValue ();
-annotations[gapmap[j]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", preds[i].getCharAt (j), value);
-}
-} else {
-for (var j = 0; j < width; j++) {
-var value = new Float (preds[i].getCharAt (j) + "").floatValue ();
-annotations[gapmap[delMap[j]]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", preds[i].getCharAt (j), value);
-}
-}} else {
-if (delMap == null) {
-for (var j = 0; j < width; j++) {
-annotations[gapmap[j]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", ' ', 0);
-}
-} else {
-for (var j = 0; j < width; j++) {
-annotations[gapmap[delMap[j]]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", ' ', 0);
-}
-}}if (id.equals ("JNETCONF")) {
-annot = new jalview.datamodel.AlignmentAnnotation (preds[i].getName (), "JNet Output", annotations, 0, 10, 1);
-} else {
-annot = new jalview.datamodel.AlignmentAnnotation (preds[i].getName (), "JNet Output", annotations);
-}if (seqRef != null) {
-annot.createSequenceMapping (seqRef, 1, true);
-seqRef.addAlignmentAnnotation (annot);
-}al.addAnnotation (annot);
-al.setAnnotationIndex (annot, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
-}if (noMsa) {
-al.deleteSequence (preds[i]);
-}}i++;
-}
-if (!firstsol) {
-annot = new jalview.datamodel.AlignmentAnnotation ("Jnet Burial", "Prediction of Solvent Accessibility levels are0 - Exposed 3 - 25% or more S.A. accessible 6 - 5% or more S.A. accessible 9 - Buried (<5% exposed) ", sol, 0, 9, 1);
-annot.validateRangeAndDisplay ();
-if (seqRef != null) {
-annot.createSequenceMapping (seqRef, 1, true);
-seqRef.addAlignmentAnnotation (annot);
-}al.addAnnotation (annot);
-al.setAnnotationIndex (annot, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
-}}, "jalview.io.AlignFile,jalview.datamodel.AlignmentI,~N,~B,~A");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (null, "jalview.io.JnetAnnotationMaker", ["jalview.datamodel.AlignmentAnnotation", "$.Annotation", "jalview.util.MessageManager", "java.lang.Exception", "$.Float"], function () {
+c$ = Clazz.declareType (jalview.io, "JnetAnnotationMaker");
+c$.add_annotation = Clazz.defineMethod (c$, "add_annotation",
+function (prediction, al, firstSeq, noMsa) {
+jalview.io.JnetAnnotationMaker.add_annotation (prediction, al, firstSeq, noMsa, Clazz.castNullAs ("Array"));
+}, "jalview.io.AlignFile,jalview.datamodel.AlignmentI,~N,~B");
+c$.add_annotation = Clazz.defineMethod (c$, "add_annotation",
+function (prediction, al, firstSeq, noMsa, delMap) {
+var i = 0;
+var preds = prediction.getSeqsAsArray ();
+var seqRef = al.getSequenceAt (firstSeq);
+var width = preds[0].getSequence ().length;
+var gapmap = al.getSequenceAt (firstSeq).gapMap ();
+if ((delMap != null && delMap.length > width) || (delMap == null && gapmap.length != width)) {
+throw ( new Exception (jalview.util.MessageManager.formatMessage ("exception.number_of_residues_in_query_sequence_differ_from_prediction", Clazz.newArray (-1, [(delMap == null ? "" : jalview.util.MessageManager.getString ("label.mapped")), al.getSequenceAt (firstSeq).getName (), al.getSequenceAt (firstSeq).getSequenceAsString (), Integer.$valueOf (width).toString ()]))));
+}var annot;
+var annotations = null;
+var existingAnnotations = 0;
+if (al.getAlignmentAnnotation () != null) {
+existingAnnotations = al.getAlignmentAnnotation ().length;
+}var sol = new Array (al.getWidth ());
+var firstsol = true;
+while (i < preds.length) {
+var id = preds[i].getName ().toUpperCase ();
+if (id.startsWith ("LUPAS") || id.startsWith ("JNET") || id.startsWith ("JPRED")) {
+if (id.startsWith ("JNETSOL")) {
+var amnt = (id.endsWith ("25") ? 3 : id.endsWith ("5") ? 6 : 9);
+for (var spos = 0; spos < width; spos++) {
+var sposw = (delMap == null) ? gapmap[spos] : gapmap[delMap[spos]];
+if (firstsol) {
+sol[sposw] = new jalview.datamodel.Annotation (0);
+}if (preds[i].getCharAt (spos) == 'B' && (sol[sposw].value == 0 || sol[sposw].value < amnt)) {
+sol[sposw].value = amnt;
+}}
+firstsol = false;
+} else {
+annotations = new Array (al.getWidth ());
+if (id.equals ("JNETPRED") || id.equals ("JNETPSSM") || id.equals ("JNETFREQ") || id.equals ("JNETHMM") || id.equals ("JNETALIGN") || id.equals ("JPRED")) {
+if (delMap == null) {
+for (var j = 0; j < width; j++) {
+annotations[gapmap[j]] = new jalview.datamodel.Annotation ("", "", preds[i].getCharAt (j), 0);
+}
+} else {
+for (var j = 0; j < width; j++) {
+annotations[gapmap[delMap[j]]] = new jalview.datamodel.Annotation ("", "", preds[i].getCharAt (j), 0);
+}
+}} else if (id.equals ("JNETCONF")) {
+if (delMap == null) {
+for (var j = 0; j < width; j++) {
+var value = new Float (preds[i].getCharAt (j) + "").floatValue ();
+annotations[gapmap[j]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", preds[i].getCharAt (j), value);
+}
+} else {
+for (var j = 0; j < width; j++) {
+var value = new Float (preds[i].getCharAt (j) + "").floatValue ();
+annotations[gapmap[delMap[j]]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", preds[i].getCharAt (j), value);
+}
+}} else {
+if (delMap == null) {
+for (var j = 0; j < width; j++) {
+annotations[gapmap[j]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", ' ', 0);
+}
+} else {
+for (var j = 0; j < width; j++) {
+annotations[gapmap[delMap[j]]] = new jalview.datamodel.Annotation (preds[i].getCharAt (j) + "", "", ' ', 0);
+}
+}}if (id.equals ("JNETCONF")) {
+annot = new jalview.datamodel.AlignmentAnnotation (preds[i].getName (), "JNet Output", annotations, 0, 10, 1);
+} else {
+annot = new jalview.datamodel.AlignmentAnnotation (preds[i].getName (), "JNet Output", annotations);
+}if (seqRef != null) {
+annot.createSequenceMapping (seqRef, 1, true);
+seqRef.addAlignmentAnnotation (annot);
+}al.addAnnotation (annot);
+al.setAnnotationIndex (annot, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
+}if (noMsa) {
+al.deleteSequence (preds[i]);
+}}i++;
+}
+if (!firstsol) {
+annot = new jalview.datamodel.AlignmentAnnotation ("Jnet Burial", "Prediction of Solvent Accessibility levels are0 - Exposed 3 - 25% or more S.A. accessible 6 - 5% or more S.A. accessible 9 - Buried (<5% exposed) ", sol, 0, 9, 1);
+annot.validateRangeAndDisplay ();
+if (seqRef != null) {
+annot.createSequenceMapping (seqRef, 1, true);
+seqRef.addAlignmentAnnotation (annot);
+}al.addAnnotation (annot);
+al.setAnnotationIndex (annot, al.getAlignmentAnnotation ().length - existingAnnotations - 1);
+}}, "jalview.io.AlignFile,jalview.datamodel.AlignmentI,~N,~B,~A");
+});
diff --git a/bin/jalview/io/MSFfile.class b/bin/jalview/io/MSFfile.class
index 264fda6..5173c4c 100644
Binary files a/bin/jalview/io/MSFfile.class and b/bin/jalview/io/MSFfile.class differ
diff --git a/bin/jalview/io/MSFfile.js b/bin/jalview/io/MSFfile.js
index d80fbdc..ee2e3af 100644
--- a/bin/jalview/io/MSFfile.js
+++ b/bin/jalview/io/MSFfile.js
@@ -1,190 +1,190 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile"], "jalview.io.MSFfile", ["jalview.datamodel.Sequence", "jalview.util.Comparison", "$.Format", "java.lang.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
-c$ = Clazz.declareType (jalview.io, "MSFfile", jalview.io.AlignFile);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.io.MSFfile, []);
-});
-Clazz.overrideMethod (c$, "parse",
-function () {
-var i = 0;
-var seqFlag = false;
-var key = String.instantialize ();
-var headers = new java.util.Vector ();
-var seqhash = new java.util.Hashtable ();
-var line;
-try {
-while ((line = this.nextLine ()) != null) {
-var str = new java.util.StringTokenizer (line);
-while (str.hasMoreTokens ()) {
-var inStr = str.nextToken ();
-if (inStr.indexOf ("Name:") != -1) {
-key = str.nextToken ();
-headers.addElement (key);
-}if (inStr.indexOf ("//") != -1) {
-seqFlag = true;
-}if ((inStr.indexOf ("//") == -1) && (seqFlag == true)) {
-key = inStr;
-var tempseq;
-if (seqhash.containsKey (key)) {
-tempseq = seqhash.get (key);
-} else {
-tempseq = new StringBuffer ();
-seqhash.put (key, tempseq);
-}while (str.hasMoreTokens ()) {
-tempseq.append (str.nextToken ());
-}
-}}
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-System.err.println ("Exception parsing MSFFile " + e);
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-this.noSeqs = headers.size ();
-for (i = 0; i < headers.size (); i++) {
-if (seqhash.get (headers.elementAt (i)) != null) {
-var head = headers.elementAt (i).toString ();
-var seq = seqhash.get (head).toString ();
-if (this.maxLength < head.length) {
-this.maxLength = head.length;
-}seq = seq.$replace ('~', '-');
-var newSeq = this.parseId (head);
-newSeq.setSequence (seq);
-this.seqs.addElement (newSeq);
-} else {
-System.err.println ("MSFFile Parser: Can't find sequence for " + headers.elementAt (i));
-}}
-});
-Clazz.defineMethod (c$, "checkSum",
-function (seq) {
-var check = 0;
-var sequence = seq.toUpperCase ();
-for (var i = 0; i < sequence.length; i++) {
-try {
-var value = sequence.charCodeAt (i);
-if (value != -1) {
-check += (i % 57 + 1) * value;
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Exception during MSF Checksum calculation");
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-}
-return check % 10000;
-}, "~S");
-Clazz.defineMethod (c$, "print",
-function (seqs) {
-var is_NA = jalview.util.Comparison.isNucleotide (seqs);
-var s = new Array (seqs.length);
-var out = new StringBuffer ("!!" + (is_NA ? "NA" : "AA") + "_MULTIPLE_ALIGNMENT 1.0");
-out.append (this.newline);
-out.append (this.newline);
-var max = 0;
-var maxid = 0;
-var i = 0;
-while ((i < seqs.length) && (seqs[i] != null)) {
-s[i] = new jalview.datamodel.Sequence (seqs[i].getName (), seqs[i].getSequenceAsString ().$replace ('-', '.'), seqs[i].getStart (), seqs[i].getEnd ());
-var sb = new StringBuffer ();
-sb.append (s[i].getSequence ());
-for (var ii = 0; ii < sb.length (); ii++) {
-if (sb.charAt (ii) == '.') {
-sb.setCharAt (ii, '~');
-} else {
-break;
-}}
-for (var ii = sb.length () - 1; ii > 0; ii--) {
-if (sb.charAt (ii) == '.') {
-sb.setCharAt (ii, '~');
-} else {
-break;
-}}
-s[i].setSequence (sb.toString ());
-if (s[i].getSequence ().length > max) {
-max = s[i].getSequence ().length;
-}i++;
-}
-var maxLenpad = new jalview.util.Format ("%" + ( String.instantialize ("" + max)).length + "d");
-var maxChkpad = new jalview.util.Format ("%" + ( String.instantialize ("1" + max)).length + "d");
-i = 0;
-var bigChecksum = 0;
-var checksums = Clazz.newIntArray (s.length, 0);
-while (i < s.length) {
-checksums[i] = this.checkSum (s[i].getSequenceAsString ());
-bigChecksum += checksums[i];
-i++;
-}
-var maxNB = 0;
-out.append (" MSF: " + s[0].getSequence ().length + " Type: " + (is_NA ? "N" : "P") + " Check: " + (bigChecksum % 10000) + " ..");
-out.append (this.newline);
-out.append (this.newline);
-out.append (this.newline);
-var nameBlock = new Array (s.length);
-var idBlock = new Array (s.length);
-i = 0;
-while ((i < s.length) && (s[i] != null)) {
-nameBlock[i] = String.instantialize (" Name: " + this.printId (s[i]) + " ");
-idBlock[i] = String.instantialize ("Len: " + maxLenpad.formLong (s[i].getSequence ().length) + " Check: " + maxChkpad.formLong (checksums[i]) + " Weight: 1.00" + this.newline);
-if (s[i].getName ().length > maxid) {
-maxid = s[i].getName ().length;
-}if (nameBlock[i].length > maxNB) {
-maxNB = nameBlock[i].length;
-}i++;
-}
-if (maxid < 10) {
-maxid = 10;
-}if (maxNB < 15) {
-maxNB = 15;
-}var nbFormat = new jalview.util.Format ("%-" + maxNB + "s");
-for (i = 0; (i < s.length) && (s[i] != null); i++) {
-out.append (nbFormat.form (nameBlock[i]) + idBlock[i]);
-}
-maxid++;
-out.append (this.newline);
-out.append (this.newline);
-out.append ("//");
-out.append (this.newline);
-out.append (this.newline);
-var len = 50;
-var nochunks = (Clazz.doubleToInt (max / len)) + 1;
-if ((max % len) == 0) {
-nochunks--;
-}for (i = 0; i < nochunks; i++) {
-var j = 0;
-while ((j < s.length) && (s[j] != null)) {
-var name = this.printId (s[j]);
-out.append ( new jalview.util.Format ("%-" + maxid + "s").form (name + " "));
-for (var k = 0; k < 5; k++) {
-var start = (i * 50) + (k * 10);
-var end = start + 10;
-if ((end < s[j].getSequence ().length) && (start < s[j].getSequence ().length)) {
-out.append (s[j].getSequence (start, end));
-if (k < 4) {
-out.append (" ");
-} else {
-out.append (this.newline);
-}} else {
-if (start < s[j].getSequence ().length) {
-out.append (s[j].getSequenceAsString ().substring (start));
-out.append (this.newline);
-} else {
-if (k == 0) {
-out.append (this.newline);
-}}}}
-j++;
-}
-out.append (this.newline);
-}
-return out.toString ();
-}, "~A");
-Clazz.defineMethod (c$, "print",
-function () {
-return this.print (this.getSeqsAsArray ());
-});
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile"], "jalview.io.MSFfile", ["jalview.datamodel.Sequence", "jalview.util.Comparison", "$.Format", "java.lang.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
+c$ = Clazz.declareType (jalview.io, "MSFfile", jalview.io.AlignFile);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.io.MSFfile, []);
+});
+Clazz.overrideMethod (c$, "parse",
+function () {
+var i = 0;
+var seqFlag = false;
+var key = String.instantialize ();
+var headers = new java.util.Vector ();
+var seqhash = new java.util.Hashtable ();
+var line;
+try {
+while ((line = this.nextLine ()) != null) {
+var str = new java.util.StringTokenizer (line);
+while (str.hasMoreTokens ()) {
+var inStr = str.nextToken ();
+if (inStr.indexOf ("Name:") != -1) {
+key = str.nextToken ();
+headers.addElement (key);
+}if (inStr.indexOf ("//") != -1) {
+seqFlag = true;
+}if ((inStr.indexOf ("//") == -1) && (seqFlag == true)) {
+key = inStr;
+var tempseq;
+if (seqhash.containsKey (key)) {
+tempseq = seqhash.get (key);
+} else {
+tempseq = new StringBuffer ();
+seqhash.put (key, tempseq);
+}while (str.hasMoreTokens ()) {
+tempseq.append (str.nextToken ());
+}
+}}
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+System.err.println ("Exception parsing MSFFile " + e);
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+this.noSeqs = headers.size ();
+for (i = 0; i < headers.size (); i++) {
+if (seqhash.get (headers.elementAt (i)) != null) {
+var head = headers.elementAt (i).toString ();
+var seq = seqhash.get (head).toString ();
+if (this.maxLength < head.length) {
+this.maxLength = head.length;
+}seq = seq.$replace ('~', '-');
+var newSeq = this.parseId (head);
+newSeq.setSequence (seq);
+this.seqs.addElement (newSeq);
+} else {
+System.err.println ("MSFFile Parser: Can't find sequence for " + headers.elementAt (i));
+}}
+});
+Clazz.defineMethod (c$, "checkSum",
+function (seq) {
+var check = 0;
+var sequence = seq.toUpperCase ();
+for (var i = 0; i < sequence.length; i++) {
+try {
+var value = sequence.charCodeAt (i);
+if (value != -1) {
+check += (i % 57 + 1) * value;
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Exception during MSF Checksum calculation");
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+}
+return check % 10000;
+}, "~S");
+Clazz.defineMethod (c$, "print",
+function (seqs) {
+var is_NA = jalview.util.Comparison.isNucleotide (seqs);
+var s = new Array (seqs.length);
+var out = new StringBuffer ("!!" + (is_NA ? "NA" : "AA") + "_MULTIPLE_ALIGNMENT 1.0");
+out.append (this.newline);
+out.append (this.newline);
+var max = 0;
+var maxid = 0;
+var i = 0;
+while ((i < seqs.length) && (seqs[i] != null)) {
+s[i] = new jalview.datamodel.Sequence (seqs[i].getName (), seqs[i].getSequenceAsString ().$replace ('-', '.'), seqs[i].getStart (), seqs[i].getEnd ());
+var sb = new StringBuffer ();
+sb.append (s[i].getSequence ());
+for (var ii = 0; ii < sb.length (); ii++) {
+if (sb.charAt (ii) == '.') {
+sb.setCharAt (ii, '~');
+} else {
+break;
+}}
+for (var ii = sb.length () - 1; ii > 0; ii--) {
+if (sb.charAt (ii) == '.') {
+sb.setCharAt (ii, '~');
+} else {
+break;
+}}
+s[i].setSequence (sb.toString ());
+if (s[i].getSequence ().length > max) {
+max = s[i].getSequence ().length;
+}i++;
+}
+var maxLenpad = new jalview.util.Format ("%" + ( String.instantialize ("" + max)).length + "d");
+var maxChkpad = new jalview.util.Format ("%" + ( String.instantialize ("1" + max)).length + "d");
+i = 0;
+var bigChecksum = 0;
+var checksums = Clazz.newIntArray (s.length, 0);
+while (i < s.length) {
+checksums[i] = this.checkSum (s[i].getSequenceAsString ());
+bigChecksum += checksums[i];
+i++;
+}
+var maxNB = 0;
+out.append (" MSF: " + s[0].getSequence ().length + " Type: " + (is_NA ? "N" : "P") + " Check: " + (bigChecksum % 10000) + " ..");
+out.append (this.newline);
+out.append (this.newline);
+out.append (this.newline);
+var nameBlock = new Array (s.length);
+var idBlock = new Array (s.length);
+i = 0;
+while ((i < s.length) && (s[i] != null)) {
+nameBlock[i] = String.instantialize (" Name: " + this.printId (s[i]) + " ");
+idBlock[i] = String.instantialize ("Len: " + maxLenpad.formLong (s[i].getSequence ().length) + " Check: " + maxChkpad.formLong (checksums[i]) + " Weight: 1.00" + this.newline);
+if (s[i].getName ().length > maxid) {
+maxid = s[i].getName ().length;
+}if (nameBlock[i].length > maxNB) {
+maxNB = nameBlock[i].length;
+}i++;
+}
+if (maxid < 10) {
+maxid = 10;
+}if (maxNB < 15) {
+maxNB = 15;
+}var nbFormat = new jalview.util.Format ("%-" + maxNB + "s");
+for (i = 0; (i < s.length) && (s[i] != null); i++) {
+out.append (nbFormat.form (nameBlock[i]) + idBlock[i]);
+}
+maxid++;
+out.append (this.newline);
+out.append (this.newline);
+out.append ("//");
+out.append (this.newline);
+out.append (this.newline);
+var len = 50;
+var nochunks = (Clazz.doubleToInt (max / len)) + 1;
+if ((max % len) == 0) {
+nochunks--;
+}for (i = 0; i < nochunks; i++) {
+var j = 0;
+while ((j < s.length) && (s[j] != null)) {
+var name = this.printId (s[j]);
+out.append ( new jalview.util.Format ("%-" + maxid + "s").form (name + " "));
+for (var k = 0; k < 5; k++) {
+var start = (i * 50) + (k * 10);
+var end = start + 10;
+if ((end < s[j].getSequence ().length) && (start < s[j].getSequence ().length)) {
+out.append (s[j].getSequence (start, end));
+if (k < 4) {
+out.append (" ");
+} else {
+out.append (this.newline);
+}} else {
+if (start < s[j].getSequence ().length) {
+out.append (s[j].getSequenceAsString ().substring (start));
+out.append (this.newline);
+} else {
+if (k == 0) {
+out.append (this.newline);
+}}}}
+j++;
+}
+out.append (this.newline);
+}
+return out.toString ();
+}, "~A");
+Clazz.defineMethod (c$, "print",
+function () {
+return this.print (this.getSeqsAsArray ());
+});
+});
diff --git a/bin/jalview/io/ModellerDescription.class b/bin/jalview/io/ModellerDescription.class
index 9465d75..16bff0d 100644
Binary files a/bin/jalview/io/ModellerDescription.class and b/bin/jalview/io/ModellerDescription.class differ
diff --git a/bin/jalview/io/ModellerDescription.js b/bin/jalview/io/ModellerDescription.js
index 1232c05..c08736d 100644
--- a/bin/jalview/io/ModellerDescription.js
+++ b/bin/jalview/io/ModellerDescription.js
@@ -1,236 +1,236 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["java.util.Hashtable"], "jalview.io.ModellerDescription", ["jalview.datamodel.DBRefSource", "jalview.jsdev.RegExp", "java.util.StringTokenizer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.seqTypes = null;
-this.Fields = null;
-this.TYPE = 0;
-this.LOCALID = 1;
-this.START = 2;
-this.START_CHAIN = 3;
-this.END = 4;
-this.END_CHAIN = 5;
-this.DESCRIPTION1 = 6;
-this.DESCRIPTION2 = 7;
-this.RESOLUTION = 8;
-this.TAIL = 9;
-this.Types = null;
-this.Padding = null;
-this.fields = null;
-if (!Clazz.isClassDefined ("jalview.io.ModellerDescription.resCode")) {
-jalview.io.ModellerDescription.$ModellerDescription$resCode$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.io, "ModellerDescription");
-Clazz.prepareFields (c$, function () {
-this.seqTypes = Clazz.newArray (-1, ["sequence", "structure", "structureX", "structureN"]);
-this.Fields = Clazz.newArray (-1, ["objectType", "objectId", "startField", "startCode", "endField", "endCode", "description1", "description2", "resolutionField", "tailField"]);
-this.Types = Clazz.newIntArray (-1, [0, 0, 1, 0, 1, 0, 0, 0, 0, 0]);
-this.Padding = Clazz.newCharArray (-1, [' ', ' ', ' ', '.', ' ', '.', '.', '.', '.', '.']);
-this.fields = new java.util.Hashtable ();
-});
-Clazz.makeConstructor (c$,
-function () {
-this.fields.put (this.Fields[9], "");
-});
-Clazz.defineMethod (c$, "validResidueCode",
-($fz = function (field) {
-var val = null;
-var r = jalview.jsdev.RegExp.newRegex (["\\s*((([-0-9]+).?)|FIRST|LAST|@)"]);
-if (!r.search (field)) {
-return null;
-}var value = r.stringMatchedI (3);
-if (value == null) {
-value = r.stringMatchedI (1);
-}try {
-val = Integer.$valueOf (value);
-return Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, field, val);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-return Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, field, null);
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "parseDescription",
-($fz = function (desc) {
-var fields = new java.util.Hashtable ();
-var st = new java.util.StringTokenizer (desc, ":", true);
-var field;
-var type = -1;
-if (st.countTokens () > 0) {
-var i = 0;
-field = st.nextToken (":");
-do {
-if (this.seqTypes[i].equalsIgnoreCase (field)) {
-break;
-}} while (++i < this.seqTypes.length);
-if (i < this.seqTypes.length) {
-st.nextToken ();
-type = i;
-i = 1;
-while (i < 9 && st.hasMoreTokens ()) {
-if ((field = st.nextToken (":")) != null) {
-if (!field.equals (":")) {
-if (this.Types[i] == 1) {
-var val = this.validResidueCode (field);
-if (val != null) {
-fields.put ( String.instantialize (this.Fields[i] + "num"), val);
-} else {
-type = -1;
-};}fields.put (this.Fields[i++], field);
-if (st.hasMoreTokens ()) {
-st.nextToken ();
-}} else {
-i++;
-}}}
-if (i == 9) {
-while (st.hasMoreTokens ()) {
-var tl = st.nextToken (":");
-field += tl.equals (":") ? tl : (":" + tl);
-}
-fields.put (this.Fields[9], field);
-}}}if (type == -1) {
-fields = new java.util.Hashtable ();
-fields.put (this.Fields[9], String.instantialize (desc));
-} else {
-fields.put (this.Fields[0], this.seqTypes[type]);
-}return fields;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.makeConstructor (c$,
-function (desc) {
-if (desc == null) {
-desc = "";
-}this.fields = this.parseDescription (desc);
-}, "~S");
-Clazz.defineMethod (c$, "setStartCode",
-function (v) {
-var r;
-this.fields.put (this.Fields[2] + "num", r = Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, v));
-this.fields.put (this.Fields[2], r.field);
-}, "~N");
-Clazz.defineMethod (c$, "setEndCode",
-function (v) {
-var r;
-this.fields.put (this.Fields[4] + "num", r = Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, v));
-this.fields.put (this.Fields[4], r.field);
-}, "~N");
-Clazz.makeConstructor (c$,
-function (seq) {
-if (seq.getDescription () != null) {
-this.fields = this.parseDescription (seq.getDescription ());
-}if (this.isModellerFieldset ()) {
-if (this.getStartCode () == null || (this.getStartNum () != seq.getStart () && this.getStartCode ().val != null)) {
-this.setStartCode (seq.getStart ());
-}if (this.getEndCode () == null || (this.getEndNum () != seq.getEnd () && this.getStartCode () != null && this.getStartCode ().val != null)) {
-this.setEndCode (seq.getEnd ());
-}} else {
-this.setStartCode (seq.getStart ());
-this.setEndCode (seq.getEnd ());
-this.fields.put (this.Fields[1], seq.getName ());
-var t = 0;
-if (seq.getDatasetSequence () != null && seq.getDatasetSequence ().getDBRef () != null) {
-var dbr = seq.getDatasetSequence ().getDBRef ();
-var i;
-var j;
-for (i = 0, j = dbr.length; i < j; i++) {
-if (dbr[i] != null) {
-if (dbr[i].getSource ().equals (jalview.datamodel.DBRefSource.PDB)) {
-this.fields.put (this.Fields[1], dbr[i].getAccessionId ());
-t = 2;
-break;
-}}}
-}this.fields.put (this.Fields[0], this.seqTypes[t]);
-}}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "isModellerFieldset",
-function () {
-return (this.fields.containsKey (this.Fields[0]));
-});
-Clazz.defineMethod (c$, "getDescriptionLine",
-function () {
-var desc = "";
-var lastfield = this.Fields.length - 1;
-if (this.isModellerFieldset ()) {
-var value;
-for (; lastfield > 6; lastfield--) {
-if (this.fields.containsKey (this.Fields[lastfield])) {
-break;
-}}
-for (var i = 0; i < lastfield; i++) {
-value = this.fields.get (this.Fields[i]);
-if (value != null && value.length > 0) {
-desc += (this.fields.get (this.Fields[i])) + ":";
-} else {
-desc += this.Padding[i] + ":";
-}}
-}if (this.fields.containsKey (this.Fields[lastfield])) {
-desc += this.fields.get (this.Fields[lastfield]);
-} else {
-desc += ".";
-}return desc;
-});
-Clazz.defineMethod (c$, "getStartNum",
-function () {
-var start = 0;
-var val = this.getStartCode ();
-if (val != null && val.val != null) {
-return val.val.intValue ();
-}return start;
-});
-Clazz.defineMethod (c$, "getStartCode",
-function () {
-if (this.isModellerFieldset () && this.fields.containsKey (this.Fields[2] + "num")) {
-return this.fields.get (this.Fields[2] + "num");
-}return null;
-});
-Clazz.defineMethod (c$, "getEndCode",
-function () {
-if (this.isModellerFieldset () && this.fields.containsKey (this.Fields[4] + "num")) {
-return this.fields.get (this.Fields[4] + "num");
-}return null;
-});
-Clazz.defineMethod (c$, "getEndNum",
-function () {
-var end = 0;
-var val = this.getEndCode ();
-if (val != null && val.val != null) {
-return val.val.intValue ();
-}return end;
-});
-Clazz.defineMethod (c$, "updateSequenceI",
-function (newSeq) {
-if (this.isModellerFieldset ()) {
-var rc = this.getStartCode ();
-if (rc != null && rc.val != null) {
-newSeq.setStart (this.getStartNum ());
-} else {
-newSeq.setStart (1);
-}rc = this.getEndCode ();
-if (rc != null && rc.val != null) {
-newSeq.setEnd (this.getEndNum ());
-} else {
-newSeq.setEnd (newSeq.getStart () + newSeq.getLength ());
-}return true;
-}return false;
-}, "jalview.datamodel.SequenceI");
-c$.$ModellerDescription$resCode$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.val = null;
-this.field = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io.ModellerDescription, "resCode");
-Clazz.makeConstructor (c$,
-function (a, b) {
-this.val = b;
-this.field = a;
-}, "~S,Integer");
-Clazz.makeConstructor (c$,
-function (a) {
-this.val = new Integer (a);
-this.field = this.val.toString ();
-}, "~N");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["java.util.Hashtable"], "jalview.io.ModellerDescription", ["jalview.datamodel.DBRefSource", "jalview.jsdev.RegExp", "java.util.StringTokenizer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.seqTypes = null;
+this.Fields = null;
+this.TYPE = 0;
+this.LOCALID = 1;
+this.START = 2;
+this.START_CHAIN = 3;
+this.END = 4;
+this.END_CHAIN = 5;
+this.DESCRIPTION1 = 6;
+this.DESCRIPTION2 = 7;
+this.RESOLUTION = 8;
+this.TAIL = 9;
+this.Types = null;
+this.Padding = null;
+this.fields = null;
+if (!Clazz.isClassDefined ("jalview.io.ModellerDescription.resCode")) {
+jalview.io.ModellerDescription.$ModellerDescription$resCode$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.io, "ModellerDescription");
+Clazz.prepareFields (c$, function () {
+this.seqTypes = Clazz.newArray (-1, ["sequence", "structure", "structureX", "structureN"]);
+this.Fields = Clazz.newArray (-1, ["objectType", "objectId", "startField", "startCode", "endField", "endCode", "description1", "description2", "resolutionField", "tailField"]);
+this.Types = Clazz.newIntArray (-1, [0, 0, 1, 0, 1, 0, 0, 0, 0, 0]);
+this.Padding = Clazz.newCharArray (-1, [' ', ' ', ' ', '.', ' ', '.', '.', '.', '.', '.']);
+this.fields = new java.util.Hashtable ();
+});
+Clazz.makeConstructor (c$,
+function () {
+this.fields.put (this.Fields[9], "");
+});
+Clazz.defineMethod (c$, "validResidueCode",
+($fz = function (field) {
+var val = null;
+var r = jalview.jsdev.RegExp.newRegex (["\\s*((([-0-9]+).?)|FIRST|LAST|@)"]);
+if (!r.search (field)) {
+return null;
+}var value = r.stringMatchedI (3);
+if (value == null) {
+value = r.stringMatchedI (1);
+}try {
+val = Integer.$valueOf (value);
+return Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, field, val);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+return Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, field, null);
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "parseDescription",
+($fz = function (desc) {
+var fields = new java.util.Hashtable ();
+var st = new java.util.StringTokenizer (desc, ":", true);
+var field;
+var type = -1;
+if (st.countTokens () > 0) {
+var i = 0;
+field = st.nextToken (":");
+do {
+if (this.seqTypes[i].equalsIgnoreCase (field)) {
+break;
+}} while (++i < this.seqTypes.length);
+if (i < this.seqTypes.length) {
+st.nextToken ();
+type = i;
+i = 1;
+while (i < 9 && st.hasMoreTokens ()) {
+if ((field = st.nextToken (":")) != null) {
+if (!field.equals (":")) {
+if (this.Types[i] == 1) {
+var val = this.validResidueCode (field);
+if (val != null) {
+fields.put ( String.instantialize (this.Fields[i] + "num"), val);
+} else {
+type = -1;
+};}fields.put (this.Fields[i++], field);
+if (st.hasMoreTokens ()) {
+st.nextToken ();
+}} else {
+i++;
+}}}
+if (i == 9) {
+while (st.hasMoreTokens ()) {
+var tl = st.nextToken (":");
+field += tl.equals (":") ? tl : (":" + tl);
+}
+fields.put (this.Fields[9], field);
+}}}if (type == -1) {
+fields = new java.util.Hashtable ();
+fields.put (this.Fields[9], String.instantialize (desc));
+} else {
+fields.put (this.Fields[0], this.seqTypes[type]);
+}return fields;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.makeConstructor (c$,
+function (desc) {
+if (desc == null) {
+desc = "";
+}this.fields = this.parseDescription (desc);
+}, "~S");
+Clazz.defineMethod (c$, "setStartCode",
+function (v) {
+var r;
+this.fields.put (this.Fields[2] + "num", r = Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, v));
+this.fields.put (this.Fields[2], r.field);
+}, "~N");
+Clazz.defineMethod (c$, "setEndCode",
+function (v) {
+var r;
+this.fields.put (this.Fields[4] + "num", r = Clazz.innerTypeInstance (jalview.io.ModellerDescription.resCode, this, null, v));
+this.fields.put (this.Fields[4], r.field);
+}, "~N");
+Clazz.makeConstructor (c$,
+function (seq) {
+if (seq.getDescription () != null) {
+this.fields = this.parseDescription (seq.getDescription ());
+}if (this.isModellerFieldset ()) {
+if (this.getStartCode () == null || (this.getStartNum () != seq.getStart () && this.getStartCode ().val != null)) {
+this.setStartCode (seq.getStart ());
+}if (this.getEndCode () == null || (this.getEndNum () != seq.getEnd () && this.getStartCode () != null && this.getStartCode ().val != null)) {
+this.setEndCode (seq.getEnd ());
+}} else {
+this.setStartCode (seq.getStart ());
+this.setEndCode (seq.getEnd ());
+this.fields.put (this.Fields[1], seq.getName ());
+var t = 0;
+if (seq.getDatasetSequence () != null && seq.getDatasetSequence ().getDBRef () != null) {
+var dbr = seq.getDatasetSequence ().getDBRef ();
+var i;
+var j;
+for (i = 0, j = dbr.length; i < j; i++) {
+if (dbr[i] != null) {
+if (dbr[i].getSource ().equals (jalview.datamodel.DBRefSource.PDB)) {
+this.fields.put (this.Fields[1], dbr[i].getAccessionId ());
+t = 2;
+break;
+}}}
+}this.fields.put (this.Fields[0], this.seqTypes[t]);
+}}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "isModellerFieldset",
+function () {
+return (this.fields.containsKey (this.Fields[0]));
+});
+Clazz.defineMethod (c$, "getDescriptionLine",
+function () {
+var desc = "";
+var lastfield = this.Fields.length - 1;
+if (this.isModellerFieldset ()) {
+var value;
+for (; lastfield > 6; lastfield--) {
+if (this.fields.containsKey (this.Fields[lastfield])) {
+break;
+}}
+for (var i = 0; i < lastfield; i++) {
+value = this.fields.get (this.Fields[i]);
+if (value != null && value.length > 0) {
+desc += (this.fields.get (this.Fields[i])) + ":";
+} else {
+desc += this.Padding[i] + ":";
+}}
+}if (this.fields.containsKey (this.Fields[lastfield])) {
+desc += this.fields.get (this.Fields[lastfield]);
+} else {
+desc += ".";
+}return desc;
+});
+Clazz.defineMethod (c$, "getStartNum",
+function () {
+var start = 0;
+var val = this.getStartCode ();
+if (val != null && val.val != null) {
+return val.val.intValue ();
+}return start;
+});
+Clazz.defineMethod (c$, "getStartCode",
+function () {
+if (this.isModellerFieldset () && this.fields.containsKey (this.Fields[2] + "num")) {
+return this.fields.get (this.Fields[2] + "num");
+}return null;
+});
+Clazz.defineMethod (c$, "getEndCode",
+function () {
+if (this.isModellerFieldset () && this.fields.containsKey (this.Fields[4] + "num")) {
+return this.fields.get (this.Fields[4] + "num");
+}return null;
+});
+Clazz.defineMethod (c$, "getEndNum",
+function () {
+var end = 0;
+var val = this.getEndCode ();
+if (val != null && val.val != null) {
+return val.val.intValue ();
+}return end;
+});
+Clazz.defineMethod (c$, "updateSequenceI",
+function (newSeq) {
+if (this.isModellerFieldset ()) {
+var rc = this.getStartCode ();
+if (rc != null && rc.val != null) {
+newSeq.setStart (this.getStartNum ());
+} else {
+newSeq.setStart (1);
+}rc = this.getEndCode ();
+if (rc != null && rc.val != null) {
+newSeq.setEnd (this.getEndNum ());
+} else {
+newSeq.setEnd (newSeq.getStart () + newSeq.getLength ());
+}return true;
+}return false;
+}, "jalview.datamodel.SequenceI");
+c$.$ModellerDescription$resCode$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.val = null;
+this.field = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io.ModellerDescription, "resCode");
+Clazz.makeConstructor (c$,
+function (a, b) {
+this.val = b;
+this.field = a;
+}, "~S,Integer");
+Clazz.makeConstructor (c$,
+function (a) {
+this.val = new Integer (a);
+this.field = this.val.toString ();
+}, "~N");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/io/NewickFile.class b/bin/jalview/io/NewickFile.class
index 59a2362..2b1359c 100644
Binary files a/bin/jalview/io/NewickFile.class and b/bin/jalview/io/NewickFile.class differ
diff --git a/bin/jalview/io/NewickFile.js b/bin/jalview/io/NewickFile.js
index 886a07b..2975319 100644
--- a/bin/jalview/io/NewickFile.js
+++ b/bin/jalview/io/NewickFile.js
@@ -1,408 +1,408 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.FileParse", "jalview.jsdev.RegExp"], "jalview.io.NewickFile", ["jalview.datamodel.SequenceNode", "jalview.util.MessageManager", "java.io.BufferedReader", "$.IOException", "java.lang.Float", "$.StringBuffer", "java.util.StringTokenizer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.root = null;
-this.$HasBootstrap = false;
-this.$HasDistances = false;
-this.RootHasDistance = false;
-this.ReplaceUnderscores = false;
-this.printRootInfo = true;
-this.NodeSafeName = null;
-this.QuoteChar = '\'';
-Clazz.instantialize (this, arguments);
-}, jalview.io, "NewickFile", jalview.io.FileParse);
-Clazz.prepareFields (c$, function () {
-this.NodeSafeName = Clazz.newArray (-1, [jalview.jsdev.RegExp.perlCode ("m/[\\[,:'()]/"), jalview.jsdev.RegExp.perlCode ("s/'/''/"), jalview.jsdev.RegExp.perlCode ("s/\\/w/_/")]);
-});
-Clazz.makeConstructor (c$,
-function (inStr) {
-Clazz.superConstructor (this, jalview.io.NewickFile, [inStr, "Paste"]);
-}, "~S");
-Clazz.makeConstructor (c$,
-function (newtree) {
-Clazz.superConstructor (this, jalview.io.NewickFile, []);
-this.root = newtree;
-}, "jalview.datamodel.SequenceNode");
-Clazz.makeConstructor (c$,
-function (newtree, bootstrap) {
-Clazz.superConstructor (this, jalview.io.NewickFile, []);
-this.$HasBootstrap = bootstrap;
-this.root = newtree;
-}, "jalview.datamodel.SequenceNode,~B");
-Clazz.makeConstructor (c$,
-function (newtree, bootstrap, distances) {
-Clazz.superConstructor (this, jalview.io.NewickFile, []);
-this.root = newtree;
-this.$HasBootstrap = bootstrap;
-this.$HasDistances = distances;
-}, "jalview.datamodel.SequenceNode,~B,~B");
-Clazz.makeConstructor (c$,
-function (newtree, bootstrap, distances, rootdistance) {
-Clazz.superConstructor (this, jalview.io.NewickFile, []);
-this.root = newtree;
-this.$HasBootstrap = bootstrap;
-this.$HasDistances = distances;
-this.RootHasDistance = rootdistance;
-}, "jalview.datamodel.SequenceNode,~B,~B,~B");
-Clazz.defineMethod (c$, "ErrorStringrange",
-($fz = function (Error, Er, r, p, 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";
-}, $fz.isPrivate = true, $fz), "~S,~S,~N,~N,~S");
-Clazz.defineMethod (c$, "HasBootstrap",
-function () {
-return this.$HasBootstrap;
-});
-Clazz.defineMethod (c$, "HasDistances",
-function () {
-return this.$HasDistances;
-});
-Clazz.defineMethod (c$, "HasRootDistance",
-function () {
-return this.RootHasDistance;
-});
-Clazz.defineMethod (c$, "parse",
-function () {
-var nf;
-{
-var file = new StringBuffer ();
-while ((nf = this.nextLine ()) != null) {
-file.append (nf);
-}
-nf = file.toString ();
-}this.root = new jalview.datamodel.SequenceNode ();
-var realroot = null;
-var c = this.root;
-var d = -1;
-var cp = 0;
-var Error = null;
-var nodename = null;
-var commentString2 = null;
-var DefDistance = 0.001;
-var DefBootstrap = -1;
-var distance = DefDistance;
-var bootstrap = DefBootstrap;
-var ascending = false;
-var majorsyms = jalview.jsdev.RegExp.newRegex (["[(\\['),;]"]);
-var nextcp = 0;
-var ncp = cp;
-var parsednodename = false;
-while (majorsyms.searchFrom (nf, cp) && (Error == null)) {
-var fcp = majorsyms.matchedFrom ();
-var schar;
-switch (schar = nf.charAt (fcp)) {
-case '(':
-if (ascending) {
-Error = this.ErrorStringrange (Error, "Unexpected '('", 7, fcp, nf);
-continue;
-};d++;
-if (c.right () == null) {
-c.setRight ( new jalview.datamodel.SequenceNode (null, c, null, DefDistance, DefBootstrap, false));
-c = c.right ();
-} else {
-if (c.left () != null) {
-var tmpn = new jalview.datamodel.SequenceNode (null, c, null, 0, 0, true);
-tmpn.SetChildren (c.left (), c.right ());
-c.setRight (tmpn);
-}c.setLeft ( new jalview.datamodel.SequenceNode (null, c, null, DefDistance, DefBootstrap, false));
-c = c.left ();
-}if (realroot == null) {
-realroot = c;
-}nodename = null;
-distance = DefDistance;
-bootstrap = DefBootstrap;
-cp = fcp + 1;
-break;
-case '\'':
-var qnodename = jalview.jsdev.RegExp.newRegex (["'([^']|'')+'"]);
-if (qnodename.searchFrom (nf, fcp)) {
-var nl = qnodename.stringMatched ().length;
-nodename = String.instantialize (qnodename.stringMatched ().substring (1, nl - 1));
-var xpandquotes = jalview.jsdev.RegExp.perlCode ("s/''/'/");
-var widernodename = xpandquotes.replaceAll (nodename);
-nodename = widernodename;
-nextcp = fcp + nl + 1;
-parsednodename = true;
-} else {
-Error = this.ErrorStringrange (Error, "Unterminated quotes for nodename", 7, fcp, nf);
-}break;
-default:
-if (schar == ';') {
-if (d != -1) {
-Error = this.ErrorStringrange (Error, "Wayward semicolon (depth=" + d + ")", 7, fcp, nf);
-}}if (schar == '[') {
-var comment = jalview.jsdev.RegExp.newRegex (["]"]);
-if (comment.searchFrom (nf, fcp)) {
-nextcp = comment.matchedFrom () + 1;
-this.warningMessage = "Tree file contained comments which may confuse input algorithm.";
-break;
-} else {
-Error = this.ErrorStringrange (Error, "Unterminated comment", 3, fcp, nf);
-};}var fstring = nf.substring (ncp, fcp);
-while (fstring.indexOf (']') > -1) {
-var cstart = fstring.indexOf ('[');
-var cend = fstring.indexOf (']');
-commentString2 = fstring.substring (cstart + 1, cend);
-fstring = fstring.substring (0, cstart) + fstring.substring (cend + 1);
-}
-var uqnodename = jalview.jsdev.RegExp.newRegex (["\\b([^' :;\\](),]+)"]);
-var nbootstrap = jalview.jsdev.RegExp.newRegex (["\\s*([0-9+]+)\\s*:"]);
-var ndist = jalview.jsdev.RegExp.newRegex ([":([-0-9Ee.+]+)"]);
-if (!parsednodename && uqnodename.search (fstring) && ((uqnodename.matchedFromI (1) == 0) || (fstring.charAt (uqnodename.matchedFromI (1) - 1) != ':'))) {
-if (nodename == null) {
-if (this.ReplaceUnderscores) {
-nodename = uqnodename.stringMatchedI (1).$replace ('_', ' ');
-} else {
-nodename = uqnodename.stringMatchedI (1);
-}} else {
-Error = this.ErrorStringrange (Error, "File has broken algorithm - overwritten nodename", 10, fcp, nf);
-}}if (nbootstrap.search (fstring)) {
-if (nbootstrap.stringMatchedI (1).equals (uqnodename.stringMatchedI (1))) {
-nodename = null;
-}if (nodename == null || nodename.length == 0 || nbootstrap.matchedFromI (1) > (uqnodename.matchedFromI (1) + uqnodename.stringMatched ().length)) {
-try {
-bootstrap = ( new Integer (nbootstrap.stringMatchedI (1))).intValue ();
-this.$HasBootstrap = true;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-Error = this.ErrorStringrange (Error, "Can't parse bootstrap value", 4, ncp + nbootstrap.matchedFrom (), nf);
-} else {
-throw e;
-}
-}
-}}var nodehasdistance = false;
-if (ndist.search (fstring)) {
-try {
-distance = ( new Float (ndist.stringMatchedI (1))).floatValue ();
-this.$HasDistances = true;
-nodehasdistance = true;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-Error = this.ErrorStringrange (Error, "Can't parse node distance value", 7, ncp + ndist.matchedFrom (), nf);
-} else {
-throw e;
-}
-}
-}if (ascending) {
-c.setName (nodename);
-c.dist = (this.$HasDistances) ? distance : DefDistance;
-c.setBootstrap ((this.$HasBootstrap) ? bootstrap : DefBootstrap);
-if (c === realroot) {
-this.RootHasDistance = nodehasdistance;
-}this.parseNHXNodeProps (c, commentString2);
-commentString2 = null;
-} else {
-var newnode = new jalview.datamodel.SequenceNode (null, c, nodename, (this.$HasDistances) ? distance : DefDistance, (this.$HasBootstrap) ? bootstrap : DefBootstrap, false);
-this.parseNHXNodeProps (c, commentString2);
-commentString2 = null;
-if (c.right () == null) {
-c.setRight (newnode);
-} else {
-if (c.left () == null) {
-c.setLeft (newnode);
-} else {
-var newdummy = new jalview.datamodel.SequenceNode (null, c, null, (this.$HasDistances ? 0 : DefDistance), 0, true);
-newdummy.SetChildren (c.left (), newnode);
-c.setLeft (newdummy);
-}}}if (ascending) {
-c = c.AscendTree ();
-if ((d > -1) && (c == null)) {
-Error = this.ErrorStringrange (Error, "File broke algorithm: Lost place in tree (is there an extra ')' ?)", 7, fcp, nf);
-}}if (nf.charAt (fcp) == ')') {
-d--;
-ascending = true;
-} else {
-if (nf.charAt (fcp) == ',') {
-if (ascending) {
-ascending = false;
-} else {
-if ((c.left () != null) && (!c.left ().isLeaf ())) {
-c = c.left ();
-}}}}nodename = null;
-distance = DefDistance;
-bootstrap = DefBootstrap;
-commentString2 = null;
-parsednodename = false;
-}
-if (nextcp == 0) {
-ncp = cp = fcp + 1;
-} else {
-cp = nextcp;
-nextcp = 0;
-}}
-if (Error != null) {
-throw ( new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.newfile", Clazz.newArray (-1, [Error.toString ()]))));
-}if (this.root == null) {
-throw ( new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.newfile", Clazz.newArray (-1, [jalview.util.MessageManager.getString ("label.no_tree_read_in")]))));
-}this.root = this.root.right ().detach ();
-if (!this.RootHasDistance) {
-this.root.dist = (this.$HasDistances) ? 0 : DefDistance;
-}});
-Clazz.defineMethod (c$, "parseNHXNodeProps",
-($fz = function (c, commentString) {
-if (commentString != null && commentString.startsWith ("&&NHX")) {
-var st = new java.util.StringTokenizer (commentString.substring (5), ":");
-while (st.hasMoreTokens ()) {
-var tok = st.nextToken ();
-var colpos = tok.indexOf ("=");
-if (colpos > -1) {
-var code = tok.substring (0, colpos);
-var value = tok.substring (colpos + 1);
-try {
-if (code.toLowerCase ().equals ("b")) {
-var v = -1;
-var iv = new Float (value);
-v = iv.intValue ();
-c.setBootstrap (v);
-this.$HasBootstrap = true;
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.err.println ("Couldn't parse code '" + code + "' = '" + value + "'");
-e.printStackTrace (System.err);
-} else {
-throw e;
-}
-}
-}}
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode,~S");
-Clazz.defineMethod (c$, "getTree",
-function () {
-return this.root;
-});
-Clazz.defineMethod (c$, "print",
-function () {
-{
-var tf = new StringBuffer ();
-this.print (tf, this.root);
-return (tf.append (";").toString ());
-}});
-Clazz.defineMethod (c$, "print",
-function (withbootstraps) {
-{
-var boots = this.$HasBootstrap;
-this.$HasBootstrap = withbootstraps;
-var rv = this.print ();
-this.$HasBootstrap = boots;
-return rv;
-}}, "~B");
-Clazz.defineMethod (c$, "print",
-function (withbootstraps, withdists) {
-{
-var dists = this.$HasDistances;
-this.$HasDistances = withdists;
-var rv = this.print (withbootstraps);
-this.$HasDistances = dists;
-return rv;
-}}, "~B,~B");
-Clazz.defineMethod (c$, "print",
-function (withbootstraps, withdists, printRootInfo) {
-{
-var rootinfo = printRootInfo;
-this.printRootInfo = printRootInfo;
-var rv = this.print (withbootstraps, withdists);
-this.printRootInfo = rootinfo;
-return rv;
-}}, "~B,~B,~B");
-Clazz.defineMethod (c$, "getQuoteChar",
-function () {
-return this.QuoteChar;
-});
-Clazz.defineMethod (c$, "setQuoteChar",
-function (c) {
-var old = this.QuoteChar;
-this.QuoteChar = c;
-return old;
-}, "~S");
-Clazz.defineMethod (c$, "nodeName",
-($fz = function (name) {
-if (this.NodeSafeName[0].search (name)) {
-return this.QuoteChar + this.NodeSafeName[1].replaceAll (name) + this.QuoteChar;
-} else {
-return this.NodeSafeName[2].replaceAll (name);
-}}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "printNodeField",
-($fz = function (c) {
-return ((c.getName () == null) ? "" : this.nodeName (c.getName ())) + ((this.$HasBootstrap) ? ((c.getBootstrap () > -1) ? ((c.getName () != null ? " " : "") + c.getBootstrap ()) : "") : "") + ((this.$HasDistances) ? (":" + c.dist) : "");
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "printRootField",
-($fz = function (root) {
-return (this.printRootInfo) ? (((root.getName () == null) ? "" : this.nodeName (root.getName ())) + ((this.$HasBootstrap) ? ((root.getBootstrap () > -1) ? ((root.getName () != null ? " " : "") + +root.getBootstrap ()) : "") : "") + ((this.RootHasDistance) ? (":" + root.dist) : "")) : "";
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "print",
-function (tf, root) {
-if (root != null) {
-if (root.isLeaf () && this.printRootInfo) {
-tf.append (this.printRootField (root));
-} else {
-if (root.isDummy ()) {
-this._print (tf, root.right ());
-this._print (tf, root.left ());
-} else {
-tf.append ("(");
-this._print (tf, root.right ());
-if (root.left () != null) {
-tf.append (",");
-}this._print (tf, root.left ());
-tf.append (")" + this.printRootField (root));
-}}}}, "StringBuffer,jalview.datamodel.SequenceNode");
-Clazz.defineMethod (c$, "_print",
-function (tf, c) {
-if (c != null) {
-if (c.isLeaf ()) {
-tf.append (this.printNodeField (c));
-} else {
-if (c.isDummy ()) {
-this._print (tf, c.left ());
-if (c.left () != null) {
-tf.append (",");
-}this._print (tf, c.right ());
-} else {
-tf.append ("(");
-this._print (tf, c.right ());
-if (c.left () != null) {
-tf.append (",");
-}this._print (tf, c.left ());
-tf.append (")" + this.printNodeField (c));
-}}}}, "StringBuffer,jalview.datamodel.SequenceNode");
-c$.main = Clazz.defineMethod (c$, "main",
-function (args) {
-try {
-if (args == null || args.length != 1) {
-System.err.println ("Takes one argument - file name of a newick tree file.");
-System.exit (0);
-}var fn = new java.io.File (args[0]);
-var newickfile = new StringBuffer ();
-var treefile = new java.io.BufferedReader ( new java.io.FileReader (fn));
-var l;
-while ((l = treefile.readLine ()) != null) {
-newickfile.append (l);
-}
-treefile.close ();
-System.out.println ("Read file :\n");
-var trf = new jalview.io.NewickFile (args[0], "File");
-trf.parse ();
-System.out.println ("Original file :\n");
-var nonl = jalview.jsdev.RegExp.newRegex (["\n+", ""]);
-System.out.println (nonl.replaceAll (newickfile.toString ()) + "\n");
-System.out.println ("Parsed file.\n");
-System.out.println ("Default output type for original input.\n");
-System.out.println (trf.print ());
-System.out.println ("Without bootstraps.\n");
-System.out.println (trf.print (false));
-System.out.println ("Without distances.\n");
-System.out.println (trf.print (true, false));
-System.out.println ("Without bootstraps but with distanecs.\n");
-System.out.println (trf.print (false, true));
-System.out.println ("Without bootstraps or distanecs.\n");
-System.out.println (trf.print (false, false));
-System.out.println ("With bootstraps and with distances.\n");
-System.out.println (trf.print (true, true));
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-System.err.println ("Exception\n" + e);
-e.printStackTrace ();
-} else {
-throw e;
-}
-}
-}, "~A");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.FileParse", "jalview.jsdev.RegExp"], "jalview.io.NewickFile", ["jalview.datamodel.SequenceNode", "jalview.util.MessageManager", "java.io.BufferedReader", "$.IOException", "java.lang.Float", "$.StringBuffer", "java.util.StringTokenizer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.root = null;
+this.$HasBootstrap = false;
+this.$HasDistances = false;
+this.RootHasDistance = false;
+this.ReplaceUnderscores = false;
+this.printRootInfo = true;
+this.NodeSafeName = null;
+this.QuoteChar = '\'';
+Clazz.instantialize (this, arguments);
+}, jalview.io, "NewickFile", jalview.io.FileParse);
+Clazz.prepareFields (c$, function () {
+this.NodeSafeName = Clazz.newArray (-1, [jalview.jsdev.RegExp.perlCode ("m/[\\[,:'()]/"), jalview.jsdev.RegExp.perlCode ("s/'/''/"), jalview.jsdev.RegExp.perlCode ("s/\\/w/_/")]);
+});
+Clazz.makeConstructor (c$,
+function (inStr) {
+Clazz.superConstructor (this, jalview.io.NewickFile, [inStr, "Paste"]);
+}, "~S");
+Clazz.makeConstructor (c$,
+function (newtree) {
+Clazz.superConstructor (this, jalview.io.NewickFile, []);
+this.root = newtree;
+}, "jalview.datamodel.SequenceNode");
+Clazz.makeConstructor (c$,
+function (newtree, bootstrap) {
+Clazz.superConstructor (this, jalview.io.NewickFile, []);
+this.$HasBootstrap = bootstrap;
+this.root = newtree;
+}, "jalview.datamodel.SequenceNode,~B");
+Clazz.makeConstructor (c$,
+function (newtree, bootstrap, distances) {
+Clazz.superConstructor (this, jalview.io.NewickFile, []);
+this.root = newtree;
+this.$HasBootstrap = bootstrap;
+this.$HasDistances = distances;
+}, "jalview.datamodel.SequenceNode,~B,~B");
+Clazz.makeConstructor (c$,
+function (newtree, bootstrap, distances, rootdistance) {
+Clazz.superConstructor (this, jalview.io.NewickFile, []);
+this.root = newtree;
+this.$HasBootstrap = bootstrap;
+this.$HasDistances = distances;
+this.RootHasDistance = rootdistance;
+}, "jalview.datamodel.SequenceNode,~B,~B,~B");
+Clazz.defineMethod (c$, "ErrorStringrange",
+($fz = function (Error, Er, r, p, 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";
+}, $fz.isPrivate = true, $fz), "~S,~S,~N,~N,~S");
+Clazz.defineMethod (c$, "HasBootstrap",
+function () {
+return this.$HasBootstrap;
+});
+Clazz.defineMethod (c$, "HasDistances",
+function () {
+return this.$HasDistances;
+});
+Clazz.defineMethod (c$, "HasRootDistance",
+function () {
+return this.RootHasDistance;
+});
+Clazz.defineMethod (c$, "parse",
+function () {
+var nf;
+{
+var file = new StringBuffer ();
+while ((nf = this.nextLine ()) != null) {
+file.append (nf);
+}
+nf = file.toString ();
+}this.root = new jalview.datamodel.SequenceNode ();
+var realroot = null;
+var c = this.root;
+var d = -1;
+var cp = 0;
+var Error = null;
+var nodename = null;
+var commentString2 = null;
+var DefDistance = 0.001;
+var DefBootstrap = -1;
+var distance = DefDistance;
+var bootstrap = DefBootstrap;
+var ascending = false;
+var majorsyms = jalview.jsdev.RegExp.newRegex (["[(\\['),;]"]);
+var nextcp = 0;
+var ncp = cp;
+var parsednodename = false;
+while (majorsyms.searchFrom (nf, cp) && (Error == null)) {
+var fcp = majorsyms.matchedFrom ();
+var schar;
+switch (schar = nf.charAt (fcp)) {
+case '(':
+if (ascending) {
+Error = this.ErrorStringrange (Error, "Unexpected '('", 7, fcp, nf);
+continue;
+};d++;
+if (c.right () == null) {
+c.setRight ( new jalview.datamodel.SequenceNode (null, c, null, DefDistance, DefBootstrap, false));
+c = c.right ();
+} else {
+if (c.left () != null) {
+var tmpn = new jalview.datamodel.SequenceNode (null, c, null, 0, 0, true);
+tmpn.SetChildren (c.left (), c.right ());
+c.setRight (tmpn);
+}c.setLeft ( new jalview.datamodel.SequenceNode (null, c, null, DefDistance, DefBootstrap, false));
+c = c.left ();
+}if (realroot == null) {
+realroot = c;
+}nodename = null;
+distance = DefDistance;
+bootstrap = DefBootstrap;
+cp = fcp + 1;
+break;
+case '\'':
+var qnodename = jalview.jsdev.RegExp.newRegex (["'([^']|'')+'"]);
+if (qnodename.searchFrom (nf, fcp)) {
+var nl = qnodename.stringMatched ().length;
+nodename = String.instantialize (qnodename.stringMatched ().substring (1, nl - 1));
+var xpandquotes = jalview.jsdev.RegExp.perlCode ("s/''/'/");
+var widernodename = xpandquotes.replaceAll (nodename);
+nodename = widernodename;
+nextcp = fcp + nl + 1;
+parsednodename = true;
+} else {
+Error = this.ErrorStringrange (Error, "Unterminated quotes for nodename", 7, fcp, nf);
+}break;
+default:
+if (schar == ';') {
+if (d != -1) {
+Error = this.ErrorStringrange (Error, "Wayward semicolon (depth=" + d + ")", 7, fcp, nf);
+}}if (schar == '[') {
+var comment = jalview.jsdev.RegExp.newRegex (["]"]);
+if (comment.searchFrom (nf, fcp)) {
+nextcp = comment.matchedFrom () + 1;
+this.warningMessage = "Tree file contained comments which may confuse input algorithm.";
+break;
+} else {
+Error = this.ErrorStringrange (Error, "Unterminated comment", 3, fcp, nf);
+};}var fstring = nf.substring (ncp, fcp);
+while (fstring.indexOf (']') > -1) {
+var cstart = fstring.indexOf ('[');
+var cend = fstring.indexOf (']');
+commentString2 = fstring.substring (cstart + 1, cend);
+fstring = fstring.substring (0, cstart) + fstring.substring (cend + 1);
+}
+var uqnodename = jalview.jsdev.RegExp.newRegex (["\\b([^' :;\\](),]+)"]);
+var nbootstrap = jalview.jsdev.RegExp.newRegex (["\\s*([0-9+]+)\\s*:"]);
+var ndist = jalview.jsdev.RegExp.newRegex ([":([-0-9Ee.+]+)"]);
+if (!parsednodename && uqnodename.search (fstring) && ((uqnodename.matchedFromI (1) == 0) || (fstring.charAt (uqnodename.matchedFromI (1) - 1) != ':'))) {
+if (nodename == null) {
+if (this.ReplaceUnderscores) {
+nodename = uqnodename.stringMatchedI (1).$replace ('_', ' ');
+} else {
+nodename = uqnodename.stringMatchedI (1);
+}} else {
+Error = this.ErrorStringrange (Error, "File has broken algorithm - overwritten nodename", 10, fcp, nf);
+}}if (nbootstrap.search (fstring)) {
+if (nbootstrap.stringMatchedI (1).equals (uqnodename.stringMatchedI (1))) {
+nodename = null;
+}if (nodename == null || nodename.length == 0 || nbootstrap.matchedFromI (1) > (uqnodename.matchedFromI (1) + uqnodename.stringMatched ().length)) {
+try {
+bootstrap = ( new Integer (nbootstrap.stringMatchedI (1))).intValue ();
+this.$HasBootstrap = true;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+Error = this.ErrorStringrange (Error, "Can't parse bootstrap value", 4, ncp + nbootstrap.matchedFrom (), nf);
+} else {
+throw e;
+}
+}
+}}var nodehasdistance = false;
+if (ndist.search (fstring)) {
+try {
+distance = ( new Float (ndist.stringMatchedI (1))).floatValue ();
+this.$HasDistances = true;
+nodehasdistance = true;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+Error = this.ErrorStringrange (Error, "Can't parse node distance value", 7, ncp + ndist.matchedFrom (), nf);
+} else {
+throw e;
+}
+}
+}if (ascending) {
+c.setName (nodename);
+c.dist = (this.$HasDistances) ? distance : DefDistance;
+c.setBootstrap ((this.$HasBootstrap) ? bootstrap : DefBootstrap);
+if (c === realroot) {
+this.RootHasDistance = nodehasdistance;
+}this.parseNHXNodeProps (c, commentString2);
+commentString2 = null;
+} else {
+var newnode = new jalview.datamodel.SequenceNode (null, c, nodename, (this.$HasDistances) ? distance : DefDistance, (this.$HasBootstrap) ? bootstrap : DefBootstrap, false);
+this.parseNHXNodeProps (c, commentString2);
+commentString2 = null;
+if (c.right () == null) {
+c.setRight (newnode);
+} else {
+if (c.left () == null) {
+c.setLeft (newnode);
+} else {
+var newdummy = new jalview.datamodel.SequenceNode (null, c, null, (this.$HasDistances ? 0 : DefDistance), 0, true);
+newdummy.SetChildren (c.left (), newnode);
+c.setLeft (newdummy);
+}}}if (ascending) {
+c = c.AscendTree ();
+if ((d > -1) && (c == null)) {
+Error = this.ErrorStringrange (Error, "File broke algorithm: Lost place in tree (is there an extra ')' ?)", 7, fcp, nf);
+}}if (nf.charAt (fcp) == ')') {
+d--;
+ascending = true;
+} else {
+if (nf.charAt (fcp) == ',') {
+if (ascending) {
+ascending = false;
+} else {
+if ((c.left () != null) && (!c.left ().isLeaf ())) {
+c = c.left ();
+}}}}nodename = null;
+distance = DefDistance;
+bootstrap = DefBootstrap;
+commentString2 = null;
+parsednodename = false;
+}
+if (nextcp == 0) {
+ncp = cp = fcp + 1;
+} else {
+cp = nextcp;
+nextcp = 0;
+}}
+if (Error != null) {
+throw ( new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.newfile", Clazz.newArray (-1, [Error.toString ()]))));
+}if (this.root == null) {
+throw ( new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.newfile", Clazz.newArray (-1, [jalview.util.MessageManager.getString ("label.no_tree_read_in")]))));
+}this.root = this.root.right ().detach ();
+if (!this.RootHasDistance) {
+this.root.dist = (this.$HasDistances) ? 0 : DefDistance;
+}});
+Clazz.defineMethod (c$, "parseNHXNodeProps",
+($fz = function (c, commentString) {
+if (commentString != null && commentString.startsWith ("&&NHX")) {
+var st = new java.util.StringTokenizer (commentString.substring (5), ":");
+while (st.hasMoreTokens ()) {
+var tok = st.nextToken ();
+var colpos = tok.indexOf ("=");
+if (colpos > -1) {
+var code = tok.substring (0, colpos);
+var value = tok.substring (colpos + 1);
+try {
+if (code.toLowerCase ().equals ("b")) {
+var v = -1;
+var iv = new Float (value);
+v = iv.intValue ();
+c.setBootstrap (v);
+this.$HasBootstrap = true;
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.err.println ("Couldn't parse code '" + code + "' = '" + value + "'");
+e.printStackTrace (System.err);
+} else {
+throw e;
+}
+}
+}}
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode,~S");
+Clazz.defineMethod (c$, "getTree",
+function () {
+return this.root;
+});
+Clazz.defineMethod (c$, "print",
+function () {
+{
+var tf = new StringBuffer ();
+this.print (tf, this.root);
+return (tf.append (";").toString ());
+}});
+Clazz.defineMethod (c$, "print",
+function (withbootstraps) {
+{
+var boots = this.$HasBootstrap;
+this.$HasBootstrap = withbootstraps;
+var rv = this.print ();
+this.$HasBootstrap = boots;
+return rv;
+}}, "~B");
+Clazz.defineMethod (c$, "print",
+function (withbootstraps, withdists) {
+{
+var dists = this.$HasDistances;
+this.$HasDistances = withdists;
+var rv = this.print (withbootstraps);
+this.$HasDistances = dists;
+return rv;
+}}, "~B,~B");
+Clazz.defineMethod (c$, "print",
+function (withbootstraps, withdists, printRootInfo) {
+{
+var rootinfo = printRootInfo;
+this.printRootInfo = printRootInfo;
+var rv = this.print (withbootstraps, withdists);
+this.printRootInfo = rootinfo;
+return rv;
+}}, "~B,~B,~B");
+Clazz.defineMethod (c$, "getQuoteChar",
+function () {
+return this.QuoteChar;
+});
+Clazz.defineMethod (c$, "setQuoteChar",
+function (c) {
+var old = this.QuoteChar;
+this.QuoteChar = c;
+return old;
+}, "~S");
+Clazz.defineMethod (c$, "nodeName",
+($fz = function (name) {
+if (this.NodeSafeName[0].search (name)) {
+return this.QuoteChar + this.NodeSafeName[1].replaceAll (name) + this.QuoteChar;
+} else {
+return this.NodeSafeName[2].replaceAll (name);
+}}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "printNodeField",
+($fz = function (c) {
+return ((c.getName () == null) ? "" : this.nodeName (c.getName ())) + ((this.$HasBootstrap) ? ((c.getBootstrap () > -1) ? ((c.getName () != null ? " " : "") + c.getBootstrap ()) : "") : "") + ((this.$HasDistances) ? (":" + c.dist) : "");
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "printRootField",
+($fz = function (root) {
+return (this.printRootInfo) ? (((root.getName () == null) ? "" : this.nodeName (root.getName ())) + ((this.$HasBootstrap) ? ((root.getBootstrap () > -1) ? ((root.getName () != null ? " " : "") + +root.getBootstrap ()) : "") : "") + ((this.RootHasDistance) ? (":" + root.dist) : "")) : "";
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "print",
+function (tf, root) {
+if (root != null) {
+if (root.isLeaf () && this.printRootInfo) {
+tf.append (this.printRootField (root));
+} else {
+if (root.isDummy ()) {
+this._print (tf, root.right ());
+this._print (tf, root.left ());
+} else {
+tf.append ("(");
+this._print (tf, root.right ());
+if (root.left () != null) {
+tf.append (",");
+}this._print (tf, root.left ());
+tf.append (")" + this.printRootField (root));
+}}}}, "StringBuffer,jalview.datamodel.SequenceNode");
+Clazz.defineMethod (c$, "_print",
+function (tf, c) {
+if (c != null) {
+if (c.isLeaf ()) {
+tf.append (this.printNodeField (c));
+} else {
+if (c.isDummy ()) {
+this._print (tf, c.left ());
+if (c.left () != null) {
+tf.append (",");
+}this._print (tf, c.right ());
+} else {
+tf.append ("(");
+this._print (tf, c.right ());
+if (c.left () != null) {
+tf.append (",");
+}this._print (tf, c.left ());
+tf.append (")" + this.printNodeField (c));
+}}}}, "StringBuffer,jalview.datamodel.SequenceNode");
+c$.main = Clazz.defineMethod (c$, "main",
+function (args) {
+try {
+if (args == null || args.length != 1) {
+System.err.println ("Takes one argument - file name of a newick tree file.");
+System.exit (0);
+}var fn = new java.io.File (args[0]);
+var newickfile = new StringBuffer ();
+var treefile = new java.io.BufferedReader ( new java.io.FileReader (fn));
+var l;
+while ((l = treefile.readLine ()) != null) {
+newickfile.append (l);
+}
+treefile.close ();
+System.out.println ("Read file :\n");
+var trf = new jalview.io.NewickFile (args[0], "File");
+trf.parse ();
+System.out.println ("Original file :\n");
+var nonl = jalview.jsdev.RegExp.newRegex (["\n+", ""]);
+System.out.println (nonl.replaceAll (newickfile.toString ()) + "\n");
+System.out.println ("Parsed file.\n");
+System.out.println ("Default output type for original input.\n");
+System.out.println (trf.print ());
+System.out.println ("Without bootstraps.\n");
+System.out.println (trf.print (false));
+System.out.println ("Without distances.\n");
+System.out.println (trf.print (true, false));
+System.out.println ("Without bootstraps but with distanecs.\n");
+System.out.println (trf.print (false, true));
+System.out.println ("Without bootstraps or distanecs.\n");
+System.out.println (trf.print (false, false));
+System.out.println ("With bootstraps and with distances.\n");
+System.out.println (trf.print (true, true));
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+System.err.println ("Exception\n" + e);
+e.printStackTrace ();
+} else {
+throw e;
+}
+}
+}, "~A");
+});
diff --git a/bin/jalview/io/PIRFile.class b/bin/jalview/io/PIRFile.class
index 939524f..6d17207 100644
Binary files a/bin/jalview/io/PIRFile.class and b/bin/jalview/io/PIRFile.class differ
diff --git a/bin/jalview/io/PIRFile.js b/bin/jalview/io/PIRFile.js
index fe50c34..f14a6ea 100644
--- a/bin/jalview/io/PIRFile.js
+++ b/bin/jalview/io/PIRFile.js
@@ -1,101 +1,101 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile", "java.util.Vector"], "jalview.io.PIRFile", ["jalview.io.ModellerDescription", "jalview.util.Comparison", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.words = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "PIRFile", jalview.io.AlignFile);
-Clazz.prepareFields (c$, function () {
-this.words = new java.util.Vector ();
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.io.PIRFile, []);
-});
-Clazz.overrideMethod (c$, "parse",
-function () {
-var sequence;
-var line = null;
-var md;
-while ((line = this.nextLine ()) != null) {
-if (line.length == 0) {
-continue;
-}if (line.indexOf ("C;") == 0 || line.indexOf ("#") == 0) {
-continue;
-}var newSeq = this.parseId (line.substring (line.indexOf (";") + 1));
-sequence = new StringBuffer ();
-newSeq.setDescription (this.nextLine ());
-var starFound = false;
-while (!starFound) {
-line = this.nextLine ();
-sequence.append (line);
-if (line == null) {
-break;
-}if (line.indexOf ("*") > -1) {
-starFound = true;
-}}
-if (sequence.length () > 0) {
-sequence.setLength (sequence.length () - 1);
-newSeq.setSequence (sequence.toString ());
-this.seqs.addElement (newSeq);
-md = new jalview.io.ModellerDescription (newSeq.getDescription ());
-md.updateSequenceI (newSeq);
-}}
-});
-Clazz.defineMethod (c$, "print",
-function () {
-return this.print (this.getSeqsAsArray ());
-});
-Clazz.defineMethod (c$, "print",
-function (s) {
-var is_NA = jalview.util.Comparison.isNucleotide (s);
-var len = 72;
-var out = new StringBuffer ();
-var i = 0;
-var md;
-while ((i < s.length) && (s[i] != null)) {
-var seq = s[i].getSequenceAsString ();
-seq = seq + "*";
-if (is_NA) {
-out.append (">N1;" + s[i].getName ());
-out.append (this.newline);
-if (s[i].getDescription () == null) {
-out.append (s[i].getName () + " " + (s[i].getEnd () - s[i].getStart () + 1));
-out.append (is_NA ? " bases" : " residues");
-out.append (this.newline);
-} else {
-out.append (s[i].getDescription ());
-out.append (this.newline);
-}} else {
-if (jalview.io.PIRFile.useModellerOutput) {
-out.append (">P1;" + s[i].getName ());
-out.append (this.newline);
-md = new jalview.io.ModellerDescription (s[i]);
-out.append (md.getDescriptionLine ());
-out.append (this.newline);
-} else {
-out.append (">P1;" + this.printId (s[i]));
-out.append (this.newline);
-if (s[i].getDescription () != null) {
-out.append (s[i].getDescription ());
-out.append (this.newline);
-} else {
-out.append (s[i].getName () + " " + (s[i].getEnd () - s[i].getStart () + 1) + " residues");
-out.append (this.newline);
-}}}var nochunks = (Clazz.doubleToInt (seq.length / len)) + 1;
-for (var j = 0; j < nochunks; j++) {
-var start = j * len;
-var end = start + len;
-if (end < seq.length) {
-out.append (seq.substring (start, end));
-out.append (this.newline);
-} else if (start < seq.length) {
-out.append (seq.substring (start));
-out.append (this.newline);
-}}
-i++;
-}
-return out.toString ();
-}, "~A");
-Clazz.defineStatics (c$,
-"useModellerOutput", false);
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile", "java.util.Vector"], "jalview.io.PIRFile", ["jalview.io.ModellerDescription", "jalview.util.Comparison", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.words = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "PIRFile", jalview.io.AlignFile);
+Clazz.prepareFields (c$, function () {
+this.words = new java.util.Vector ();
+});
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.io.PIRFile, []);
+});
+Clazz.overrideMethod (c$, "parse",
+function () {
+var sequence;
+var line = null;
+var md;
+while ((line = this.nextLine ()) != null) {
+if (line.length == 0) {
+continue;
+}if (line.indexOf ("C;") == 0 || line.indexOf ("#") == 0) {
+continue;
+}var newSeq = this.parseId (line.substring (line.indexOf (";") + 1));
+sequence = new StringBuffer ();
+newSeq.setDescription (this.nextLine ());
+var starFound = false;
+while (!starFound) {
+line = this.nextLine ();
+sequence.append (line);
+if (line == null) {
+break;
+}if (line.indexOf ("*") > -1) {
+starFound = true;
+}}
+if (sequence.length () > 0) {
+sequence.setLength (sequence.length () - 1);
+newSeq.setSequence (sequence.toString ());
+this.seqs.addElement (newSeq);
+md = new jalview.io.ModellerDescription (newSeq.getDescription ());
+md.updateSequenceI (newSeq);
+}}
+});
+Clazz.defineMethod (c$, "print",
+function () {
+return this.print (this.getSeqsAsArray ());
+});
+Clazz.defineMethod (c$, "print",
+function (s) {
+var is_NA = jalview.util.Comparison.isNucleotide (s);
+var len = 72;
+var out = new StringBuffer ();
+var i = 0;
+var md;
+while ((i < s.length) && (s[i] != null)) {
+var seq = s[i].getSequenceAsString ();
+seq = seq + "*";
+if (is_NA) {
+out.append (">N1;" + s[i].getName ());
+out.append (this.newline);
+if (s[i].getDescription () == null) {
+out.append (s[i].getName () + " " + (s[i].getEnd () - s[i].getStart () + 1));
+out.append (is_NA ? " bases" : " residues");
+out.append (this.newline);
+} else {
+out.append (s[i].getDescription ());
+out.append (this.newline);
+}} else {
+if (jalview.io.PIRFile.useModellerOutput) {
+out.append (">P1;" + s[i].getName ());
+out.append (this.newline);
+md = new jalview.io.ModellerDescription (s[i]);
+out.append (md.getDescriptionLine ());
+out.append (this.newline);
+} else {
+out.append (">P1;" + this.printId (s[i]));
+out.append (this.newline);
+if (s[i].getDescription () != null) {
+out.append (s[i].getDescription ());
+out.append (this.newline);
+} else {
+out.append (s[i].getName () + " " + (s[i].getEnd () - s[i].getStart () + 1) + " residues");
+out.append (this.newline);
+}}}var nochunks = (Clazz.doubleToInt (seq.length / len)) + 1;
+for (var j = 0; j < nochunks; j++) {
+var start = j * len;
+var end = start + len;
+if (end < seq.length) {
+out.append (seq.substring (start, end));
+out.append (this.newline);
+} else if (start < seq.length) {
+out.append (seq.substring (start));
+out.append (this.newline);
+}}
+i++;
+}
+return out.toString ();
+}, "~A");
+Clazz.defineStatics (c$,
+"useModellerOutput", false);
+});
diff --git a/bin/jalview/io/PfamFile.js b/bin/jalview/io/PfamFile.js
index c094356..47e9cc1 100644
--- a/bin/jalview/io/PfamFile.js
+++ b/bin/jalview/io/PfamFile.js
@@ -1,76 +1,76 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile"], "jalview.io.PfamFile", ["jalview.util.Format", "$.MessageManager", "java.io.IOException", "java.lang.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
-c$ = Clazz.declareType (jalview.io, "PfamFile", jalview.io.AlignFile);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.io.PfamFile, []);
-});
-Clazz.overrideMethod (c$, "parse",
-function () {
-var i = 0;
-var line;
-var seqhash = new java.util.Hashtable ();
-var headers = new java.util.Vector ();
-while ((line = this.nextLine ()) != null) {
-if (line.indexOf (" ") != 0) {
-if (line.indexOf ("#") != 0) {
-var str = new java.util.StringTokenizer (line, " ");
-var id = "";
-if (str.hasMoreTokens ()) {
-id = str.nextToken ();
-var tempseq;
-if (seqhash.containsKey (id)) {
-tempseq = seqhash.get (id);
-} else {
-tempseq = new StringBuffer ();
-seqhash.put (id, tempseq);
-}if (!(headers.contains (id))) {
-headers.addElement (id);
-}if (str.hasMoreTokens ()) {
-tempseq.append (str.nextToken ());
-}}}}}
-this.noSeqs = headers.size ();
-if (this.noSeqs < 1) {
-throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.pfam_no_sequences_found"));
-}for (i = 0; i < headers.size (); i++) {
-if (seqhash.get (headers.elementAt (i)) != null) {
-if (this.maxLength < seqhash.get (headers.elementAt (i)).toString ().length) {
-this.maxLength = seqhash.get (headers.elementAt (i)).toString ().length;
-}var newSeq = this.parseId (headers.elementAt (i).toString ());
-newSeq.setSequence (seqhash.get (headers.elementAt (i).toString ()).toString ());
-this.seqs.addElement (newSeq);
-} else {
-System.err.println ("PFAM File reader: Can't find sequence for " + headers.elementAt (i));
-}}
-});
-Clazz.defineMethod (c$, "print",
-function (s) {
-var out = new StringBuffer ("");
-var max = 0;
-var maxid = 0;
-var i = 0;
-while ((i < s.length) && (s[i] != null)) {
-var tmp = this.printId (s[i]);
-if (s[i].getSequence ().length > max) {
-max = s[i].getSequence ().length;
-}if (tmp.length > maxid) {
-maxid = tmp.length;
-}i++;
-}
-if (maxid < 15) {
-maxid = 15;
-}var j = 0;
-while ((j < s.length) && (s[j] != null)) {
-out.append ( new jalview.util.Format ("%-" + maxid + "s").form (this.printId (s[j]) + " "));
-out.append (s[j].getSequenceAsString ());
-out.append (this.newline);
-j++;
-}
-out.append (this.newline);
-return out.toString ();
-}, "~A");
-Clazz.defineMethod (c$, "print",
-function () {
-return this.print (this.getSeqsAsArray ());
-});
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile"], "jalview.io.PfamFile", ["jalview.util.Format", "$.MessageManager", "java.io.IOException", "java.lang.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () {
+c$ = Clazz.declareType (jalview.io, "PfamFile", jalview.io.AlignFile);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.io.PfamFile, []);
+});
+Clazz.overrideMethod (c$, "parse",
+function () {
+var i = 0;
+var line;
+var seqhash = new java.util.Hashtable ();
+var headers = new java.util.Vector ();
+while ((line = this.nextLine ()) != null) {
+if (line.indexOf (" ") != 0) {
+if (line.indexOf ("#") != 0) {
+var str = new java.util.StringTokenizer (line, " ");
+var id = "";
+if (str.hasMoreTokens ()) {
+id = str.nextToken ();
+var tempseq;
+if (seqhash.containsKey (id)) {
+tempseq = seqhash.get (id);
+} else {
+tempseq = new StringBuffer ();
+seqhash.put (id, tempseq);
+}if (!(headers.contains (id))) {
+headers.addElement (id);
+}if (str.hasMoreTokens ()) {
+tempseq.append (str.nextToken ());
+}}}}}
+this.noSeqs = headers.size ();
+if (this.noSeqs < 1) {
+throw new java.io.IOException (jalview.util.MessageManager.getString ("exception.pfam_no_sequences_found"));
+}for (i = 0; i < headers.size (); i++) {
+if (seqhash.get (headers.elementAt (i)) != null) {
+if (this.maxLength < seqhash.get (headers.elementAt (i)).toString ().length) {
+this.maxLength = seqhash.get (headers.elementAt (i)).toString ().length;
+}var newSeq = this.parseId (headers.elementAt (i).toString ());
+newSeq.setSequence (seqhash.get (headers.elementAt (i).toString ()).toString ());
+this.seqs.addElement (newSeq);
+} else {
+System.err.println ("PFAM File reader: Can't find sequence for " + headers.elementAt (i));
+}}
+});
+Clazz.defineMethod (c$, "print",
+function (s) {
+var out = new StringBuffer ("");
+var max = 0;
+var maxid = 0;
+var i = 0;
+while ((i < s.length) && (s[i] != null)) {
+var tmp = this.printId (s[i]);
+if (s[i].getSequence ().length > max) {
+max = s[i].getSequence ().length;
+}if (tmp.length > maxid) {
+maxid = tmp.length;
+}i++;
+}
+if (maxid < 15) {
+maxid = 15;
+}var j = 0;
+while ((j < s.length) && (s[j] != null)) {
+out.append ( new jalview.util.Format ("%-" + maxid + "s").form (this.printId (s[j]) + " "));
+out.append (s[j].getSequenceAsString ());
+out.append (this.newline);
+j++;
+}
+out.append (this.newline);
+return out.toString ();
+}, "~A");
+Clazz.defineMethod (c$, "print",
+function () {
+return this.print (this.getSeqsAsArray ());
+});
+});
diff --git a/bin/jalview/io/PhylipFile.js b/bin/jalview/io/PhylipFile.js
index 74e851f..0cd22ea 100644
--- a/bin/jalview/io/PhylipFile.js
+++ b/bin/jalview/io/PhylipFile.js
@@ -1,103 +1,103 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile"], "jalview.io.PhylipFile", ["java.io.IOException", "java.lang.StringBuffer"], function () {
-c$ = Clazz.declareType (jalview.io, "PhylipFile", jalview.io.AlignFile);
-Clazz.overrideMethod (c$, "parse",
-function () {
-try {
-var line = this.nextLine ();
-var lineElements = line.trim ().$plit ("\\s+");
-if (lineElements.length < 2) {
-throw new java.io.IOException ("First line must contain the number of specifies and number of characters");
-}var numberSpecies = Integer.parseInt (lineElements[0]);
-var numberCharacters = Integer.parseInt (lineElements[1]);
-if (numberSpecies <= 0) {
-return;
-}var sequenceElements = new Array (numberSpecies);
-var sequences = new Array (numberSpecies);
-for (var i = 0; i < numberSpecies; i++) {
-line = this.nextLine ();
-var potentialName = line.substring (0, 10);
-var tabIndex = potentialName.indexOf ('\t');
-if (tabIndex == -1) {
-sequenceElements[i] = this.parseId (this.validateName (potentialName));
-sequences[i] = new StringBuffer (this.removeWhitespace (line.substring (10)));
-} else {
-sequenceElements[i] = this.parseId (this.validateName (potentialName.substring (0, tabIndex)));
-sequences[i] = new StringBuffer (this.removeWhitespace (line.substring (tabIndex)));
-}}
-if ((sequences[0]).length () != numberCharacters) {
-var i = 0;
-for (line = this.nextLine (); line != null; line = this.nextLine ()) {
-if (line.length > 0) {
-sequences[i++].append (this.removeWhitespace (line));
-}if (i == sequences.length) {
-i = 0;
-}}
-}for (var i = 0; i < numberSpecies; i++) {
-if (sequences[i].length () != numberCharacters) {
-throw new java.io.IOException (sequenceElements[i].getName () + " sequence is incorrect length - should be " + numberCharacters + " but is " + sequences[i].length ());
-}sequenceElements[i].setSequence (sequences[i].toString ());
-this.seqs.add (sequenceElements[i]);
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-System.err.println ("Exception parsing PHYLIP file " + e);
-e.printStackTrace (System.err);
-throw e;
-} else {
-throw e;
-}
-}
-});
-Clazz.defineMethod (c$, "removeWhitespace",
-($fz = function (txt) {
-return txt.replaceAll ("\\s*", "");
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "validateName",
-($fz = function (name) {
-var invalidCharacters = Clazz.newCharArray (-1, ['(', ')', '[', ']', ':', ';', ',']);
-for (var c, $c = 0, $$c = invalidCharacters; $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
-if (name.indexOf (c) > -1) {
-throw new java.io.IOException ("Species name contains illegal character " + c);
-}}
-return name;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.overrideMethod (c$, "print",
-function () {
-var sb = new StringBuffer (Integer.toString (this.seqs.size ()));
-sb.append (" ");
-sb.append ((this.seqs.size () > 0) ? Integer.toString (this.seqs.get (0).getSequence ().length) : "0").append (this.newline);
-var sequential = false;
-var numInterleavedColumns = 60;
-var sequenceLength = 0;
-for (var s, $s = this.seqs.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
-var name = s.getName ();
-if (name.length > 10) {
-name = name.substring (0, 10);
-} else {
-name = String.format ("%1$-10s", [s.getName ()]);
-}sb.append (name);
-if (sequential) {
-sb.append (s.getSequence ());
-} else {
-sequenceLength = s.getSequence ().length;
-sb.append (s.getSequence (0, Math.min (numInterleavedColumns, sequenceLength)));
-}sb.append (this.newline);
-}
-if (!sequential && sequenceLength > numInterleavedColumns) {
-var numMatrics = Clazz.doubleToInt (sequenceLength / numInterleavedColumns);
-if ((sequenceLength % numInterleavedColumns) > 0) {
-numMatrics++;
-}for (var i = 1; i < numMatrics; i++) {
-sb.append (this.newline);
-var start = i * numInterleavedColumns;
-for (var s, $s = this.seqs.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
-sb.append (s.getSequence (start, Math.min (start + numInterleavedColumns, sequenceLength))).append (this.newline);
-}
-}
-}return sb.toString ();
-});
-Clazz.defineStatics (c$,
-"FILE_EXT", "phy",
-"FILE_DESC", "PHYLIP");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile"], "jalview.io.PhylipFile", ["java.io.IOException", "java.lang.StringBuffer"], function () {
+c$ = Clazz.declareType (jalview.io, "PhylipFile", jalview.io.AlignFile);
+Clazz.overrideMethod (c$, "parse",
+function () {
+try {
+var line = this.nextLine ();
+var lineElements = line.trim ().$plit ("\\s+");
+if (lineElements.length < 2) {
+throw new java.io.IOException ("First line must contain the number of specifies and number of characters");
+}var numberSpecies = Integer.parseInt (lineElements[0]);
+var numberCharacters = Integer.parseInt (lineElements[1]);
+if (numberSpecies <= 0) {
+return;
+}var sequenceElements = new Array (numberSpecies);
+var sequences = new Array (numberSpecies);
+for (var i = 0; i < numberSpecies; i++) {
+line = this.nextLine ();
+var potentialName = line.substring (0, 10);
+var tabIndex = potentialName.indexOf ('\t');
+if (tabIndex == -1) {
+sequenceElements[i] = this.parseId (this.validateName (potentialName));
+sequences[i] = new StringBuffer (this.removeWhitespace (line.substring (10)));
+} else {
+sequenceElements[i] = this.parseId (this.validateName (potentialName.substring (0, tabIndex)));
+sequences[i] = new StringBuffer (this.removeWhitespace (line.substring (tabIndex)));
+}}
+if ((sequences[0]).length () != numberCharacters) {
+var i = 0;
+for (line = this.nextLine (); line != null; line = this.nextLine ()) {
+if (line.length > 0) {
+sequences[i++].append (this.removeWhitespace (line));
+}if (i == sequences.length) {
+i = 0;
+}}
+}for (var i = 0; i < numberSpecies; i++) {
+if (sequences[i].length () != numberCharacters) {
+throw new java.io.IOException (sequenceElements[i].getName () + " sequence is incorrect length - should be " + numberCharacters + " but is " + sequences[i].length ());
+}sequenceElements[i].setSequence (sequences[i].toString ());
+this.seqs.add (sequenceElements[i]);
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+System.err.println ("Exception parsing PHYLIP file " + e);
+e.printStackTrace (System.err);
+throw e;
+} else {
+throw e;
+}
+}
+});
+Clazz.defineMethod (c$, "removeWhitespace",
+($fz = function (txt) {
+return txt.replaceAll ("\\s*", "");
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "validateName",
+($fz = function (name) {
+var invalidCharacters = Clazz.newCharArray (-1, ['(', ')', '[', ']', ':', ';', ',']);
+for (var c, $c = 0, $$c = invalidCharacters; $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
+if (name.indexOf (c) > -1) {
+throw new java.io.IOException ("Species name contains illegal character " + c);
+}}
+return name;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.overrideMethod (c$, "print",
+function () {
+var sb = new StringBuffer (Integer.toString (this.seqs.size ()));
+sb.append (" ");
+sb.append ((this.seqs.size () > 0) ? Integer.toString (this.seqs.get (0).getSequence ().length) : "0").append (this.newline);
+var sequential = false;
+var numInterleavedColumns = 60;
+var sequenceLength = 0;
+for (var s, $s = this.seqs.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+var name = s.getName ();
+if (name.length > 10) {
+name = name.substring (0, 10);
+} else {
+name = String.format ("%1$-10s", [s.getName ()]);
+}sb.append (name);
+if (sequential) {
+sb.append (s.getSequence ());
+} else {
+sequenceLength = s.getSequence ().length;
+sb.append (s.getSequence (0, Math.min (numInterleavedColumns, sequenceLength)));
+}sb.append (this.newline);
+}
+if (!sequential && sequenceLength > numInterleavedColumns) {
+var numMatrics = Clazz.doubleToInt (sequenceLength / numInterleavedColumns);
+if ((sequenceLength % numInterleavedColumns) > 0) {
+numMatrics++;
+}for (var i = 1; i < numMatrics; i++) {
+sb.append (this.newline);
+var start = i * numInterleavedColumns;
+for (var s, $s = this.seqs.iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+sb.append (s.getSequence (start, Math.min (start + numInterleavedColumns, sequenceLength))).append (this.newline);
+}
+}
+}return sb.toString ();
+});
+Clazz.defineStatics (c$,
+"FILE_EXT", "phy",
+"FILE_DESC", "PHYLIP");
+});
diff --git a/bin/jalview/io/PileUpfile.class b/bin/jalview/io/PileUpfile.class
index 690574c..d75d06b 100644
Binary files a/bin/jalview/io/PileUpfile.class and b/bin/jalview/io/PileUpfile.class differ
diff --git a/bin/jalview/io/PileUpfile.js b/bin/jalview/io/PileUpfile.js
index b8bb68c..a6effa1 100644
--- a/bin/jalview/io/PileUpfile.js
+++ b/bin/jalview/io/PileUpfile.js
@@ -1,82 +1,82 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.MSFfile"], "jalview.io.PileUpfile", ["jalview.util.Format", "java.lang.StringBuffer"], function () {
-c$ = Clazz.declareType (jalview.io, "PileUpfile", jalview.io.MSFfile);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.io.PileUpfile, []);
-});
-Clazz.defineMethod (c$, "print",
-function () {
-return this.print (this.getSeqsAsArray ());
-});
-Clazz.defineMethod (c$, "print",
-function (s) {
-var out = new StringBuffer ("PileUp");
-out.append (this.newline);
-out.append (this.newline);
-var max = 0;
-var maxid = 0;
-var i = 0;
-var bigChecksum = 0;
-var checksums = Clazz.newIntArray (s.length, 0);
-while (i < s.length) {
-checksums[i] = this.checkSum (s[i].getSequenceAsString ());
-bigChecksum += checksums[i];
-i++;
-}
-out.append (" MSF: " + s[0].getSequence ().length + " Type: P Check: " + bigChecksum % 10000 + " ..");
-out.append (this.newline);
-out.append (this.newline);
-out.append (this.newline);
-i = 0;
-while ((i < s.length) && (s[i] != null)) {
-var seq = s[i].getSequenceAsString ();
-out.append (" Name: " + this.printId (s[i]) + " oo Len: " + seq.length + " Check: " + checksums[i] + " Weight: 1.00");
-out.append (this.newline);
-if (seq.length > max) {
-max = seq.length;
-}if (s[i].getName ().length > maxid) {
-maxid = s[i].getName ().length;
-}i++;
-}
-if (maxid < 10) {
-maxid = 10;
-}maxid++;
-out.append (this.newline);
-out.append (this.newline);
-out.append ("//");
-out.append (this.newline);
-out.append (this.newline);
-var len = 50;
-var nochunks = (Clazz.doubleToInt (max / len)) + 1;
-if ((max % len) == 0) {
-nochunks--;
-}for (i = 0; i < nochunks; i++) {
-var j = 0;
-while ((j < s.length) && (s[j] != null)) {
-var name = this.printId (s[j]);
-out.append ( new jalview.util.Format ("%-" + maxid + "s").form (name + " "));
-for (var k = 0; k < 5; k++) {
-var start = (i * 50) + (k * 10);
-var end = start + 10;
-if ((end < s[j].getSequence ().length) && (start < s[j].getSequence ().length)) {
-out.append (s[j].getSequence (start, end));
-if (k < 4) {
-out.append (" ");
-} else {
-out.append (this.newline);
-}} else {
-if (start < s[j].getSequence ().length) {
-out.append (s[j].getSequenceAsString ().substring (start));
-out.append (this.newline);
-} else {
-if (k == 0) {
-out.append (this.newline);
-}}}}
-j++;
-}
-out.append (this.newline);
-}
-return out.toString ();
-}, "~A");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.MSFfile"], "jalview.io.PileUpfile", ["jalview.util.Format", "java.lang.StringBuffer"], function () {
+c$ = Clazz.declareType (jalview.io, "PileUpfile", jalview.io.MSFfile);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.io.PileUpfile, []);
+});
+Clazz.defineMethod (c$, "print",
+function () {
+return this.print (this.getSeqsAsArray ());
+});
+Clazz.defineMethod (c$, "print",
+function (s) {
+var out = new StringBuffer ("PileUp");
+out.append (this.newline);
+out.append (this.newline);
+var max = 0;
+var maxid = 0;
+var i = 0;
+var bigChecksum = 0;
+var checksums = Clazz.newIntArray (s.length, 0);
+while (i < s.length) {
+checksums[i] = this.checkSum (s[i].getSequenceAsString ());
+bigChecksum += checksums[i];
+i++;
+}
+out.append (" MSF: " + s[0].getSequence ().length + " Type: P Check: " + bigChecksum % 10000 + " ..");
+out.append (this.newline);
+out.append (this.newline);
+out.append (this.newline);
+i = 0;
+while ((i < s.length) && (s[i] != null)) {
+var seq = s[i].getSequenceAsString ();
+out.append (" Name: " + this.printId (s[i]) + " oo Len: " + seq.length + " Check: " + checksums[i] + " Weight: 1.00");
+out.append (this.newline);
+if (seq.length > max) {
+max = seq.length;
+}if (s[i].getName ().length > maxid) {
+maxid = s[i].getName ().length;
+}i++;
+}
+if (maxid < 10) {
+maxid = 10;
+}maxid++;
+out.append (this.newline);
+out.append (this.newline);
+out.append ("//");
+out.append (this.newline);
+out.append (this.newline);
+var len = 50;
+var nochunks = (Clazz.doubleToInt (max / len)) + 1;
+if ((max % len) == 0) {
+nochunks--;
+}for (i = 0; i < nochunks; i++) {
+var j = 0;
+while ((j < s.length) && (s[j] != null)) {
+var name = this.printId (s[j]);
+out.append ( new jalview.util.Format ("%-" + maxid + "s").form (name + " "));
+for (var k = 0; k < 5; k++) {
+var start = (i * 50) + (k * 10);
+var end = start + 10;
+if ((end < s[j].getSequence ().length) && (start < s[j].getSequence ().length)) {
+out.append (s[j].getSequence (start, end));
+if (k < 4) {
+out.append (" ");
+} else {
+out.append (this.newline);
+}} else {
+if (start < s[j].getSequence ().length) {
+out.append (s[j].getSequenceAsString ().substring (start));
+out.append (this.newline);
+} else {
+if (k == 0) {
+out.append (this.newline);
+}}}}
+j++;
+}
+out.append (this.newline);
+}
+return out.toString ();
+}, "~A");
+});
diff --git a/bin/jalview/io/SequenceAnnotationReport.class b/bin/jalview/io/SequenceAnnotationReport.class
index c84960c..53c67b0 100644
Binary files a/bin/jalview/io/SequenceAnnotationReport.class and b/bin/jalview/io/SequenceAnnotationReport.class differ
diff --git a/bin/jalview/io/SequenceAnnotationReport.js b/bin/jalview/io/SequenceAnnotationReport.js
index 4ab2aa6..889211b 100644
--- a/bin/jalview/io/SequenceAnnotationReport.js
+++ b/bin/jalview/io/SequenceAnnotationReport.js
@@ -1,181 +1,181 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (null, "jalview.io.SequenceAnnotationReport", ["jalview.util.DBRefUtils", "$.UrlLink", "java.lang.Float", "java.util.ArrayList"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.linkImageURL = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "SequenceAnnotationReport");
-Clazz.makeConstructor (c$,
-function (linkImageURL) {
-this.linkImageURL = linkImageURL;
-}, "~S");
-Clazz.defineMethod (c$, "appendFeatures",
-function (tooltipText2, rpos, features) {
-this.appendFeatures (tooltipText2, rpos, features, null);
-}, "StringBuffer,~N,java.util.List");
-Clazz.defineMethod (c$, "appendFeatures",
-function (tooltipText2, rpos, features, minmax) {
-var tmpString;
-if (features != null) {
-for (var feature, $feature = features.iterator (); $feature.hasNext () && ((feature = $feature.next ()) || true);) {
-if (feature.getType ().equals ("disulfide bond")) {
-if (feature.getBegin () == rpos || feature.getEnd () == rpos) {
-if (tooltipText2.length () > 6) {
-tooltipText2.append (" ");
-}tooltipText2.append ("disulfide bond " + feature.getBegin () + ":" + feature.getEnd ());
-}} else {
-if (tooltipText2.length () > 6) {
-tooltipText2.append (" ");
-}var linkOnly = feature.getValue ("linkonly") != null;
-if (!linkOnly) {
-tooltipText2.append (feature.getType () + " ");
-if (rpos != 0) {
-tooltipText2.append (feature.begin);
-}if (feature.begin != feature.end) {
-tooltipText2.append (" " + feature.end);
-}if (feature.getDescription () != null && !feature.description.equals (feature.getType ())) {
-tmpString = feature.getDescription ();
-var tmp2up = tmpString.toUpperCase ();
-var startTag = tmp2up.indexOf ("");
-if (startTag > -1) {
-tmpString = tmpString.substring (startTag + 6);
-tmp2up = tmp2up.substring (startTag + 6);
-}var endTag = tmp2up.indexOf ("");
-if (endTag > -1) {
-tmpString = tmpString.substring (0, endTag);
-tmp2up = tmp2up.substring (0, endTag);
-}endTag = tmp2up.indexOf ("");
-if (endTag > -1) {
-tmpString = tmpString.substring (0, endTag);
-}if (startTag > -1) {
-tooltipText2.append ("; " + tmpString);
-} else {
-if (tmpString.indexOf ("<") > -1 || tmpString.indexOf (">") > -1) {
-tmpString = tmpString.replaceAll ("<", "<");
-tmpString = tmpString.replaceAll (">", ">");
-tooltipText2.append ("; ");
-tooltipText2.append (tmpString);
-} else {
-tooltipText2.append ("; " + tmpString);
-}}}if (!Float.isNaN (feature.getScore ())) {
-var rng = (minmax == null) ? null : (minmax.get (feature.getType ()));
-if (rng != null && rng[0] != null && rng[0][0] != rng[0][1]) {
-tooltipText2.append (" Score=" + feature.getScore ());
-}}if (feature.getValue ("status") != null) {
-var status = feature.getValue ("status").toString ();
-if (status.length > 0) {
-tooltipText2.append ("; (" + feature.getValue ("status") + ")");
-}}}}if (feature.links != null) {
-if (this.linkImageURL != null) {
-tooltipText2.append (" ");
-} else {
-for (var urlstring, $urlstring = feature.links.iterator (); $urlstring.hasNext () && ((urlstring = $urlstring.next ()) || true);) {
-try {
-for (var urllink, $urllink = 0, $$urllink = this.createLinksFrom (null, urlstring); $urllink < $$urllink.length && ((urllink = $$urllink[$urllink]) || true); $urllink++) {
-tooltipText2.append (" " + (urllink[0].toLowerCase ().equals (urllink[1].toLowerCase ()) ? urllink[0] : (urllink[0] + ":" + urllink[1])) + " ");
-}
-} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-System.err.println ("problem when creating links from " + urlstring);
-x.printStackTrace ();
-} else {
-throw x;
-}
-}
-}
-}}}
-}}, "StringBuffer,~N,java.util.List,java.util.Hashtable");
-Clazz.defineMethod (c$, "createLinksFrom",
-function (seq, link) {
-var urlSets = new java.util.ArrayList ();
-var uniques = new java.util.ArrayList ();
-var urlLink = new jalview.util.UrlLink (link);
-if (!urlLink.isValid ()) {
-System.err.println (urlLink.getInvalidMessage ());
-return null;
-}var target = urlLink.getTarget ();
-var label = urlLink.getLabel ();
-if (seq != null && urlLink.isDynamic ()) {
-var dbr = jalview.util.DBRefUtils.selectRefs (seq.getDBRef (), Clazz.newArray (-1, [target]));
-var id = seq.getName ();
-var descr = seq.getDescription ();
-if (descr != null && descr.length < 1) {
-descr = null;
-}if (dbr != null) {
-for (var r = 0; r < dbr.length; r++) {
-if (id != null && dbr[r].getAccessionId ().equals (id)) {
-id = null;
-}var urls = urlLink.makeUrls (dbr[r].getAccessionId (), true);
-if (urls != null) {
-for (var u = 0; u < urls.length; u += 2) {
-var unq = urls[u] + "|" + urls[u + 1];
-if (!uniques.contains (unq)) {
-urlSets.add ( Clazz.newArray (-1, [target, label, urls[u], urls[u + 1]]));
-uniques.add (unq);
-}}
-}}
-}if (id != null) {
-var urls = urlLink.makeUrls (id, true);
-if (urls != null) {
-for (var u = 0; u < urls.length; u += 2) {
-var unq = urls[u] + "|" + urls[u + 1];
-if (!uniques.contains (unq)) {
-urlSets.add ( Clazz.newArray (-1, [target, label, urls[u], urls[u + 1]]));
-uniques.add (unq);
-}}
-}}if (descr != null && urlLink.getRegexReplace () != null) {
-var urls = urlLink.makeUrls (descr, true);
-if (urls != null) {
-for (var u = 0; u < urls.length; u += 2) {
-var unq = urls[u] + "|" + urls[u + 1];
-if (!uniques.contains (unq)) {
-urlSets.add ( Clazz.newArray (-1, [target, label, urls[u], urls[u + 1]]));
-uniques.add (unq);
-}}
-}}} else {
-var unq = label + "|" + urlLink.getUrl_prefix ();
-if (!uniques.contains (unq)) {
-uniques.add (unq);
-urlSets.add ( Clazz.newArray (-1, [target, label, null, urlLink.getUrl_prefix ()]));
-}}return urlSets.toArray ( Clazz.newArray (-1, []));
-}, "jalview.datamodel.SequenceI,~S");
-Clazz.defineMethod (c$, "createSequenceAnnotationReport",
-function (tip, sequence, showDbRefs, showNpFeats, minmax) {
-this.createSequenceAnnotationReport (tip, sequence, showDbRefs, showNpFeats, true, minmax);
-}, "StringBuffer,jalview.datamodel.SequenceI,~B,~B,java.util.Hashtable");
-Clazz.defineMethod (c$, "createSequenceAnnotationReport",
-function (tip, sequence, showDbRefs, showNpFeats, tableWrap, minmax) {
-var tmp;
-tip.append ("");
-var maxWidth = 0;
-if (sequence.getDescription () != null) {
-tmp = sequence.getDescription ();
-tip.append (" " + tmp);
-maxWidth = Math.max (maxWidth, tmp.length);
-}var ds = sequence;
-while (ds.getDatasetSequence () != null) {
-ds = ds.getDatasetSequence ();
-}
-var dbrefs = ds.getDBRef ();
-if (showDbRefs && dbrefs != null) {
-for (var i = 0; i < dbrefs.length; i++) {
-tip.append (" ");
-tmp = dbrefs[i].getSource () + " " + dbrefs[i].getAccessionId ();
-tip.append (tmp);
-maxWidth = Math.max (maxWidth, tmp.length);
-}
-}var features = sequence.getSequenceFeatures ();
-if (showNpFeats && features != null) {
-for (var i = 0; i < features.length; i++) {
-if (features[i].begin == 0 && features[i].end == 0) {
-var sz = -tip.length ();
-var tfeat = new java.util.ArrayList ();
-tfeat.add (features[i]);
-this.appendFeatures (tip, 0, tfeat, minmax);
-sz += tip.length ();
-maxWidth = Math.max (maxWidth, sz);
-}}
-}if (tableWrap && maxWidth > 60) {
-tip.insert (0, "");
-}}, "StringBuffer,jalview.datamodel.SequenceI,~B,~B,~B,java.util.Hashtable");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (null, "jalview.io.SequenceAnnotationReport", ["jalview.util.DBRefUtils", "$.UrlLink", "java.lang.Float", "java.util.ArrayList"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.linkImageURL = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "SequenceAnnotationReport");
+Clazz.makeConstructor (c$,
+function (linkImageURL) {
+this.linkImageURL = linkImageURL;
+}, "~S");
+Clazz.defineMethod (c$, "appendFeatures",
+function (tooltipText2, rpos, features) {
+this.appendFeatures (tooltipText2, rpos, features, null);
+}, "StringBuffer,~N,java.util.List");
+Clazz.defineMethod (c$, "appendFeatures",
+function (tooltipText2, rpos, features, minmax) {
+var tmpString;
+if (features != null) {
+for (var feature, $feature = features.iterator (); $feature.hasNext () && ((feature = $feature.next ()) || true);) {
+if (feature.getType ().equals ("disulfide bond")) {
+if (feature.getBegin () == rpos || feature.getEnd () == rpos) {
+if (tooltipText2.length () > 6) {
+tooltipText2.append (" ");
+}tooltipText2.append ("disulfide bond " + feature.getBegin () + ":" + feature.getEnd ());
+}} else {
+if (tooltipText2.length () > 6) {
+tooltipText2.append (" ");
+}var linkOnly = feature.getValue ("linkonly") != null;
+if (!linkOnly) {
+tooltipText2.append (feature.getType () + " ");
+if (rpos != 0) {
+tooltipText2.append ("" + feature.begin);
+}if (feature.begin != feature.end) {
+tooltipText2.append (" " + feature.end);
+}if (feature.getDescription () != null && !feature.description.equals (feature.getType ())) {
+tmpString = feature.getDescription ();
+var tmp2up = tmpString.toUpperCase ();
+var startTag = tmp2up.indexOf ("");
+if (startTag > -1) {
+tmpString = tmpString.substring (startTag + 6);
+tmp2up = tmp2up.substring (startTag + 6);
+}var endTag = tmp2up.indexOf ("");
+if (endTag > -1) {
+tmpString = tmpString.substring (0, endTag);
+tmp2up = tmp2up.substring (0, endTag);
+}endTag = tmp2up.indexOf ("");
+if (endTag > -1) {
+tmpString = tmpString.substring (0, endTag);
+}if (startTag > -1) {
+tooltipText2.append ("; " + tmpString);
+} else {
+if (tmpString.indexOf ("<") > -1 || tmpString.indexOf (">") > -1) {
+tmpString = tmpString.replaceAll ("<", "<");
+tmpString = tmpString.replaceAll (">", ">");
+tooltipText2.append ("; ");
+tooltipText2.append (tmpString);
+} else {
+tooltipText2.append ("; " + tmpString);
+}}}if (!Float.isNaN (feature.getScore ())) {
+var rng = (minmax == null) ? null : (minmax.get (feature.getType ()));
+if (rng != null && rng[0] != null && rng[0][0] != rng[0][1]) {
+tooltipText2.append (" Score=" + feature.getScore ());
+}}if (feature.getValue ("status") != null) {
+var status = feature.getValue ("status").toString ();
+if (status.length > 0) {
+tooltipText2.append ("; (" + feature.getValue ("status") + ")");
+}}}}if (feature.links != null) {
+if (this.linkImageURL != null) {
+tooltipText2.append (" ");
+} else {
+for (var urlstring, $urlstring = feature.links.iterator (); $urlstring.hasNext () && ((urlstring = $urlstring.next ()) || true);) {
+try {
+for (var urllink, $urllink = 0, $$urllink = this.createLinksFrom (null, urlstring); $urllink < $$urllink.length && ((urllink = $$urllink[$urllink]) || true); $urllink++) {
+tooltipText2.append (" " + (urllink[0].toLowerCase ().equals (urllink[1].toLowerCase ()) ? urllink[0] : (urllink[0] + ":" + urllink[1])) + " ");
+}
+} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+System.err.println ("problem when creating links from " + urlstring);
+x.printStackTrace ();
+} else {
+throw x;
+}
+}
+}
+}}}
+}}, "StringBuffer,~N,java.util.List,java.util.Hashtable");
+Clazz.defineMethod (c$, "createLinksFrom",
+function (seq, link) {
+var urlSets = new java.util.ArrayList ();
+var uniques = new java.util.ArrayList ();
+var urlLink = new jalview.util.UrlLink (link);
+if (!urlLink.isValid ()) {
+System.err.println (urlLink.getInvalidMessage ());
+return null;
+}var target = urlLink.getTarget ();
+var label = urlLink.getLabel ();
+if (seq != null && urlLink.isDynamic ()) {
+var dbr = jalview.util.DBRefUtils.selectRefs (seq.getDBRef (), Clazz.newArray (-1, [target]));
+var id = seq.getName ();
+var descr = seq.getDescription ();
+if (descr != null && descr.length < 1) {
+descr = null;
+}if (dbr != null) {
+for (var r = 0; r < dbr.length; r++) {
+if (id != null && dbr[r].getAccessionId ().equals (id)) {
+id = null;
+}var urls = urlLink.makeUrls (dbr[r].getAccessionId (), true);
+if (urls != null) {
+for (var u = 0; u < urls.length; u += 2) {
+var unq = urls[u] + "|" + urls[u + 1];
+if (!uniques.contains (unq)) {
+urlSets.add ( Clazz.newArray (-1, [target, label, urls[u], urls[u + 1]]));
+uniques.add (unq);
+}}
+}}
+}if (id != null) {
+var urls = urlLink.makeUrls (id, true);
+if (urls != null) {
+for (var u = 0; u < urls.length; u += 2) {
+var unq = urls[u] + "|" + urls[u + 1];
+if (!uniques.contains (unq)) {
+urlSets.add ( Clazz.newArray (-1, [target, label, urls[u], urls[u + 1]]));
+uniques.add (unq);
+}}
+}}if (descr != null && urlLink.getRegexReplace () != null) {
+var urls = urlLink.makeUrls (descr, true);
+if (urls != null) {
+for (var u = 0; u < urls.length; u += 2) {
+var unq = urls[u] + "|" + urls[u + 1];
+if (!uniques.contains (unq)) {
+urlSets.add ( Clazz.newArray (-1, [target, label, urls[u], urls[u + 1]]));
+uniques.add (unq);
+}}
+}}} else {
+var unq = label + "|" + urlLink.getUrl_prefix ();
+if (!uniques.contains (unq)) {
+uniques.add (unq);
+urlSets.add ( Clazz.newArray (-1, [target, label, null, urlLink.getUrl_prefix ()]));
+}}return urlSets.toArray ( Clazz.newArray (-1, []));
+}, "jalview.datamodel.SequenceI,~S");
+Clazz.defineMethod (c$, "createSequenceAnnotationReport",
+function (tip, sequence, showDbRefs, showNpFeats, minmax) {
+this.createSequenceAnnotationReport (tip, sequence, showDbRefs, showNpFeats, true, minmax);
+}, "StringBuffer,jalview.datamodel.SequenceI,~B,~B,java.util.Hashtable");
+Clazz.defineMethod (c$, "createSequenceAnnotationReport",
+function (tip, sequence, showDbRefs, showNpFeats, tableWrap, minmax) {
+var tmp;
+tip.append ("");
+var maxWidth = 0;
+if (sequence.getDescription () != null) {
+tmp = sequence.getDescription ();
+tip.append (" " + tmp);
+maxWidth = Math.max (maxWidth, tmp.length);
+}var ds = sequence;
+while (ds.getDatasetSequence () != null) {
+ds = ds.getDatasetSequence ();
+}
+var dbrefs = ds.getDBRef ();
+if (showDbRefs && dbrefs != null) {
+for (var i = 0; i < dbrefs.length; i++) {
+tip.append (" ");
+tmp = dbrefs[i].getSource () + " " + dbrefs[i].getAccessionId ();
+tip.append (tmp);
+maxWidth = Math.max (maxWidth, tmp.length);
+}
+}var features = sequence.getSequenceFeatures ();
+if (showNpFeats && features != null) {
+for (var i = 0; i < features.length; i++) {
+if (features[i].begin == 0 && features[i].end == 0) {
+var sz = -tip.length ();
+var tfeat = new java.util.ArrayList ();
+tfeat.add (features[i]);
+this.appendFeatures (tip, 0, tfeat, minmax);
+sz += tip.length ();
+maxWidth = Math.max (maxWidth, sz);
+}}
+}if (tableWrap && maxWidth > 60) {
+tip.insert (0, "");
+}}, "StringBuffer,jalview.datamodel.SequenceI,~B,~B,~B,java.util.Hashtable");
+});
diff --git a/bin/jalview/io/TCoffeeScoreFile.class b/bin/jalview/io/TCoffeeScoreFile.class
index 71e39b1..6e9db73 100644
Binary files a/bin/jalview/io/TCoffeeScoreFile.class and b/bin/jalview/io/TCoffeeScoreFile.class differ
diff --git a/bin/jalview/io/TCoffeeScoreFile.js b/bin/jalview/io/TCoffeeScoreFile.js
index 1036432..7f2d629 100644
--- a/bin/jalview/io/TCoffeeScoreFile.js
+++ b/bin/jalview/io/TCoffeeScoreFile.js
@@ -1,274 +1,274 @@
-Clazz.declarePackage ("jalview.io");
-Clazz.load (["jalview.io.AlignFile", "java.awt.Color", "java.util.LinkedHashMap", "java.util.regex.Pattern"], "jalview.io.TCoffeeScoreFile", ["jalview.analysis.SequenceIdMatcher", "jalview.datamodel.Annotation", "jalview.util.Comparison", "java.lang.StringBuilder", "java.util.ArrayList", "$.HashMap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.header = null;
-this.scores = null;
-this.fWidth = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io, "TCoffeeScoreFile", jalview.io.AlignFile);
-Clazz.defineMethod (c$, "getHeight",
-function () {
-return this.scores != null && this.scores.size () > 0 ? this.scores.size () - 1 : 0;
-});
-Clazz.defineMethod (c$, "getWidth",
-function () {
-return this.fWidth != null ? this.fWidth : 0;
-});
-Clazz.defineMethod (c$, "getScoresFor",
-function (id) {
-return this.scores != null && this.scores.containsKey (id) ? this.scores.get (id).toString () : "";
-}, "~S");
-Clazz.defineMethod (c$, "getScoresList",
-function () {
-if (this.scores == null) {
-return null;
-}var result = new java.util.ArrayList (this.scores.size ());
-for (var it, $it = this.scores.entrySet ().iterator (); $it.hasNext () && ((it = $it.next ()) || true);) {
-result.add (it.getValue ().toString ());
-}
-return result;
-});
-Clazz.defineMethod (c$, "getScoresArray",
-function () {
-if (this.scores == null) {
-return null;
-}var result = Clazz.newByteArray (this.scores.size (), 0);
-var rowCount = 0;
-for (var it, $it = this.scores.entrySet ().iterator (); $it.hasNext () && ((it = $it.next ()) || true);) {
-var line = it.getValue ().toString ();
-var seqValues = Clazz.newByteArray (line.length, 0);
-for (var j = 0, c = line.length; j < c; j++) {
-var val = (line.charCodeAt (j) - 48);
-seqValues[j] = (val >= 0 && val <= 9) ? val : -1;
-}
-result[rowCount++] = seqValues;
-}
-return result;
-});
-Clazz.overrideMethod (c$, "parse",
-function () {
-this.header = jalview.io.TCoffeeScoreFile.readHeader (this);
-if (this.header == null) {
-this.error = true;
-return;
-}this.scores = new java.util.LinkedHashMap ();
-for (var entry, $entry = this.header.scores.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
-this.scores.put (entry.getKey (), new StringBuilder ());
-}
-var block;
-while ((block = jalview.io.TCoffeeScoreFile.readBlock (this, this.header.scores.size ())) != null) {
-for (var entry, $entry = block.items.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
-var scoreStringBuilder = this.scores.get (entry.getKey ());
-if (scoreStringBuilder == null) {
-this.error = true;
-this.errormessage = String.format ("Invalid T-Coffee score file: Sequence ID '%s' is not declared in header section", [entry.getKey ()]);
-return;
-}scoreStringBuilder.append (entry.getValue ());
-}
-}
-for (var str, $str = this.scores.values ().iterator (); $str.hasNext () && ((str = $str.next ()) || true);) {
-if (this.fWidth == null) {
-this.fWidth = new Integer (str.length ());
-} else if ((this.fWidth).intValue () !== str.length ()) {
-this.error = true;
-this.errormessage = "Invalid T-Coffee score file: All the score sequences must have the same length";
-return;
-}}
-return;
-});
-c$.parseInt = Clazz.defineMethod (c$, "parseInt",
-function (str) {
-try {
-return Integer.parseInt (str);
-} catch (e) {
-if (Clazz.exceptionOf (e, NumberFormatException)) {
-return 0;
-} else {
-throw e;
-}
-}
-}, "~S");
-c$.readHeader = Clazz.defineMethod (c$, "readHeader",
-function (reader) {
-var result = null;
-try {
-result = new jalview.io.TCoffeeScoreFile.Header ();
-result.head = reader.nextLine ();
-var line;
-while ((line = reader.nextLine ()) != null) {
-if (line.startsWith ("SCORE=")) {
-result.score = jalview.io.TCoffeeScoreFile.parseInt (line.substring (6).trim ());
-break;
-}}
-if ((line = reader.nextLine ()) == null || !"*".equals (line.trim ())) {
-jalview.io.TCoffeeScoreFile.error (reader, "Invalid T-COFFEE score format (NO BAD/AVG/GOOD header)");
-return null;
-}if ((line = reader.nextLine ()) == null || !"BAD AVG GOOD".equals (line.trim ())) {
-jalview.io.TCoffeeScoreFile.error (reader, "Invalid T-COFFEE score format (NO BAD/AVG/GOOD header)");
-return null;
-}if ((line = reader.nextLine ()) == null || !"*".equals (line.trim ())) {
-jalview.io.TCoffeeScoreFile.error (reader, "Invalid T-COFFEE score format (NO BAD/AVG/GOOD header)");
-return null;
-}while ((line = reader.nextLine ()) != null) {
-if ("".equals (line)) {
-break;
-}var p = line.indexOf (":");
-if (p == -1) {
-continue;
-}var id = line.substring (0, p).trim ();
-var val = jalview.io.TCoffeeScoreFile.parseInt (line.substring (p + 1).trim ());
-if ("".equals (id)) {
-continue;
-}result.scores.put (id, new Integer (val));
-}
-if (result == null) {
-jalview.io.TCoffeeScoreFile.error (reader, "T-COFFEE score file had no per-sequence scores");
-}} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-jalview.io.TCoffeeScoreFile.error (reader, "Unexpected problem parsing T-Coffee score ascii file");
-throw e;
-} else {
-throw e;
-}
-}
-return result;
-}, "jalview.io.FileParse");
-c$.error = Clazz.defineMethod (c$, "error",
-($fz = function (reader, errm) {
-reader.error = true;
-if (reader.errormessage == null) {
-reader.errormessage = errm;
-} else {
-reader.errormessage += "\n" + errm;
-}}, $fz.isPrivate = true, $fz), "jalview.io.FileParse,~S");
-c$.readBlock = Clazz.defineMethod (c$, "readBlock",
-function (reader, size) {
-var result = new jalview.io.TCoffeeScoreFile.Block (size);
-var line;
-while ((line = reader.nextLine ()) != null && "".equals (line.trim ())) {
-}
-if (line == null) {
-return null;
-}do {
-if ("".equals (line.trim ())) {
-break;
-}var p = line.indexOf (" ");
-if (p == -1) {
-if (reader.warningMessage == null) {
-reader.warningMessage = "";
-}reader.warningMessage += "Possible parsing error - expected to find a space in line: '" + line + "'\n";
-continue;
-}var id = line.substring (0, p).trim ();
-var val = line.substring (p + 1).trim ();
-var m = jalview.io.TCoffeeScoreFile.SCORES_WITH_RESIDUE_NUMS.matcher (val);
-if (m.matches ()) {
-val = m.group (1);
-}result.items.put (id, val);
-} while ((line = reader.nextLine ()) != null);
-return result;
-}, "jalview.io.FileParse,~N");
-Clazz.defineMethod (c$, "annotateAlignment",
-function (al, matchids) {
-if (al.getHeight () != this.getHeight () || al.getWidth () != this.getWidth ()) {
-var info = String.format ("align w: %s, h: %s; score: w: %s; h: %s ", [new Integer (al.getWidth ()), new Integer (al.getHeight ()), new Integer (this.getWidth ()), new Integer (this.getHeight ())]);
-this.warningMessage = "Alignment shape does not match T-Coffee score file shape -- " + info;
-return false;
-}var added = false;
-var i = 0;
-var sidmatcher = new jalview.analysis.SequenceIdMatcher (al.getSequencesArray ());
-var scoreMatrix = this.getScoresArray ();
-for (var id, $id = this.scores.entrySet ().iterator (); $id.hasNext () && ((id = $id.next ()) || true);) {
-var srow = scoreMatrix[i];
-var s;
-if (matchids) {
-s = sidmatcher.findIdMatch (id.getKey ());
-} else {
-s = al.getSequenceAt (i);
-}i++;
-if (s == null && i != this.scores.size () && !id.getKey ().equals ("cons")) {
-System.err.println ("No " + (matchids ? "match " : " sequences left ") + " for TCoffee score set : " + id.getKey ());
-continue;
-}var jSize = al.getWidth () < srow.length ? al.getWidth () : srow.length;
-var annotations = new Array (al.getWidth ());
-for (var j = 0; j < jSize; j++) {
-var val = srow[j];
-if (s != null && jalview.util.Comparison.isGap (s.getCharAt (j))) {
-annotations[j] = null;
-if (val > 0) {
-System.err.println ("Warning: non-zero value for positional T-COFFEE score for gap at " + j + " in sequence " + s.getName ());
-}} else {
-annotations[j] = new jalview.datamodel.Annotation (s == null ? "" + val : null, s == null ? "" + val : null, '\0', val * 1, val >= 0 && val < jalview.io.TCoffeeScoreFile.colors.length ? jalview.io.TCoffeeScoreFile.colors[val] : java.awt.Color.white);
-}}
-var aa = al.findOrCreateAnnotation ("TCoffeeScore", "TCoffeeScore", false, s, null);
-if (s != null) {
-aa.label = "T-COFFEE";
-aa.description = "" + id.getKey ();
-aa.annotations = annotations;
-aa.visible = false;
-aa.belowAlignment = false;
-aa.setScore (this.header.getScoreFor (id.getKey ()));
-aa.createSequenceMapping (s, s.getStart (), true);
-s.addAlignmentAnnotation (aa);
-aa.adjustForAlignment ();
-} else {
-aa.graph = 0;
-aa.label = "T-COFFEE";
-aa.description = "TCoffee column reliability score";
-aa.annotations = annotations;
-aa.belowAlignment = true;
-aa.visible = true;
-aa.setScore (this.header.getScoreAvg ());
-}aa.showAllColLabels = true;
-aa.validateRangeAndDisplay ();
-added = true;
-}
-return added;
-}, "jalview.datamodel.AlignmentI,~B");
-Clazz.overrideMethod (c$, "print",
-function () {
-return "Not valid.";
-});
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.head = null;
-this.score = 0;
-this.scores = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io.TCoffeeScoreFile, "Header");
-Clazz.prepareFields (c$, function () {
-this.scores = new java.util.LinkedHashMap ();
-});
-Clazz.defineMethod (c$, "getScoreAvg",
-function () {
-return this.score;
-});
-Clazz.defineMethod (c$, "getScoreFor",
-function (a) {
-return this.scores.containsKey (a) ? this.scores.get (a) : -1;
-}, "~S");
-c$ = Clazz.p0p ();
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.size = 0;
-this.items = null;
-Clazz.instantialize (this, arguments);
-}, jalview.io.TCoffeeScoreFile, "Block");
-Clazz.makeConstructor (c$,
-function (a) {
-this.size = a;
-this.items = new java.util.HashMap (a);
-}, "~N");
-Clazz.defineMethod (c$, "getScoresFor",
-function (a) {
-return this.items.get (a);
-}, "~S");
-Clazz.defineMethod (c$, "getConsensus",
-function () {
-return this.items.get ("cons");
-});
-c$ = Clazz.p0p ();
-c$.SCORES_WITH_RESIDUE_NUMS = c$.prototype.SCORES_WITH_RESIDUE_NUMS = java.util.regex.Pattern.compile ("^\\d+\\s([^\\s]+)\\s+\\d+$");
-c$.colors = c$.prototype.colors = Clazz.newArray (-1, [ new java.awt.Color (102, 102, 255), new java.awt.Color (0, 255, 0), new java.awt.Color (102, 255, 0), new java.awt.Color (204, 255, 0), new java.awt.Color (255, 255, 0), new java.awt.Color (255, 204, 0), new java.awt.Color (255, 153, 0), new java.awt.Color (255, 102, 0), new java.awt.Color (255, 51, 0), new java.awt.Color (255, 34, 0)]);
-Clazz.defineStatics (c$,
-"TCOFFEE_SCORE", "TCoffeeScore");
-});
+Clazz.declarePackage ("jalview.io");
+Clazz.load (["jalview.io.AlignFile", "java.awt.Color", "java.util.LinkedHashMap", "java.util.regex.Pattern"], "jalview.io.TCoffeeScoreFile", ["jalview.analysis.SequenceIdMatcher", "jalview.datamodel.Annotation", "jalview.util.Comparison", "java.lang.StringBuilder", "java.util.ArrayList", "$.HashMap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.header = null;
+this.scores = null;
+this.fWidth = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io, "TCoffeeScoreFile", jalview.io.AlignFile);
+Clazz.defineMethod (c$, "getHeight",
+function () {
+return this.scores != null && this.scores.size () > 0 ? this.scores.size () - 1 : 0;
+});
+Clazz.defineMethod (c$, "getWidth",
+function () {
+return this.fWidth != null ? this.fWidth : 0;
+});
+Clazz.defineMethod (c$, "getScoresFor",
+function (id) {
+return this.scores != null && this.scores.containsKey (id) ? this.scores.get (id).toString () : "";
+}, "~S");
+Clazz.defineMethod (c$, "getScoresList",
+function () {
+if (this.scores == null) {
+return null;
+}var result = new java.util.ArrayList (this.scores.size ());
+for (var it, $it = this.scores.entrySet ().iterator (); $it.hasNext () && ((it = $it.next ()) || true);) {
+result.add (it.getValue ().toString ());
+}
+return result;
+});
+Clazz.defineMethod (c$, "getScoresArray",
+function () {
+if (this.scores == null) {
+return null;
+}var result = Clazz.newByteArray (this.scores.size (), 0);
+var rowCount = 0;
+for (var it, $it = this.scores.entrySet ().iterator (); $it.hasNext () && ((it = $it.next ()) || true);) {
+var line = it.getValue ().toString ();
+var seqValues = Clazz.newByteArray (line.length, 0);
+for (var j = 0, c = line.length; j < c; j++) {
+var val = (line.charCodeAt (j) - 48);
+seqValues[j] = (val >= 0 && val <= 9) ? val : -1;
+}
+result[rowCount++] = seqValues;
+}
+return result;
+});
+Clazz.overrideMethod (c$, "parse",
+function () {
+this.header = jalview.io.TCoffeeScoreFile.readHeader (this);
+if (this.header == null) {
+this.error = true;
+return;
+}this.scores = new java.util.LinkedHashMap ();
+for (var entry, $entry = this.header.scores.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
+this.scores.put (entry.getKey (), new StringBuilder ());
+}
+var block;
+while ((block = jalview.io.TCoffeeScoreFile.readBlock (this, this.header.scores.size ())) != null) {
+for (var entry, $entry = block.items.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
+var scoreStringBuilder = this.scores.get (entry.getKey ());
+if (scoreStringBuilder == null) {
+this.error = true;
+this.errormessage = String.format ("Invalid T-Coffee score file: Sequence ID '%s' is not declared in header section", [entry.getKey ()]);
+return;
+}scoreStringBuilder.append (entry.getValue ());
+}
+}
+for (var str, $str = this.scores.values ().iterator (); $str.hasNext () && ((str = $str.next ()) || true);) {
+if (this.fWidth == null) {
+this.fWidth = new Integer (str.length ());
+} else if ((this.fWidth).intValue () !== str.length ()) {
+this.error = true;
+this.errormessage = "Invalid T-Coffee score file: All the score sequences must have the same length";
+return;
+}}
+return;
+});
+c$.parseInt = Clazz.defineMethod (c$, "parseInt",
+function (str) {
+try {
+return Integer.parseInt (str);
+} catch (e) {
+if (Clazz.exceptionOf (e, NumberFormatException)) {
+return 0;
+} else {
+throw e;
+}
+}
+}, "~S");
+c$.readHeader = Clazz.defineMethod (c$, "readHeader",
+function (reader) {
+var result = null;
+try {
+result = new jalview.io.TCoffeeScoreFile.Header ();
+result.head = reader.nextLine ();
+var line;
+while ((line = reader.nextLine ()) != null) {
+if (line.startsWith ("SCORE=")) {
+result.score = jalview.io.TCoffeeScoreFile.parseInt (line.substring (6).trim ());
+break;
+}}
+if ((line = reader.nextLine ()) == null || !"*".equals (line.trim ())) {
+jalview.io.TCoffeeScoreFile.error (reader, "Invalid T-COFFEE score format (NO BAD/AVG/GOOD header)");
+return null;
+}if ((line = reader.nextLine ()) == null || !"BAD AVG GOOD".equals (line.trim ())) {
+jalview.io.TCoffeeScoreFile.error (reader, "Invalid T-COFFEE score format (NO BAD/AVG/GOOD header)");
+return null;
+}if ((line = reader.nextLine ()) == null || !"*".equals (line.trim ())) {
+jalview.io.TCoffeeScoreFile.error (reader, "Invalid T-COFFEE score format (NO BAD/AVG/GOOD header)");
+return null;
+}while ((line = reader.nextLine ()) != null) {
+if ("".equals (line)) {
+break;
+}var p = line.indexOf (":");
+if (p == -1) {
+continue;
+}var id = line.substring (0, p).trim ();
+var val = jalview.io.TCoffeeScoreFile.parseInt (line.substring (p + 1).trim ());
+if ("".equals (id)) {
+continue;
+}result.scores.put (id, new Integer (val));
+}
+if (result == null) {
+jalview.io.TCoffeeScoreFile.error (reader, "T-COFFEE score file had no per-sequence scores");
+}} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+jalview.io.TCoffeeScoreFile.error (reader, "Unexpected problem parsing T-Coffee score ascii file");
+throw e;
+} else {
+throw e;
+}
+}
+return result;
+}, "jalview.io.FileParse");
+c$.error = Clazz.defineMethod (c$, "error",
+($fz = function (reader, errm) {
+reader.error = true;
+if (reader.errormessage == null) {
+reader.errormessage = errm;
+} else {
+reader.errormessage += "\n" + errm;
+}}, $fz.isPrivate = true, $fz), "jalview.io.FileParse,~S");
+c$.readBlock = Clazz.defineMethod (c$, "readBlock",
+function (reader, size) {
+var result = new jalview.io.TCoffeeScoreFile.Block (size);
+var line;
+while ((line = reader.nextLine ()) != null && "".equals (line.trim ())) {
+}
+if (line == null) {
+return null;
+}do {
+if ("".equals (line.trim ())) {
+break;
+}var p = line.indexOf (" ");
+if (p == -1) {
+if (reader.warningMessage == null) {
+reader.warningMessage = "";
+}reader.warningMessage += "Possible parsing error - expected to find a space in line: '" + line + "'\n";
+continue;
+}var id = line.substring (0, p).trim ();
+var val = line.substring (p + 1).trim ();
+var m = jalview.io.TCoffeeScoreFile.SCORES_WITH_RESIDUE_NUMS.matcher (val);
+if (m.matches ()) {
+val = m.group (1);
+}result.items.put (id, val);
+} while ((line = reader.nextLine ()) != null);
+return result;
+}, "jalview.io.FileParse,~N");
+Clazz.defineMethod (c$, "annotateAlignment",
+function (al, matchids) {
+if (al.getHeight () != this.getHeight () || al.getWidth () != this.getWidth ()) {
+var info = String.format ("align w: %s, h: %s; score: w: %s; h: %s ", [new Integer (al.getWidth ()), new Integer (al.getHeight ()), new Integer (this.getWidth ()), new Integer (this.getHeight ())]);
+this.warningMessage = "Alignment shape does not match T-Coffee score file shape -- " + info;
+return false;
+}var added = false;
+var i = 0;
+var sidmatcher = new jalview.analysis.SequenceIdMatcher (al.getSequencesArray ());
+var scoreMatrix = this.getScoresArray ();
+for (var id, $id = this.scores.entrySet ().iterator (); $id.hasNext () && ((id = $id.next ()) || true);) {
+var srow = scoreMatrix[i];
+var s;
+if (matchids) {
+s = sidmatcher.findIdMatch (id.getKey ());
+} else {
+s = al.getSequenceAt (i);
+}i++;
+if (s == null && i != this.scores.size () && !id.getKey ().equals ("cons")) {
+System.err.println ("No " + (matchids ? "match " : " sequences left ") + " for TCoffee score set : " + id.getKey ());
+continue;
+}var jSize = al.getWidth () < srow.length ? al.getWidth () : srow.length;
+var annotations = new Array (al.getWidth ());
+for (var j = 0; j < jSize; j++) {
+var val = srow[j];
+if (s != null && jalview.util.Comparison.isGap (s.getCharAt (j))) {
+annotations[j] = null;
+if (val > 0) {
+System.err.println ("Warning: non-zero value for positional T-COFFEE score for gap at " + j + " in sequence " + s.getName ());
+}} else {
+annotations[j] = new jalview.datamodel.Annotation (s == null ? "" + val : null, s == null ? "" + val : null, '\0', val * 1, val >= 0 && val < jalview.io.TCoffeeScoreFile.colors.length ? jalview.io.TCoffeeScoreFile.colors[val] : java.awt.Color.white);
+}}
+var aa = al.findOrCreateAnnotation ("TCoffeeScore", "TCoffeeScore", false, s, null);
+if (s != null) {
+aa.label = "T-COFFEE";
+aa.description = "" + id.getKey ();
+aa.annotations = annotations;
+aa.visible = false;
+aa.belowAlignment = false;
+aa.setScore (this.header.getScoreFor (id.getKey ()));
+aa.createSequenceMapping (s, s.getStart (), true);
+s.addAlignmentAnnotation (aa);
+aa.adjustForAlignment ();
+} else {
+aa.graph = 0;
+aa.label = "T-COFFEE";
+aa.description = "TCoffee column reliability score";
+aa.annotations = annotations;
+aa.belowAlignment = true;
+aa.visible = true;
+aa.setScore (this.header.getScoreAvg ());
+}aa.showAllColLabels = true;
+aa.validateRangeAndDisplay ();
+added = true;
+}
+return added;
+}, "jalview.datamodel.AlignmentI,~B");
+Clazz.overrideMethod (c$, "print",
+function () {
+return "Not valid.";
+});
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.head = null;
+this.score = 0;
+this.scores = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io.TCoffeeScoreFile, "Header");
+Clazz.prepareFields (c$, function () {
+this.scores = new java.util.LinkedHashMap ();
+});
+Clazz.defineMethod (c$, "getScoreAvg",
+function () {
+return this.score;
+});
+Clazz.defineMethod (c$, "getScoreFor",
+function (a) {
+return this.scores.containsKey (a) ? this.scores.get (a) : -1;
+}, "~S");
+c$ = Clazz.p0p ();
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.size = 0;
+this.items = null;
+Clazz.instantialize (this, arguments);
+}, jalview.io.TCoffeeScoreFile, "Block");
+Clazz.makeConstructor (c$,
+function (a) {
+this.size = a;
+this.items = new java.util.HashMap (a);
+}, "~N");
+Clazz.defineMethod (c$, "getScoresFor",
+function (a) {
+return this.items.get (a);
+}, "~S");
+Clazz.defineMethod (c$, "getConsensus",
+function () {
+return this.items.get ("cons");
+});
+c$ = Clazz.p0p ();
+c$.SCORES_WITH_RESIDUE_NUMS = c$.prototype.SCORES_WITH_RESIDUE_NUMS = java.util.regex.Pattern.compile ("^\\d+\\s([^\\s]+)\\s+\\d+$");
+c$.colors = c$.prototype.colors = Clazz.newArray (-1, [ new java.awt.Color (102, 102, 255), new java.awt.Color (0, 255, 0), new java.awt.Color (102, 255, 0), new java.awt.Color (204, 255, 0), new java.awt.Color (255, 255, 0), new java.awt.Color (255, 204, 0), new java.awt.Color (255, 153, 0), new java.awt.Color (255, 102, 0), new java.awt.Color (255, 51, 0), new java.awt.Color (255, 34, 0)]);
+Clazz.defineStatics (c$,
+"TCOFFEE_SCORE", "TCoffeeScore");
+});
diff --git a/bin/jalview/javascript/JSFunctionExec$1.class b/bin/jalview/javascript/JSFunctionExec$1.class
index 5466a9b..1f39479 100644
Binary files a/bin/jalview/javascript/JSFunctionExec$1.class and b/bin/jalview/javascript/JSFunctionExec$1.class differ
diff --git a/bin/jalview/javascript/JSFunctionExec.class b/bin/jalview/javascript/JSFunctionExec.class
index c6607f6..d29244d 100644
Binary files a/bin/jalview/javascript/JSFunctionExec.class and b/bin/jalview/javascript/JSFunctionExec.class differ
diff --git a/bin/jalview/javascript/JSFunctionExec.js b/bin/jalview/javascript/JSFunctionExec.js
index 3296c72..43f56a2 100644
--- a/bin/jalview/javascript/JSFunctionExec.js
+++ b/bin/jalview/javascript/JSFunctionExec.js
@@ -1,166 +1,166 @@
-Clazz.declarePackage ("jalview.javascript");
-Clazz.load (null, "jalview.javascript.JSFunctionExec", ["jalview.bin.JalviewLite", "java.lang.StringBuffer", "$.Thread", "java.net.MalformedURLException", "$.URL", "netscape.javascript.JSException", "$.JSObject"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.jvlite = null;
-this.jsExecQueue = null;
-this.executor = null;
-Clazz.instantialize (this, arguments);
-}, jalview.javascript, "JSFunctionExec", null, Runnable);
-Clazz.makeConstructor (c$,
-function (applet) {
-this.jvlite = applet;
-this.jsExecQueue = this.jvlite.getJsExecQueue ();
-this.jvlite.setExecutor (this);
-}, "jalview.bin.JalviewLite");
-Clazz.overrideMethod (c$, "finalize",
-function () {
-this.jvlite = null;
-this.executor = null;
-if (this.jsExecQueue != null) {
-this.jsExecQueue.clear ();
-}this.jsExecQueue = null;
-});
-Clazz.defineMethod (c$, "stopQueue",
-function () {
-if (this.jsExecQueue != null) {
-var q = null;
-{
-q = this.jsExecQueue;
-this.jsExecQueue = null;
-}if (q != null) {
-for (var jx, $jx = q.iterator (); $jx.hasNext () && ((jx = $jx.next ()) || true);) {
-jx.jvlite = null;
-}
-q.removeAllElements ();
-{
-q.notifyAll ();
-}}}this.jvlite = null;
-this.executor = null;
-});
-Clazz.defineMethod (c$, "run",
-function () {
-while (this.jsExecQueue != null) {
-if (this.jsExecQueue.size () > 0) {
-var r = this.jsExecQueue.elementAt (0);
-this.jsExecQueue.removeElementAt (0);
-try {
-r.run ();
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, Exception)) {
-var ex = e$$;
-{
-ex.printStackTrace ();
-}
-} else if (Clazz.exceptionOf (e$$, Error)) {
-var ex = e$$;
-{
-ex.printStackTrace ();
-}
-} else {
-throw e$$;
-}
-}
-} else {
-try {
-{
-this.jsExecQueue.wait (1000);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-;}}
-});
-Clazz.defineMethod (c$, "executeJavascriptFunction",
-function (_listener, objects) {
-this.executeJavascriptFunction (false, _listener, objects);
-}, "~S,~A");
-Clazz.defineMethod (c$, "executeJavascriptFunction",
-function (async, _listener, $arguments) {
-this.executeJavascriptFunction (async, _listener, $arguments, null);
-}, "~B,~S,~A");
-Clazz.defineMethod (c$, "executeJavascriptFunction",
-function (async, _listener, $arguments, dbgMsg) {
-var objects = new Array ($arguments != null ? $arguments.length : 0);
-if ($arguments != null) {
-System.arraycopy ($arguments, 0, objects, 0, $arguments.length);
-}var jsex = new Array (1);
-var exec = ((Clazz.isClassDefined ("jalview.javascript.JSFunctionExec$1") ? 0 : jalview.javascript.JSFunctionExec.$JSFunctionExec$1$ ()), Clazz.innerTypeInstance (jalview.javascript.JSFunctionExec$1, this, Clazz.cloneFinals ("dbgMsg", dbgMsg, "_listener", _listener, "objects", objects, "jsex", jsex, "async", async)));
-if (async) {
-if (this.executor == null) {
-this.executor = new Thread ( new jalview.javascript.JSFunctionExec (this.jvlite));
-this.executor.start ();
-}{
-this.jsExecQueue.addElement (exec);
-this.jsExecQueue.notify ();
-}} else {
-exec.run ();
-if (jsex[0] != null) {
-throw (jsex[0]);
-}}}, "~B,~S,~A,~S");
-c$.$JSFunctionExec$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.javascript, "JSFunctionExec$1", null, Runnable);
-Clazz.defineMethod (c$, "run",
-function () {
-try {
-var scriptObject = null;
-try {
-scriptObject = netscape.javascript.JSObject.getWindow (this.b$["jalview.javascript.JSFunctionExec"].jvlite);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-;if (scriptObject != null) {
-if (jalview.bin.JalviewLite.debug && this.f$.dbgMsg != null) {
-System.err.println (this.f$.dbgMsg);
-}scriptObject.call (this.f$._listener, this.f$.objects);
-}} catch (jex) {
-if (Clazz.exceptionOf (jex, Exception)) {
-if (!(Clazz.instanceOf (jex, java.net.MalformedURLException))) {
-if (jalview.bin.JalviewLite.debug) {
-System.err.println (jex);
-}if (Clazz.instanceOf (jex, netscape.javascript.JSException) && this.b$["jalview.javascript.JSFunctionExec"].jvlite.jsfallbackEnabled) {
-this.f$.jsex[0] = jex;
-if (jalview.bin.JalviewLite.debug) {
-System.err.println ("Falling back to javascript: url call");
-}var sb = new StringBuffer ("javascript:" + this.f$._listener + "(");
-for (var i = 0; this.f$.objects != null && i < this.f$.objects.length; i++) {
-if (i > 0) {
-sb.append (",");
-}sb.append ("\"");
-if (this.f$.objects[i] != null && !(this.f$.objects[i].getClass ().getName ().indexOf ("jalview") == 0)) {
-sb.append (this.f$.objects[i].toString ());
-}sb.append ("\"");
-}
-sb.append (")");
-if (jalview.bin.JalviewLite.debug) {
-System.err.println (sb.toString ());
-}var url = null;
-try {
-url = new java.net.URL (sb.toString ());
-this.b$["jalview.javascript.JSFunctionExec"].jvlite.getAppletContext ().showDocument (url);
-jex = null;
-} catch (uex) {
-if (Clazz.exceptionOf (uex, Exception)) {
-jex = uex;
-} else {
-throw uex;
-}
-}
-}if (jex != null) {
-if (this.f$.async) {
-jex.printStackTrace ();
-} else {
-this.f$.jsex[0] = jex;
-}};}} else {
-throw jex;
-}
-}
-});
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.javascript");
+Clazz.load (null, "jalview.javascript.JSFunctionExec", ["jalview.bin.JalviewLite", "java.lang.StringBuffer", "$.Thread", "java.net.MalformedURLException", "$.URL", "netscape.javascript.JSException", "$.JSObject"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.jvlite = null;
+this.jsExecQueue = null;
+this.executor = null;
+Clazz.instantialize (this, arguments);
+}, jalview.javascript, "JSFunctionExec", null, Runnable);
+Clazz.makeConstructor (c$,
+function (applet) {
+this.jvlite = applet;
+this.jsExecQueue = this.jvlite.getJsExecQueue ();
+this.jvlite.setExecutor (this);
+}, "jalview.bin.JalviewLite");
+Clazz.overrideMethod (c$, "finalize",
+function () {
+this.jvlite = null;
+this.executor = null;
+if (this.jsExecQueue != null) {
+this.jsExecQueue.clear ();
+}this.jsExecQueue = null;
+});
+Clazz.defineMethod (c$, "stopQueue",
+function () {
+if (this.jsExecQueue != null) {
+var q = null;
+{
+q = this.jsExecQueue;
+this.jsExecQueue = null;
+}if (q != null) {
+for (var jx, $jx = q.iterator (); $jx.hasNext () && ((jx = $jx.next ()) || true);) {
+jx.jvlite = null;
+}
+q.removeAllElements ();
+{
+q.notifyAll ();
+}}}this.jvlite = null;
+this.executor = null;
+});
+Clazz.defineMethod (c$, "run",
+function () {
+while (this.jsExecQueue != null) {
+if (this.jsExecQueue.size () > 0) {
+var r = this.jsExecQueue.elementAt (0);
+this.jsExecQueue.removeElementAt (0);
+try {
+r.run ();
+} catch (e$$) {
+if (Clazz.exceptionOf (e$$, Exception)) {
+var ex = e$$;
+{
+ex.printStackTrace ();
+}
+} else if (Clazz.exceptionOf (e$$, Error)) {
+var ex = e$$;
+{
+ex.printStackTrace ();
+}
+} else {
+throw e$$;
+}
+}
+} else {
+try {
+{
+this.jsExecQueue.wait (1000);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+;}}
+});
+Clazz.defineMethod (c$, "executeJavascriptFunction",
+function (_listener, objects) {
+this.executeJavascriptFunction (false, _listener, objects);
+}, "~S,~A");
+Clazz.defineMethod (c$, "executeJavascriptFunction",
+function (async, _listener, $arguments) {
+this.executeJavascriptFunction (async, _listener, $arguments, null);
+}, "~B,~S,~A");
+Clazz.defineMethod (c$, "executeJavascriptFunction",
+function (async, _listener, $arguments, dbgMsg) {
+var objects = new Array ($arguments != null ? $arguments.length : 0);
+if ($arguments != null) {
+System.arraycopy ($arguments, 0, objects, 0, $arguments.length);
+}var jsex = new Array (1);
+var exec = ((Clazz.isClassDefined ("jalview.javascript.JSFunctionExec$1") ? 0 : jalview.javascript.JSFunctionExec.$JSFunctionExec$1$ ()), Clazz.innerTypeInstance (jalview.javascript.JSFunctionExec$1, this, Clazz.cloneFinals ("dbgMsg", dbgMsg, "_listener", _listener, "objects", objects, "jsex", jsex, "async", async)));
+if (async) {
+if (this.executor == null) {
+this.executor = new Thread ( new jalview.javascript.JSFunctionExec (this.jvlite));
+this.executor.start ();
+}{
+this.jsExecQueue.addElement (exec);
+this.jsExecQueue.notify ();
+}} else {
+exec.run ();
+if (jsex[0] != null) {
+throw (jsex[0]);
+}}}, "~B,~S,~A,~S");
+c$.$JSFunctionExec$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.javascript, "JSFunctionExec$1", null, Runnable);
+Clazz.defineMethod (c$, "run",
+function () {
+try {
+var scriptObject = null;
+try {
+scriptObject = netscape.javascript.JSObject.getWindow (this.b$["jalview.javascript.JSFunctionExec"].jvlite);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+;if (scriptObject != null) {
+if (jalview.bin.JalviewLite.debug && this.f$.dbgMsg != null) {
+System.err.println (this.f$.dbgMsg);
+}scriptObject.call (this.f$._listener, this.f$.objects);
+}} catch (jex) {
+if (Clazz.exceptionOf (jex, Exception)) {
+if (!(Clazz.instanceOf (jex, java.net.MalformedURLException))) {
+if (jalview.bin.JalviewLite.debug) {
+System.err.println (jex);
+}if (Clazz.instanceOf (jex, netscape.javascript.JSException) && this.b$["jalview.javascript.JSFunctionExec"].jvlite.jsfallbackEnabled) {
+this.f$.jsex[0] = jex;
+if (jalview.bin.JalviewLite.debug) {
+System.err.println ("Falling back to javascript: url call");
+}var sb = new StringBuffer ("javascript:" + this.f$._listener + "(");
+for (var i = 0; this.f$.objects != null && i < this.f$.objects.length; i++) {
+if (i > 0) {
+sb.append (",");
+}sb.append ("\"");
+if (this.f$.objects[i] != null && !(this.f$.objects[i].getClass ().getName ().indexOf ("jalview") == 0)) {
+sb.append (this.f$.objects[i].toString ());
+}sb.append ("\"");
+}
+sb.append (")");
+if (jalview.bin.JalviewLite.debug) {
+System.err.println (sb.toString ());
+}var url = null;
+try {
+url = new java.net.URL (sb.toString ());
+this.b$["jalview.javascript.JSFunctionExec"].jvlite.getAppletContext ().showDocument (url);
+jex = null;
+} catch (uex) {
+if (Clazz.exceptionOf (uex, Exception)) {
+jex = uex;
+} else {
+throw uex;
+}
+}
+}if (jex != null) {
+if (this.f$.async) {
+jex.printStackTrace ();
+} else {
+this.f$.jsex[0] = jex;
+}};}} else {
+throw jex;
+}
+}
+});
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/javascript/JalviewLiteJsApi.js b/bin/jalview/javascript/JalviewLiteJsApi.js
index ed4943e..bdd7529 100644
--- a/bin/jalview/javascript/JalviewLiteJsApi.js
+++ b/bin/jalview/javascript/JalviewLiteJsApi.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.javascript");
-Clazz.declareInterface (jalview.javascript, "JalviewLiteJsApi");
+Clazz.declarePackage ("jalview.javascript");
+Clazz.declareInterface (jalview.javascript, "JalviewLiteJsApi");
diff --git a/bin/jalview/javascript/JsCallBack.js b/bin/jalview/javascript/JsCallBack.js
index 1577e6b..85ac52a 100644
--- a/bin/jalview/javascript/JsCallBack.js
+++ b/bin/jalview/javascript/JsCallBack.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.javascript");
-Clazz.declareInterface (jalview.javascript, "JsCallBack");
+Clazz.declarePackage ("jalview.javascript");
+Clazz.declareInterface (jalview.javascript, "JsCallBack");
diff --git a/bin/jalview/javascript/JsSelectionSender.js b/bin/jalview/javascript/JsSelectionSender.js
index ad763f0..36703c5 100644
--- a/bin/jalview/javascript/JsSelectionSender.js
+++ b/bin/jalview/javascript/JsSelectionSender.js
@@ -1,70 +1,70 @@
-Clazz.declarePackage ("jalview.javascript");
-Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.SelectionListener"], "jalview.javascript.JsSelectionSender", ["jalview.appletgui.AlignViewport", "netscape.javascript.JSException"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this._af = null;
-this._listener = null;
-Clazz.instantialize (this, arguments);
-}, jalview.javascript, "JsSelectionSender", jalview.javascript.JSFunctionExec, [jalview.structure.SelectionListener, jalview.javascript.JsCallBack]);
-Clazz.makeConstructor (c$,
-function (jvlite, af, listener) {
-Clazz.superConstructor (this, jalview.javascript.JsSelectionSender, [jvlite]);
-this._af = af;
-this._listener = listener;
-}, "jalview.bin.JalviewLite,jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "selection",
-function (seqsel, colsel, source) {
-try {
-var setid = "";
-var viewid = "";
-var src = this._af;
-if (source != null) {
-if (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).applet.currentAlignFrame.viewport === source) {
-src = (source).applet.currentAlignFrame;
-}}var seqs = Clazz.newArray (-1, []);
-var cols = Clazz.newArray (-1, []);
-var strt = 0;
-var end = (src == null) ? -1 : src.alignPanel.av.getAlignment ().getWidth ();
-if (seqsel != null && seqsel.getSize () > 0) {
-seqs = new Array (seqsel.getSize ());
-for (var i = 0; i < seqs.length; i++) {
-seqs[i] = seqsel.getSequenceAt (i).getName ();
-}
-if (strt < seqsel.getStartRes ()) {
-strt = seqsel.getStartRes ();
-}if (end == -1 || end > seqsel.getEndRes ()) {
-end = seqsel.getEndRes ();
-}}if (colsel != null && colsel.size () > 0) {
-if (end == -1) {
-end = colsel.getMax () + 1;
-}cols = new Array (colsel.getSelected ().size ());
-var d = 0;
-var r = -1;
-for (var i = 0; i < cols.length; i++) {
-cols[i] = "" + (1 + colsel.getSelected ().elementAt (i).intValue ());
-}
-} else {
-if (seqsel != null && seqsel.getSize () > 0) {
-cols = new Array (2);
-cols[0] = "" + (1 + strt) + "-" + (1 + end);
-};}System.err.println ("Relaying selection to jsfunction:" + this._listener);
-this.executeJavascriptFunction (this._listener, Clazz.newArray (-1, [src, setid, this.jvlite.arrayToSeparatorList (seqs), this.jvlite.arrayToSeparatorList (cols)]));
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Jalview Javascript exec error: Couldn't send selection message using function '" + this._listener + "'");
-ex.printStackTrace ();
-if (Clazz.instanceOf (ex, netscape.javascript.JSException)) {
-System.err.println ("Javascript Exception: " + (ex).getCause ().toString ());
-}} else {
-throw ex;
-}
-}
-}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
-Clazz.overrideMethod (c$, "getAlignFrame",
-function () {
-return this._af;
-});
-Clazz.overrideMethod (c$, "getListenerFunction",
-function () {
-return this._listener;
-});
-});
+Clazz.declarePackage ("jalview.javascript");
+Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.SelectionListener"], "jalview.javascript.JsSelectionSender", ["jalview.appletgui.AlignViewport", "netscape.javascript.JSException"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this._af = null;
+this._listener = null;
+Clazz.instantialize (this, arguments);
+}, jalview.javascript, "JsSelectionSender", jalview.javascript.JSFunctionExec, [jalview.structure.SelectionListener, jalview.javascript.JsCallBack]);
+Clazz.makeConstructor (c$,
+function (jvlite, af, listener) {
+Clazz.superConstructor (this, jalview.javascript.JsSelectionSender, [jvlite]);
+this._af = af;
+this._listener = listener;
+}, "jalview.bin.JalviewLite,jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "selection",
+function (seqsel, colsel, source) {
+try {
+var setid = "";
+var viewid = "";
+var src = this._af;
+if (source != null) {
+if (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).applet.currentAlignFrame.viewport === source) {
+src = (source).applet.currentAlignFrame;
+}}var seqs = Clazz.newArray (-1, []);
+var cols = Clazz.newArray (-1, []);
+var strt = 0;
+var end = (src == null) ? -1 : src.alignPanel.av.getAlignment ().getWidth ();
+if (seqsel != null && seqsel.getSize () > 0) {
+seqs = new Array (seqsel.getSize ());
+for (var i = 0; i < seqs.length; i++) {
+seqs[i] = seqsel.getSequenceAt (i).getName ();
+}
+if (strt < seqsel.getStartRes ()) {
+strt = seqsel.getStartRes ();
+}if (end == -1 || end > seqsel.getEndRes ()) {
+end = seqsel.getEndRes ();
+}}if (colsel != null && colsel.size () > 0) {
+if (end == -1) {
+end = colsel.getMax () + 1;
+}cols = new Array (colsel.getSelected ().size ());
+var d = 0;
+var r = -1;
+for (var i = 0; i < cols.length; i++) {
+cols[i] = "" + (1 + colsel.getSelected ().elementAt (i).intValue ());
+}
+} else {
+if (seqsel != null && seqsel.getSize () > 0) {
+cols = new Array (2);
+cols[0] = "" + (1 + strt) + "-" + (1 + end);
+};}System.err.println ("Relaying selection to jsfunction:" + this._listener);
+this.executeJavascriptFunction (this._listener, Clazz.newArray (-1, [src, setid, this.jvlite.arrayToSeparatorList (seqs), this.jvlite.arrayToSeparatorList (cols)]));
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Jalview Javascript exec error: Couldn't send selection message using function '" + this._listener + "'");
+ex.printStackTrace ();
+if (Clazz.instanceOf (ex, netscape.javascript.JSException)) {
+System.err.println ("Javascript Exception: " + (ex).getCause ().toString ());
+}} else {
+throw ex;
+}
+}
+}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
+Clazz.overrideMethod (c$, "getAlignFrame",
+function () {
+return this._af;
+});
+Clazz.overrideMethod (c$, "getListenerFunction",
+function () {
+return this._listener;
+});
+});
diff --git a/bin/jalview/javascript/MouseOverListener.js b/bin/jalview/javascript/MouseOverListener.js
index 39cb7bc..de59a3e 100644
--- a/bin/jalview/javascript/MouseOverListener.js
+++ b/bin/jalview/javascript/MouseOverListener.js
@@ -1,46 +1,46 @@
-Clazz.declarePackage ("jalview.javascript");
-Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.VamsasListener"], "jalview.javascript.MouseOverListener", ["jalview.appletgui.AlignViewport", "netscape.javascript.JSException"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this._af = null;
-this._listener = null;
-this.last = null;
-this.i = -1;
-Clazz.instantialize (this, arguments);
-}, jalview.javascript, "MouseOverListener", jalview.javascript.JSFunctionExec, [jalview.structure.VamsasListener, jalview.javascript.JsCallBack]);
-Clazz.overrideMethod (c$, "mouseOverSequence",
-function (seq, index, source) {
-if (seq !== this.last || this.i != index) {
-this.last = seq;
-this.i = index;
-var src = null;
-try {
-if (source != null) {
-if (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).applet.currentAlignFrame.viewport === source) {
-src = (source).applet.currentAlignFrame;
-}}this.executeJavascriptFunction (this._listener, Clazz.newArray (-1, [src, seq.getDisplayId (false), "" + (1 + this.i), "" + seq.findPosition (this.i)]));
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("JalviewLite javascript error: Couldn't send mouseOver with handler '" + this._listener + "'");
-if (Clazz.instanceOf (ex, netscape.javascript.JSException)) {
-System.err.println ("Javascript Exception: " + (ex).getMessage ());
-}ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}}, "jalview.datamodel.SequenceI,~N,jalview.structure.VamsasSource");
-Clazz.makeConstructor (c$,
-function (applet, af, listener) {
-Clazz.superConstructor (this, jalview.javascript.MouseOverListener, [applet]);
-this._af = af;
-this._listener = listener;
-}, "jalview.bin.JalviewLite,jalview.appletgui.AlignFrame,~S");
-Clazz.overrideMethod (c$, "getAlignFrame",
-function () {
-return this._af;
-});
-Clazz.overrideMethod (c$, "getListenerFunction",
-function () {
-return this._listener;
-});
-});
+Clazz.declarePackage ("jalview.javascript");
+Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.VamsasListener"], "jalview.javascript.MouseOverListener", ["jalview.appletgui.AlignViewport", "netscape.javascript.JSException"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this._af = null;
+this._listener = null;
+this.last = null;
+this.i = -1;
+Clazz.instantialize (this, arguments);
+}, jalview.javascript, "MouseOverListener", jalview.javascript.JSFunctionExec, [jalview.structure.VamsasListener, jalview.javascript.JsCallBack]);
+Clazz.overrideMethod (c$, "mouseOverSequence",
+function (seq, index, source) {
+if (seq !== this.last || this.i != index) {
+this.last = seq;
+this.i = index;
+var src = null;
+try {
+if (source != null) {
+if (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).applet.currentAlignFrame.viewport === source) {
+src = (source).applet.currentAlignFrame;
+}}this.executeJavascriptFunction (this._listener, Clazz.newArray (-1, [src, seq.getDisplayId (false), "" + (1 + this.i), "" + seq.findPosition (this.i)]));
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("JalviewLite javascript error: Couldn't send mouseOver with handler '" + this._listener + "'");
+if (Clazz.instanceOf (ex, netscape.javascript.JSException)) {
+System.err.println ("Javascript Exception: " + (ex).getMessage ());
+}ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}}, "jalview.datamodel.SequenceI,~N,jalview.structure.VamsasSource");
+Clazz.makeConstructor (c$,
+function (applet, af, listener) {
+Clazz.superConstructor (this, jalview.javascript.MouseOverListener, [applet]);
+this._af = af;
+this._listener = listener;
+}, "jalview.bin.JalviewLite,jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "getAlignFrame",
+function () {
+return this._af;
+});
+Clazz.overrideMethod (c$, "getListenerFunction",
+function () {
+return this._listener;
+});
+});
diff --git a/bin/jalview/javascript/MouseOverStructureListener.js b/bin/jalview/javascript/MouseOverStructureListener.js
index 12d1e2f..c897252 100644
--- a/bin/jalview/javascript/MouseOverStructureListener.js
+++ b/bin/jalview/javascript/MouseOverStructureListener.js
@@ -1,143 +1,143 @@
-Clazz.declarePackage ("jalview.javascript");
-Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.StructureListener"], "jalview.javascript.MouseOverStructureListener", ["jalview.api.AlignmentViewPanel", "jalview.appletgui.FeatureRenderer", "jalview.ext.jmol.JmolCommands", "jalview.structure.StructureSelectionManager", "java.net.URL", "java.util.ArrayList"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this._listenerfn = null;
-this.modelSet = null;
-Clazz.instantialize (this, arguments);
-}, jalview.javascript, "MouseOverStructureListener", jalview.javascript.JSFunctionExec, [jalview.javascript.JsCallBack, jalview.structure.StructureListener]);
-Clazz.makeConstructor (c$,
-function (jalviewLite, listener, modelList) {
-Clazz.superConstructor (this, jalview.javascript.MouseOverStructureListener, [jalviewLite]);
-this._listenerfn = listener;
-this.modelSet = modelList;
-if (this.modelSet != null) {
-for (var i = 0; i < this.modelSet.length; i++) {
-try {
-if ( new java.net.URL (this.modelSet[i]).openConnection () != null) {
-continue;
-}} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-} else {
-throw x;
-}
-}
-;try {
-var db = this.jvlite.getDocumentBase ().toString ();
-db = db.substring (0, db.lastIndexOf ("/"));
-if ( new java.net.URL (db + "/" + this.modelSet[i]).openConnection () != null) {
-this.modelSet[i] = db + "/" + this.modelSet[i];
-continue;
-}} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-} else {
-throw x;
-}
-}
-;try {
-if ( new java.net.URL (this.jvlite.getCodeBase () + this.modelSet[i]).openConnection () != null) {
-this.modelSet[i] = this.jvlite.getCodeBase () + this.modelSet[i];
-continue;
-}} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-} else {
-throw x;
-}
-}
-;}
-}}, "jalview.bin.JalviewLite,~S,~A");
-Clazz.overrideMethod (c$, "getPdbFile",
-function () {
-return this.modelSet;
-});
-Clazz.defineMethod (c$, "mouseOverStructure",
-function (atomIndex, strInfo) {
-}, "~N,~S");
-Clazz.overrideMethod (c$, "highlightAtoms",
-function (atoms) {
-for (var atom, $atom = atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
-try {
-this.executeJavascriptFunction (this._listenerfn, Clazz.newArray (-1, ["mouseover", "" + atom.getPdbFile (), "" + atom.getChain (), "" + (atom.getPdbResNum ()), "" + atom.getAtomIndex ()]));
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Couldn't execute callback with " + this._listenerfn + " for atomSpec: " + atom);
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}
-}, "java.util.List");
-Clazz.overrideMethod (c$, "updateColours",
-function (srce) {
-var source = srce;
-var ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.jvlite);
-if (Clazz.instanceOf (source, jalview.api.AlignmentViewPanel)) {
-var sequence = new Array (this.modelSet.length);
-for (var m = 0; m < this.modelSet.length; m++) {
-var sm = ssm.getMapping (this.modelSet[m]);
-if (sm != null && sm.length > 0) {
-sequence[m] = new Array (sm.length);
-for (var i = 0; i < sm.length; i++) {
-sequence[m][i] = sm[i].getSequence ();
-}
-} else {
-sequence[m] = new Array (0);
-}}
-var sr = (source).getSequenceRenderer ();
-var fr = (source).av.isShowSequenceFeatures () ? new jalview.appletgui.FeatureRenderer ((source).av) : null;
-if (fr != null) {
-(fr).transferSettings ((source).getFeatureRenderer ());
-};var ccomands = new java.util.ArrayList ();
-var pdbfn = new java.util.ArrayList ();
-var colcommands = jalview.ext.jmol.JmolCommands.getColourBySequenceCommand (ssm, this.modelSet, sequence, sr, fr, (source).getAlignment ());
-if (colcommands == null) {
-return;
-}var sz = 0;
-for (var ccset, $ccset = 0, $$ccset = colcommands; $ccset < $$ccset.length && ((ccset = $$ccset[$ccset]) || true); $ccset++) {
-sz += ccset.commands.length;
-ccomands.add (ccset.commands);
-pdbfn.add (ccset.mapping);
-}
-var mclass;
-var mhandle;
-var ccomandset = new Array (sz);
-sz = 0;
-for (var ccset, $ccset = ccomands.iterator (); $ccset.hasNext () && ((ccset = $ccset.next ()) || true);) {
-System.arraycopy (ccset, 0, ccomandset, sz, ccset.length);
-sz += ccset.length;
-}
-if (this.jvlite.isJsMessageSetChanged (mclass = "colourstruct", mhandle = (source).av.getViewId (), ccomandset)) {
-this.jvlite.setJsMessageSet (mclass, mhandle, ccomandset);
-var st = Clazz.newArray (-1, ["colourstruct", "" + (source).av.getViewId (), "" + ccomandset.length, this.jvlite.arrayToSeparatorList (pdbfn.toArray ( new Array (pdbfn.size ())))]);
-try {
-this.executeJavascriptFunction (true, this._listenerfn, st);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.err.println ("Couldn't execute callback with " + this._listenerfn + " using args { " + st[0] + ", " + st[1] + ", " + st[2] + "," + st[3] + "}");
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}}}, "~O");
-Clazz.overrideMethod (c$, "getAlignFrame",
-function () {
-return null;
-});
-Clazz.overrideMethod (c$, "getListenerFunction",
-function () {
-return this._listenerfn;
-});
-Clazz.defineMethod (c$, "finalise",
-function () {
-this.jvlite = null;
-Clazz.superCall (this, jalview.javascript.MouseOverStructureListener, "finalize", []);
-});
-Clazz.overrideMethod (c$, "releaseReferences",
-function (svl) {
-}, "~O");
-Clazz.overrideMethod (c$, "isListeningFor",
-function (seq) {
-return true;
-}, "jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.javascript");
+Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.StructureListener"], "jalview.javascript.MouseOverStructureListener", ["jalview.api.AlignmentViewPanel", "jalview.appletgui.FeatureRenderer", "jalview.ext.jmol.JmolCommands", "jalview.structure.StructureSelectionManager", "java.net.URL", "java.util.ArrayList"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this._listenerfn = null;
+this.modelSet = null;
+Clazz.instantialize (this, arguments);
+}, jalview.javascript, "MouseOverStructureListener", jalview.javascript.JSFunctionExec, [jalview.javascript.JsCallBack, jalview.structure.StructureListener]);
+Clazz.makeConstructor (c$,
+function (jalviewLite, listener, modelList) {
+Clazz.superConstructor (this, jalview.javascript.MouseOverStructureListener, [jalviewLite]);
+this._listenerfn = listener;
+this.modelSet = modelList;
+if (this.modelSet != null) {
+for (var i = 0; i < this.modelSet.length; i++) {
+try {
+if ( new java.net.URL (this.modelSet[i]).openConnection () != null) {
+continue;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+}
+;try {
+var db = this.jvlite.getDocumentBase ().toString ();
+db = db.substring (0, db.lastIndexOf ("/"));
+if ( new java.net.URL (db + "/" + this.modelSet[i]).openConnection () != null) {
+this.modelSet[i] = db + "/" + this.modelSet[i];
+continue;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+}
+;try {
+if ( new java.net.URL (this.jvlite.getCodeBase () + this.modelSet[i]).openConnection () != null) {
+this.modelSet[i] = this.jvlite.getCodeBase () + this.modelSet[i];
+continue;
+}} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+} else {
+throw x;
+}
+}
+;}
+}}, "jalview.bin.JalviewLite,~S,~A");
+Clazz.overrideMethod (c$, "getPdbFile",
+function () {
+return this.modelSet;
+});
+Clazz.defineMethod (c$, "mouseOverStructure",
+function (atomIndex, strInfo) {
+}, "~N,~S");
+Clazz.overrideMethod (c$, "highlightAtoms",
+function (atoms) {
+for (var atom, $atom = atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
+try {
+this.executeJavascriptFunction (this._listenerfn, Clazz.newArray (-1, ["mouseover", "" + atom.getPdbFile (), "" + atom.getChain (), "" + (atom.getPdbResNum ()), "" + atom.getAtomIndex ()]));
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Couldn't execute callback with " + this._listenerfn + " for atomSpec: " + atom);
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}
+}, "java.util.List");
+Clazz.overrideMethod (c$, "updateColours",
+function (srce) {
+var source = srce;
+var ssm = jalview.structure.StructureSelectionManager.getStructureSelectionManager (this.jvlite);
+if (Clazz.instanceOf (source, jalview.api.AlignmentViewPanel)) {
+var sequence = new Array (this.modelSet.length);
+for (var m = 0; m < this.modelSet.length; m++) {
+var sm = ssm.getMapping (this.modelSet[m]);
+if (sm != null && sm.length > 0) {
+sequence[m] = new Array (sm.length);
+for (var i = 0; i < sm.length; i++) {
+sequence[m][i] = sm[i].getSequence ();
+}
+} else {
+sequence[m] = new Array (0);
+}}
+var sr = (source).getSequenceRenderer ();
+var fr = (source).av.isShowSequenceFeatures () ? new jalview.appletgui.FeatureRenderer ((source).av) : null;
+if (fr != null) {
+(fr).transferSettings ((source).getFeatureRenderer ());
+};var ccomands = new java.util.ArrayList ();
+var pdbfn = new java.util.ArrayList ();
+var colcommands = jalview.ext.jmol.JmolCommands.getColourBySequenceCommand (ssm, this.modelSet, sequence, sr, fr, (source).getAlignment ());
+if (colcommands == null) {
+return;
+}var sz = 0;
+for (var ccset, $ccset = 0, $$ccset = colcommands; $ccset < $$ccset.length && ((ccset = $$ccset[$ccset]) || true); $ccset++) {
+sz += ccset.commands.length;
+ccomands.add (ccset.commands);
+pdbfn.add (ccset.mapping);
+}
+var mclass;
+var mhandle;
+var ccomandset = new Array (sz);
+sz = 0;
+for (var ccset, $ccset = ccomands.iterator (); $ccset.hasNext () && ((ccset = $ccset.next ()) || true);) {
+System.arraycopy (ccset, 0, ccomandset, sz, ccset.length);
+sz += ccset.length;
+}
+if (this.jvlite.isJsMessageSetChanged (mclass = "colourstruct", mhandle = (source).av.getViewId (), ccomandset)) {
+this.jvlite.setJsMessageSet (mclass, mhandle, ccomandset);
+var st = Clazz.newArray (-1, ["colourstruct", "" + (source).av.getViewId (), "" + ccomandset.length, this.jvlite.arrayToSeparatorList (pdbfn.toArray ( new Array (pdbfn.size ())))]);
+try {
+this.executeJavascriptFunction (true, this._listenerfn, st);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Couldn't execute callback with " + this._listenerfn + " using args { " + st[0] + ", " + st[1] + ", " + st[2] + "," + st[3] + "}");
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}}}, "~O");
+Clazz.overrideMethod (c$, "getAlignFrame",
+function () {
+return null;
+});
+Clazz.overrideMethod (c$, "getListenerFunction",
+function () {
+return this._listenerfn;
+});
+Clazz.defineMethod (c$, "finalise",
+function () {
+this.jvlite = null;
+Clazz.superCall (this, jalview.javascript.MouseOverStructureListener, "finalize", []);
+});
+Clazz.overrideMethod (c$, "releaseReferences",
+function (svl) {
+}, "~O");
+Clazz.overrideMethod (c$, "isListeningFor",
+function (seq) {
+return true;
+}, "jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/jsdev/Constants.js b/bin/jalview/jsdev/Constants.js
index 9963449..64acea4 100644
--- a/bin/jalview/jsdev/Constants.js
+++ b/bin/jalview/jsdev/Constants.js
@@ -1,13 +1,13 @@
-Clazz.declarePackage ("jalview.jsdev");
-c$ = Clazz.declareType (jalview.jsdev, "Constants");
-Clazz.defineStatics (c$,
-"TCOFFEE_SCORE", "TCoffeeScore",
-"Phylip_FILE", 1,
-"Phylip_FILE_EXT", "phy",
-"Phylip_FILE_DESC", "PHYLIP",
-"JSON_FILE", 2,
-"JSON_FILE_EXT", "json",
-"JSON_FILE_DESC", "JSON",
-"Html_FILE", 3,
-"Html_FILE_EXT", "html",
-"Html_FILE_DESC", "HTML");
+Clazz.declarePackage ("jalview.jsdev");
+c$ = Clazz.declareType (jalview.jsdev, "Constants");
+Clazz.defineStatics (c$,
+"TCOFFEE_SCORE", "TCoffeeScore",
+"Phylip_FILE", 1,
+"Phylip_FILE_EXT", "phy",
+"Phylip_FILE_DESC", "PHYLIP",
+"JSON_FILE", 2,
+"JSON_FILE_EXT", "json",
+"JSON_FILE_DESC", "JSON",
+"Html_FILE", 3,
+"Html_FILE_EXT", "html",
+"Html_FILE_DESC", "HTML");
diff --git a/bin/jalview/jsdev/GenericFileAdapter.js b/bin/jalview/jsdev/GenericFileAdapter.js
index 60cf065..9144c4b 100644
--- a/bin/jalview/jsdev/GenericFileAdapter.js
+++ b/bin/jalview/jsdev/GenericFileAdapter.js
@@ -1,85 +1,85 @@
-Clazz.declarePackage ("jalview.jsdev");
-Clazz.load (["jalview.io.AlignFile"], "jalview.jsdev.GenericFileAdapter", ["jalview.datamodel.AlignmentI", "jalview.io.FileParse", "java.io.BufferedReader", "$.InputStreamReader", "java.net.URL"], function () {
-c$ = Clazz.declareType (jalview.jsdev, "GenericFileAdapter", jalview.io.AlignFile);
-c$.getFile = Clazz.defineMethod (c$, "getFile",
-function (fileType, params) {
-var cl = null;
-try {
-cl = Class.forName ("jalview.io." + fileType);
-} catch (e) {
-if (Clazz.exceptionOf (e, ClassNotFoundException)) {
-System.err.println ("did not find file jalview.io." + fileType);
-return null;
-} else {
-throw e;
-}
-}
-var m;
-var ex = null;
-try {
-switch (params.length) {
-case 0:
-return cl.newInstance ();
-case 1:
-m = (Clazz.instanceOf (params[0], jalview.io.FileParse) ? cl.getConstructor ([jalview.io.FileParse]) : cl.getConstructor ([jalview.datamodel.AlignmentI]));
-break;
-case 2:
-m = cl.getConstructor ([String, String]);
-break;
-default:
-return null;
-}
-return m.newInstance (params);
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, InstantiationException)) {
-var e = e$$;
-{
-ex = e;
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var e = e$$;
-{
-ex = e;
-}
-} else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
-var e = e$$;
-{
-ex = e;
-}
-} else if (Clazz.exceptionOf (e$$, SecurityException)) {
-var e = e$$;
-{
-ex = e;
-}
-} else if (Clazz.exceptionOf (e$$, IllegalArgumentException)) {
-var e = e$$;
-{
-ex = e;
-}
-} else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
-var e = e$$;
-{
-ex = e;
-}
-} else {
-throw e$$;
-}
-}
-if (ex != null) {
-System.err.println ("Error in GenericFileAdapter: " + ex);
-{
-alert(ex)
-}}return null;
-}, "~S,~A");
-c$.isJS = Clazz.defineMethod (c$, "isJS",
-function () {
-{
-return true;
-}});
-c$.getReader = Clazz.defineMethod (c$, "getReader",
-function (fileName, forceURL) {
-if (!forceURL && !jalview.jsdev.GenericFileAdapter.isJS ()) return new java.io.BufferedReader ( new java.io.FileReader (fileName));
-if (fileName.indexOf ("//") < 0) fileName = "file://" + fileName;
-return new java.io.BufferedReader ( new java.io.InputStreamReader ( new java.net.URL (fileName).openStream ()));
-}, "~S,~B");
-});
+Clazz.declarePackage ("jalview.jsdev");
+Clazz.load (["jalview.io.AlignFile"], "jalview.jsdev.GenericFileAdapter", ["jalview.datamodel.AlignmentI", "jalview.io.FileParse", "java.io.BufferedReader", "$.InputStreamReader", "java.net.URL"], function () {
+c$ = Clazz.declareType (jalview.jsdev, "GenericFileAdapter", jalview.io.AlignFile);
+c$.getFile = Clazz.defineMethod (c$, "getFile",
+function (fileType, params) {
+var cl = null;
+try {
+cl = Class.forName ("jalview.io." + fileType);
+} catch (e) {
+if (Clazz.exceptionOf (e, ClassNotFoundException)) {
+System.err.println ("did not find file jalview.io." + fileType);
+return null;
+} else {
+throw e;
+}
+}
+var m;
+var ex = null;
+try {
+switch (params.length) {
+case 0:
+return cl.newInstance ();
+case 1:
+m = (Clazz.instanceOf (params[0], jalview.io.FileParse) ? cl.getConstructor ([jalview.io.FileParse]) : cl.getConstructor ([jalview.datamodel.AlignmentI]));
+break;
+case 2:
+m = cl.getConstructor ([String, String]);
+break;
+default:
+return null;
+}
+return m.newInstance (params);
+} catch (e$$) {
+if (Clazz.exceptionOf (e$$, InstantiationException)) {
+var e = e$$;
+{
+ex = e;
+}
+} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
+var e = e$$;
+{
+ex = e;
+}
+} else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
+var e = e$$;
+{
+ex = e;
+}
+} else if (Clazz.exceptionOf (e$$, SecurityException)) {
+var e = e$$;
+{
+ex = e;
+}
+} else if (Clazz.exceptionOf (e$$, IllegalArgumentException)) {
+var e = e$$;
+{
+ex = e;
+}
+} else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
+var e = e$$;
+{
+ex = e;
+}
+} else {
+throw e$$;
+}
+}
+if (ex != null) {
+System.err.println ("Error in GenericFileAdapter: " + ex);
+{
+alert(ex)
+}}return null;
+}, "~S,~A");
+c$.isJS = Clazz.defineMethod (c$, "isJS",
+function () {
+{
+return true;
+}});
+c$.getReader = Clazz.defineMethod (c$, "getReader",
+function (fileName, forceURL) {
+if (!forceURL && !jalview.jsdev.GenericFileAdapter.isJS ()) return new java.io.BufferedReader ( new java.io.FileReader (fileName));
+if (fileName.indexOf ("//") < 0) fileName = "file://" + fileName;
+return new java.io.BufferedReader ( new java.io.InputStreamReader ( new java.net.URL (fileName).openStream ()));
+}, "~S,~B");
+});
diff --git a/bin/jalview/jsdev/JSRegex.js b/bin/jalview/jsdev/JSRegex.js
index 4dcc13e..08e9c64 100644
--- a/bin/jalview/jsdev/JSRegex.js
+++ b/bin/jalview/jsdev/JSRegex.js
@@ -1,55 +1,55 @@
-Clazz.declarePackage ("jalview.jsdev");
-Clazz.load (["jalview.jsdev.api.RegExpInterface"], "jalview.jsdev.JSRegex", null, function () {
-c$ = Clazz.declareType (jalview.jsdev, "JSRegex", null, jalview.jsdev.api.RegExpInterface);
-Clazz.overrideMethod (c$, "charsMatched",
-function () {
-return 0;
-});
-Clazz.overrideMethod (c$, "left",
-function () {
-return null;
-});
-Clazz.overrideMethod (c$, "matchedFrom",
-function () {
-return 0;
-});
-Clazz.overrideMethod (c$, "matchedFromI",
-function (pos) {
-return 0;
-}, "~N");
-Clazz.overrideMethod (c$, "matchedTo",
-function () {
-return 0;
-});
-Clazz.overrideMethod (c$, "matchedToI",
-function (pos) {
-return 0;
-}, "~N");
-Clazz.overrideMethod (c$, "numSubs",
-function () {
-return 0;
-});
-Clazz.overrideMethod (c$, "replaceAll",
-function (string) {
-return null;
-}, "~S");
-Clazz.overrideMethod (c$, "search",
-function (str) {
-return false;
-}, "~S");
-Clazz.overrideMethod (c$, "searchFrom",
-function (string, rematchat) {
-return false;
-}, "~S,~N");
-Clazz.overrideMethod (c$, "setIgnoreCase",
-function (b) {
-}, "~B");
-Clazz.overrideMethod (c$, "stringMatched",
-function () {
-return null;
-});
-Clazz.overrideMethod (c$, "stringMatchedI",
-function (i) {
-return null;
-}, "~N");
-});
+Clazz.declarePackage ("jalview.jsdev");
+Clazz.load (["jalview.jsdev.api.RegExpInterface"], "jalview.jsdev.JSRegex", null, function () {
+c$ = Clazz.declareType (jalview.jsdev, "JSRegex", null, jalview.jsdev.api.RegExpInterface);
+Clazz.overrideMethod (c$, "charsMatched",
+function () {
+return 0;
+});
+Clazz.overrideMethod (c$, "left",
+function () {
+return null;
+});
+Clazz.overrideMethod (c$, "matchedFrom",
+function () {
+return 0;
+});
+Clazz.overrideMethod (c$, "matchedFromI",
+function (pos) {
+return 0;
+}, "~N");
+Clazz.overrideMethod (c$, "matchedTo",
+function () {
+return 0;
+});
+Clazz.overrideMethod (c$, "matchedToI",
+function (pos) {
+return 0;
+}, "~N");
+Clazz.overrideMethod (c$, "numSubs",
+function () {
+return 0;
+});
+Clazz.overrideMethod (c$, "replaceAll",
+function (string) {
+return null;
+}, "~S");
+Clazz.overrideMethod (c$, "search",
+function (str) {
+return false;
+}, "~S");
+Clazz.overrideMethod (c$, "searchFrom",
+function (string, rematchat) {
+return false;
+}, "~S,~N");
+Clazz.overrideMethod (c$, "setIgnoreCase",
+function (b) {
+}, "~B");
+Clazz.overrideMethod (c$, "stringMatched",
+function () {
+return null;
+});
+Clazz.overrideMethod (c$, "stringMatchedI",
+function (i) {
+return null;
+}, "~N");
+});
diff --git a/bin/jalview/jsdev/JavaScriptRegExp.js b/bin/jalview/jsdev/JavaScriptRegExp.js
index 735a4b6..5d67e59 100644
--- a/bin/jalview/jsdev/JavaScriptRegExp.js
+++ b/bin/jalview/jsdev/JavaScriptRegExp.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.jsdev");
-Clazz.declareInterface (jalview.jsdev, "JavaScriptRegExp");
+Clazz.declarePackage ("jalview.jsdev");
+Clazz.declareInterface (jalview.jsdev, "JavaScriptRegExp");
diff --git a/bin/jalview/jsdev/RegExp.js b/bin/jalview/jsdev/RegExp.js
index ffb883f..8b2e026 100644
--- a/bin/jalview/jsdev/RegExp.js
+++ b/bin/jalview/jsdev/RegExp.js
@@ -1,15 +1,15 @@
-Clazz.declarePackage ("jalview.jsdev");
-Clazz.load (null, "jalview.jsdev.RegExp", ["com.stevesoft.pat.Regex"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.rg = null;
-Clazz.instantialize (this, arguments);
-}, jalview.jsdev, "RegExp");
-c$.newRegex = Clazz.defineMethod (c$, "newRegex",
-function (params) {
-return new com.stevesoft.pat.Regex (params.length < 1 ? null : params[0], params.length < 2 ? "" : params[1]);
-}, "~A");
-c$.perlCode = Clazz.defineMethod (c$, "perlCode",
-function (s) {
-return com.stevesoft.pat.Regex.perlCode (s);
-}, "~S");
-});
+Clazz.declarePackage ("jalview.jsdev");
+Clazz.load (null, "jalview.jsdev.RegExp", ["com.stevesoft.pat.Regex"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.rg = null;
+Clazz.instantialize (this, arguments);
+}, jalview.jsdev, "RegExp");
+c$.newRegex = Clazz.defineMethod (c$, "newRegex",
+function (params) {
+return new com.stevesoft.pat.Regex (params.length < 1 ? null : params[0], params.length < 2 ? "" : params[1]);
+}, "~A");
+c$.perlCode = Clazz.defineMethod (c$, "perlCode",
+function (s) {
+return com.stevesoft.pat.Regex.perlCode (s);
+}, "~S");
+});
diff --git a/bin/jalview/jsdev/api/RegExpInterface.js b/bin/jalview/jsdev/api/RegExpInterface.js
index 5dfe0cd..48bb568 100644
--- a/bin/jalview/jsdev/api/RegExpInterface.js
+++ b/bin/jalview/jsdev/api/RegExpInterface.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.jsdev.api");
-Clazz.declareInterface (jalview.jsdev.api, "RegExpInterface");
+Clazz.declarePackage ("jalview.jsdev.api");
+Clazz.declareInterface (jalview.jsdev.api, "RegExpInterface");
diff --git a/bin/jalview/jsdev/api/VarnaRNA.js b/bin/jalview/jsdev/api/VarnaRNA.js
index c2ec8a3..1fa65f5 100644
--- a/bin/jalview/jsdev/api/VarnaRNA.js
+++ b/bin/jalview/jsdev/api/VarnaRNA.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.jsdev.api");
-Clazz.declareInterface (jalview.jsdev.api, "VarnaRNA");
+Clazz.declarePackage ("jalview.jsdev.api");
+Clazz.declareInterface (jalview.jsdev.api, "VarnaRNA");
diff --git a/bin/jalview/math/AlignmentDimension.js b/bin/jalview/math/AlignmentDimension.js
index 178fe61..2a23983 100644
--- a/bin/jalview/math/AlignmentDimension.js
+++ b/bin/jalview/math/AlignmentDimension.js
@@ -1,27 +1,27 @@
-Clazz.declarePackage ("jalview.math");
-c$ = Clazz.decorateAsClass (function () {
-this.width = 0;
-this.height = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.math, "AlignmentDimension");
-Clazz.makeConstructor (c$,
-function (width, height) {
-this.width = width;
-this.height = height;
-}, "~N,~N");
-Clazz.defineMethod (c$, "getWidth",
-function () {
-return this.width;
-});
-Clazz.defineMethod (c$, "setWidth",
-function (width) {
-this.width = width;
-}, "~N");
-Clazz.defineMethod (c$, "getHeight",
-function () {
-return this.height;
-});
-Clazz.defineMethod (c$, "setHeight",
-function (height) {
-this.height = height;
-}, "~N");
+Clazz.declarePackage ("jalview.math");
+c$ = Clazz.decorateAsClass (function () {
+this.width = 0;
+this.height = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.math, "AlignmentDimension");
+Clazz.makeConstructor (c$,
+function (width, height) {
+this.width = width;
+this.height = height;
+}, "~N,~N");
+Clazz.defineMethod (c$, "getWidth",
+function () {
+return this.width;
+});
+Clazz.defineMethod (c$, "setWidth",
+function (width) {
+this.width = width;
+}, "~N");
+Clazz.defineMethod (c$, "getHeight",
+function () {
+return this.height;
+});
+Clazz.defineMethod (c$, "setHeight",
+function (height) {
+this.height = height;
+}, "~N");
diff --git a/bin/jalview/math/Matrix.class b/bin/jalview/math/Matrix.class
index ff18c28..3bb0722 100644
Binary files a/bin/jalview/math/Matrix.class and b/bin/jalview/math/Matrix.class differ
diff --git a/bin/jalview/math/Matrix.js b/bin/jalview/math/Matrix.js
index e260277..22cb59d 100644
--- a/bin/jalview/math/Matrix.js
+++ b/bin/jalview/math/Matrix.js
@@ -1,423 +1,423 @@
-Clazz.declarePackage ("jalview.math");
-Clazz.load (null, "jalview.math.Matrix", ["jalview.util.Format", "$.MessageManager", "java.lang.Exception"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.value = null;
-this.rows = 0;
-this.cols = 0;
-this.d = null;
-this.e = null;
-this.maxIter = 45;
-Clazz.instantialize (this, arguments);
-}, jalview.math, "Matrix");
-Clazz.makeConstructor (c$,
-function (value, rows, cols) {
-this.rows = rows;
-this.cols = cols;
-this.value = value;
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "transpose",
-function () {
-var out = Clazz.newDoubleArray (this.cols, this.rows, 0);
-for (var i = 0; i < this.cols; i++) {
-for (var j = 0; j < this.rows; j++) {
-out[i][j] = this.value[j][i];
-}
-}
-return new jalview.math.Matrix (out, this.cols, this.rows);
-});
-Clazz.defineMethod (c$, "print",
-function (ps) {
-for (var i = 0; i < this.rows; i++) {
-for (var j = 0; j < this.cols; j++) {
-jalview.util.Format.printDouble (ps, "%8.2f", this.value[i][j]);
-}
-ps.println ();
-}
-}, "java.io.PrintStream");
-Clazz.defineMethod (c$, "preMultiply",
-function ($in) {
-var tmp = Clazz.newDoubleArray ($in.rows, this.cols, 0);
-for (var i = 0; i < $in.rows; i++) {
-for (var j = 0; j < this.cols; j++) {
-tmp[i][j] = 0.0;
-for (var k = 0; k < $in.cols; k++) {
-tmp[i][j] += ($in.value[i][k] * this.value[k][j]);
-}
-}
-}
-return new jalview.math.Matrix (tmp, $in.rows, this.cols);
-}, "jalview.math.Matrix");
-Clazz.defineMethod (c$, "vectorPostMultiply",
-function ($in) {
-var out = Clazz.newDoubleArray ($in.length, 0);
-for (var i = 0; i < $in.length; i++) {
-out[i] = 0.0;
-for (var k = 0; k < $in.length; k++) {
-out[i] += (this.value[i][k] * $in[k]);
-}
-}
-return out;
-}, "~A");
-Clazz.defineMethod (c$, "postMultiply",
-function ($in) {
-var out = Clazz.newDoubleArray (this.rows, $in.cols, 0);
-for (var i = 0; i < this.rows; i++) {
-for (var j = 0; j < $in.cols; j++) {
-out[i][j] = 0.0;
-for (var k = 0; k < this.rows; k++) {
-out[i][j] = out[i][j] + (this.value[i][k] * $in.value[k][j]);
-}
-}
-}
-return new jalview.math.Matrix (out, this.cols, $in.rows);
-}, "jalview.math.Matrix");
-Clazz.defineMethod (c$, "copy",
-function () {
-var newmat = Clazz.newDoubleArray (this.rows, this.cols, 0);
-for (var i = 0; i < this.rows; i++) {
-for (var j = 0; j < this.cols; j++) {
-newmat[i][j] = this.value[i][j];
-}
-}
-return new jalview.math.Matrix (newmat, this.rows, this.cols);
-});
-Clazz.defineMethod (c$, "tred",
-function () {
-var n = this.rows;
-var l;
-var k;
-var j;
-var i;
-var scale;
-var hh;
-var h;
-var g;
-var f;
-this.d = Clazz.newDoubleArray (this.rows, 0);
-this.e = Clazz.newDoubleArray (this.rows, 0);
-for (i = n; i >= 2; i--) {
-l = i - 1;
-h = 0.0;
-scale = 0.0;
-if (l > 1) {
-for (k = 1; k <= l; k++) {
-scale += Math.abs (this.value[i - 1][k - 1]);
-}
-if (scale == 0.0) {
-this.e[i - 1] = this.value[i - 1][l - 1];
-} else {
-for (k = 1; k <= l; k++) {
-this.value[i - 1][k - 1] /= scale;
-h += (this.value[i - 1][k - 1] * this.value[i - 1][k - 1]);
-}
-f = this.value[i - 1][l - 1];
-if (f > 0) {
-g = -1.0 * Math.sqrt (h);
-} else {
-g = Math.sqrt (h);
-}this.e[i - 1] = scale * g;
-h -= (f * g);
-this.value[i - 1][l - 1] = f - g;
-f = 0.0;
-for (j = 1; j <= l; j++) {
-this.value[j - 1][i - 1] = this.value[i - 1][j - 1] / h;
-g = 0.0;
-for (k = 1; k <= j; k++) {
-g += (this.value[j - 1][k - 1] * this.value[i - 1][k - 1]);
-}
-for (k = j + 1; k <= l; k++) {
-g += (this.value[k - 1][j - 1] * this.value[i - 1][k - 1]);
-}
-this.e[j - 1] = g / h;
-f += (this.e[j - 1] * this.value[i - 1][j - 1]);
-}
-hh = f / (h + h);
-for (j = 1; j <= l; j++) {
-f = this.value[i - 1][j - 1];
-g = this.e[j - 1] - (hh * f);
-this.e[j - 1] = g;
-for (k = 1; k <= j; k++) {
-this.value[j - 1][k - 1] -= ((f * this.e[k - 1]) + (g * this.value[i - 1][k - 1]));
-}
-}
-}} else {
-this.e[i - 1] = this.value[i - 1][l - 1];
-}this.d[i - 1] = h;
-}
-this.d[0] = 0.0;
-this.e[0] = 0.0;
-for (i = 1; i <= n; i++) {
-l = i - 1;
-if (this.d[i - 1] != 0.0) {
-for (j = 1; j <= l; j++) {
-g = 0.0;
-for (k = 1; k <= l; k++) {
-g += (this.value[i - 1][k - 1] * this.value[k - 1][j - 1]);
-}
-for (k = 1; k <= l; k++) {
-this.value[k - 1][j - 1] -= (g * this.value[k - 1][i - 1]);
-}
-}
-}this.d[i - 1] = this.value[i - 1][i - 1];
-this.value[i - 1][i - 1] = 1.0;
-for (j = 1; j <= l; j++) {
-this.value[j - 1][i - 1] = 0.0;
-this.value[i - 1][j - 1] = 0.0;
-}
-}
-});
-Clazz.defineMethod (c$, "tqli",
-function () {
-var n = this.rows;
-var m;
-var l;
-var iter;
-var i;
-var k;
-var s;
-var r;
-var p;
-;var g;
-var f;
-var dd;
-var c;
-var b;
-for (i = 2; i <= n; i++) {
-this.e[i - 2] = this.e[i - 1];
-}
-this.e[n - 1] = 0.0;
-for (l = 1; l <= n; l++) {
-iter = 0;
-do {
-for (m = l; m <= (n - 1); m++) {
-dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);
-if ((Math.abs (this.e[m - 1]) + dd) == dd) {
-break;
-}}
-if (m != l) {
-iter++;
-if (iter == this.maxIter) {
-throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli", Integer.$valueOf (this.maxIter).toString ()])));
-} else {
-}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);
-r = Math.sqrt ((g * g) + 1.0);
-g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));
-c = 1.0;
-s = c;
-p = 0.0;
-for (i = m - 1; i >= l; i--) {
-f = s * this.e[i - 1];
-b = c * this.e[i - 1];
-if (Math.abs (f) >= Math.abs (g)) {
-c = g / f;
-r = Math.sqrt ((c * c) + 1.0);
-this.e[i] = f * r;
-s = 1.0 / r;
-c *= s;
-} else {
-s = f / g;
-r = Math.sqrt ((s * s) + 1.0);
-this.e[i] = g * r;
-c = 1.0 / r;
-s *= c;
-}g = this.d[i] - p;
-r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);
-p = s * r;
-this.d[i] = g + p;
-g = (c * r) - b;
-for (k = 1; k <= n; k++) {
-f = this.value[k - 1][i];
-this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);
-this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);
-}
-}
-this.d[l - 1] = this.d[l - 1] - p;
-this.e[l - 1] = g;
-this.e[m - 1] = 0.0;
-}} while (m != l);
-}
-});
-Clazz.defineMethod (c$, "tred2",
-function () {
-var n = this.rows;
-var l;
-var k;
-var j;
-var i;
-var scale;
-var hh;
-var h;
-var g;
-var f;
-this.d = Clazz.newDoubleArray (this.rows, 0);
-this.e = Clazz.newDoubleArray (this.rows, 0);
-for (i = n - 1; i >= 1; i--) {
-l = i - 1;
-h = 0.0;
-scale = 0.0;
-if (l > 0) {
-for (k = 0; k < l; k++) {
-scale += Math.abs (this.value[i][k]);
-}
-if (scale == 0.0) {
-this.e[i] = this.value[i][l];
-} else {
-for (k = 0; k < l; k++) {
-this.value[i][k] /= scale;
-h += (this.value[i][k] * this.value[i][k]);
-}
-f = this.value[i][l];
-if (f > 0) {
-g = -1.0 * Math.sqrt (h);
-} else {
-g = Math.sqrt (h);
-}this.e[i] = scale * g;
-h -= (f * g);
-this.value[i][l] = f - g;
-f = 0.0;
-for (j = 0; j < l; j++) {
-this.value[j][i] = this.value[i][j] / h;
-g = 0.0;
-for (k = 0; k < j; k++) {
-g += (this.value[j][k] * this.value[i][k]);
-}
-for (k = j; k < l; k++) {
-g += (this.value[k][j] * this.value[i][k]);
-}
-this.e[j] = g / h;
-f += (this.e[j] * this.value[i][j]);
-}
-hh = f / (h + h);
-for (j = 0; j < l; j++) {
-f = this.value[i][j];
-g = this.e[j] - (hh * f);
-this.e[j] = g;
-for (k = 0; k < j; k++) {
-this.value[j][k] -= ((f * this.e[k]) + (g * this.value[i][k]));
-}
-}
-}} else {
-this.e[i] = this.value[i][l];
-}this.d[i] = h;
-}
-this.d[0] = 0.0;
-this.e[0] = 0.0;
-for (i = 0; i < n; i++) {
-l = i - 1;
-if (this.d[i] != 0.0) {
-for (j = 0; j < l; j++) {
-g = 0.0;
-for (k = 0; k < l; k++) {
-g += (this.value[i][k] * this.value[k][j]);
-}
-for (k = 0; k < l; k++) {
-this.value[k][j] -= (g * this.value[k][i]);
-}
-}
-}this.d[i] = this.value[i][i];
-this.value[i][i] = 1.0;
-for (j = 0; j < l; j++) {
-this.value[j][i] = 0.0;
-this.value[i][j] = 0.0;
-}
-}
-});
-Clazz.defineMethod (c$, "tqli2",
-function () {
-var n = this.rows;
-var m;
-var l;
-var iter;
-var i;
-var k;
-var s;
-var r;
-var p;
-;var g;
-var f;
-var dd;
-var c;
-var b;
-for (i = 2; i <= n; i++) {
-this.e[i - 2] = this.e[i - 1];
-}
-this.e[n - 1] = 0.0;
-for (l = 1; l <= n; l++) {
-iter = 0;
-do {
-for (m = l; m <= (n - 1); m++) {
-dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);
-if ((Math.abs (this.e[m - 1]) + dd) == dd) {
-break;
-}}
-if (m != l) {
-iter++;
-if (iter == this.maxIter) {
-throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli2", Integer.$valueOf (this.maxIter).toString ()])));
-} else {
-}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);
-r = Math.sqrt ((g * g) + 1.0);
-g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));
-c = 1.0;
-s = c;
-p = 0.0;
-for (i = m - 1; i >= l; i--) {
-f = s * this.e[i - 1];
-b = c * this.e[i - 1];
-if (Math.abs (f) >= Math.abs (g)) {
-c = g / f;
-r = Math.sqrt ((c * c) + 1.0);
-this.e[i] = f * r;
-s = 1.0 / r;
-c *= s;
-} else {
-s = f / g;
-r = Math.sqrt ((s * s) + 1.0);
-this.e[i] = g * r;
-c = 1.0 / r;
-s *= c;
-}g = this.d[i] - p;
-r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);
-p = s * r;
-this.d[i] = g + p;
-g = (c * r) - b;
-for (k = 1; k <= n; k++) {
-f = this.value[k - 1][i];
-this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);
-this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);
-}
-}
-this.d[l - 1] = this.d[l - 1] - p;
-this.e[l - 1] = g;
-this.e[m - 1] = 0.0;
-}} while (m != l);
-}
-});
-Clazz.defineMethod (c$, "sign",
-function (a, b) {
-if (b < 0) {
-return -Math.abs (a);
-} else {
-return Math.abs (a);
-}}, "~N,~N");
-Clazz.defineMethod (c$, "getColumn",
-function (n) {
-var out = Clazz.newDoubleArray (this.rows, 0);
-for (var i = 0; i < this.rows; i++) {
-out[i] = this.value[i][n];
-}
-return out;
-}, "~N");
-Clazz.defineMethod (c$, "printD",
-function (ps) {
-for (var j = 0; j < this.rows; j++) {
-jalview.util.Format.printDouble (ps, "%15.4e", this.d[j]);
-}
-}, "java.io.PrintStream");
-Clazz.defineMethod (c$, "printE",
-function (ps) {
-for (var j = 0; j < this.rows; j++) {
-jalview.util.Format.printDouble (ps, "%15.4e", this.e[j]);
-}
-}, "java.io.PrintStream");
-});
+Clazz.declarePackage ("jalview.math");
+Clazz.load (null, "jalview.math.Matrix", ["jalview.util.Format", "$.MessageManager", "java.lang.Exception"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.value = null;
+this.rows = 0;
+this.cols = 0;
+this.d = null;
+this.e = null;
+this.maxIter = 45;
+Clazz.instantialize (this, arguments);
+}, jalview.math, "Matrix");
+Clazz.makeConstructor (c$,
+function (value, rows, cols) {
+this.rows = rows;
+this.cols = cols;
+this.value = value;
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "transpose",
+function () {
+var out = Clazz.newDoubleArray (this.cols, this.rows, 0);
+for (var i = 0; i < this.cols; i++) {
+for (var j = 0; j < this.rows; j++) {
+out[i][j] = this.value[j][i];
+}
+}
+return new jalview.math.Matrix (out, this.cols, this.rows);
+});
+Clazz.defineMethod (c$, "print",
+function (ps) {
+for (var i = 0; i < this.rows; i++) {
+for (var j = 0; j < this.cols; j++) {
+jalview.util.Format.printDouble (ps, "%8.2f", this.value[i][j]);
+}
+ps.println ();
+}
+}, "java.io.PrintStream");
+Clazz.defineMethod (c$, "preMultiply",
+function ($in) {
+var tmp = Clazz.newDoubleArray ($in.rows, this.cols, 0);
+for (var i = 0; i < $in.rows; i++) {
+for (var j = 0; j < this.cols; j++) {
+tmp[i][j] = 0.0;
+for (var k = 0; k < $in.cols; k++) {
+tmp[i][j] += ($in.value[i][k] * this.value[k][j]);
+}
+}
+}
+return new jalview.math.Matrix (tmp, $in.rows, this.cols);
+}, "jalview.math.Matrix");
+Clazz.defineMethod (c$, "vectorPostMultiply",
+function ($in) {
+var out = Clazz.newDoubleArray ($in.length, 0);
+for (var i = 0; i < $in.length; i++) {
+out[i] = 0.0;
+for (var k = 0; k < $in.length; k++) {
+out[i] += (this.value[i][k] * $in[k]);
+}
+}
+return out;
+}, "~A");
+Clazz.defineMethod (c$, "postMultiply",
+function ($in) {
+var out = Clazz.newDoubleArray (this.rows, $in.cols, 0);
+for (var i = 0; i < this.rows; i++) {
+for (var j = 0; j < $in.cols; j++) {
+out[i][j] = 0.0;
+for (var k = 0; k < this.rows; k++) {
+out[i][j] = out[i][j] + (this.value[i][k] * $in.value[k][j]);
+}
+}
+}
+return new jalview.math.Matrix (out, this.cols, $in.rows);
+}, "jalview.math.Matrix");
+Clazz.defineMethod (c$, "copy",
+function () {
+var newmat = Clazz.newDoubleArray (this.rows, this.cols, 0);
+for (var i = 0; i < this.rows; i++) {
+for (var j = 0; j < this.cols; j++) {
+newmat[i][j] = this.value[i][j];
+}
+}
+return new jalview.math.Matrix (newmat, this.rows, this.cols);
+});
+Clazz.defineMethod (c$, "tred",
+function () {
+var n = this.rows;
+var l;
+var k;
+var j;
+var i;
+var scale;
+var hh;
+var h;
+var g;
+var f;
+this.d = Clazz.newDoubleArray (this.rows, 0);
+this.e = Clazz.newDoubleArray (this.rows, 0);
+for (i = n; i >= 2; i--) {
+l = i - 1;
+h = 0.0;
+scale = 0.0;
+if (l > 1) {
+for (k = 1; k <= l; k++) {
+scale += Math.abs (this.value[i - 1][k - 1]);
+}
+if (scale == 0.0) {
+this.e[i - 1] = this.value[i - 1][l - 1];
+} else {
+for (k = 1; k <= l; k++) {
+this.value[i - 1][k - 1] /= scale;
+h += (this.value[i - 1][k - 1] * this.value[i - 1][k - 1]);
+}
+f = this.value[i - 1][l - 1];
+if (f > 0) {
+g = -1.0 * Math.sqrt (h);
+} else {
+g = Math.sqrt (h);
+}this.e[i - 1] = scale * g;
+h -= (f * g);
+this.value[i - 1][l - 1] = f - g;
+f = 0.0;
+for (j = 1; j <= l; j++) {
+this.value[j - 1][i - 1] = this.value[i - 1][j - 1] / h;
+g = 0.0;
+for (k = 1; k <= j; k++) {
+g += (this.value[j - 1][k - 1] * this.value[i - 1][k - 1]);
+}
+for (k = j + 1; k <= l; k++) {
+g += (this.value[k - 1][j - 1] * this.value[i - 1][k - 1]);
+}
+this.e[j - 1] = g / h;
+f += (this.e[j - 1] * this.value[i - 1][j - 1]);
+}
+hh = f / (h + h);
+for (j = 1; j <= l; j++) {
+f = this.value[i - 1][j - 1];
+g = this.e[j - 1] - (hh * f);
+this.e[j - 1] = g;
+for (k = 1; k <= j; k++) {
+this.value[j - 1][k - 1] -= ((f * this.e[k - 1]) + (g * this.value[i - 1][k - 1]));
+}
+}
+}} else {
+this.e[i - 1] = this.value[i - 1][l - 1];
+}this.d[i - 1] = h;
+}
+this.d[0] = 0.0;
+this.e[0] = 0.0;
+for (i = 1; i <= n; i++) {
+l = i - 1;
+if (this.d[i - 1] != 0.0) {
+for (j = 1; j <= l; j++) {
+g = 0.0;
+for (k = 1; k <= l; k++) {
+g += (this.value[i - 1][k - 1] * this.value[k - 1][j - 1]);
+}
+for (k = 1; k <= l; k++) {
+this.value[k - 1][j - 1] -= (g * this.value[k - 1][i - 1]);
+}
+}
+}this.d[i - 1] = this.value[i - 1][i - 1];
+this.value[i - 1][i - 1] = 1.0;
+for (j = 1; j <= l; j++) {
+this.value[j - 1][i - 1] = 0.0;
+this.value[i - 1][j - 1] = 0.0;
+}
+}
+});
+Clazz.defineMethod (c$, "tqli",
+function () {
+var n = this.rows;
+var m;
+var l;
+var iter;
+var i;
+var k;
+var s;
+var r;
+var p;
+;var g;
+var f;
+var dd;
+var c;
+var b;
+for (i = 2; i <= n; i++) {
+this.e[i - 2] = this.e[i - 1];
+}
+this.e[n - 1] = 0.0;
+for (l = 1; l <= n; l++) {
+iter = 0;
+do {
+for (m = l; m <= (n - 1); m++) {
+dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);
+if ((Math.abs (this.e[m - 1]) + dd) == dd) {
+break;
+}}
+if (m != l) {
+iter++;
+if (iter == this.maxIter) {
+throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli", Integer.$valueOf (this.maxIter).toString ()])));
+} else {
+}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);
+r = Math.sqrt ((g * g) + 1.0);
+g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));
+c = 1.0;
+s = c;
+p = 0.0;
+for (i = m - 1; i >= l; i--) {
+f = s * this.e[i - 1];
+b = c * this.e[i - 1];
+if (Math.abs (f) >= Math.abs (g)) {
+c = g / f;
+r = Math.sqrt ((c * c) + 1.0);
+this.e[i] = f * r;
+s = 1.0 / r;
+c *= s;
+} else {
+s = f / g;
+r = Math.sqrt ((s * s) + 1.0);
+this.e[i] = g * r;
+c = 1.0 / r;
+s *= c;
+}g = this.d[i] - p;
+r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);
+p = s * r;
+this.d[i] = g + p;
+g = (c * r) - b;
+for (k = 1; k <= n; k++) {
+f = this.value[k - 1][i];
+this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);
+this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);
+}
+}
+this.d[l - 1] = this.d[l - 1] - p;
+this.e[l - 1] = g;
+this.e[m - 1] = 0.0;
+}} while (m != l);
+}
+});
+Clazz.defineMethod (c$, "tred2",
+function () {
+var n = this.rows;
+var l;
+var k;
+var j;
+var i;
+var scale;
+var hh;
+var h;
+var g;
+var f;
+this.d = Clazz.newDoubleArray (this.rows, 0);
+this.e = Clazz.newDoubleArray (this.rows, 0);
+for (i = n - 1; i >= 1; i--) {
+l = i - 1;
+h = 0.0;
+scale = 0.0;
+if (l > 0) {
+for (k = 0; k < l; k++) {
+scale += Math.abs (this.value[i][k]);
+}
+if (scale == 0.0) {
+this.e[i] = this.value[i][l];
+} else {
+for (k = 0; k < l; k++) {
+this.value[i][k] /= scale;
+h += (this.value[i][k] * this.value[i][k]);
+}
+f = this.value[i][l];
+if (f > 0) {
+g = -1.0 * Math.sqrt (h);
+} else {
+g = Math.sqrt (h);
+}this.e[i] = scale * g;
+h -= (f * g);
+this.value[i][l] = f - g;
+f = 0.0;
+for (j = 0; j < l; j++) {
+this.value[j][i] = this.value[i][j] / h;
+g = 0.0;
+for (k = 0; k < j; k++) {
+g += (this.value[j][k] * this.value[i][k]);
+}
+for (k = j; k < l; k++) {
+g += (this.value[k][j] * this.value[i][k]);
+}
+this.e[j] = g / h;
+f += (this.e[j] * this.value[i][j]);
+}
+hh = f / (h + h);
+for (j = 0; j < l; j++) {
+f = this.value[i][j];
+g = this.e[j] - (hh * f);
+this.e[j] = g;
+for (k = 0; k < j; k++) {
+this.value[j][k] -= ((f * this.e[k]) + (g * this.value[i][k]));
+}
+}
+}} else {
+this.e[i] = this.value[i][l];
+}this.d[i] = h;
+}
+this.d[0] = 0.0;
+this.e[0] = 0.0;
+for (i = 0; i < n; i++) {
+l = i - 1;
+if (this.d[i] != 0.0) {
+for (j = 0; j < l; j++) {
+g = 0.0;
+for (k = 0; k < l; k++) {
+g += (this.value[i][k] * this.value[k][j]);
+}
+for (k = 0; k < l; k++) {
+this.value[k][j] -= (g * this.value[k][i]);
+}
+}
+}this.d[i] = this.value[i][i];
+this.value[i][i] = 1.0;
+for (j = 0; j < l; j++) {
+this.value[j][i] = 0.0;
+this.value[i][j] = 0.0;
+}
+}
+});
+Clazz.defineMethod (c$, "tqli2",
+function () {
+var n = this.rows;
+var m;
+var l;
+var iter;
+var i;
+var k;
+var s;
+var r;
+var p;
+;var g;
+var f;
+var dd;
+var c;
+var b;
+for (i = 2; i <= n; i++) {
+this.e[i - 2] = this.e[i - 1];
+}
+this.e[n - 1] = 0.0;
+for (l = 1; l <= n; l++) {
+iter = 0;
+do {
+for (m = l; m <= (n - 1); m++) {
+dd = Math.abs (this.d[m - 1]) + Math.abs (this.d[m]);
+if ((Math.abs (this.e[m - 1]) + dd) == dd) {
+break;
+}}
+if (m != l) {
+iter++;
+if (iter == this.maxIter) {
+throw new Exception (jalview.util.MessageManager.formatMessage ("exception.matrix_too_many_iteration", Clazz.newArray (-1, ["tqli2", Integer.$valueOf (this.maxIter).toString ()])));
+} else {
+}g = (this.d[l] - this.d[l - 1]) / (2.0 * this.e[l - 1]);
+r = Math.sqrt ((g * g) + 1.0);
+g = this.d[m - 1] - this.d[l - 1] + (this.e[l - 1] / (g + this.sign (r, g)));
+c = 1.0;
+s = c;
+p = 0.0;
+for (i = m - 1; i >= l; i--) {
+f = s * this.e[i - 1];
+b = c * this.e[i - 1];
+if (Math.abs (f) >= Math.abs (g)) {
+c = g / f;
+r = Math.sqrt ((c * c) + 1.0);
+this.e[i] = f * r;
+s = 1.0 / r;
+c *= s;
+} else {
+s = f / g;
+r = Math.sqrt ((s * s) + 1.0);
+this.e[i] = g * r;
+c = 1.0 / r;
+s *= c;
+}g = this.d[i] - p;
+r = ((this.d[i - 1] - g) * s) + (2.0 * c * b);
+p = s * r;
+this.d[i] = g + p;
+g = (c * r) - b;
+for (k = 1; k <= n; k++) {
+f = this.value[k - 1][i];
+this.value[k - 1][i] = (s * this.value[k - 1][i - 1]) + (c * f);
+this.value[k - 1][i - 1] = (c * this.value[k - 1][i - 1]) - (s * f);
+}
+}
+this.d[l - 1] = this.d[l - 1] - p;
+this.e[l - 1] = g;
+this.e[m - 1] = 0.0;
+}} while (m != l);
+}
+});
+Clazz.defineMethod (c$, "sign",
+function (a, b) {
+if (b < 0) {
+return -Math.abs (a);
+} else {
+return Math.abs (a);
+}}, "~N,~N");
+Clazz.defineMethod (c$, "getColumn",
+function (n) {
+var out = Clazz.newDoubleArray (this.rows, 0);
+for (var i = 0; i < this.rows; i++) {
+out[i] = this.value[i][n];
+}
+return out;
+}, "~N");
+Clazz.defineMethod (c$, "printD",
+function (ps) {
+for (var j = 0; j < this.rows; j++) {
+jalview.util.Format.printDouble (ps, "%15.4e", this.d[j]);
+}
+}, "java.io.PrintStream");
+Clazz.defineMethod (c$, "printE",
+function (ps) {
+for (var j = 0; j < this.rows; j++) {
+jalview.util.Format.printDouble (ps, "%15.4e", this.e[j]);
+}
+}, "java.io.PrintStream");
+});
diff --git a/bin/jalview/math/RotatableMatrix.js b/bin/jalview/math/RotatableMatrix.js
index 12195ca..bec7c23 100644
--- a/bin/jalview/math/RotatableMatrix.js
+++ b/bin/jalview/math/RotatableMatrix.js
@@ -1,114 +1,114 @@
-Clazz.declarePackage ("jalview.math");
-c$ = Clazz.decorateAsClass (function () {
-this.matrix = null;
-this.temp = null;
-this.rot = null;
-Clazz.instantialize (this, arguments);
-}, jalview.math, "RotatableMatrix");
-Clazz.makeConstructor (c$,
-function (rows, cols) {
-this.matrix = Clazz.newFloatArray (rows, cols, 0);
-this.temp = Clazz.newFloatArray (3, 0);
-this.rot = Clazz.newFloatArray (3, 3, 0);
-}, "~N,~N");
-Clazz.defineMethod (c$, "addElement",
-function (i, j, value) {
-this.matrix[i][j] = value;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "print",
-function () {
-System.out.println (this.matrix[0][0] + " " + this.matrix[0][1] + " " + this.matrix[0][2]);
-System.out.println (this.matrix[1][0] + " " + this.matrix[1][1] + " " + this.matrix[1][2]);
-System.out.println (this.matrix[2][0] + " " + this.matrix[2][1] + " " + this.matrix[2][2]);
-});
-Clazz.defineMethod (c$, "rotate",
-function (degrees, axis) {
-var costheta = Math.cos ((degrees * 3.141592653589793) / 180.0);
-var sintheta = Math.sin ((degrees * 3.141592653589793) / 180.0);
-if (axis == 'z') {
-this.rot[0][0] = costheta;
-this.rot[0][1] = -sintheta;
-this.rot[0][2] = 0.0;
-this.rot[1][0] = sintheta;
-this.rot[1][1] = costheta;
-this.rot[1][2] = 0.0;
-this.rot[2][0] = 0.0;
-this.rot[2][1] = 0.0;
-this.rot[2][2] = 1.0;
-this.preMultiply (this.rot);
-}if (axis == 'x') {
-this.rot[0][0] = 1.0;
-this.rot[0][1] = 0.0;
-this.rot[0][2] = 0.0;
-this.rot[1][0] = 0.0;
-this.rot[1][1] = costheta;
-this.rot[1][2] = sintheta;
-this.rot[2][0] = 0.0;
-this.rot[2][1] = -sintheta;
-this.rot[2][2] = costheta;
-this.preMultiply (this.rot);
-}if (axis == 'y') {
-this.rot[0][0] = costheta;
-this.rot[0][1] = 0.0;
-this.rot[0][2] = -sintheta;
-this.rot[1][0] = 0.0;
-this.rot[1][1] = 1.0;
-this.rot[1][2] = 0.0;
-this.rot[2][0] = sintheta;
-this.rot[2][1] = 0.0;
-this.rot[2][2] = costheta;
-this.preMultiply (this.rot);
-}}, "~N,~S");
-Clazz.defineMethod (c$, "vectorMultiply",
-function (vect) {
-this.temp[0] = vect[0];
-this.temp[1] = vect[1];
-this.temp[2] = vect[2];
-for (var i = 0; i < 3; i++) {
-this.temp[i] = (this.matrix[i][0] * vect[0]) + (this.matrix[i][1] * vect[1]) + (this.matrix[i][2] * vect[2]);
-}
-vect[0] = this.temp[0];
-vect[1] = this.temp[1];
-vect[2] = this.temp[2];
-return vect;
-}, "~A");
-Clazz.defineMethod (c$, "preMultiply",
-function (mat) {
-var tmp = Clazz.newFloatArray (3, 3, 0);
-for (var i = 0; i < 3; i++) {
-for (var j = 0; j < 3; j++) {
-tmp[i][j] = (mat[i][0] * this.matrix[0][j]) + (mat[i][1] * this.matrix[1][j]) + (mat[i][2] * this.matrix[2][j]);
-}
-}
-for (var i = 0; i < 3; i++) {
-for (var j = 0; j < 3; j++) {
-this.matrix[i][j] = tmp[i][j];
-}
-}
-}, "~A");
-Clazz.defineMethod (c$, "postMultiply",
-function (mat) {
-var tmp = Clazz.newFloatArray (3, 3, 0);
-for (var i = 0; i < 3; i++) {
-for (var j = 0; j < 3; j++) {
-tmp[i][j] = (this.matrix[i][0] * mat[0][j]) + (this.matrix[i][1] * mat[1][j]) + (this.matrix[i][2] * mat[2][j]);
-}
-}
-for (var i = 0; i < 3; i++) {
-for (var j = 0; j < 3; j++) {
-this.matrix[i][j] = tmp[i][j];
-}
-}
-}, "~A");
-Clazz.defineMethod (c$, "setIdentity",
-function () {
-this.matrix[0][0] = 1.0;
-this.matrix[1][1] = 1.0;
-this.matrix[2][2] = 1.0;
-this.matrix[0][1] = 0.0;
-this.matrix[0][2] = 0.0;
-this.matrix[1][0] = 0.0;
-this.matrix[1][2] = 0.0;
-this.matrix[2][0] = 0.0;
-this.matrix[2][1] = 0.0;
-});
+Clazz.declarePackage ("jalview.math");
+c$ = Clazz.decorateAsClass (function () {
+this.matrix = null;
+this.temp = null;
+this.rot = null;
+Clazz.instantialize (this, arguments);
+}, jalview.math, "RotatableMatrix");
+Clazz.makeConstructor (c$,
+function (rows, cols) {
+this.matrix = Clazz.newFloatArray (rows, cols, 0);
+this.temp = Clazz.newFloatArray (3, 0);
+this.rot = Clazz.newFloatArray (3, 3, 0);
+}, "~N,~N");
+Clazz.defineMethod (c$, "addElement",
+function (i, j, value) {
+this.matrix[i][j] = value;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "print",
+function () {
+System.out.println (this.matrix[0][0] + " " + this.matrix[0][1] + " " + this.matrix[0][2]);
+System.out.println (this.matrix[1][0] + " " + this.matrix[1][1] + " " + this.matrix[1][2]);
+System.out.println (this.matrix[2][0] + " " + this.matrix[2][1] + " " + this.matrix[2][2]);
+});
+Clazz.defineMethod (c$, "rotate",
+function (degrees, axis) {
+var costheta = Math.cos ((degrees * 3.141592653589793) / 180.0);
+var sintheta = Math.sin ((degrees * 3.141592653589793) / 180.0);
+if (axis == 'z') {
+this.rot[0][0] = costheta;
+this.rot[0][1] = -sintheta;
+this.rot[0][2] = 0.0;
+this.rot[1][0] = sintheta;
+this.rot[1][1] = costheta;
+this.rot[1][2] = 0.0;
+this.rot[2][0] = 0.0;
+this.rot[2][1] = 0.0;
+this.rot[2][2] = 1.0;
+this.preMultiply (this.rot);
+}if (axis == 'x') {
+this.rot[0][0] = 1.0;
+this.rot[0][1] = 0.0;
+this.rot[0][2] = 0.0;
+this.rot[1][0] = 0.0;
+this.rot[1][1] = costheta;
+this.rot[1][2] = sintheta;
+this.rot[2][0] = 0.0;
+this.rot[2][1] = -sintheta;
+this.rot[2][2] = costheta;
+this.preMultiply (this.rot);
+}if (axis == 'y') {
+this.rot[0][0] = costheta;
+this.rot[0][1] = 0.0;
+this.rot[0][2] = -sintheta;
+this.rot[1][0] = 0.0;
+this.rot[1][1] = 1.0;
+this.rot[1][2] = 0.0;
+this.rot[2][0] = sintheta;
+this.rot[2][1] = 0.0;
+this.rot[2][2] = costheta;
+this.preMultiply (this.rot);
+}}, "~N,~S");
+Clazz.defineMethod (c$, "vectorMultiply",
+function (vect) {
+this.temp[0] = vect[0];
+this.temp[1] = vect[1];
+this.temp[2] = vect[2];
+for (var i = 0; i < 3; i++) {
+this.temp[i] = (this.matrix[i][0] * vect[0]) + (this.matrix[i][1] * vect[1]) + (this.matrix[i][2] * vect[2]);
+}
+vect[0] = this.temp[0];
+vect[1] = this.temp[1];
+vect[2] = this.temp[2];
+return vect;
+}, "~A");
+Clazz.defineMethod (c$, "preMultiply",
+function (mat) {
+var tmp = Clazz.newFloatArray (3, 3, 0);
+for (var i = 0; i < 3; i++) {
+for (var j = 0; j < 3; j++) {
+tmp[i][j] = (mat[i][0] * this.matrix[0][j]) + (mat[i][1] * this.matrix[1][j]) + (mat[i][2] * this.matrix[2][j]);
+}
+}
+for (var i = 0; i < 3; i++) {
+for (var j = 0; j < 3; j++) {
+this.matrix[i][j] = tmp[i][j];
+}
+}
+}, "~A");
+Clazz.defineMethod (c$, "postMultiply",
+function (mat) {
+var tmp = Clazz.newFloatArray (3, 3, 0);
+for (var i = 0; i < 3; i++) {
+for (var j = 0; j < 3; j++) {
+tmp[i][j] = (this.matrix[i][0] * mat[0][j]) + (this.matrix[i][1] * mat[1][j]) + (this.matrix[i][2] * mat[2][j]);
+}
+}
+for (var i = 0; i < 3; i++) {
+for (var j = 0; j < 3; j++) {
+this.matrix[i][j] = tmp[i][j];
+}
+}
+}, "~A");
+Clazz.defineMethod (c$, "setIdentity",
+function () {
+this.matrix[0][0] = 1.0;
+this.matrix[1][1] = 1.0;
+this.matrix[2][2] = 1.0;
+this.matrix[0][1] = 0.0;
+this.matrix[0][2] = 0.0;
+this.matrix[1][0] = 0.0;
+this.matrix[1][2] = 0.0;
+this.matrix[2][0] = 0.0;
+this.matrix[2][1] = 0.0;
+});
diff --git a/bin/jalview/renderer/AnnotationRenderer.class b/bin/jalview/renderer/AnnotationRenderer.class
index 2cab4d6..446ba32 100644
Binary files a/bin/jalview/renderer/AnnotationRenderer.class and b/bin/jalview/renderer/AnnotationRenderer.class differ
diff --git a/bin/jalview/renderer/AnnotationRenderer.js b/bin/jalview/renderer/AnnotationRenderer.js
index 00d98e4..221e5d3 100644
--- a/bin/jalview/renderer/AnnotationRenderer.js
+++ b/bin/jalview/renderer/AnnotationRenderer.js
@@ -1,805 +1,805 @@
-Clazz.declarePackage ("jalview.renderer");
-Clazz.load (["jalview.util.Platform", "java.awt.Color"], "jalview.renderer.AnnotationRenderer", ["jalview.analysis.AAFrequency", "$.CodingUtils", "$.StructureFrequency", "jalview.jsdev.RegExp", "jalview.schemes.NucleotideColourScheme", "$.ResidueProperties", "$.ZappoColourScheme", "java.awt.BasicStroke", "java.awt.geom.AffineTransform", "java.util.BitSet"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.debugRedraw = false;
-this.charWidth = 0;
-this.endRes = 0;
-this.charHeight = 0;
-this.validCharWidth = false;
-this.hasHiddenColumns = false;
-this.fm = null;
-this.MAC = false;
-this.av_renderHistogram = true;
-this.av_renderProfile = true;
-this.av_normaliseProfile = false;
-this.profcolour = null;
-this.columnSelection = null;
-this.hconsensus = null;
-this.complementConsensus = null;
-this.hStrucConsensus = null;
-this.av_ignoreGapsConsensus = false;
-this.fadedImage = null;
-this.annotationPanel = null;
-this.imgWidth = 0;
-this.sOffset = 0;
-this.visHeight = 0;
-this.useClip = true;
-this.canClip = false;
-this.rna = false;
-this.sdNOTCANONICAL_COLOUR = null;
-Clazz.instantialize (this, arguments);
-}, jalview.renderer, "AnnotationRenderer");
-Clazz.prepareFields (c$, function () {
-this.MAC = jalview.util.Platform.isAMac ();
-});
-Clazz.makeConstructor (c$,
-function () {
-this.construct (false);
-});
-Clazz.makeConstructor (c$,
-function (debugRedraw) {
-this.debugRedraw = debugRedraw;
-}, "~B");
-Clazz.defineMethod (c$, "drawStemAnnot",
-function (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
-g.setColor (jalview.renderer.AnnotationRenderer.STEM_COLOUR);
-var sCol = (Clazz.doubleToInt (lastSSX / this.charWidth)) + startRes;
-var x1 = lastSSX;
-var x2 = (x * this.charWidth);
-var closeparen = jalview.jsdev.RegExp.newRegex (["(\\))"]);
-var dc = (column == 0 || row_annotations[column - 1] == null) ? ' ' : row_annotations[column - 1].secondaryStructure;
-var diffupstream = sCol == 0 || row_annotations[sCol - 1] == null || dc != row_annotations[sCol - 1].secondaryStructure;
-var diffdownstream = !validRes || !validEnd || row_annotations[column] == null || dc != row_annotations[column].secondaryStructure;
-if (column > 0 && jalview.schemes.ResidueProperties.isCloseParenRNA (dc)) {
-if (diffupstream) {
-g.fillPolygon ( Clazz.newIntArray (-1, [lastSSX + 5, lastSSX + 5, lastSSX]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
-x1 += 5;
-}if (diffdownstream) {
-x2 -= 1;
-}} else {
-if (diffdownstream) {
-g.fillPolygon ( Clazz.newIntArray (-1, [x2 - 5, x2 - 5, x2]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
-x2 -= 5;
-}if (diffupstream) {
-x1 += 1;
-}}g.fillRect (x1, y + 4 + iconOffset, x2 - x1, 7);
-}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
-Clazz.defineMethod (c$, "drawNotCanonicalAnnot",
-function (g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
-g.setColor (nonCanColor);
-var sCol = (Clazz.doubleToInt (lastSSX / this.charWidth)) + startRes;
-var x1 = lastSSX;
-var x2 = (x * this.charWidth);
-var closeparen = jalview.jsdev.RegExp.newRegex (["}|]|<|[a-z]"]);
-var dc = (column == 0 || row_annotations[column - 1] == null) ? "" : row_annotations[column - 1].displayCharacter;
-var diffupstream = sCol == 0 || row_annotations[sCol - 1] == null || !dc.equals (row_annotations[sCol - 1].displayCharacter);
-var diffdownstream = !validRes || !validEnd || row_annotations[column] == null || !dc.equals (row_annotations[column].displayCharacter);
-if (column > 0 && closeparen.search (dc)) {
-if (diffupstream) {
-g.fillPolygon ( Clazz.newIntArray (-1, [lastSSX + 5, lastSSX + 5, lastSSX]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
-x1 += 5;
-}if (diffdownstream) {
-x2 -= 1;
-}} else {
-if (diffdownstream) {
-g.fillPolygon ( Clazz.newIntArray (-1, [x2 - 5, x2 - 5, x2]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
-x2 -= 5;
-}if (diffupstream) {
-x1 += 1;
-}}g.fillRect (x1, y + 4 + iconOffset, x2 - x1, 7);
-}, "java.awt.Graphics,java.awt.Color,~A,~N,~N,~N,~N,~N,~N,~B,~B");
-Clazz.defineMethod (c$, "updateFromAwtRenderPanel",
-function (annotPanel, av) {
-this.fm = annotPanel.getFontMetrics ();
-this.annotationPanel = annotPanel;
-this.fadedImage = annotPanel.getFadedImage ();
-this.imgWidth = annotPanel.getFadedImageWidth ();
-var bounds = annotPanel.getVisibleVRange ();
-if (bounds != null) {
-this.sOffset = bounds[0];
-this.visHeight = bounds[1];
-if (this.visHeight == 0) {
-this.useClip = false;
-} else {
-this.useClip = this.canClip;
-}} else {
-this.useClip = false;
-}this.updateFromAlignViewport (av);
-}, "jalview.renderer.AwtRenderPanelI,jalview.api.AlignViewportI");
-Clazz.defineMethod (c$, "updateFromAlignViewport",
-function (av) {
-this.charWidth = av.getCharWidth ();
-this.endRes = av.getEndRes ();
-this.charHeight = av.getCharHeight ();
-this.hasHiddenColumns = av.hasHiddenColumns ();
-this.validCharWidth = av.isValidCharWidth ();
-this.av_renderHistogram = av.isShowConsensusHistogram ();
-this.av_renderProfile = av.isShowSequenceLogo ();
-this.av_normaliseProfile = av.isNormaliseSequenceLogo ();
-this.profcolour = av.getGlobalColourScheme ();
-if (this.profcolour == null) {
-this.profcolour = av.getAlignment ().isNucleotide () ? new jalview.schemes.NucleotideColourScheme () : new jalview.schemes.ZappoColourScheme ();
-}this.columnSelection = av.getColumnSelection ();
-this.hconsensus = av.getSequenceConsensusHash ();
-this.complementConsensus = av.getComplementConsensusHash ();
-this.hStrucConsensus = av.getRnaStructureConsensusHash ();
-this.av_ignoreGapsConsensus = av.isIgnoreGapsConsensus ();
-}, "jalview.api.AlignViewportI");
-Clazz.defineMethod (c$, "getProfileFor",
-function (aa, column) {
-if (aa.autoCalculated && (aa.label.startsWith ("Consensus") || aa.label.startsWith ("cDNA Consensus"))) {
-var forComplement = aa.label.startsWith ("cDNA Consensus");
-if (aa.groupRef != null && aa.groupRef.consensusData != null && aa.groupRef.isShowSequenceLogo ()) {
-return jalview.analysis.AAFrequency.extractProfile (aa.groupRef.consensusData[column], aa.groupRef.getIgnoreGapsConsensus ());
-}if (aa.groupRef == null && aa.sequenceRef == null) {
-if (forComplement) {
-return jalview.analysis.AAFrequency.extractCdnaProfile (this.complementConsensus[column], this.av_ignoreGapsConsensus);
-} else {
-return jalview.analysis.AAFrequency.extractProfile (this.hconsensus[column], this.av_ignoreGapsConsensus);
-}}} else {
-if (aa.autoCalculated && aa.label.startsWith ("StrucConsensus")) {
-if (aa.groupRef == null && aa.sequenceRef == null && this.hStrucConsensus != null && this.hStrucConsensus.length > column) {
-return jalview.analysis.StructureFrequency.extractProfile (this.hStrucConsensus[column], this.av_ignoreGapsConsensus);
-}}}return null;
-}, "jalview.datamodel.AlignmentAnnotation,~N");
-Clazz.defineMethod (c$, "drawComponent",
-function (annotPanel, av, g, activeRow, startRes, endRes) {
-var stime = System.currentTimeMillis ();
-var usedFaded = false;
-this.updateFromAwtRenderPanel (annotPanel, av);
-this.fm = g.getFontMetrics ();
-var aa = av.getAlignment ().getAlignmentAnnotation ();
-var temp = 0;
-if (aa == null) {
-return false;
-}var x = 0;
-var y = 0;
-var column = 0;
-var lastSS;
-var lastSSX;
-var iconOffset = 0;
-var validRes = false;
-var validEnd = false;
-var labelAllCols = false;
-var centreColLabels;
-var centreColLabelsDef = av.isCentreColumnLabels ();
-var scaleColLabel = false;
-var consensusAnnot = av.getAlignmentConsensusAnnotation ();
-var structConsensusAnnot = av.getAlignmentStrucConsensusAnnotation ();
-var complementConsensusAnnot = av.getComplementConsensusAnnotation ();
-var renderHistogram = true;
-var renderProfile = true;
-var normaliseProfile = false;
-var isRNA = this.rna;
-var graphGroupDrawn = new java.util.BitSet ();
-var charOffset = 0;
-var fmWidth;
-var fmScaling = 1;
-var ofont = g.getFont ();
-var yfrom = 0;
-var f_i = 0;
-var yto = 0;
-var f_to = 0;
-var clipst = false;
-var clipend = false;
-for (var i = 0; i < aa.length; i++) {
-var row = aa[i];
-isRNA = row.isRNA ();
-{
-if (row.groupRef != null && row === row.groupRef.getConsensus ()) {
-renderHistogram = row.groupRef.isShowConsensusHistogram ();
-renderProfile = row.groupRef.isShowSequenceLogo ();
-normaliseProfile = row.groupRef.isNormaliseSequenceLogo ();
-} else if (row === consensusAnnot || row === structConsensusAnnot || row === complementConsensusAnnot) {
-renderHistogram = this.av_renderHistogram;
-renderProfile = this.av_renderProfile;
-normaliseProfile = this.av_normaliseProfile;
-} else {
-renderHistogram = true;
-}}var row_annotations = row.annotations;
-if (!row.visible) {
-continue;
-}centreColLabels = row.centreColLabels || centreColLabelsDef;
-labelAllCols = row.showAllColLabels;
-scaleColLabel = row.scaleColLabel;
-lastSS = ' ';
-lastSSX = 0;
-if (!this.useClip || ((y - this.charHeight) < this.visHeight && (y + row.height + this.charHeight * 2) >= this.sOffset)) {
-if (!clipst) {
-clipst = true;
-yfrom = y;
-f_i = i;
-}yto = y;
-f_to = i;
-if (row.graph > 0) {
-if (row.graphGroup > -1 && graphGroupDrawn.get (row.graphGroup)) {
-continue;
-}y += row.height;
-if (row.hasText) {
-iconOffset = this.charHeight - this.fm.getDescent ();
-y -= this.charHeight;
-}} else if (row.hasText) {
-iconOffset = this.charHeight - this.fm.getDescent ();
-} else {
-iconOffset = 0;
-}if (row.autoCalculated && av.isCalculationInProgress (row)) {
-y += this.charHeight;
-usedFaded = true;
-g.drawImage (this.fadedImage, 0, y - row.height, this.imgWidth, y, 0, y - row.height, this.imgWidth, y, this.annotationPanel);
-g.setColor (java.awt.Color.black);
-continue;
-}x = (startRes == 0) ? 0 : -1;
-while (x < endRes - startRes) {
-if (this.hasHiddenColumns) {
-column = this.columnSelection.adjustForHiddenColumns (startRes + x);
-if (column > row_annotations.length - 1) {
-break;
-}} else {
-column = startRes + x;
-}if ((row_annotations == null) || (row_annotations.length <= column) || (row_annotations[column] == null)) {
-validRes = false;
-} else {
-validRes = true;
-}var displayChar = validRes ? row_annotations[column].displayCharacter : null;
-if (x > -1) {
-if (activeRow == i) {
-g.setColor (java.awt.Color.red);
-if (this.columnSelection != null) {
-for (var n = 0; n < this.columnSelection.size (); n++) {
-var v = this.columnSelection.columnAt (n);
-if (v == column) {
-g.fillRect (x * this.charWidth, y, this.charWidth, this.charHeight);
-}}
-}}if (row.getInvalidStrucPos () > x) {
-g.setColor (java.awt.Color.orange);
-g.fillRect (x * this.charWidth, y, this.charWidth, this.charHeight);
-} else if (row.getInvalidStrucPos () == x) {
-g.setColor (java.awt.Color.orange.darker ());
-g.fillRect (x * this.charWidth, y, this.charWidth, this.charHeight);
-}if (this.validCharWidth && validRes && displayChar != null && (displayChar.length > 0)) {
-fmWidth = this.fm.charsWidth (displayChar.toCharArray (), 0, displayChar.length);
-if (scaleColLabel) {
-if (fmWidth > this.charWidth) {
-fmScaling = this.charWidth;
-fmScaling /= fmWidth;
-g.setFont (ofont.deriveFont (java.awt.geom.AffineTransform.getScaleInstance (fmScaling, 1.0)));
-fmWidth = this.charWidth;
-}}charOffset = Clazz.floatToInt ((this.charWidth - fmWidth) / 2);
-if (row_annotations[column].colour == null) {
-g.setColor (java.awt.Color.black);
-} else {
-g.setColor (row_annotations[column].colour);
-}if (column == 0 || row.graph > 0) {
-g.drawString (displayChar, (x * this.charWidth) + charOffset, y + iconOffset);
-} else if (row_annotations[column - 1] == null || (labelAllCols || !displayChar.equals (row_annotations[column - 1].displayCharacter) || (displayChar.length < 2 && row_annotations[column].secondaryStructure == ' '))) {
-g.drawString (displayChar, x * this.charWidth + charOffset, y + iconOffset);
-}g.setFont (ofont);
-}}if (row.hasIcons) {
-var ss = validRes ? row_annotations[column].secondaryStructure : '-';
-if (ss == '(') {
-if (displayChar.indexOf (')') > -1) {
-ss = ')';
-}}if (ss == '[') {
-if ((displayChar.indexOf (']') > -1)) {
-ss = ']';
-}}if (ss == '{') {
-if (displayChar.indexOf ('}') > -1) {
-ss = '}';
-}}if (ss == '<') {
-if (displayChar.indexOf ('<') > -1) {
-ss = '>';
-}}if (ss.charCodeAt (0) >= 65) {
-if (displayChar.indexOf (ss.charCodeAt (0) + 32) > -1) {
-ss = String.fromCharCode (ss.charCodeAt (0) + 32);
-}}if (!validRes || (ss != lastSS)) {
-if (x > -1) {
-var nb_annot = x - temp;
-switch (lastSS) {
-case '(':
-case ')':
-this.drawStemAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-temp = x;
-break;
-case 'H':
-if (!isRNA) {
-this.drawHelixAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-break;
-}case 'E':
-if (!isRNA) {
-this.drawSheetAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-break;
-}case '{':
-case '}':
-case '[':
-case ']':
-case '>':
-case '<':
-case 'A':
-case 'a':
-case 'B':
-case 'b':
-case 'C':
-case 'c':
-case 'D':
-case 'd':
-case 'e':
-case 'F':
-case 'f':
-case 'G':
-case 'g':
-case 'h':
-case 'I':
-case 'i':
-case 'J':
-case 'j':
-case 'K':
-case 'k':
-case 'L':
-case 'l':
-case 'M':
-case 'm':
-case 'N':
-case 'n':
-case 'O':
-case 'o':
-case 'P':
-case 'p':
-case 'Q':
-case 'q':
-case 'R':
-case 'r':
-case 'S':
-case 's':
-case 'T':
-case 't':
-case 'U':
-case 'u':
-case 'V':
-case 'v':
-case 'W':
-case 'w':
-case 'X':
-case 'x':
-case 'Y':
-case 'y':
-case 'Z':
-case 'z':
-var nonCanColor = this.getNotCanonicalColor (lastSS);
-this.drawNotCanonicalAnnot (g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-temp = x;
-break;
-default:
-g.setColor (java.awt.Color.gray);
-g.fillRect (lastSSX, y + 6 + iconOffset, (x * this.charWidth) - lastSSX, 2);
-temp = x;
-break;
-}
-}if (validRes) {
-lastSS = ss;
-} else {
-lastSS = ' ';
-}if (x > -1) {
-lastSSX = (x * this.charWidth);
-}}}column++;
-x++;
-}
-if (column >= row_annotations.length) {
-column = row_annotations.length - 1;
-validEnd = false;
-} else {
-validEnd = true;
-}if ((row_annotations == null) || (row_annotations.length <= column) || (row_annotations[column] == null)) {
-validRes = false;
-} else {
-validRes = true;
-}if (row.hasIcons) {
-switch (lastSS) {
-case 'H':
-if (!isRNA) {
-this.drawHelixAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-break;
-}case 'E':
-if (!isRNA) {
-this.drawSheetAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-break;
-}case '(':
-case ')':
-this.drawStemAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-break;
-case '{':
-case '}':
-case '[':
-case ']':
-case '>':
-case '<':
-case 'A':
-case 'a':
-case 'B':
-case 'b':
-case 'C':
-case 'c':
-case 'D':
-case 'd':
-case 'e':
-case 'F':
-case 'f':
-case 'G':
-case 'g':
-case 'h':
-case 'I':
-case 'i':
-case 'J':
-case 'j':
-case 'K':
-case 'k':
-case 'L':
-case 'l':
-case 'M':
-case 'm':
-case 'N':
-case 'n':
-case 'O':
-case 'o':
-case 'P':
-case 'p':
-case 'Q':
-case 'q':
-case 'R':
-case 'r':
-case 'T':
-case 't':
-case 'U':
-case 'u':
-case 'V':
-case 'v':
-case 'W':
-case 'w':
-case 'X':
-case 'x':
-case 'Y':
-case 'y':
-case 'Z':
-case 'z':
-var nonCanColor = this.getNotCanonicalColor (lastSS);
-this.drawNotCanonicalAnnot (g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-break;
-default:
-this.drawGlyphLine (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
-break;
-}
-}if (row.graph > 0 && row.graphHeight > 0) {
-if (row.graph == 2) {
-if (row.graphGroup > -1 && !graphGroupDrawn.get (row.graphGroup)) {
-var groupmax = -999999;
-var groupmin = 9999999;
-for (var gg = 0; gg < aa.length; gg++) {
-if (aa[gg].graphGroup != row.graphGroup) {
-continue;
-}if (aa[gg] !== row) {
-aa[gg].visible = false;
-}if (aa[gg].graphMax > groupmax) {
-groupmax = aa[gg].graphMax;
-}if (aa[gg].graphMin < groupmin) {
-groupmin = aa[gg].graphMin;
-}}
-for (var gg = 0; gg < aa.length; gg++) {
-if (aa[gg].graphGroup == row.graphGroup) {
-this.drawLineGraph (g, aa[gg], aa[gg].annotations, startRes, endRes, y, groupmin, groupmax, row.graphHeight);
-}}
-graphGroupDrawn.set (row.graphGroup);
-} else {
-this.drawLineGraph (g, row, row_annotations, startRes, endRes, y, row.graphMin, row.graphMax, row.graphHeight);
-}} else if (row.graph == 1) {
-this.drawBarGraph (g, row, row_annotations, startRes, endRes, row.graphMin, row.graphMax, y, renderHistogram, renderProfile, normaliseProfile);
-}}} else {
-if (clipst && !clipend) {
-clipend = true;
-}}if (row.graph > 0 && row.hasText) {
-y += this.charHeight;
-}if (row.graph == 0) {
-y += aa[i].height;
-}}
-if (this.debugRedraw) {
-if (this.canClip) {
-if (clipst) {
-System.err.println ("Start clip at : " + yfrom + " (index " + f_i + ")");
-}if (clipend) {
-System.err.println ("End clip at : " + yto + " (index " + f_to + ")");
-}};System.err.println ("Annotation Rendering time:" + (System.currentTimeMillis () - stime));
-};return !usedFaded;
-}, "jalview.renderer.AwtRenderPanelI,jalview.api.AlignViewportI,java.awt.Graphics,~N,~N,~N");
-Clazz.defineMethod (c$, "drawGlyphLine",
-function (g, row, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
-g.setColor (jalview.renderer.AnnotationRenderer.GLYPHLINE_COLOR);
-g.fillRect (lastSSX, y + 6 + iconOffset, (x * this.charWidth) - lastSSX, 2);
-}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
-Clazz.defineMethod (c$, "drawSheetAnnot",
-function (g, row, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
-g.setColor (jalview.renderer.AnnotationRenderer.SHEET_COLOUR);
-if (!validEnd || !validRes || row == null || row[column] == null || row[column].secondaryStructure != 'E') {
-g.fillRect (lastSSX, y + 4 + iconOffset, (x * this.charWidth) - lastSSX - 4, 7);
-g.fillPolygon ( Clazz.newIntArray (-1, [(x * this.charWidth) - 4, (x * this.charWidth) - 4, (x * this.charWidth)]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 7 + iconOffset]), 3);
-} else {
-g.fillRect (lastSSX, y + 4 + iconOffset, (x + 1) * this.charWidth - lastSSX, 7);
-}}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
-Clazz.defineMethod (c$, "drawHelixAnnot",
-function (g, row, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
-g.setColor (jalview.renderer.AnnotationRenderer.HELIX_COLOUR);
-var sCol = (Clazz.doubleToInt (lastSSX / this.charWidth)) + startRes;
-var x1 = lastSSX;
-var x2 = (x * this.charWidth);
-if (this.MAC) {
-var ofs = Clazz.doubleToInt (this.charWidth / 2);
-g.fillRoundRect (lastSSX, y + 4 + iconOffset, x2 - x1, 8, 8, 8);
-if (sCol == 0 || row[sCol - 1] == null || row[sCol - 1].secondaryStructure != 'H') {
-} else {
-g.fillRoundRect (lastSSX, y + 4 + iconOffset, x2 - x1 - ofs + 1, 8, 0, 0);
-}if (!validRes || row[column] == null || row[column].secondaryStructure != 'H') {
-} else {
-g.fillRoundRect (lastSSX + ofs, y + 4 + iconOffset, x2 - x1 - ofs + 1, 8, 0, 0);
-}return;
-}if (sCol == 0 || row[sCol - 1] == null || row[sCol - 1].secondaryStructure != 'H') {
-g.fillArc (lastSSX, y + 4 + iconOffset, this.charWidth, 8, 90, 180);
-x1 += Clazz.doubleToInt (this.charWidth / 2);
-}if (!validRes || row[column] == null || row[column].secondaryStructure != 'H') {
-g.fillArc ((x * this.charWidth) - this.charWidth, y + 4 + iconOffset, this.charWidth, 8, 270, 180);
-x2 -= Clazz.doubleToInt (this.charWidth / 2);
-}g.fillRect (x1, y + 4 + iconOffset, x2 - x1, 8);
-}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
-Clazz.defineMethod (c$, "drawLineGraph",
-function (g, _aa, aa_annotations, sRes, eRes, y, min, max, graphHeight) {
-if (sRes > aa_annotations.length) {
-return;
-}var x = 0;
-if (eRes < this.endRes) {
-eRes++;
-}eRes = Math.min (eRes, aa_annotations.length);
-if (sRes == 0) {
-x++;
-}var y1 = y;
-var y2 = y;
-var range = max - min;
-if (min < 0) {
-y2 = y - Clazz.floatToInt ((0 - min / range) * graphHeight);
-}g.setColor (java.awt.Color.gray);
-g.drawLine (x - this.charWidth, y2, (eRes - sRes + 1) * this.charWidth, y2);
-eRes = Math.min (eRes, aa_annotations.length);
-var column;
-var aaMax = aa_annotations.length - 1;
-while (x < eRes - sRes) {
-column = sRes + x;
-if (this.hasHiddenColumns) {
-column = this.columnSelection.adjustForHiddenColumns (column);
-}if (column > aaMax) {
-break;
-}if (aa_annotations[column] == null || aa_annotations[column - 1] == null) {
-x++;
-continue;
-}if (aa_annotations[column].colour == null) {
-g.setColor (java.awt.Color.black);
-} else {
-g.setColor (aa_annotations[column].colour);
-}y1 = y - Clazz.floatToInt (((aa_annotations[column - 1].value - min) / range) * graphHeight);
-y2 = y - Clazz.floatToInt (((aa_annotations[column].value - min) / range) * graphHeight);
-g.drawLine (x * this.charWidth - Clazz.doubleToInt (this.charWidth / 2), y1, x * this.charWidth + Clazz.doubleToInt (this.charWidth / 2), y2);
-x++;
-}
-if (_aa.threshold != null) {
-g.setColor (_aa.threshold.colour);
-var g2 = g;
-g2.setStroke ( new java.awt.BasicStroke (1, 2, 1, 3, Clazz.newFloatArray (-1, [5, 3]), 0));
-y2 = Clazz.floatToInt (y - ((_aa.threshold.value - min) / range) * graphHeight);
-g.drawLine (0, y2, (eRes - sRes) * this.charWidth, y2);
-g2.setStroke ( new java.awt.BasicStroke ());
-}}, "java.awt.Graphics,jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "drawBarGraph",
-function (g, _aa, aa_annotations, sRes, eRes, min, max, y, renderHistogram, renderProfile, normaliseProfile) {
-if (sRes > aa_annotations.length) {
-return;
-}var ofont = g.getFont ();
-eRes = Math.min (eRes, aa_annotations.length);
-var x = 0;
-var y1 = y;
-var y2 = y;
-var range = max - min;
-if (min < 0) {
-y2 = y - Clazz.floatToInt ((0 - min / (range)) * _aa.graphHeight);
-}g.setColor (java.awt.Color.gray);
-g.drawLine (x, y2, (eRes - sRes) * this.charWidth, y2);
-var column;
-var aaMax = aa_annotations.length - 1;
-while (x < eRes - sRes) {
-column = sRes + x;
-if (this.hasHiddenColumns) {
-column = this.columnSelection.adjustForHiddenColumns (column);
-}if (column > aaMax) {
-break;
-}if (aa_annotations[column] == null) {
-x++;
-continue;
-}if (aa_annotations[column].colour == null) {
-g.setColor (java.awt.Color.black);
-} else {
-g.setColor (aa_annotations[column].colour);
-}y1 = y - Clazz.floatToInt (((aa_annotations[column].value - min) / (range)) * _aa.graphHeight);
-if (renderHistogram) {
-if (y1 - y2 > 0) {
-g.fillRect (x * this.charWidth, y2, this.charWidth, y1 - y2);
-} else {
-g.fillRect (x * this.charWidth, y1, this.charWidth, y2 - y1);
-}}if (renderProfile) {
-var profl = this.getProfileFor (_aa, column);
-if (profl != null && profl[2] != 0) {
-var isStructureProfile = profl[0] == 1;
-var isCdnaProfile = profl[0] == 2;
-var ht = normaliseProfile ? y - _aa.graphHeight : y1;
-var htn = normaliseProfile ? _aa.graphHeight : (y2 - y1);
-var hght;
-var wdth;
-var ht2 = 0;
-var dc;
-dc = Clazz.newCharArray (isStructureProfile ? 2 : (isCdnaProfile ? 3 : 1), '\0');
-var lm = g.getFontMetrics (ofont).getLineMetrics ("Q", g);
-var scale = 1 / (normaliseProfile ? profl[2] : 100);
-var ofontHeight = 1 / lm.getAscent ();
-var scl = 0.0;
-var c = 3;
-var valuesProcessed = 0;
-while (valuesProcessed < profl[1]) {
-if (isStructureProfile) {
-dc[0] = String.fromCharCode (profl[c++]);
-dc[1] = String.fromCharCode (profl[c++]);
-} else if (isCdnaProfile) {
-dc = jalview.analysis.CodingUtils.decodeCodon (profl[c++]);
-} else {
-dc[0] = String.fromCharCode (profl[c++]);
-}wdth = this.charWidth;
-wdth /= this.fm.charsWidth (dc, 0, dc.length);
-ht += scl;
-scl = htn * scale * profl[c++];
-lm = ofont.getLineMetrics (dc, 0, 1, g.getFontMetrics ().getFontRenderContext ());
-g.setFont (ofont.deriveFont (java.awt.geom.AffineTransform.getScaleInstance (wdth, scl / lm.getAscent ())));
-lm = g.getFontMetrics ().getLineMetrics (dc, 0, 1, g);
-var colour = null;
-if (isCdnaProfile) {
-var codonTranslation = jalview.schemes.ResidueProperties.codonTranslate ( String.instantialize (dc));
-colour = this.profcolour.findColour (codonTranslation.charAt (0), column, null);
-} else {
-colour = this.profcolour.findColour (dc[0], column, null);
-}g.setColor (colour === java.awt.Color.white ? java.awt.Color.lightGray : colour);
-hght = (ht + (scl - lm.getDescent () - lm.getBaselineOffsets ()[lm.getBaselineIndex ()]));
-g.drawChars (dc, 0, dc.length, x * this.charWidth, Clazz.doubleToInt (hght));
-valuesProcessed++;
-}
-g.setFont (ofont);
-}}x++;
-}
-if (_aa.threshold != null) {
-g.setColor (_aa.threshold.colour);
-var g2 = g;
-g2.setStroke ( new java.awt.BasicStroke (1, 2, 1, 3, Clazz.newFloatArray (-1, [5, 3]), 0));
-y2 = Clazz.floatToInt (y - ((_aa.threshold.value - min) / range) * _aa.graphHeight);
-g.drawLine (0, y2, (eRes - sRes) * this.charWidth, y2);
-g2.setStroke ( new java.awt.BasicStroke ());
-}}, "java.awt.Graphics,jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~N,~N,~N,~B,~B,~B");
-Clazz.defineMethod (c$, "drawGraph",
-function (g, _aa, aa_annotations, width, y, sRes, eRes) {
-eRes = Math.min (eRes, aa_annotations.length);
-g.setColor (java.awt.Color.white);
-g.fillRect (0, 0, width, y);
-g.setColor ( new java.awt.Color (0, 0, 180));
-var x = 0;
-var height;
-for (var j = sRes; j < eRes; j++) {
-if (aa_annotations[j] != null) {
-if (aa_annotations[j].colour == null) {
-g.setColor (java.awt.Color.black);
-} else {
-g.setColor (aa_annotations[j].colour);
-}height = Clazz.floatToInt ((aa_annotations[j].value / _aa.graphMax) * y);
-if (height > y) {
-height = y;
-}g.fillRect (x, y - height, this.charWidth, height);
-}x += this.charWidth;
-}
-}, "java.awt.Graphics,jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "getNotCanonicalColor",
-function (lastss) {
-switch (lastss) {
-case '{':
-case '}':
-return new java.awt.Color (255, 125, 5);
-case '[':
-case ']':
-return new java.awt.Color (245, 115, 10);
-case '>':
-case '<':
-return new java.awt.Color (235, 135, 15);
-case 'A':
-case 'a':
-return new java.awt.Color (225, 105, 20);
-case 'B':
-case 'b':
-return new java.awt.Color (215, 145, 30);
-case 'C':
-case 'c':
-return new java.awt.Color (205, 95, 35);
-case 'D':
-case 'd':
-return new java.awt.Color (195, 155, 45);
-case 'E':
-case 'e':
-return new java.awt.Color (185, 85, 55);
-case 'F':
-case 'f':
-return new java.awt.Color (175, 165, 65);
-case 'G':
-case 'g':
-return new java.awt.Color (170, 75, 75);
-case 'H':
-case 'h':
-return new java.awt.Color (160, 175, 85);
-case 'I':
-case 'i':
-return new java.awt.Color (150, 65, 95);
-case 'J':
-case 'j':
-return new java.awt.Color (140, 185, 105);
-case 'K':
-case 'k':
-return new java.awt.Color (130, 55, 110);
-case 'L':
-case 'l':
-return new java.awt.Color (120, 195, 120);
-case 'M':
-case 'm':
-return new java.awt.Color (110, 45, 130);
-case 'N':
-case 'n':
-return new java.awt.Color (100, 205, 140);
-case 'O':
-case 'o':
-return new java.awt.Color (90, 35, 150);
-case 'P':
-case 'p':
-return new java.awt.Color (85, 215, 160);
-case 'Q':
-case 'q':
-return new java.awt.Color (75, 25, 170);
-case 'R':
-case 'r':
-return new java.awt.Color (65, 225, 180);
-case 'S':
-case 's':
-return new java.awt.Color (55, 15, 185);
-case 'T':
-case 't':
-return new java.awt.Color (45, 235, 195);
-case 'U':
-case 'u':
-return new java.awt.Color (35, 5, 205);
-case 'V':
-case 'v':
-return new java.awt.Color (25, 245, 215);
-case 'W':
-case 'w':
-return new java.awt.Color (15, 0, 225);
-case 'X':
-case 'x':
-return new java.awt.Color (10, 255, 235);
-case 'Y':
-case 'y':
-return new java.awt.Color (5, 150, 245);
-case 'Z':
-case 'z':
-return new java.awt.Color (0, 80, 255);
-default:
-System.out.println ("This is not a interaction : " + lastss);
-return null;
-}
-}, "~S");
-c$.GLYPHLINE_COLOR = c$.prototype.GLYPHLINE_COLOR = java.awt.Color.gray;
-c$.SHEET_COLOUR = c$.prototype.SHEET_COLOUR = java.awt.Color.green;
-c$.HELIX_COLOUR = c$.prototype.HELIX_COLOUR = java.awt.Color.red;
-c$.STEM_COLOUR = c$.prototype.STEM_COLOUR = java.awt.Color.blue;
-});
+Clazz.declarePackage ("jalview.renderer");
+Clazz.load (["jalview.util.Platform", "java.awt.Color"], "jalview.renderer.AnnotationRenderer", ["jalview.analysis.AAFrequency", "$.CodingUtils", "$.StructureFrequency", "jalview.jsdev.RegExp", "jalview.schemes.NucleotideColourScheme", "$.ResidueProperties", "$.ZappoColourScheme", "java.awt.BasicStroke", "java.awt.geom.AffineTransform", "java.util.BitSet"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.debugRedraw = false;
+this.charWidth = 0;
+this.endRes = 0;
+this.charHeight = 0;
+this.validCharWidth = false;
+this.hasHiddenColumns = false;
+this.fm = null;
+this.MAC = false;
+this.av_renderHistogram = true;
+this.av_renderProfile = true;
+this.av_normaliseProfile = false;
+this.profcolour = null;
+this.columnSelection = null;
+this.hconsensus = null;
+this.complementConsensus = null;
+this.hStrucConsensus = null;
+this.av_ignoreGapsConsensus = false;
+this.fadedImage = null;
+this.annotationPanel = null;
+this.imgWidth = 0;
+this.sOffset = 0;
+this.visHeight = 0;
+this.useClip = true;
+this.canClip = false;
+this.rna = false;
+this.sdNOTCANONICAL_COLOUR = null;
+Clazz.instantialize (this, arguments);
+}, jalview.renderer, "AnnotationRenderer");
+Clazz.prepareFields (c$, function () {
+this.MAC = jalview.util.Platform.isAMac ();
+});
+Clazz.makeConstructor (c$,
+function () {
+this.construct (false);
+});
+Clazz.makeConstructor (c$,
+function (debugRedraw) {
+this.debugRedraw = debugRedraw;
+}, "~B");
+Clazz.defineMethod (c$, "drawStemAnnot",
+function (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
+g.setColor (jalview.renderer.AnnotationRenderer.STEM_COLOUR);
+var sCol = (Clazz.doubleToInt (lastSSX / this.charWidth)) + startRes;
+var x1 = lastSSX;
+var x2 = (x * this.charWidth);
+var closeparen = jalview.jsdev.RegExp.newRegex (["(\\))"]);
+var dc = (column == 0 || row_annotations[column - 1] == null) ? ' ' : row_annotations[column - 1].secondaryStructure;
+var diffupstream = sCol == 0 || row_annotations[sCol - 1] == null || dc != row_annotations[sCol - 1].secondaryStructure;
+var diffdownstream = !validRes || !validEnd || row_annotations[column] == null || dc != row_annotations[column].secondaryStructure;
+if (column > 0 && jalview.schemes.ResidueProperties.isCloseParenRNA (dc)) {
+if (diffupstream) {
+g.fillPolygon ( Clazz.newIntArray (-1, [lastSSX + 5, lastSSX + 5, lastSSX]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
+x1 += 5;
+}if (diffdownstream) {
+x2 -= 1;
+}} else {
+if (diffdownstream) {
+g.fillPolygon ( Clazz.newIntArray (-1, [x2 - 5, x2 - 5, x2]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
+x2 -= 5;
+}if (diffupstream) {
+x1 += 1;
+}}g.fillRect (x1, y + 4 + iconOffset, x2 - x1, 7);
+}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
+Clazz.defineMethod (c$, "drawNotCanonicalAnnot",
+function (g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
+g.setColor (nonCanColor);
+var sCol = (Clazz.doubleToInt (lastSSX / this.charWidth)) + startRes;
+var x1 = lastSSX;
+var x2 = (x * this.charWidth);
+var closeparen = jalview.jsdev.RegExp.newRegex (["}|]|<|[a-z]"]);
+var dc = (column == 0 || row_annotations[column - 1] == null) ? "" : row_annotations[column - 1].displayCharacter;
+var diffupstream = sCol == 0 || row_annotations[sCol - 1] == null || !dc.equals (row_annotations[sCol - 1].displayCharacter);
+var diffdownstream = !validRes || !validEnd || row_annotations[column] == null || !dc.equals (row_annotations[column].displayCharacter);
+if (column > 0 && closeparen.search (dc)) {
+if (diffupstream) {
+g.fillPolygon ( Clazz.newIntArray (-1, [lastSSX + 5, lastSSX + 5, lastSSX]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
+x1 += 5;
+}if (diffdownstream) {
+x2 -= 1;
+}} else {
+if (diffdownstream) {
+g.fillPolygon ( Clazz.newIntArray (-1, [x2 - 5, x2 - 5, x2]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 8 + iconOffset]), 3);
+x2 -= 5;
+}if (diffupstream) {
+x1 += 1;
+}}g.fillRect (x1, y + 4 + iconOffset, x2 - x1, 7);
+}, "java.awt.Graphics,java.awt.Color,~A,~N,~N,~N,~N,~N,~N,~B,~B");
+Clazz.defineMethod (c$, "updateFromAwtRenderPanel",
+function (annotPanel, av) {
+this.fm = annotPanel.getFontMetrics ();
+this.annotationPanel = annotPanel;
+this.fadedImage = annotPanel.getFadedImage ();
+this.imgWidth = annotPanel.getFadedImageWidth ();
+var bounds = annotPanel.getVisibleVRange ();
+if (bounds != null) {
+this.sOffset = bounds[0];
+this.visHeight = bounds[1];
+if (this.visHeight == 0) {
+this.useClip = false;
+} else {
+this.useClip = this.canClip;
+}} else {
+this.useClip = false;
+}this.updateFromAlignViewport (av);
+}, "jalview.renderer.AwtRenderPanelI,jalview.api.AlignViewportI");
+Clazz.defineMethod (c$, "updateFromAlignViewport",
+function (av) {
+this.charWidth = av.getCharWidth ();
+this.endRes = av.getEndRes ();
+this.charHeight = av.getCharHeight ();
+this.hasHiddenColumns = av.hasHiddenColumns ();
+this.validCharWidth = av.isValidCharWidth ();
+this.av_renderHistogram = av.isShowConsensusHistogram ();
+this.av_renderProfile = av.isShowSequenceLogo ();
+this.av_normaliseProfile = av.isNormaliseSequenceLogo ();
+this.profcolour = av.getGlobalColourScheme ();
+if (this.profcolour == null) {
+this.profcolour = av.getAlignment ().isNucleotide () ? new jalview.schemes.NucleotideColourScheme () : new jalview.schemes.ZappoColourScheme ();
+}this.columnSelection = av.getColumnSelection ();
+this.hconsensus = av.getSequenceConsensusHash ();
+this.complementConsensus = av.getComplementConsensusHash ();
+this.hStrucConsensus = av.getRnaStructureConsensusHash ();
+this.av_ignoreGapsConsensus = av.isIgnoreGapsConsensus ();
+}, "jalview.api.AlignViewportI");
+Clazz.defineMethod (c$, "getProfileFor",
+function (aa, column) {
+if (aa.autoCalculated && (aa.label.startsWith ("Consensus") || aa.label.startsWith ("cDNA Consensus"))) {
+var forComplement = aa.label.startsWith ("cDNA Consensus");
+if (aa.groupRef != null && aa.groupRef.consensusData != null && aa.groupRef.isShowSequenceLogo ()) {
+return jalview.analysis.AAFrequency.extractProfile (aa.groupRef.consensusData[column], aa.groupRef.getIgnoreGapsConsensus ());
+}if (aa.groupRef == null && aa.sequenceRef == null) {
+if (forComplement) {
+return jalview.analysis.AAFrequency.extractCdnaProfile (this.complementConsensus[column], this.av_ignoreGapsConsensus);
+} else {
+return jalview.analysis.AAFrequency.extractProfile (this.hconsensus[column], this.av_ignoreGapsConsensus);
+}}} else {
+if (aa.autoCalculated && aa.label.startsWith ("StrucConsensus")) {
+if (aa.groupRef == null && aa.sequenceRef == null && this.hStrucConsensus != null && this.hStrucConsensus.length > column) {
+return jalview.analysis.StructureFrequency.extractProfile (this.hStrucConsensus[column], this.av_ignoreGapsConsensus);
+}}}return null;
+}, "jalview.datamodel.AlignmentAnnotation,~N");
+Clazz.defineMethod (c$, "drawComponent",
+function (annotPanel, av, g, activeRow, startRes, endRes) {
+var stime = System.currentTimeMillis ();
+var usedFaded = false;
+this.updateFromAwtRenderPanel (annotPanel, av);
+this.fm = g.getFontMetrics ();
+var aa = av.getAlignment ().getAlignmentAnnotation ();
+var temp = 0;
+if (aa == null) {
+return false;
+}var x = 0;
+var y = 0;
+var column = 0;
+var lastSS;
+var lastSSX;
+var iconOffset = 0;
+var validRes = false;
+var validEnd = false;
+var labelAllCols = false;
+var centreColLabels;
+var centreColLabelsDef = av.isCentreColumnLabels ();
+var scaleColLabel = false;
+var consensusAnnot = av.getAlignmentConsensusAnnotation ();
+var structConsensusAnnot = av.getAlignmentStrucConsensusAnnotation ();
+var complementConsensusAnnot = av.getComplementConsensusAnnotation ();
+var renderHistogram = true;
+var renderProfile = true;
+var normaliseProfile = false;
+var isRNA = this.rna;
+var graphGroupDrawn = new java.util.BitSet ();
+var charOffset = 0;
+var fmWidth;
+var fmScaling = 1;
+var ofont = g.getFont ();
+var yfrom = 0;
+var f_i = 0;
+var yto = 0;
+var f_to = 0;
+var clipst = false;
+var clipend = false;
+for (var i = 0; i < aa.length; i++) {
+var row = aa[i];
+isRNA = row.isRNA ();
+{
+if (row.groupRef != null && row === row.groupRef.getConsensus ()) {
+renderHistogram = row.groupRef.isShowConsensusHistogram ();
+renderProfile = row.groupRef.isShowSequenceLogo ();
+normaliseProfile = row.groupRef.isNormaliseSequenceLogo ();
+} else if (row === consensusAnnot || row === structConsensusAnnot || row === complementConsensusAnnot) {
+renderHistogram = this.av_renderHistogram;
+renderProfile = this.av_renderProfile;
+normaliseProfile = this.av_normaliseProfile;
+} else {
+renderHistogram = true;
+}}var row_annotations = row.annotations;
+if (!row.visible) {
+continue;
+}centreColLabels = row.centreColLabels || centreColLabelsDef;
+labelAllCols = row.showAllColLabels;
+scaleColLabel = row.scaleColLabel;
+lastSS = ' ';
+lastSSX = 0;
+if (!this.useClip || ((y - this.charHeight) < this.visHeight && (y + row.height + this.charHeight * 2) >= this.sOffset)) {
+if (!clipst) {
+clipst = true;
+yfrom = y;
+f_i = i;
+}yto = y;
+f_to = i;
+if (row.graph > 0) {
+if (row.graphGroup > -1 && graphGroupDrawn.get (row.graphGroup)) {
+continue;
+}y += row.height;
+if (row.hasText) {
+iconOffset = this.charHeight - this.fm.getDescent ();
+y -= this.charHeight;
+}} else if (row.hasText) {
+iconOffset = this.charHeight - this.fm.getDescent ();
+} else {
+iconOffset = 0;
+}if (row.autoCalculated && av.isCalculationInProgress (row)) {
+y += this.charHeight;
+usedFaded = true;
+g.drawImage (this.fadedImage, 0, y - row.height, this.imgWidth, y, 0, y - row.height, this.imgWidth, y, this.annotationPanel);
+g.setColor (java.awt.Color.black);
+continue;
+}x = (startRes == 0) ? 0 : -1;
+while (x < endRes - startRes) {
+if (this.hasHiddenColumns) {
+column = this.columnSelection.adjustForHiddenColumns (startRes + x);
+if (column > row_annotations.length - 1) {
+break;
+}} else {
+column = startRes + x;
+}if ((row_annotations == null) || (row_annotations.length <= column) || (row_annotations[column] == null)) {
+validRes = false;
+} else {
+validRes = true;
+}var displayChar = validRes ? row_annotations[column].displayCharacter : null;
+if (x > -1) {
+if (activeRow == i) {
+g.setColor (java.awt.Color.red);
+if (this.columnSelection != null) {
+for (var n = 0; n < this.columnSelection.size (); n++) {
+var v = this.columnSelection.columnAt (n);
+if (v == column) {
+g.fillRect (x * this.charWidth, y, this.charWidth, this.charHeight);
+}}
+}}if (row.getInvalidStrucPos () > x) {
+g.setColor (java.awt.Color.orange);
+g.fillRect (x * this.charWidth, y, this.charWidth, this.charHeight);
+} else if (row.getInvalidStrucPos () == x) {
+g.setColor (java.awt.Color.orange.darker ());
+g.fillRect (x * this.charWidth, y, this.charWidth, this.charHeight);
+}if (this.validCharWidth && validRes && displayChar != null && (displayChar.length > 0)) {
+fmWidth = this.fm.charsWidth (displayChar.toCharArray (), 0, displayChar.length);
+if (scaleColLabel) {
+if (fmWidth > this.charWidth) {
+fmScaling = this.charWidth;
+fmScaling /= fmWidth;
+g.setFont (ofont.deriveFont (java.awt.geom.AffineTransform.getScaleInstance (fmScaling, 1.0)));
+fmWidth = this.charWidth;
+}}charOffset = Clazz.floatToInt ((this.charWidth - fmWidth) / 2);
+if (row_annotations[column].colour == null) {
+g.setColor (java.awt.Color.black);
+} else {
+g.setColor (row_annotations[column].colour);
+}if (column == 0 || row.graph > 0) {
+g.drawString (displayChar, (x * this.charWidth) + charOffset, y + iconOffset);
+} else if (row_annotations[column - 1] == null || (labelAllCols || !displayChar.equals (row_annotations[column - 1].displayCharacter) || (displayChar.length < 2 && row_annotations[column].secondaryStructure == ' '))) {
+g.drawString (displayChar, x * this.charWidth + charOffset, y + iconOffset);
+}g.setFont (ofont);
+}}if (row.hasIcons) {
+var ss = validRes ? row_annotations[column].secondaryStructure : '-';
+if (ss == '(') {
+if (displayChar.indexOf (')') > -1) {
+ss = ')';
+}}if (ss == '[') {
+if ((displayChar.indexOf (']') > -1)) {
+ss = ']';
+}}if (ss == '{') {
+if (displayChar.indexOf ('}') > -1) {
+ss = '}';
+}}if (ss == '<') {
+if (displayChar.indexOf ('<') > -1) {
+ss = '>';
+}}if (ss.charCodeAt (0) >= 65) {
+if (displayChar.indexOf (ss.charCodeAt (0) + 32) > -1) {
+ss = String.fromCharCode (ss.charCodeAt (0) + 32);
+}}if (!validRes || (ss != lastSS)) {
+if (x > -1) {
+var nb_annot = x - temp;
+switch (lastSS) {
+case '(':
+case ')':
+this.drawStemAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+temp = x;
+break;
+case 'H':
+if (!isRNA) {
+this.drawHelixAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+break;
+}case 'E':
+if (!isRNA) {
+this.drawSheetAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+break;
+}case '{':
+case '}':
+case '[':
+case ']':
+case '>':
+case '<':
+case 'A':
+case 'a':
+case 'B':
+case 'b':
+case 'C':
+case 'c':
+case 'D':
+case 'd':
+case 'e':
+case 'F':
+case 'f':
+case 'G':
+case 'g':
+case 'h':
+case 'I':
+case 'i':
+case 'J':
+case 'j':
+case 'K':
+case 'k':
+case 'L':
+case 'l':
+case 'M':
+case 'm':
+case 'N':
+case 'n':
+case 'O':
+case 'o':
+case 'P':
+case 'p':
+case 'Q':
+case 'q':
+case 'R':
+case 'r':
+case 'S':
+case 's':
+case 'T':
+case 't':
+case 'U':
+case 'u':
+case 'V':
+case 'v':
+case 'W':
+case 'w':
+case 'X':
+case 'x':
+case 'Y':
+case 'y':
+case 'Z':
+case 'z':
+var nonCanColor = this.getNotCanonicalColor (lastSS);
+this.drawNotCanonicalAnnot (g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+temp = x;
+break;
+default:
+g.setColor (java.awt.Color.gray);
+g.fillRect (lastSSX, y + 6 + iconOffset, (x * this.charWidth) - lastSSX, 2);
+temp = x;
+break;
+}
+}if (validRes) {
+lastSS = ss;
+} else {
+lastSS = ' ';
+}if (x > -1) {
+lastSSX = (x * this.charWidth);
+}}}column++;
+x++;
+}
+if (column >= row_annotations.length) {
+column = row_annotations.length - 1;
+validEnd = false;
+} else {
+validEnd = true;
+}if ((row_annotations == null) || (row_annotations.length <= column) || (row_annotations[column] == null)) {
+validRes = false;
+} else {
+validRes = true;
+}if (row.hasIcons) {
+switch (lastSS) {
+case 'H':
+if (!isRNA) {
+this.drawHelixAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+break;
+}case 'E':
+if (!isRNA) {
+this.drawSheetAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+break;
+}case '(':
+case ')':
+this.drawStemAnnot (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+break;
+case '{':
+case '}':
+case '[':
+case ']':
+case '>':
+case '<':
+case 'A':
+case 'a':
+case 'B':
+case 'b':
+case 'C':
+case 'c':
+case 'D':
+case 'd':
+case 'e':
+case 'F':
+case 'f':
+case 'G':
+case 'g':
+case 'h':
+case 'I':
+case 'i':
+case 'J':
+case 'j':
+case 'K':
+case 'k':
+case 'L':
+case 'l':
+case 'M':
+case 'm':
+case 'N':
+case 'n':
+case 'O':
+case 'o':
+case 'P':
+case 'p':
+case 'Q':
+case 'q':
+case 'R':
+case 'r':
+case 'T':
+case 't':
+case 'U':
+case 'u':
+case 'V':
+case 'v':
+case 'W':
+case 'w':
+case 'X':
+case 'x':
+case 'Y':
+case 'y':
+case 'Z':
+case 'z':
+var nonCanColor = this.getNotCanonicalColor (lastSS);
+this.drawNotCanonicalAnnot (g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+break;
+default:
+this.drawGlyphLine (g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd);
+break;
+}
+}if (row.graph > 0 && row.graphHeight > 0) {
+if (row.graph == 2) {
+if (row.graphGroup > -1 && !graphGroupDrawn.get (row.graphGroup)) {
+var groupmax = -999999;
+var groupmin = 9999999;
+for (var gg = 0; gg < aa.length; gg++) {
+if (aa[gg].graphGroup != row.graphGroup) {
+continue;
+}if (aa[gg] !== row) {
+aa[gg].visible = false;
+}if (aa[gg].graphMax > groupmax) {
+groupmax = aa[gg].graphMax;
+}if (aa[gg].graphMin < groupmin) {
+groupmin = aa[gg].graphMin;
+}}
+for (var gg = 0; gg < aa.length; gg++) {
+if (aa[gg].graphGroup == row.graphGroup) {
+this.drawLineGraph (g, aa[gg], aa[gg].annotations, startRes, endRes, y, groupmin, groupmax, row.graphHeight);
+}}
+graphGroupDrawn.set (row.graphGroup);
+} else {
+this.drawLineGraph (g, row, row_annotations, startRes, endRes, y, row.graphMin, row.graphMax, row.graphHeight);
+}} else if (row.graph == 1) {
+this.drawBarGraph (g, row, row_annotations, startRes, endRes, row.graphMin, row.graphMax, y, renderHistogram, renderProfile, normaliseProfile);
+}}} else {
+if (clipst && !clipend) {
+clipend = true;
+}}if (row.graph > 0 && row.hasText) {
+y += this.charHeight;
+}if (row.graph == 0) {
+y += aa[i].height;
+}}
+if (this.debugRedraw) {
+if (this.canClip) {
+if (clipst) {
+System.err.println ("Start clip at : " + yfrom + " (index " + f_i + ")");
+}if (clipend) {
+System.err.println ("End clip at : " + yto + " (index " + f_to + ")");
+}};System.err.println ("Annotation Rendering time:" + (System.currentTimeMillis () - stime));
+};return !usedFaded;
+}, "jalview.renderer.AwtRenderPanelI,jalview.api.AlignViewportI,java.awt.Graphics,~N,~N,~N");
+Clazz.defineMethod (c$, "drawGlyphLine",
+function (g, row, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
+g.setColor (jalview.renderer.AnnotationRenderer.GLYPHLINE_COLOR);
+g.fillRect (lastSSX, y + 6 + iconOffset, (x * this.charWidth) - lastSSX, 2);
+}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
+Clazz.defineMethod (c$, "drawSheetAnnot",
+function (g, row, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
+g.setColor (jalview.renderer.AnnotationRenderer.SHEET_COLOUR);
+if (!validEnd || !validRes || row == null || row[column] == null || row[column].secondaryStructure != 'E') {
+g.fillRect (lastSSX, y + 4 + iconOffset, (x * this.charWidth) - lastSSX - 4, 7);
+g.fillPolygon ( Clazz.newIntArray (-1, [(x * this.charWidth) - 4, (x * this.charWidth) - 4, (x * this.charWidth)]), Clazz.newIntArray (-1, [y + iconOffset, y + 14 + iconOffset, y + 7 + iconOffset]), 3);
+} else {
+g.fillRect (lastSSX, y + 4 + iconOffset, (x + 1) * this.charWidth - lastSSX, 7);
+}}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
+Clazz.defineMethod (c$, "drawHelixAnnot",
+function (g, row, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd) {
+g.setColor (jalview.renderer.AnnotationRenderer.HELIX_COLOUR);
+var sCol = (Clazz.doubleToInt (lastSSX / this.charWidth)) + startRes;
+var x1 = lastSSX;
+var x2 = (x * this.charWidth);
+if (this.MAC) {
+var ofs = Clazz.doubleToInt (this.charWidth / 2);
+g.fillRoundRect (lastSSX, y + 4 + iconOffset, x2 - x1, 8, 8, 8);
+if (sCol == 0 || row[sCol - 1] == null || row[sCol - 1].secondaryStructure != 'H') {
+} else {
+g.fillRoundRect (lastSSX, y + 4 + iconOffset, x2 - x1 - ofs + 1, 8, 0, 0);
+}if (!validRes || row[column] == null || row[column].secondaryStructure != 'H') {
+} else {
+g.fillRoundRect (lastSSX + ofs, y + 4 + iconOffset, x2 - x1 - ofs + 1, 8, 0, 0);
+}return;
+}if (sCol == 0 || row[sCol - 1] == null || row[sCol - 1].secondaryStructure != 'H') {
+g.fillArc (lastSSX, y + 4 + iconOffset, this.charWidth, 8, 90, 180);
+x1 += Clazz.doubleToInt (this.charWidth / 2);
+}if (!validRes || row[column] == null || row[column].secondaryStructure != 'H') {
+g.fillArc ((x * this.charWidth) - this.charWidth, y + 4 + iconOffset, this.charWidth, 8, 270, 180);
+x2 -= Clazz.doubleToInt (this.charWidth / 2);
+}g.fillRect (x1, y + 4 + iconOffset, x2 - x1, 8);
+}, "java.awt.Graphics,~A,~N,~N,~N,~N,~N,~N,~B,~B");
+Clazz.defineMethod (c$, "drawLineGraph",
+function (g, _aa, aa_annotations, sRes, eRes, y, min, max, graphHeight) {
+if (sRes > aa_annotations.length) {
+return;
+}var x = 0;
+if (eRes < this.endRes) {
+eRes++;
+}eRes = Math.min (eRes, aa_annotations.length);
+if (sRes == 0) {
+x++;
+}var y1 = y;
+var y2 = y;
+var range = max - min;
+if (min < 0) {
+y2 = y - Clazz.floatToInt ((0 - min / range) * graphHeight);
+}g.setColor (java.awt.Color.gray);
+g.drawLine (x - this.charWidth, y2, (eRes - sRes + 1) * this.charWidth, y2);
+eRes = Math.min (eRes, aa_annotations.length);
+var column;
+var aaMax = aa_annotations.length - 1;
+while (x < eRes - sRes) {
+column = sRes + x;
+if (this.hasHiddenColumns) {
+column = this.columnSelection.adjustForHiddenColumns (column);
+}if (column > aaMax) {
+break;
+}if (aa_annotations[column] == null || aa_annotations[column - 1] == null) {
+x++;
+continue;
+}if (aa_annotations[column].colour == null) {
+g.setColor (java.awt.Color.black);
+} else {
+g.setColor (aa_annotations[column].colour);
+}y1 = y - Clazz.floatToInt (((aa_annotations[column - 1].value - min) / range) * graphHeight);
+y2 = y - Clazz.floatToInt (((aa_annotations[column].value - min) / range) * graphHeight);
+g.drawLine (x * this.charWidth - Clazz.doubleToInt (this.charWidth / 2), y1, x * this.charWidth + Clazz.doubleToInt (this.charWidth / 2), y2);
+x++;
+}
+if (_aa.threshold != null) {
+g.setColor (_aa.threshold.colour);
+var g2 = g;
+g2.setStroke ( new java.awt.BasicStroke (1, 2, 1, 3, Clazz.newFloatArray (-1, [5, 3]), 0));
+y2 = Clazz.floatToInt (y - ((_aa.threshold.value - min) / range) * graphHeight);
+g.drawLine (0, y2, (eRes - sRes) * this.charWidth, y2);
+g2.setStroke ( new java.awt.BasicStroke ());
+}}, "java.awt.Graphics,jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "drawBarGraph",
+function (g, _aa, aa_annotations, sRes, eRes, min, max, y, renderHistogram, renderProfile, normaliseProfile) {
+if (sRes > aa_annotations.length) {
+return;
+}var ofont = g.getFont ();
+eRes = Math.min (eRes, aa_annotations.length);
+var x = 0;
+var y1 = y;
+var y2 = y;
+var range = max - min;
+if (min < 0) {
+y2 = y - Clazz.floatToInt ((0 - min / (range)) * _aa.graphHeight);
+}g.setColor (java.awt.Color.gray);
+g.drawLine (x, y2, (eRes - sRes) * this.charWidth, y2);
+var column;
+var aaMax = aa_annotations.length - 1;
+while (x < eRes - sRes) {
+column = sRes + x;
+if (this.hasHiddenColumns) {
+column = this.columnSelection.adjustForHiddenColumns (column);
+}if (column > aaMax) {
+break;
+}if (aa_annotations[column] == null) {
+x++;
+continue;
+}if (aa_annotations[column].colour == null) {
+g.setColor (java.awt.Color.black);
+} else {
+g.setColor (aa_annotations[column].colour);
+}y1 = y - Clazz.floatToInt (((aa_annotations[column].value - min) / (range)) * _aa.graphHeight);
+if (renderHistogram) {
+if (y1 - y2 > 0) {
+g.fillRect (x * this.charWidth, y2, this.charWidth, y1 - y2);
+} else {
+g.fillRect (x * this.charWidth, y1, this.charWidth, y2 - y1);
+}}if (renderProfile) {
+var profl = this.getProfileFor (_aa, column);
+if (profl != null && profl[2] != 0) {
+var isStructureProfile = profl[0] == 1;
+var isCdnaProfile = profl[0] == 2;
+var ht = normaliseProfile ? y - _aa.graphHeight : y1;
+var htn = normaliseProfile ? _aa.graphHeight : (y2 - y1);
+var hght;
+var wdth;
+var ht2 = 0;
+var dc;
+dc = Clazz.newCharArray (isStructureProfile ? 2 : (isCdnaProfile ? 3 : 1), '\0');
+var lm = g.getFontMetrics (ofont).getLineMetrics ("Q", g);
+var scale = 1 / (normaliseProfile ? profl[2] : 100);
+var ofontHeight = 1 / lm.getAscent ();
+var scl = 0.0;
+var c = 3;
+var valuesProcessed = 0;
+while (valuesProcessed < profl[1]) {
+if (isStructureProfile) {
+dc[0] = String.fromCharCode (profl[c++]);
+dc[1] = String.fromCharCode (profl[c++]);
+} else if (isCdnaProfile) {
+dc = jalview.analysis.CodingUtils.decodeCodon (profl[c++]);
+} else {
+dc[0] = String.fromCharCode (profl[c++]);
+}wdth = this.charWidth;
+wdth /= this.fm.charsWidth (dc, 0, dc.length);
+ht += scl;
+scl = htn * scale * profl[c++];
+lm = ofont.getLineMetrics (dc, 0, 1, g.getFontMetrics ().getFontRenderContext ());
+g.setFont (ofont.deriveFont (java.awt.geom.AffineTransform.getScaleInstance (wdth, scl / lm.getAscent ())));
+lm = g.getFontMetrics ().getLineMetrics (dc, 0, 1, g);
+var colour = null;
+if (isCdnaProfile) {
+var codonTranslation = jalview.schemes.ResidueProperties.codonTranslate ( String.instantialize (dc));
+colour = this.profcolour.findColour (codonTranslation.charAt (0), column, null);
+} else {
+colour = this.profcolour.findColour (dc[0], column, null);
+}g.setColor (colour === java.awt.Color.white ? java.awt.Color.lightGray : colour);
+hght = (ht + (scl - lm.getDescent () - lm.getBaselineOffsets ()[lm.getBaselineIndex ()]));
+g.drawChars (dc, 0, dc.length, x * this.charWidth, Clazz.doubleToInt (hght));
+valuesProcessed++;
+}
+g.setFont (ofont);
+}}x++;
+}
+if (_aa.threshold != null) {
+g.setColor (_aa.threshold.colour);
+var g2 = g;
+g2.setStroke ( new java.awt.BasicStroke (1, 2, 1, 3, Clazz.newFloatArray (-1, [5, 3]), 0));
+y2 = Clazz.floatToInt (y - ((_aa.threshold.value - min) / range) * _aa.graphHeight);
+g.drawLine (0, y2, (eRes - sRes) * this.charWidth, y2);
+g2.setStroke ( new java.awt.BasicStroke ());
+}}, "java.awt.Graphics,jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~N,~N,~N,~B,~B,~B");
+Clazz.defineMethod (c$, "drawGraph",
+function (g, _aa, aa_annotations, width, y, sRes, eRes) {
+eRes = Math.min (eRes, aa_annotations.length);
+g.setColor (java.awt.Color.white);
+g.fillRect (0, 0, width, y);
+g.setColor ( new java.awt.Color (0, 0, 180));
+var x = 0;
+var height;
+for (var j = sRes; j < eRes; j++) {
+if (aa_annotations[j] != null) {
+if (aa_annotations[j].colour == null) {
+g.setColor (java.awt.Color.black);
+} else {
+g.setColor (aa_annotations[j].colour);
+}height = Clazz.floatToInt ((aa_annotations[j].value / _aa.graphMax) * y);
+if (height > y) {
+height = y;
+}g.fillRect (x, y - height, this.charWidth, height);
+}x += this.charWidth;
+}
+}, "java.awt.Graphics,jalview.datamodel.AlignmentAnnotation,~A,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "getNotCanonicalColor",
+function (lastss) {
+switch (lastss) {
+case '{':
+case '}':
+return new java.awt.Color (255, 125, 5);
+case '[':
+case ']':
+return new java.awt.Color (245, 115, 10);
+case '>':
+case '<':
+return new java.awt.Color (235, 135, 15);
+case 'A':
+case 'a':
+return new java.awt.Color (225, 105, 20);
+case 'B':
+case 'b':
+return new java.awt.Color (215, 145, 30);
+case 'C':
+case 'c':
+return new java.awt.Color (205, 95, 35);
+case 'D':
+case 'd':
+return new java.awt.Color (195, 155, 45);
+case 'E':
+case 'e':
+return new java.awt.Color (185, 85, 55);
+case 'F':
+case 'f':
+return new java.awt.Color (175, 165, 65);
+case 'G':
+case 'g':
+return new java.awt.Color (170, 75, 75);
+case 'H':
+case 'h':
+return new java.awt.Color (160, 175, 85);
+case 'I':
+case 'i':
+return new java.awt.Color (150, 65, 95);
+case 'J':
+case 'j':
+return new java.awt.Color (140, 185, 105);
+case 'K':
+case 'k':
+return new java.awt.Color (130, 55, 110);
+case 'L':
+case 'l':
+return new java.awt.Color (120, 195, 120);
+case 'M':
+case 'm':
+return new java.awt.Color (110, 45, 130);
+case 'N':
+case 'n':
+return new java.awt.Color (100, 205, 140);
+case 'O':
+case 'o':
+return new java.awt.Color (90, 35, 150);
+case 'P':
+case 'p':
+return new java.awt.Color (85, 215, 160);
+case 'Q':
+case 'q':
+return new java.awt.Color (75, 25, 170);
+case 'R':
+case 'r':
+return new java.awt.Color (65, 225, 180);
+case 'S':
+case 's':
+return new java.awt.Color (55, 15, 185);
+case 'T':
+case 't':
+return new java.awt.Color (45, 235, 195);
+case 'U':
+case 'u':
+return new java.awt.Color (35, 5, 205);
+case 'V':
+case 'v':
+return new java.awt.Color (25, 245, 215);
+case 'W':
+case 'w':
+return new java.awt.Color (15, 0, 225);
+case 'X':
+case 'x':
+return new java.awt.Color (10, 255, 235);
+case 'Y':
+case 'y':
+return new java.awt.Color (5, 150, 245);
+case 'Z':
+case 'z':
+return new java.awt.Color (0, 80, 255);
+default:
+System.out.println ("This is not a interaction : " + lastss);
+return null;
+}
+}, "~S");
+c$.GLYPHLINE_COLOR = c$.prototype.GLYPHLINE_COLOR = java.awt.Color.gray;
+c$.SHEET_COLOUR = c$.prototype.SHEET_COLOUR = java.awt.Color.green;
+c$.HELIX_COLOUR = c$.prototype.HELIX_COLOUR = java.awt.Color.red;
+c$.STEM_COLOUR = c$.prototype.STEM_COLOUR = java.awt.Color.blue;
+});
diff --git a/bin/jalview/renderer/AwtRenderPanelI.js b/bin/jalview/renderer/AwtRenderPanelI.js
index e3aa6c9..42dbcc3 100644
--- a/bin/jalview/renderer/AwtRenderPanelI.js
+++ b/bin/jalview/renderer/AwtRenderPanelI.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.renderer");
-Clazz.load (["java.awt.image.ImageObserver"], "jalview.renderer.AwtRenderPanelI", null, function () {
-Clazz.declareInterface (jalview.renderer, "AwtRenderPanelI", java.awt.image.ImageObserver);
-});
+Clazz.declarePackage ("jalview.renderer");
+Clazz.load (["java.awt.image.ImageObserver"], "jalview.renderer.AwtRenderPanelI", null, function () {
+Clazz.declareInterface (jalview.renderer, "AwtRenderPanelI", java.awt.image.ImageObserver);
+});
diff --git a/bin/jalview/renderer/seqfeatures/FeatureRenderer.class b/bin/jalview/renderer/seqfeatures/FeatureRenderer.class
index 04d500b..9f05aad 100644
Binary files a/bin/jalview/renderer/seqfeatures/FeatureRenderer.class and b/bin/jalview/renderer/seqfeatures/FeatureRenderer.class differ
diff --git a/bin/jalview/renderer/seqfeatures/FeatureRenderer.js b/bin/jalview/renderer/seqfeatures/FeatureRenderer.js
index 019d218..7dc84b1 100644
--- a/bin/jalview/renderer/seqfeatures/FeatureRenderer.js
+++ b/bin/jalview/renderer/seqfeatures/FeatureRenderer.js
@@ -1,187 +1,187 @@
-Clazz.declarePackage ("jalview.renderer.seqfeatures");
-Clazz.load (["jalview.viewmodel.seqfeatures.FeatureRendererModel"], "jalview.renderer.seqfeatures.FeatureRenderer", ["jalview.util.Comparison", "java.awt.AlphaComposite", "$.Color", "java.awt.image.BufferedImage", "java.lang.Float"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fm = null;
-this.charOffset = 0;
-this.offscreenRender = false;
-this.lastSeq = null;
-this.s = '\0';
-this.i = 0;
-this.av_charHeight = 0;
-this.av_charWidth = 0;
-this.av_validCharWidth = false;
-this.av_isShowSeqFeatureHeight = false;
-this.offscreenImage = null;
-this.lastSequenceFeatures = null;
-this.sfSize = 0;
-this.sfindex = 0;
-this.spos = 0;
-this.epos = 0;
-this.transparencyAvailable = true;
-Clazz.instantialize (this, arguments);
-}, jalview.renderer.seqfeatures, "FeatureRenderer", jalview.viewmodel.seqfeatures.FeatureRendererModel);
-Clazz.defineMethod (c$, "updateAvConfig",
-function () {
-this.av_charHeight = this.av.getCharHeight ();
-this.av_charWidth = this.av.getCharWidth ();
-this.av_validCharWidth = this.av.isValidCharWidth ();
-this.av_isShowSeqFeatureHeight = this.av.isShowSequenceFeaturesHeight ();
-});
-Clazz.defineMethod (c$, "renderFeature",
-function (g, seq, fstart, fend, featureColour, start, end, y1) {
-this.updateAvConfig ();
-if (((fstart <= end) && (fend >= start))) {
-if (fstart < start) {
-fstart = start;
-}if (fend >= end) {
-fend = end;
-}var pady = (y1 + this.av_charHeight) - Clazz.doubleToInt (this.av_charHeight / 5);
-for (this.i = fstart; this.i <= fend; this.i++) {
-this.s = seq.getCharAt (this.i);
-if (jalview.util.Comparison.isGap (this.s)) {
-continue;
-}g.setColor (featureColour);
-g.fillRect ((this.i - start) * this.av_charWidth, y1, this.av_charWidth, this.av_charHeight);
-if (this.offscreenRender || !this.av_validCharWidth) {
-continue;
-}g.setColor (java.awt.Color.white);
-this.charOffset = Clazz.doubleToInt ((this.av_charWidth - this.fm.charWidth (this.s)) / 2);
-g.drawString (String.valueOf (this.s), this.charOffset + (this.av_charWidth * (this.i - start)), pady);
-}
-}}, "java.awt.Graphics,jalview.datamodel.SequenceI,~N,~N,java.awt.Color,~N,~N,~N");
-Clazz.defineMethod (c$, "renderScoreFeature",
-function (g, seq, fstart, fend, featureColour, start, end, y1, bs) {
-this.updateAvConfig ();
-if (((fstart <= end) && (fend >= start))) {
-if (fstart < start) {
-fstart = start;
-}if (fend >= end) {
-fend = end;
-}var pady = (y1 + this.av_charHeight) - Clazz.doubleToInt (this.av_charHeight / 5);
-var ystrt = 0;
-var yend = this.av_charHeight;
-if (bs[0] != 0) {
-if (bs[1] < 128) {
-yend = Clazz.doubleToInt (this.av_charHeight * (128 - bs[1]) / 512);
-ystrt = this.av_charHeight - Clazz.doubleToInt (yend / 2);
-} else {
-ystrt = Clazz.doubleToInt (this.av_charHeight / 2);
-yend = Clazz.doubleToInt (this.av_charHeight * (bs[1] - 128) / 512);
-}} else {
-yend = Clazz.doubleToInt (this.av_charHeight * bs[1] / 255);
-ystrt = this.av_charHeight - yend;
-}for (this.i = fstart; this.i <= fend; this.i++) {
-this.s = seq.getCharAt (this.i);
-if (jalview.util.Comparison.isGap (this.s)) {
-continue;
-}g.setColor (featureColour);
-var x = (this.i - start) * this.av_charWidth;
-g.drawRect (x, y1, this.av_charWidth, this.av_charHeight);
-g.fillRect (x, y1 + ystrt, this.av_charWidth, yend);
-if (this.offscreenRender || !this.av_validCharWidth) {
-continue;
-}g.setColor (java.awt.Color.black);
-this.charOffset = Clazz.doubleToInt ((this.av_charWidth - this.fm.charWidth (this.s)) / 2);
-g.drawString (String.valueOf (this.s), this.charOffset + (this.av_charWidth * (this.i - start)), pady);
-}
-}}, "java.awt.Graphics,jalview.datamodel.SequenceI,~N,~N,java.awt.Color,~N,~N,~N,~A");
-Clazz.defineMethod (c$, "findFeatureColour",
-function (initialCol, seq, res) {
-return new java.awt.Color (this.findFeatureColour (initialCol.getRGB (), seq, res));
-}, "java.awt.Color,jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "findFeatureColour",
-function (initialCol, seq, column) {
-if (!this.av.isShowSequenceFeatures ()) {
-return initialCol;
-}var sequenceFeatures = seq.getSequenceFeatures ();
-if (seq !== this.lastSeq) {
-this.lastSeq = seq;
-this.lastSequenceFeatures = sequenceFeatures;
-if (this.lastSequenceFeatures != null) {
-this.sfSize = this.lastSequenceFeatures.length;
-}} else {
-if (this.lastSequenceFeatures !== sequenceFeatures) {
-this.lastSequenceFeatures = sequenceFeatures;
-if (this.lastSequenceFeatures != null) {
-this.sfSize = this.lastSequenceFeatures.length;
-}}}if (this.lastSequenceFeatures == null || this.sfSize == 0) {
-return initialCol;
-}if (jalview.util.Comparison.isGap (this.lastSeq.getCharAt (column))) {
-return java.awt.Color.white.getRGB ();
-}if (this.transparency != 1.0 && this.offscreenImage == null) {
-this.offscreenImage = new java.awt.image.BufferedImage (1, 1, 2);
-}this.currentColour = null;
-this.offscreenRender = true;
-if (this.offscreenImage != null) {
-this.offscreenImage.setRGB (0, 0, initialCol);
-this.drawSequence (this.offscreenImage.getGraphics (), this.lastSeq, column, column, 0);
-return this.offscreenImage.getRGB (0, 0);
-} else {
-this.drawSequence (null, this.lastSeq, this.lastSeq.findPosition (column), -1, -1);
-if (this.currentColour == null) {
-return initialCol;
-} else {
-return (this.currentColour).intValue ();
-}}}, "~N,jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "drawSequence",
-function (g, seq, start, end, y1) {
-var sequenceFeatures = seq.getSequenceFeatures ();
-if (sequenceFeatures == null || sequenceFeatures.length == 0) {
-return;
-}if (g != null) {
-this.fm = g.getFontMetrics ();
-}this.updateFeatures ();
-if (this.lastSeq == null || seq !== this.lastSeq || sequenceFeatures !== this.lastSequenceFeatures) {
-this.lastSeq = seq;
-this.lastSequenceFeatures = sequenceFeatures;
-}if (this.transparency != 1 && g != null) {
-var g2 = g;
-g2.setComposite (java.awt.AlphaComposite.getInstance (3, this.transparency));
-}if (!this.offscreenRender) {
-this.spos = this.lastSeq.findPosition (start);
-this.epos = this.lastSeq.findPosition (end);
-}this.sfSize = this.lastSequenceFeatures.length;
-var type;
-for (var renderIndex = 0; renderIndex < this.renderOrder.length; renderIndex++) {
-type = this.renderOrder[renderIndex];
-if (type == null || !this.showFeatureOfType (type)) {
-continue;
-}for (this.sfindex = 0; this.sfindex < this.sfSize; this.sfindex++) {
-var sequenceFeature = this.lastSequenceFeatures[this.sfindex];
-if (!sequenceFeature.type.equals (type)) {
-continue;
-}if (this.featureGroups != null && sequenceFeature.featureGroup != null && sequenceFeature.featureGroup.length != 0 && this.featureGroups.containsKey (sequenceFeature.featureGroup) && !this.featureGroups.get (sequenceFeature.featureGroup).booleanValue ()) {
-continue;
-}if (!this.offscreenRender && (sequenceFeature.getBegin () > this.epos || sequenceFeature.getEnd () < this.spos)) {
-continue;
-}if (this.offscreenRender && this.offscreenImage == null) {
-if (sequenceFeature.begin <= start && sequenceFeature.end >= start) {
-this.currentColour = new Integer (this.getColour (sequenceFeature).getRGB ());
-}} else if (sequenceFeature.type.equals ("disulfide bond")) {
-this.renderFeature (g, seq, seq.findIndex (sequenceFeature.begin) - 1, seq.findIndex (sequenceFeature.begin) - 1, this.getColour (sequenceFeature), start, end, y1);
-this.renderFeature (g, seq, seq.findIndex (sequenceFeature.end) - 1, seq.findIndex (sequenceFeature.end) - 1, this.getColour (sequenceFeature), start, end, y1);
-} else if (this.showFeature (sequenceFeature)) {
-if (this.av_isShowSeqFeatureHeight && !Float.isNaN (sequenceFeature.score)) {
-this.renderScoreFeature (g, seq, seq.findIndex (sequenceFeature.begin) - 1, seq.findIndex (sequenceFeature.end) - 1, this.getColour (sequenceFeature), start, end, y1, this.normaliseScore (sequenceFeature));
-} else {
-this.renderFeature (g, seq, seq.findIndex (sequenceFeature.begin) - 1, seq.findIndex (sequenceFeature.end) - 1, this.getColour (sequenceFeature), start, end, y1);
-}}}
-}
-if (this.transparency != 1.0 && g != null && this.transparencyAvailable) {
-var g2 = g;
-g2.setComposite (java.awt.AlphaComposite.getInstance (3, 1.0));
-}}, "java.awt.Graphics,jalview.datamodel.SequenceI,~N,~N,~N");
-Clazz.defineMethod (c$, "setTransparencyAvailable",
-function (isTransparencyAvailable) {
-this.transparencyAvailable = isTransparencyAvailable;
-}, "~B");
-Clazz.overrideMethod (c$, "isTransparencyAvailable",
-function () {
-return this.transparencyAvailable;
-});
-Clazz.overrideMethod (c$, "featuresAdded",
-function () {
-this.lastSeq = null;
-this.findAllFeatures ();
-});
-});
+Clazz.declarePackage ("jalview.renderer.seqfeatures");
+Clazz.load (["jalview.viewmodel.seqfeatures.FeatureRendererModel"], "jalview.renderer.seqfeatures.FeatureRenderer", ["jalview.util.Comparison", "java.awt.AlphaComposite", "$.Color", "java.awt.image.BufferedImage", "java.lang.Float"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fm = null;
+this.charOffset = 0;
+this.offscreenRender = false;
+this.lastSeq = null;
+this.s = '\0';
+this.i = 0;
+this.av_charHeight = 0;
+this.av_charWidth = 0;
+this.av_validCharWidth = false;
+this.av_isShowSeqFeatureHeight = false;
+this.offscreenImage = null;
+this.lastSequenceFeatures = null;
+this.sfSize = 0;
+this.sfindex = 0;
+this.spos = 0;
+this.epos = 0;
+this.transparencyAvailable = true;
+Clazz.instantialize (this, arguments);
+}, jalview.renderer.seqfeatures, "FeatureRenderer", jalview.viewmodel.seqfeatures.FeatureRendererModel);
+Clazz.defineMethod (c$, "updateAvConfig",
+function () {
+this.av_charHeight = this.av.getCharHeight ();
+this.av_charWidth = this.av.getCharWidth ();
+this.av_validCharWidth = this.av.isValidCharWidth ();
+this.av_isShowSeqFeatureHeight = this.av.isShowSequenceFeaturesHeight ();
+});
+Clazz.defineMethod (c$, "renderFeature",
+function (g, seq, fstart, fend, featureColour, start, end, y1) {
+this.updateAvConfig ();
+if (((fstart <= end) && (fend >= start))) {
+if (fstart < start) {
+fstart = start;
+}if (fend >= end) {
+fend = end;
+}var pady = (y1 + this.av_charHeight) - Clazz.doubleToInt (this.av_charHeight / 5);
+for (this.i = fstart; this.i <= fend; this.i++) {
+this.s = seq.getCharAt (this.i);
+if (jalview.util.Comparison.isGap (this.s)) {
+continue;
+}g.setColor (featureColour);
+g.fillRect ((this.i - start) * this.av_charWidth, y1, this.av_charWidth, this.av_charHeight);
+if (this.offscreenRender || !this.av_validCharWidth) {
+continue;
+}g.setColor (java.awt.Color.white);
+this.charOffset = Clazz.doubleToInt ((this.av_charWidth - this.fm.charWidth (this.s)) / 2);
+g.drawString (String.valueOf (this.s), this.charOffset + (this.av_charWidth * (this.i - start)), pady);
+}
+}}, "java.awt.Graphics,jalview.datamodel.SequenceI,~N,~N,java.awt.Color,~N,~N,~N");
+Clazz.defineMethod (c$, "renderScoreFeature",
+function (g, seq, fstart, fend, featureColour, start, end, y1, bs) {
+this.updateAvConfig ();
+if (((fstart <= end) && (fend >= start))) {
+if (fstart < start) {
+fstart = start;
+}if (fend >= end) {
+fend = end;
+}var pady = (y1 + this.av_charHeight) - Clazz.doubleToInt (this.av_charHeight / 5);
+var ystrt = 0;
+var yend = this.av_charHeight;
+if (bs[0] != 0) {
+if (bs[1] < 128) {
+yend = Clazz.doubleToInt (this.av_charHeight * (128 - bs[1]) / 512);
+ystrt = this.av_charHeight - Clazz.doubleToInt (yend / 2);
+} else {
+ystrt = Clazz.doubleToInt (this.av_charHeight / 2);
+yend = Clazz.doubleToInt (this.av_charHeight * (bs[1] - 128) / 512);
+}} else {
+yend = Clazz.doubleToInt (this.av_charHeight * bs[1] / 255);
+ystrt = this.av_charHeight - yend;
+}for (this.i = fstart; this.i <= fend; this.i++) {
+this.s = seq.getCharAt (this.i);
+if (jalview.util.Comparison.isGap (this.s)) {
+continue;
+}g.setColor (featureColour);
+var x = (this.i - start) * this.av_charWidth;
+g.drawRect (x, y1, this.av_charWidth, this.av_charHeight);
+g.fillRect (x, y1 + ystrt, this.av_charWidth, yend);
+if (this.offscreenRender || !this.av_validCharWidth) {
+continue;
+}g.setColor (java.awt.Color.black);
+this.charOffset = Clazz.doubleToInt ((this.av_charWidth - this.fm.charWidth (this.s)) / 2);
+g.drawString (String.valueOf (this.s), this.charOffset + (this.av_charWidth * (this.i - start)), pady);
+}
+}}, "java.awt.Graphics,jalview.datamodel.SequenceI,~N,~N,java.awt.Color,~N,~N,~N,~A");
+Clazz.defineMethod (c$, "findFeatureColour",
+function (initialCol, seq, res) {
+return new java.awt.Color (this.findFeatureColour (initialCol.getRGB (), seq, res));
+}, "java.awt.Color,jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "findFeatureColour",
+function (initialCol, seq, column) {
+if (!this.av.isShowSequenceFeatures ()) {
+return initialCol;
+}var sequenceFeatures = seq.getSequenceFeatures ();
+if (seq !== this.lastSeq) {
+this.lastSeq = seq;
+this.lastSequenceFeatures = sequenceFeatures;
+if (this.lastSequenceFeatures != null) {
+this.sfSize = this.lastSequenceFeatures.length;
+}} else {
+if (this.lastSequenceFeatures !== sequenceFeatures) {
+this.lastSequenceFeatures = sequenceFeatures;
+if (this.lastSequenceFeatures != null) {
+this.sfSize = this.lastSequenceFeatures.length;
+}}}if (this.lastSequenceFeatures == null || this.sfSize == 0) {
+return initialCol;
+}if (jalview.util.Comparison.isGap (this.lastSeq.getCharAt (column))) {
+return java.awt.Color.white.getRGB ();
+}if (this.transparency != 1.0 && this.offscreenImage == null) {
+this.offscreenImage = new java.awt.image.BufferedImage (1, 1, 2);
+}this.currentColour = null;
+this.offscreenRender = true;
+if (this.offscreenImage != null) {
+this.offscreenImage.setRGB (0, 0, initialCol);
+this.drawSequence (this.offscreenImage.getGraphics (), this.lastSeq, column, column, 0);
+return this.offscreenImage.getRGB (0, 0);
+} else {
+this.drawSequence (null, this.lastSeq, this.lastSeq.findPosition (column), -1, -1);
+if (this.currentColour == null) {
+return initialCol;
+} else {
+return (this.currentColour).intValue ();
+}}}, "~N,jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "drawSequence",
+function (g, seq, start, end, y1) {
+var sequenceFeatures = seq.getSequenceFeatures ();
+if (sequenceFeatures == null || sequenceFeatures.length == 0) {
+return;
+}if (g != null) {
+this.fm = g.getFontMetrics ();
+}this.updateFeatures ();
+if (this.lastSeq == null || seq !== this.lastSeq || sequenceFeatures !== this.lastSequenceFeatures) {
+this.lastSeq = seq;
+this.lastSequenceFeatures = sequenceFeatures;
+}if (this.transparency != 1 && g != null) {
+var g2 = g;
+g2.setComposite (java.awt.AlphaComposite.getInstance (3, this.transparency));
+}if (!this.offscreenRender) {
+this.spos = this.lastSeq.findPosition (start);
+this.epos = this.lastSeq.findPosition (end);
+}this.sfSize = this.lastSequenceFeatures.length;
+var type;
+for (var renderIndex = 0; renderIndex < this.renderOrder.length; renderIndex++) {
+type = this.renderOrder[renderIndex];
+if (type == null || !this.showFeatureOfType (type)) {
+continue;
+}for (this.sfindex = 0; this.sfindex < this.sfSize; this.sfindex++) {
+var sequenceFeature = this.lastSequenceFeatures[this.sfindex];
+if (!sequenceFeature.type.equals (type)) {
+continue;
+}if (this.featureGroups != null && sequenceFeature.featureGroup != null && sequenceFeature.featureGroup.length != 0 && this.featureGroups.containsKey (sequenceFeature.featureGroup) && !this.featureGroups.get (sequenceFeature.featureGroup).booleanValue ()) {
+continue;
+}if (!this.offscreenRender && (sequenceFeature.getBegin () > this.epos || sequenceFeature.getEnd () < this.spos)) {
+continue;
+}if (this.offscreenRender && this.offscreenImage == null) {
+if (sequenceFeature.begin <= start && sequenceFeature.end >= start) {
+this.currentColour = new Integer (this.getColour (sequenceFeature).getRGB ());
+}} else if (sequenceFeature.type.equals ("disulfide bond")) {
+this.renderFeature (g, seq, seq.findIndex (sequenceFeature.begin) - 1, seq.findIndex (sequenceFeature.begin) - 1, this.getColour (sequenceFeature), start, end, y1);
+this.renderFeature (g, seq, seq.findIndex (sequenceFeature.end) - 1, seq.findIndex (sequenceFeature.end) - 1, this.getColour (sequenceFeature), start, end, y1);
+} else if (this.showFeature (sequenceFeature)) {
+if (this.av_isShowSeqFeatureHeight && !Float.isNaN (sequenceFeature.score)) {
+this.renderScoreFeature (g, seq, seq.findIndex (sequenceFeature.begin) - 1, seq.findIndex (sequenceFeature.end) - 1, this.getColour (sequenceFeature), start, end, y1, this.normaliseScore (sequenceFeature));
+} else {
+this.renderFeature (g, seq, seq.findIndex (sequenceFeature.begin) - 1, seq.findIndex (sequenceFeature.end) - 1, this.getColour (sequenceFeature), start, end, y1);
+}}}
+}
+if (this.transparency != 1.0 && g != null && this.transparencyAvailable) {
+var g2 = g;
+g2.setComposite (java.awt.AlphaComposite.getInstance (3, 1.0));
+}}, "java.awt.Graphics,jalview.datamodel.SequenceI,~N,~N,~N");
+Clazz.defineMethod (c$, "setTransparencyAvailable",
+function (isTransparencyAvailable) {
+this.transparencyAvailable = isTransparencyAvailable;
+}, "~B");
+Clazz.overrideMethod (c$, "isTransparencyAvailable",
+function () {
+return this.transparencyAvailable;
+});
+Clazz.overrideMethod (c$, "featuresAdded",
+function () {
+this.lastSeq = null;
+this.findAllFeatures ();
+});
+});
diff --git a/bin/jalview/schemes/AnnotationColourGradient.class b/bin/jalview/schemes/AnnotationColourGradient.class
index 65eb813..04210df 100644
Binary files a/bin/jalview/schemes/AnnotationColourGradient.class and b/bin/jalview/schemes/AnnotationColourGradient.class differ
diff --git a/bin/jalview/schemes/AnnotationColourGradient.js b/bin/jalview/schemes/AnnotationColourGradient.js
index 40ed8eb..0f29e11 100644
--- a/bin/jalview/schemes/AnnotationColourGradient.js
+++ b/bin/jalview/schemes/AnnotationColourGradient.js
@@ -1,200 +1,200 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.FollowerColourScheme"], "jalview.schemes.AnnotationColourGradient", ["jalview.datamodel.AlignmentI", "$.GraphLine", "jalview.renderer.AnnotationRenderer", "jalview.schemes.ColourSchemeProperty", "jalview.util.Comparison", "java.awt.Color", "java.util.IdentityHashMap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.annotation = null;
-this.aboveAnnotationThreshold = -1;
-this.thresholdIsMinMax = false;
-this.annotationThreshold = null;
-this.r1 = 0;
-this.g1 = 0;
-this.b1 = 0;
-this.rr = 0;
-this.gg = 0;
-this.bb = 0;
-this.predefinedColours = false;
-this.seqAssociated = false;
-this.noGradient = false;
-this.seqannot = null;
-this.aamin = 0;
-this.aamax = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "AnnotationColourGradient", jalview.schemes.FollowerColourScheme);
-Clazz.overrideMethod (c$, "applyTo",
-function (sg, hiddenRepSequences) {
-var acg = new jalview.schemes.AnnotationColourGradient (this.annotation, this.colourScheme, this.aboveAnnotationThreshold);
-acg.thresholdIsMinMax = this.thresholdIsMinMax;
-acg.annotationThreshold = (this.annotationThreshold == null) ? null : new jalview.datamodel.GraphLine (this.annotationThreshold);
-acg.r1 = this.r1;
-acg.g1 = this.g1;
-acg.b1 = this.b1;
-acg.rr = this.rr;
-acg.gg = this.gg;
-acg.bb = this.bb;
-acg.predefinedColours = this.predefinedColours;
-acg.seqAssociated = this.seqAssociated;
-acg.noGradient = this.noGradient;
-return acg;
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.makeConstructor (c$,
-function (annotation, originalColour, aboveThreshold) {
-Clazz.superConstructor (this, jalview.schemes.AnnotationColourGradient, []);
-if (Clazz.instanceOf (originalColour, jalview.schemes.AnnotationColourGradient)) {
-this.colourScheme = (originalColour).colourScheme;
-} else {
-this.colourScheme = originalColour;
-}this.annotation = annotation;
-this.aboveAnnotationThreshold = aboveThreshold;
-if (aboveThreshold != -1 && annotation.threshold != null) {
-this.annotationThreshold = annotation.threshold;
-}this.r1 = 254;
-this.g1 = 254;
-this.b1 = 254;
-this.rr = 0;
-this.gg = 0;
-this.bb = 0;
-this.noGradient = true;
-}, "jalview.datamodel.AlignmentAnnotation,jalview.schemes.ColourSchemeI,~N");
-Clazz.makeConstructor (c$,
-function (annotation, minColour, maxColour, aboveThreshold) {
-Clazz.superConstructor (this, jalview.schemes.AnnotationColourGradient, []);
-this.annotation = annotation;
-this.aboveAnnotationThreshold = aboveThreshold;
-if (aboveThreshold != -1 && annotation.threshold != null) {
-this.annotationThreshold = annotation.threshold;
-}this.r1 = minColour.getRed ();
-this.g1 = minColour.getGreen ();
-this.b1 = minColour.getBlue ();
-this.rr = maxColour.getRed () - this.r1;
-this.gg = maxColour.getGreen () - this.g1;
-this.bb = maxColour.getBlue () - this.b1;
-this.noGradient = false;
-this.aamax = annotation.graphMax;
-this.aamin = annotation.graphMin;
-if (annotation.isRNA ()) {
-jalview.schemes.ColourSchemeProperty.initRnaHelicesShading (1 + Clazz.floatToInt (this.aamax));
-}}, "jalview.datamodel.AlignmentAnnotation,java.awt.Color,java.awt.Color,~N");
-Clazz.defineMethod (c$, "alignmentChanged",
-function (alignment, hiddenReps) {
-Clazz.superCall (this, jalview.schemes.AnnotationColourGradient, "alignmentChanged", [alignment, hiddenReps]);
-if (this.seqAssociated && this.annotation.getCalcId () != null) {
-if (this.seqannot != null) {
-this.seqannot.clear ();
-} else {
-this.seqannot = new java.util.IdentityHashMap ();
-}var alcontext = Clazz.instanceOf (alignment, jalview.datamodel.AlignmentI) ? alignment : alignment.getContext ();
-var f = true;
-var rna = false;
-for (var alan, $alan = alcontext.findAnnotation (this.annotation.getCalcId ()).iterator (); $alan.hasNext () && ((alan = $alan.next ()) || true);) {
-if (alan.sequenceRef != null && (alan.label != null && this.annotation != null && alan.label.equals (this.annotation.label))) {
-if (!rna && alan.isRNA ()) {
-rna = true;
-}this.seqannot.put (alan.sequenceRef, alan);
-if (f || alan.graphMax > this.aamax) {
-this.aamax = alan.graphMax;
-}if (f || alan.graphMin < this.aamin) {
-this.aamin = alan.graphMin;
-}f = false;
-}}
-if (rna) {
-jalview.schemes.ColourSchemeProperty.initRnaHelicesShading (1 + Clazz.floatToInt (this.aamax));
-}}}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.defineMethod (c$, "getAnnotation",
-function () {
-return this.annotation.label;
-});
-Clazz.defineMethod (c$, "getAboveThreshold",
-function () {
-return this.aboveAnnotationThreshold;
-});
-Clazz.defineMethod (c$, "getAnnotationThreshold",
-function () {
-if (this.annotationThreshold == null) {
-return 0;
-} else {
-return this.annotationThreshold.value;
-}});
-Clazz.defineMethod (c$, "getMinColour",
-function () {
-return new java.awt.Color (Clazz.floatToInt (this.r1), Clazz.floatToInt (this.g1), Clazz.floatToInt (this.b1));
-});
-Clazz.defineMethod (c$, "getMaxColour",
-function () {
-return new java.awt.Color (Clazz.floatToInt (this.r1 + this.rr), Clazz.floatToInt (this.g1 + this.gg), Clazz.floatToInt (this.b1 + this.bb));
-});
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return java.awt.Color.red;
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-var currentColour = java.awt.Color.white;
-var annotation = (this.seqAssociated && this.seqannot != null ? this.seqannot.get (seq) : this.annotation);
-if (annotation == null) {
-return currentColour;
-}if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
-if (annotation.annotations != null && j < annotation.annotations.length && annotation.annotations[j] != null && !jalview.util.Comparison.isGap (c)) {
-var aj = annotation.annotations[j];
-if (this.aboveAnnotationThreshold == -1 || (this.annotationThreshold != null && (this.aboveAnnotationThreshold == 1 ? aj.value >= this.annotationThreshold.value : aj.value <= this.annotationThreshold.value))) {
-if (this.predefinedColours && aj.colour != null && !aj.colour.equals (java.awt.Color.black)) {
-currentColour = aj.colour;
-} else if (annotation.hasIcons && annotation.graph == 0) {
-if (aj.secondaryStructure > ' ' && aj.secondaryStructure != '.' && aj.secondaryStructure != '-') {
-if (this.colourScheme != null) {
-currentColour = this.colourScheme.findColour (c, j, seq);
-} else {
-if (annotation.isRNA ()) {
-currentColour = jalview.schemes.ColourSchemeProperty.rnaHelices[Clazz.floatToInt (aj.value)];
-} else {
-currentColour = annotation.annotations[j].secondaryStructure == 'H' ? jalview.renderer.AnnotationRenderer.HELIX_COLOUR : annotation.annotations[j].secondaryStructure == 'E' ? jalview.renderer.AnnotationRenderer.SHEET_COLOUR : jalview.renderer.AnnotationRenderer.STEM_COLOUR;
-}}} else {
-return java.awt.Color.white;
-}} else if (this.noGradient) {
-if (this.colourScheme != null) {
-currentColour = this.colourScheme.findColour (c, j, seq);
-} else {
-if (aj.colour != null) {
-currentColour = aj.colour;
-}}} else {
-currentColour = this.shadeCalculation (annotation, j);
-}}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}}}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "shadeCalculation",
-($fz = function (annotation, j) {
-var range = 1;
-if (this.thresholdIsMinMax && annotation.threshold != null && this.aboveAnnotationThreshold == 1 && annotation.annotations[j].value >= annotation.threshold.value) {
-range = (annotation.annotations[j].value - annotation.threshold.value) / (annotation.graphMax - annotation.threshold.value);
-} else if (this.thresholdIsMinMax && annotation.threshold != null && this.aboveAnnotationThreshold == 0 && annotation.annotations[j].value >= annotation.graphMin) {
-range = (annotation.annotations[j].value - annotation.graphMin) / (annotation.threshold.value - annotation.graphMin);
-} else {
-if (annotation.graphMax != annotation.graphMin) {
-range = (annotation.annotations[j].value - annotation.graphMin) / (annotation.graphMax - annotation.graphMin);
-} else {
-range = 0;
-}}var dr = Clazz.floatToInt (this.rr * range + this.r1);
-var dg = Clazz.floatToInt (this.gg * range + this.g1);
-var db = Clazz.floatToInt (this.bb * range + this.b1);
-return new java.awt.Color (dr, dg, db);
-}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,~N");
-Clazz.defineMethod (c$, "isPredefinedColours",
-function () {
-return this.predefinedColours;
-});
-Clazz.defineMethod (c$, "setPredefinedColours",
-function (predefinedColours) {
-this.predefinedColours = predefinedColours;
-}, "~B");
-Clazz.defineMethod (c$, "isSeqAssociated",
-function () {
-return this.seqAssociated;
-});
-Clazz.defineMethod (c$, "setSeqAssociated",
-function (sassoc) {
-this.seqAssociated = sassoc;
-}, "~B");
-Clazz.defineStatics (c$,
-"NO_THRESHOLD", -1,
-"BELOW_THRESHOLD", 0,
-"ABOVE_THRESHOLD", 1);
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.FollowerColourScheme"], "jalview.schemes.AnnotationColourGradient", ["jalview.datamodel.AlignmentI", "$.GraphLine", "jalview.renderer.AnnotationRenderer", "jalview.schemes.ColourSchemeProperty", "jalview.util.Comparison", "java.awt.Color", "java.util.IdentityHashMap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.annotation = null;
+this.aboveAnnotationThreshold = -1;
+this.thresholdIsMinMax = false;
+this.annotationThreshold = null;
+this.r1 = 0;
+this.g1 = 0;
+this.b1 = 0;
+this.rr = 0;
+this.gg = 0;
+this.bb = 0;
+this.predefinedColours = false;
+this.seqAssociated = false;
+this.noGradient = false;
+this.seqannot = null;
+this.aamin = 0;
+this.aamax = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "AnnotationColourGradient", jalview.schemes.FollowerColourScheme);
+Clazz.overrideMethod (c$, "applyTo",
+function (sg, hiddenRepSequences) {
+var acg = new jalview.schemes.AnnotationColourGradient (this.annotation, this.colourScheme, this.aboveAnnotationThreshold);
+acg.thresholdIsMinMax = this.thresholdIsMinMax;
+acg.annotationThreshold = (this.annotationThreshold == null) ? null : new jalview.datamodel.GraphLine (this.annotationThreshold);
+acg.r1 = this.r1;
+acg.g1 = this.g1;
+acg.b1 = this.b1;
+acg.rr = this.rr;
+acg.gg = this.gg;
+acg.bb = this.bb;
+acg.predefinedColours = this.predefinedColours;
+acg.seqAssociated = this.seqAssociated;
+acg.noGradient = this.noGradient;
+return acg;
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.makeConstructor (c$,
+function (annotation, originalColour, aboveThreshold) {
+Clazz.superConstructor (this, jalview.schemes.AnnotationColourGradient, []);
+if (Clazz.instanceOf (originalColour, jalview.schemes.AnnotationColourGradient)) {
+this.colourScheme = (originalColour).colourScheme;
+} else {
+this.colourScheme = originalColour;
+}this.annotation = annotation;
+this.aboveAnnotationThreshold = aboveThreshold;
+if (aboveThreshold != -1 && annotation.threshold != null) {
+this.annotationThreshold = annotation.threshold;
+}this.r1 = 254;
+this.g1 = 254;
+this.b1 = 254;
+this.rr = 0;
+this.gg = 0;
+this.bb = 0;
+this.noGradient = true;
+}, "jalview.datamodel.AlignmentAnnotation,jalview.schemes.ColourSchemeI,~N");
+Clazz.makeConstructor (c$,
+function (annotation, minColour, maxColour, aboveThreshold) {
+Clazz.superConstructor (this, jalview.schemes.AnnotationColourGradient, []);
+this.annotation = annotation;
+this.aboveAnnotationThreshold = aboveThreshold;
+if (aboveThreshold != -1 && annotation.threshold != null) {
+this.annotationThreshold = annotation.threshold;
+}this.r1 = minColour.getRed ();
+this.g1 = minColour.getGreen ();
+this.b1 = minColour.getBlue ();
+this.rr = maxColour.getRed () - this.r1;
+this.gg = maxColour.getGreen () - this.g1;
+this.bb = maxColour.getBlue () - this.b1;
+this.noGradient = false;
+this.aamax = annotation.graphMax;
+this.aamin = annotation.graphMin;
+if (annotation.isRNA ()) {
+jalview.schemes.ColourSchemeProperty.initRnaHelicesShading (1 + Clazz.floatToInt (this.aamax));
+}}, "jalview.datamodel.AlignmentAnnotation,java.awt.Color,java.awt.Color,~N");
+Clazz.defineMethod (c$, "alignmentChanged",
+function (alignment, hiddenReps) {
+Clazz.superCall (this, jalview.schemes.AnnotationColourGradient, "alignmentChanged", [alignment, hiddenReps]);
+if (this.seqAssociated && this.annotation.getCalcId () != null) {
+if (this.seqannot != null) {
+this.seqannot.clear ();
+} else {
+this.seqannot = new java.util.IdentityHashMap ();
+}var alcontext = Clazz.instanceOf (alignment, jalview.datamodel.AlignmentI) ? alignment : alignment.getContext ();
+var f = true;
+var rna = false;
+for (var alan, $alan = alcontext.findAnnotation (this.annotation.getCalcId ()).iterator (); $alan.hasNext () && ((alan = $alan.next ()) || true);) {
+if (alan.sequenceRef != null && (alan.label != null && this.annotation != null && alan.label.equals (this.annotation.label))) {
+if (!rna && alan.isRNA ()) {
+rna = true;
+}this.seqannot.put (alan.sequenceRef, alan);
+if (f || alan.graphMax > this.aamax) {
+this.aamax = alan.graphMax;
+}if (f || alan.graphMin < this.aamin) {
+this.aamin = alan.graphMin;
+}f = false;
+}}
+if (rna) {
+jalview.schemes.ColourSchemeProperty.initRnaHelicesShading (1 + Clazz.floatToInt (this.aamax));
+}}}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.defineMethod (c$, "getAnnotation",
+function () {
+return this.annotation.label;
+});
+Clazz.defineMethod (c$, "getAboveThreshold",
+function () {
+return this.aboveAnnotationThreshold;
+});
+Clazz.defineMethod (c$, "getAnnotationThreshold",
+function () {
+if (this.annotationThreshold == null) {
+return 0;
+} else {
+return this.annotationThreshold.value;
+}});
+Clazz.defineMethod (c$, "getMinColour",
+function () {
+return new java.awt.Color (Clazz.floatToInt (this.r1), Clazz.floatToInt (this.g1), Clazz.floatToInt (this.b1));
+});
+Clazz.defineMethod (c$, "getMaxColour",
+function () {
+return new java.awt.Color (Clazz.floatToInt (this.r1 + this.rr), Clazz.floatToInt (this.g1 + this.gg), Clazz.floatToInt (this.b1 + this.bb));
+});
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return java.awt.Color.red;
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+var currentColour = java.awt.Color.white;
+var annotation = (this.seqAssociated && this.seqannot != null ? this.seqannot.get (seq) : this.annotation);
+if (annotation == null) {
+return currentColour;
+}if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
+if (annotation.annotations != null && j < annotation.annotations.length && annotation.annotations[j] != null && !jalview.util.Comparison.isGap (c)) {
+var aj = annotation.annotations[j];
+if (this.aboveAnnotationThreshold == -1 || (this.annotationThreshold != null && (this.aboveAnnotationThreshold == 1 ? aj.value >= this.annotationThreshold.value : aj.value <= this.annotationThreshold.value))) {
+if (this.predefinedColours && aj.colour != null && !aj.colour.equals (java.awt.Color.black)) {
+currentColour = aj.colour;
+} else if (annotation.hasIcons && annotation.graph == 0) {
+if (aj.secondaryStructure > ' ' && aj.secondaryStructure != '.' && aj.secondaryStructure != '-') {
+if (this.colourScheme != null) {
+currentColour = this.colourScheme.findColour (c, j, seq);
+} else {
+if (annotation.isRNA ()) {
+currentColour = jalview.schemes.ColourSchemeProperty.rnaHelices[Clazz.floatToInt (aj.value)];
+} else {
+currentColour = annotation.annotations[j].secondaryStructure == 'H' ? jalview.renderer.AnnotationRenderer.HELIX_COLOUR : annotation.annotations[j].secondaryStructure == 'E' ? jalview.renderer.AnnotationRenderer.SHEET_COLOUR : jalview.renderer.AnnotationRenderer.STEM_COLOUR;
+}}} else {
+return java.awt.Color.white;
+}} else if (this.noGradient) {
+if (this.colourScheme != null) {
+currentColour = this.colourScheme.findColour (c, j, seq);
+} else {
+if (aj.colour != null) {
+currentColour = aj.colour;
+}}} else {
+currentColour = this.shadeCalculation (annotation, j);
+}}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}}}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "shadeCalculation",
+($fz = function (annotation, j) {
+var range = 1;
+if (this.thresholdIsMinMax && annotation.threshold != null && this.aboveAnnotationThreshold == 1 && annotation.annotations[j].value >= annotation.threshold.value) {
+range = (annotation.annotations[j].value - annotation.threshold.value) / (annotation.graphMax - annotation.threshold.value);
+} else if (this.thresholdIsMinMax && annotation.threshold != null && this.aboveAnnotationThreshold == 0 && annotation.annotations[j].value >= annotation.graphMin) {
+range = (annotation.annotations[j].value - annotation.graphMin) / (annotation.threshold.value - annotation.graphMin);
+} else {
+if (annotation.graphMax != annotation.graphMin) {
+range = (annotation.annotations[j].value - annotation.graphMin) / (annotation.graphMax - annotation.graphMin);
+} else {
+range = 0;
+}}var dr = Clazz.floatToInt (this.rr * range + this.r1);
+var dg = Clazz.floatToInt (this.gg * range + this.g1);
+var db = Clazz.floatToInt (this.bb * range + this.b1);
+return new java.awt.Color (dr, dg, db);
+}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation,~N");
+Clazz.defineMethod (c$, "isPredefinedColours",
+function () {
+return this.predefinedColours;
+});
+Clazz.defineMethod (c$, "setPredefinedColours",
+function (predefinedColours) {
+this.predefinedColours = predefinedColours;
+}, "~B");
+Clazz.defineMethod (c$, "isSeqAssociated",
+function () {
+return this.seqAssociated;
+});
+Clazz.defineMethod (c$, "setSeqAssociated",
+function (sassoc) {
+this.seqAssociated = sassoc;
+}, "~B");
+Clazz.defineStatics (c$,
+"NO_THRESHOLD", -1,
+"BELOW_THRESHOLD", 0,
+"ABOVE_THRESHOLD", 1);
+});
diff --git a/bin/jalview/schemes/Blosum62ColourScheme.class b/bin/jalview/schemes/Blosum62ColourScheme.class
index f864598..17dd259 100644
Binary files a/bin/jalview/schemes/Blosum62ColourScheme.class and b/bin/jalview/schemes/Blosum62ColourScheme.class differ
diff --git a/bin/jalview/schemes/Blosum62ColourScheme.js b/bin/jalview/schemes/Blosum62ColourScheme.js
index 3268bc7..87c4a51 100644
--- a/bin/jalview/schemes/Blosum62ColourScheme.js
+++ b/bin/jalview/schemes/Blosum62ColourScheme.js
@@ -1,37 +1,37 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.Blosum62ColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "Blosum62ColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.defineMethod (c$, "findColour",
-function (res, j, seq) {
-if ('a' <= res && res <= 'z') {
-res = String.fromCharCode (res.charCodeAt (0) - (32));
-}if (this.consensus == null || j >= this.consensus.length || this.consensus[j] == null || (this.threshold != 0 && !this.aboveThreshold (res, j))) {
-return java.awt.Color.white;
-}var currentColour;
-if (!jalview.util.Comparison.isGap (res)) {
-var max = this.consensus[j].get ("R");
-if (max.indexOf (res) > -1) {
-currentColour = new java.awt.Color (154, 154, 255);
-} else {
-var c = 0;
-var max_aa = 0;
-var n = max.length;
-do {
-c += jalview.schemes.ResidueProperties.getBLOSUM62 (max.charAt (max_aa), res);
-} while (++max_aa < n);
-if (c > 0) {
-currentColour = new java.awt.Color (204, 204, 255);
-} else {
-currentColour = java.awt.Color.white;
-}}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}} else {
-return java.awt.Color.white;
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "applyTo",
-function (sg, hiddenRepSequences) {
-var newcs = Clazz.superCall (this, jalview.schemes.Blosum62ColourScheme, "applyTo", [sg, hiddenRepSequences]);
-return newcs;
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.Blosum62ColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "Blosum62ColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.defineMethod (c$, "findColour",
+function (res, j, seq) {
+if ('a' <= res && res <= 'z') {
+res = String.fromCharCode (res.charCodeAt (0) - (32));
+}if (this.consensus == null || j >= this.consensus.length || this.consensus[j] == null || (this.threshold != 0 && !this.aboveThreshold (res, j))) {
+return java.awt.Color.white;
+}var currentColour;
+if (!jalview.util.Comparison.isGap (res)) {
+var max = this.consensus[j].get ("R");
+if (max.indexOf (res) > -1) {
+currentColour = new java.awt.Color (154, 154, 255);
+} else {
+var c = 0;
+var max_aa = 0;
+var n = max.length;
+do {
+c += jalview.schemes.ResidueProperties.getBLOSUM62 (max.charAt (max_aa), res);
+} while (++max_aa < n);
+if (c > 0) {
+currentColour = new java.awt.Color (204, 204, 255);
+} else {
+currentColour = java.awt.Color.white;
+}}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}} else {
+return java.awt.Color.white;
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "applyTo",
+function (sg, hiddenRepSequences) {
+var newcs = Clazz.superCall (this, jalview.schemes.Blosum62ColourScheme, "applyTo", [sg, hiddenRepSequences]);
+return newcs;
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+});
diff --git a/bin/jalview/schemes/BuriedColourScheme.js b/bin/jalview/schemes/BuriedColourScheme.js
index fa820e3..0ca91cd 100644
--- a/bin/jalview/schemes/BuriedColourScheme.js
+++ b/bin/jalview/schemes/BuriedColourScheme.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.BuriedColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "BuriedColourScheme", jalview.schemes.ScoreColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.BuriedColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.buried, 0.05, 4.6]);
-});
-Clazz.overrideMethod (c$, "makeColour",
-function (c) {
-return new java.awt.Color (0, (1.0 - c), c);
-}, "~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.BuriedColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "BuriedColourScheme", jalview.schemes.ScoreColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.BuriedColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.buried, 0.05, 4.6]);
+});
+Clazz.overrideMethod (c$, "makeColour",
+function (c) {
+return new java.awt.Color (0, (1.0 - c), c);
+}, "~N");
+});
diff --git a/bin/jalview/schemes/ClustalxColourScheme.js b/bin/jalview/schemes/ClustalxColourScheme.js
index 3897463..0556777 100644
--- a/bin/jalview/schemes/ClustalxColourScheme.js
+++ b/bin/jalview/schemes/ClustalxColourScheme.js
@@ -1,237 +1,237 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme", "java.util.HashMap"], ["jalview.schemes.ConsensusColour", "$.ClustalxColourScheme"], ["jalview.schemes.Consensus", "$.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.cons2 = null;
-this.colours = null;
-this.residueColour = null;
-this.size = 0;
-this.conses = null;
-this.includeGaps = true;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "ClustalxColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.prepareFields (c$, function () {
-this.conses = new Array (32);
-});
-Clazz.makeConstructor (c$,
-function (alignment, hiddenReps) {
-Clazz.superConstructor (this, jalview.schemes.ClustalxColourScheme, []);
-this.alignmentChanged (alignment, hiddenReps);
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.overrideMethod (c$, "alignmentChanged",
-function (alignment, hiddenReps) {
-var maxWidth = alignment.getWidth ();
-var seqs = alignment.getSequences (hiddenReps);
-this.cons2 = Clazz.newIntArray (maxWidth, 24, 0);
-this.includeGaps = this.isIncludeGaps ();
-var start = 0;
-for (var j = 0; j < 24; j++) {
-for (var i = 0; i < maxWidth; i++) {
-this.cons2[i][j] = 0;
-}
-}
-var res;
-var i;
-var j = 0;
-var seq;
-for (var sq, $sq = seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
-seq = sq.getSequence ();
-var end_j = seq.length - 1;
-for (i = start; i <= end_j; i++) {
-if ((seq.length - 1) < i) {
-res = 23;
-} else {
-res = jalview.schemes.ResidueProperties.aaIndex[seq[i].charCodeAt (0)];
-}this.cons2[i][res]++;
-}
-j++;
-}
-this.size = seqs.size ();
-this.makeColours ();
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.defineMethod (c$, "makeColours",
-function () {
-this.conses[0] = new jalview.schemes.Consensus ("WLVIMAFCYHP", 60);
-this.conses[1] = new jalview.schemes.Consensus ("WLVIMAFCYHP", 80);
-this.conses[2] = new jalview.schemes.Consensus ("ED", 50);
-this.conses[3] = new jalview.schemes.Consensus ("KR", 60);
-this.conses[4] = new jalview.schemes.Consensus ("G", 50);
-this.conses[5] = new jalview.schemes.Consensus ("N", 50);
-this.conses[6] = new jalview.schemes.Consensus ("QE", 50);
-this.conses[7] = new jalview.schemes.Consensus ("P", 50);
-this.conses[8] = new jalview.schemes.Consensus ("TS", 50);
-this.conses[26] = new jalview.schemes.Consensus ("A", 85);
-this.conses[27] = new jalview.schemes.Consensus ("C", 85);
-this.conses[10] = new jalview.schemes.Consensus ("E", 85);
-this.conses[11] = new jalview.schemes.Consensus ("F", 85);
-this.conses[12] = new jalview.schemes.Consensus ("G", 85);
-this.conses[13] = new jalview.schemes.Consensus ("H", 85);
-this.conses[14] = new jalview.schemes.Consensus ("I", 85);
-this.conses[15] = new jalview.schemes.Consensus ("L", 85);
-this.conses[16] = new jalview.schemes.Consensus ("M", 85);
-this.conses[17] = new jalview.schemes.Consensus ("N", 85);
-this.conses[18] = new jalview.schemes.Consensus ("P", 85);
-this.conses[19] = new jalview.schemes.Consensus ("Q", 85);
-this.conses[20] = new jalview.schemes.Consensus ("R", 85);
-this.conses[21] = new jalview.schemes.Consensus ("S", 85);
-this.conses[22] = new jalview.schemes.Consensus ("T", 85);
-this.conses[23] = new jalview.schemes.Consensus ("V", 85);
-this.conses[24] = new jalview.schemes.Consensus ("W", 85);
-this.conses[25] = new jalview.schemes.Consensus ("Y", 85);
-this.conses[28] = new jalview.schemes.Consensus ("K", 85);
-this.conses[29] = new jalview.schemes.Consensus ("D", 85);
-this.conses[30] = new jalview.schemes.Consensus ("G", 0);
-this.conses[31] = new jalview.schemes.Consensus ("P", 0);
-this.colours = new Array (11);
-var tmp8 = new Array (1);
-tmp8[0] = this.conses[30];
-this.colours[7] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.ORANGE), tmp8);
-var tmp9 = new Array (1);
-tmp9[0] = this.conses[31];
-this.colours[8] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.YELLOW), tmp9);
-var tmp10 = new Array (1);
-tmp10[0] = this.conses[27];
-this.colours[9] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.PINK), tmp8);
-var tmp1 = new Array (14);
-tmp1[0] = this.conses[0];
-tmp1[1] = this.conses[1];
-tmp1[2] = this.conses[26];
-tmp1[3] = this.conses[27];
-tmp1[4] = this.conses[11];
-tmp1[5] = this.conses[13];
-tmp1[6] = this.conses[14];
-tmp1[7] = this.conses[15];
-tmp1[8] = this.conses[16];
-tmp1[9] = this.conses[23];
-tmp1[10] = this.conses[24];
-tmp1[11] = this.conses[25];
-tmp1[12] = this.conses[18];
-tmp1[13] = this.conses[19];
-this.colours[0] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.BLUE), tmp1);
-this.colours[10] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.CYAN), tmp1);
-var tmp2 = new Array (5);
-tmp2[0] = this.conses[8];
-tmp2[1] = this.conses[21];
-tmp2[2] = this.conses[22];
-tmp2[3] = this.conses[0];
-tmp2[4] = this.conses[1];
-this.colours[1] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.GREEN), tmp2);
-var tmp3 = new Array (3);
-tmp3[0] = this.conses[17];
-tmp3[1] = this.conses[29];
-tmp3[2] = this.conses[5];
-this.colours[2] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.GREEN), tmp3);
-var tmp4 = new Array (6);
-tmp4[0] = this.conses[6];
-tmp4[1] = this.conses[19];
-tmp4[2] = this.conses[22];
-tmp4[3] = this.conses[3];
-tmp4[4] = this.conses[28];
-tmp4[5] = this.conses[20];
-this.colours[3] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.GREEN), tmp4);
-var tmp5 = new Array (4);
-tmp5[0] = this.conses[3];
-tmp5[1] = this.conses[28];
-tmp5[2] = this.conses[20];
-tmp5[3] = this.conses[19];
-this.colours[4] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.RED), tmp5);
-var tmp6 = new Array (6);
-tmp6[0] = this.conses[3];
-tmp6[1] = this.conses[29];
-tmp6[2] = this.conses[10];
-tmp6[3] = this.conses[6];
-tmp6[4] = this.conses[19];
-tmp6[5] = this.conses[2];
-this.colours[5] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.MAGENTA), tmp6);
-var tmp7 = new Array (5);
-tmp7[0] = this.conses[3];
-tmp7[1] = this.conses[29];
-tmp7[2] = this.conses[10];
-tmp7[3] = this.conses[17];
-tmp7[4] = this.conses[2];
-this.colours[6] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.MAGENTA), tmp7);
-this.residueColour = new Array (20);
-this.residueColour[0] = this.colours[0];
-this.residueColour[1] = this.colours[4];
-this.residueColour[2] = this.colours[2];
-this.residueColour[3] = this.colours[6];
-this.residueColour[4] = this.colours[0];
-this.residueColour[5] = this.colours[3];
-this.residueColour[6] = this.colours[5];
-this.residueColour[7] = this.colours[7];
-this.residueColour[8] = this.colours[10];
-this.residueColour[9] = this.colours[0];
-this.residueColour[10] = this.colours[0];
-this.residueColour[11] = this.colours[4];
-this.residueColour[12] = this.colours[0];
-this.residueColour[13] = this.colours[0];
-this.residueColour[14] = this.colours[8];
-this.residueColour[15] = this.colours[1];
-this.residueColour[16] = this.colours[1];
-this.residueColour[17] = this.colours[0];
-this.residueColour[18] = this.colours[10];
-this.residueColour[19] = this.colours[0];
-});
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return java.awt.Color.pink;
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-var currentColour;
-if (this.cons2.length <= j || (this.includeGaps && this.threshold != 0 && !this.aboveThreshold (c, j))) {
-return java.awt.Color.white;
-}var i = jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)];
-currentColour = java.awt.Color.white;
-if (i > 19) {
-return currentColour;
-}for (var k = 0; k < this.residueColour[i].conses.length; k++) {
-if (this.residueColour[i].conses[k].isConserved (this.cons2, j, this.size, this.includeGaps)) {
-currentColour = this.residueColour[i].c;
-}}
-if (i == 4) {
-if (this.conses[27].isConserved (this.cons2, j, this.size, this.includeGaps)) {
-currentColour = jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.PINK);
-}}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "isIncludeGaps",
-function () {
-return this.includeGaps;
-});
-Clazz.defineMethod (c$, "setIncludeGaps",
-function (includeGaps) {
-this.includeGaps = includeGaps;
-}, "~B");
-Clazz.overrideMethod (c$, "applyTo",
-function (sg, hiddenRepSequences) {
-var css = new jalview.schemes.ClustalxColourScheme (sg, hiddenRepSequences);
-css.includeGaps = this.includeGaps;
-return css;
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.defineStatics (c$,
-"EIGHTY_FIVE", 85,
-"FIFTY", 50,
-"EIGHTY", 80,
-"SIXTY", 60);
-c$.colhash = c$.prototype.colhash = new java.util.HashMap ();
-{
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.RED, new java.awt.Color (0.9, 0.2, 0.1));
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.BLUE, new java.awt.Color (0.5, 0.7, 0.9));
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.GREEN, new java.awt.Color (0.1, 0.8, 0.1));
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.ORANGE, new java.awt.Color (0.9, 0.6, 0.3));
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.CYAN, new java.awt.Color (0.1, 0.7, 0.7));
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.PINK, new java.awt.Color (0.9, 0.5, 0.5));
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.MAGENTA, new java.awt.Color (0.8, 0.3, 0.8));
-jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.YELLOW, new java.awt.Color (0.8, 0.8, 0.0));
-}c$ = Clazz.decorateAsClass (function () {
-this.conses = null;
-this.c = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "ConsensusColour");
-Clazz.makeConstructor (c$,
-function (c, conses) {
-this.conses = conses;
-this.c = c;
-}, "java.awt.Color,~A");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme", "java.util.HashMap"], ["jalview.schemes.ConsensusColour", "$.ClustalxColourScheme"], ["jalview.schemes.Consensus", "$.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.cons2 = null;
+this.colours = null;
+this.residueColour = null;
+this.size = 0;
+this.conses = null;
+this.includeGaps = true;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "ClustalxColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.prepareFields (c$, function () {
+this.conses = new Array (32);
+});
+Clazz.makeConstructor (c$,
+function (alignment, hiddenReps) {
+Clazz.superConstructor (this, jalview.schemes.ClustalxColourScheme, []);
+this.alignmentChanged (alignment, hiddenReps);
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.overrideMethod (c$, "alignmentChanged",
+function (alignment, hiddenReps) {
+var maxWidth = alignment.getWidth ();
+var seqs = alignment.getSequences (hiddenReps);
+this.cons2 = Clazz.newIntArray (maxWidth, 24, 0);
+this.includeGaps = this.isIncludeGaps ();
+var start = 0;
+for (var j = 0; j < 24; j++) {
+for (var i = 0; i < maxWidth; i++) {
+this.cons2[i][j] = 0;
+}
+}
+var res;
+var i;
+var j = 0;
+var seq;
+for (var sq, $sq = seqs.iterator (); $sq.hasNext () && ((sq = $sq.next ()) || true);) {
+seq = sq.getSequence ();
+var end_j = seq.length - 1;
+for (i = start; i <= end_j; i++) {
+if ((seq.length - 1) < i) {
+res = 23;
+} else {
+res = jalview.schemes.ResidueProperties.aaIndex[seq[i].charCodeAt (0)];
+}this.cons2[i][res]++;
+}
+j++;
+}
+this.size = seqs.size ();
+this.makeColours ();
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.defineMethod (c$, "makeColours",
+function () {
+this.conses[0] = new jalview.schemes.Consensus ("WLVIMAFCYHP", 60);
+this.conses[1] = new jalview.schemes.Consensus ("WLVIMAFCYHP", 80);
+this.conses[2] = new jalview.schemes.Consensus ("ED", 50);
+this.conses[3] = new jalview.schemes.Consensus ("KR", 60);
+this.conses[4] = new jalview.schemes.Consensus ("G", 50);
+this.conses[5] = new jalview.schemes.Consensus ("N", 50);
+this.conses[6] = new jalview.schemes.Consensus ("QE", 50);
+this.conses[7] = new jalview.schemes.Consensus ("P", 50);
+this.conses[8] = new jalview.schemes.Consensus ("TS", 50);
+this.conses[26] = new jalview.schemes.Consensus ("A", 85);
+this.conses[27] = new jalview.schemes.Consensus ("C", 85);
+this.conses[10] = new jalview.schemes.Consensus ("E", 85);
+this.conses[11] = new jalview.schemes.Consensus ("F", 85);
+this.conses[12] = new jalview.schemes.Consensus ("G", 85);
+this.conses[13] = new jalview.schemes.Consensus ("H", 85);
+this.conses[14] = new jalview.schemes.Consensus ("I", 85);
+this.conses[15] = new jalview.schemes.Consensus ("L", 85);
+this.conses[16] = new jalview.schemes.Consensus ("M", 85);
+this.conses[17] = new jalview.schemes.Consensus ("N", 85);
+this.conses[18] = new jalview.schemes.Consensus ("P", 85);
+this.conses[19] = new jalview.schemes.Consensus ("Q", 85);
+this.conses[20] = new jalview.schemes.Consensus ("R", 85);
+this.conses[21] = new jalview.schemes.Consensus ("S", 85);
+this.conses[22] = new jalview.schemes.Consensus ("T", 85);
+this.conses[23] = new jalview.schemes.Consensus ("V", 85);
+this.conses[24] = new jalview.schemes.Consensus ("W", 85);
+this.conses[25] = new jalview.schemes.Consensus ("Y", 85);
+this.conses[28] = new jalview.schemes.Consensus ("K", 85);
+this.conses[29] = new jalview.schemes.Consensus ("D", 85);
+this.conses[30] = new jalview.schemes.Consensus ("G", 0);
+this.conses[31] = new jalview.schemes.Consensus ("P", 0);
+this.colours = new Array (11);
+var tmp8 = new Array (1);
+tmp8[0] = this.conses[30];
+this.colours[7] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.ORANGE), tmp8);
+var tmp9 = new Array (1);
+tmp9[0] = this.conses[31];
+this.colours[8] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.YELLOW), tmp9);
+var tmp10 = new Array (1);
+tmp10[0] = this.conses[27];
+this.colours[9] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.PINK), tmp8);
+var tmp1 = new Array (14);
+tmp1[0] = this.conses[0];
+tmp1[1] = this.conses[1];
+tmp1[2] = this.conses[26];
+tmp1[3] = this.conses[27];
+tmp1[4] = this.conses[11];
+tmp1[5] = this.conses[13];
+tmp1[6] = this.conses[14];
+tmp1[7] = this.conses[15];
+tmp1[8] = this.conses[16];
+tmp1[9] = this.conses[23];
+tmp1[10] = this.conses[24];
+tmp1[11] = this.conses[25];
+tmp1[12] = this.conses[18];
+tmp1[13] = this.conses[19];
+this.colours[0] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.BLUE), tmp1);
+this.colours[10] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.CYAN), tmp1);
+var tmp2 = new Array (5);
+tmp2[0] = this.conses[8];
+tmp2[1] = this.conses[21];
+tmp2[2] = this.conses[22];
+tmp2[3] = this.conses[0];
+tmp2[4] = this.conses[1];
+this.colours[1] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.GREEN), tmp2);
+var tmp3 = new Array (3);
+tmp3[0] = this.conses[17];
+tmp3[1] = this.conses[29];
+tmp3[2] = this.conses[5];
+this.colours[2] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.GREEN), tmp3);
+var tmp4 = new Array (6);
+tmp4[0] = this.conses[6];
+tmp4[1] = this.conses[19];
+tmp4[2] = this.conses[22];
+tmp4[3] = this.conses[3];
+tmp4[4] = this.conses[28];
+tmp4[5] = this.conses[20];
+this.colours[3] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.GREEN), tmp4);
+var tmp5 = new Array (4);
+tmp5[0] = this.conses[3];
+tmp5[1] = this.conses[28];
+tmp5[2] = this.conses[20];
+tmp5[3] = this.conses[19];
+this.colours[4] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.RED), tmp5);
+var tmp6 = new Array (6);
+tmp6[0] = this.conses[3];
+tmp6[1] = this.conses[29];
+tmp6[2] = this.conses[10];
+tmp6[3] = this.conses[6];
+tmp6[4] = this.conses[19];
+tmp6[5] = this.conses[2];
+this.colours[5] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.MAGENTA), tmp6);
+var tmp7 = new Array (5);
+tmp7[0] = this.conses[3];
+tmp7[1] = this.conses[29];
+tmp7[2] = this.conses[10];
+tmp7[3] = this.conses[17];
+tmp7[4] = this.conses[2];
+this.colours[6] = new jalview.schemes.ConsensusColour (jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.MAGENTA), tmp7);
+this.residueColour = new Array (20);
+this.residueColour[0] = this.colours[0];
+this.residueColour[1] = this.colours[4];
+this.residueColour[2] = this.colours[2];
+this.residueColour[3] = this.colours[6];
+this.residueColour[4] = this.colours[0];
+this.residueColour[5] = this.colours[3];
+this.residueColour[6] = this.colours[5];
+this.residueColour[7] = this.colours[7];
+this.residueColour[8] = this.colours[10];
+this.residueColour[9] = this.colours[0];
+this.residueColour[10] = this.colours[0];
+this.residueColour[11] = this.colours[4];
+this.residueColour[12] = this.colours[0];
+this.residueColour[13] = this.colours[0];
+this.residueColour[14] = this.colours[8];
+this.residueColour[15] = this.colours[1];
+this.residueColour[16] = this.colours[1];
+this.residueColour[17] = this.colours[0];
+this.residueColour[18] = this.colours[10];
+this.residueColour[19] = this.colours[0];
+});
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return java.awt.Color.pink;
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+var currentColour;
+if (this.cons2.length <= j || (this.includeGaps && this.threshold != 0 && !this.aboveThreshold (c, j))) {
+return java.awt.Color.white;
+}var i = jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)];
+currentColour = java.awt.Color.white;
+if (i > 19) {
+return currentColour;
+}for (var k = 0; k < this.residueColour[i].conses.length; k++) {
+if (this.residueColour[i].conses[k].isConserved (this.cons2, j, this.size, this.includeGaps)) {
+currentColour = this.residueColour[i].c;
+}}
+if (i == 4) {
+if (this.conses[27].isConserved (this.cons2, j, this.size, this.includeGaps)) {
+currentColour = jalview.schemes.ClustalxColourScheme.colhash.get (java.awt.Color.PINK);
+}}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "isIncludeGaps",
+function () {
+return this.includeGaps;
+});
+Clazz.defineMethod (c$, "setIncludeGaps",
+function (includeGaps) {
+this.includeGaps = includeGaps;
+}, "~B");
+Clazz.overrideMethod (c$, "applyTo",
+function (sg, hiddenRepSequences) {
+var css = new jalview.schemes.ClustalxColourScheme (sg, hiddenRepSequences);
+css.includeGaps = this.includeGaps;
+return css;
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.defineStatics (c$,
+"EIGHTY_FIVE", 85,
+"FIFTY", 50,
+"EIGHTY", 80,
+"SIXTY", 60);
+c$.colhash = c$.prototype.colhash = new java.util.HashMap ();
+{
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.RED, new java.awt.Color (0.9, 0.2, 0.1));
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.BLUE, new java.awt.Color (0.5, 0.7, 0.9));
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.GREEN, new java.awt.Color (0.1, 0.8, 0.1));
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.ORANGE, new java.awt.Color (0.9, 0.6, 0.3));
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.CYAN, new java.awt.Color (0.1, 0.7, 0.7));
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.PINK, new java.awt.Color (0.9, 0.5, 0.5));
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.MAGENTA, new java.awt.Color (0.8, 0.3, 0.8));
+jalview.schemes.ClustalxColourScheme.colhash.put (java.awt.Color.YELLOW, new java.awt.Color (0.8, 0.8, 0.0));
+}c$ = Clazz.decorateAsClass (function () {
+this.conses = null;
+this.c = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "ConsensusColour");
+Clazz.makeConstructor (c$,
+function (c, conses) {
+this.conses = conses;
+this.c = c;
+}, "java.awt.Color,~A");
+});
diff --git a/bin/jalview/schemes/ColourSchemeI.js b/bin/jalview/schemes/ColourSchemeI.js
index 9777117..b82090d 100644
--- a/bin/jalview/schemes/ColourSchemeI.js
+++ b/bin/jalview/schemes/ColourSchemeI.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.declareInterface (jalview.schemes, "ColourSchemeI");
+Clazz.declarePackage ("jalview.schemes");
+Clazz.declareInterface (jalview.schemes, "ColourSchemeI");
diff --git a/bin/jalview/schemes/ColourSchemeProperty.js b/bin/jalview/schemes/ColourSchemeProperty.js
index 352a373..eb55454 100644
--- a/bin/jalview/schemes/ColourSchemeProperty.js
+++ b/bin/jalview/schemes/ColourSchemeProperty.js
@@ -1,292 +1,292 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (null, "jalview.schemes.ColourSchemeProperty", ["jalview.schemes.Blosum62ColourScheme", "$.BuriedColourScheme", "$.ClustalxColourScheme", "$.HelixColourScheme", "$.HydrophobicColourScheme", "$.NucleotideColourScheme", "$.PIDColourScheme", "$.PurinePyrimidineColourScheme", "$.RNAHelicesColour", "$.StrandColourScheme", "$.TCoffeeColourScheme", "$.TaylorColourScheme", "$.TurnColourScheme", "$.UserColourScheme", "$.ZappoColourScheme", "jalview.util.ColorUtils", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "ColourSchemeProperty");
-c$.getColourIndexFromName = Clazz.defineMethod (c$, "getColourIndexFromName",
-function (name) {
-var ret = -1;
-if (name.equalsIgnoreCase ("Clustal")) {
-ret = 2;
-} else if (name.equalsIgnoreCase ("Blosum62")) {
-ret = 3;
-} else if (name.equalsIgnoreCase ("% Identity")) {
-ret = 4;
-} else if (name.equalsIgnoreCase ("Zappo")) {
-ret = 5;
-} else if (name.equalsIgnoreCase ("Taylor")) {
-ret = 6;
-} else if (name.equalsIgnoreCase ("Hydrophobic")) {
-ret = 7;
-} else if (name.equalsIgnoreCase ("Helix Propensity")) {
-ret = 8;
-} else if (name.equalsIgnoreCase ("Strand Propensity")) {
-ret = 9;
-} else if (name.equalsIgnoreCase ("Turn Propensity")) {
-ret = 10;
-} else if (name.equalsIgnoreCase ("Buried Index")) {
-ret = 11;
-} else if (name.equalsIgnoreCase ("Nucleotide")) {
-ret = 12;
-} else if (name.equalsIgnoreCase ("T-Coffee Scores")) {
-ret = 15;
-} else if (name.equalsIgnoreCase ("User Defined")) {
-ret = 0;
-} else if (name.equalsIgnoreCase ("None")) {
-ret = 1;
-} else if (name.equalsIgnoreCase ("Purine/Pyrimidine")) {
-ret = 13;
-} else if (name.equalsIgnoreCase ("RNA Interaction type")) {
-ret = 17;
-} else if (name.equalsIgnoreCase ("RNA Helices")) {
-ret = 16;
-}return ret;
-}, "~S");
-c$.getColourName = Clazz.defineMethod (c$, "getColourName",
-function (cs) {
-var index = 1;
-if (Clazz.instanceOf (cs, jalview.schemes.ClustalxColourScheme)) {
-index = 2;
-} else if (Clazz.instanceOf (cs, jalview.schemes.Blosum62ColourScheme)) {
-index = 3;
-} else if (Clazz.instanceOf (cs, jalview.schemes.PIDColourScheme)) {
-index = 4;
-} else if (Clazz.instanceOf (cs, jalview.schemes.ZappoColourScheme)) {
-index = 5;
-} else if (Clazz.instanceOf (cs, jalview.schemes.TaylorColourScheme)) {
-index = 6;
-} else if (Clazz.instanceOf (cs, jalview.schemes.HydrophobicColourScheme)) {
-index = 7;
-} else if (Clazz.instanceOf (cs, jalview.schemes.HelixColourScheme)) {
-index = 8;
-} else if (Clazz.instanceOf (cs, jalview.schemes.StrandColourScheme)) {
-index = 9;
-} else if (Clazz.instanceOf (cs, jalview.schemes.TurnColourScheme)) {
-index = 10;
-} else if (Clazz.instanceOf (cs, jalview.schemes.BuriedColourScheme)) {
-index = 11;
-} else if (Clazz.instanceOf (cs, jalview.schemes.NucleotideColourScheme)) {
-index = 12;
-} else if (Clazz.instanceOf (cs, jalview.schemes.PurinePyrimidineColourScheme)) {
-index = 13;
-} else if (Clazz.instanceOf (cs, jalview.schemes.TCoffeeColourScheme)) {
-index = 15;
-} else if (Clazz.instanceOf (cs, jalview.schemes.RNAHelicesColour)) {
-index = 16;
-} else if (Clazz.instanceOf (cs, jalview.schemes.UserColourScheme)) {
-if (((cs).getName () != null) && ((cs).getName ().length > 0)) {
-return (cs).getName ();
-}index = 0;
-}return jalview.schemes.ColourSchemeProperty.getColourName (index);
-}, "jalview.schemes.ColourSchemeI");
-c$.getColourName = Clazz.defineMethod (c$, "getColourName",
-function (index) {
-var ret = null;
-switch (index) {
-case 2:
-ret = "Clustal";
-break;
-case 3:
-ret = "Blosum62";
-break;
-case 4:
-ret = "% Identity";
-break;
-case 5:
-ret = "Zappo";
-break;
-case 6:
-ret = "Taylor";
-break;
-case 7:
-ret = "Hydrophobic";
-break;
-case 8:
-ret = "Helix Propensity";
-break;
-case 9:
-ret = "Strand Propensity";
-break;
-case 10:
-ret = "Turn Propensity";
-break;
-case 11:
-ret = "Buried Index";
-break;
-case 12:
-ret = "Nucleotide";
-break;
-case 13:
-ret = "Purine/Pyrimidine";
-break;
-case 15:
-ret = "T-Coffee Scores";
-break;
-case 17:
-ret = "RNA Interaction type";
-break;
-case 16:
-ret = "RNA Helices";
-break;
-case 0:
-ret = "User Defined";
-break;
-default:
-ret = "None";
-break;
-}
-return ret;
-}, "~N");
-c$.getColour = Clazz.defineMethod (c$, "getColour",
-function (alignment, name) {
-var colindex = jalview.schemes.ColourSchemeProperty.getColourIndexFromName (name);
-if (colindex == -1) {
-if (name.indexOf ('=') == -1) {
-try {
-return new jalview.schemes.UserColourScheme (name);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-} else {
-try {
-var ucs = new jalview.schemes.UserColourScheme ("white");
-ucs.parseAppletParameter (name);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-}}return jalview.schemes.ColourSchemeProperty.getColour (alignment, jalview.schemes.ColourSchemeProperty.getColourIndexFromName (name));
-}, "jalview.datamodel.AnnotatedCollectionI,~S");
-c$.getColour = Clazz.defineMethod (c$, "getColour",
-function (coll, index) {
-var cs = null;
-switch (index) {
-case 2:
-cs = new jalview.schemes.ClustalxColourScheme (coll, null);
-break;
-case 3:
-cs = new jalview.schemes.Blosum62ColourScheme ();
-break;
-case 4:
-cs = new jalview.schemes.PIDColourScheme ();
-break;
-case 5:
-cs = new jalview.schemes.ZappoColourScheme ();
-break;
-case 6:
-cs = new jalview.schemes.TaylorColourScheme ();
-break;
-case 7:
-cs = new jalview.schemes.HydrophobicColourScheme ();
-break;
-case 8:
-cs = new jalview.schemes.HelixColourScheme ();
-break;
-case 9:
-cs = new jalview.schemes.StrandColourScheme ();
-break;
-case 10:
-cs = new jalview.schemes.TurnColourScheme ();
-break;
-case 11:
-cs = new jalview.schemes.BuriedColourScheme ();
-break;
-case 12:
-cs = new jalview.schemes.NucleotideColourScheme ();
-break;
-case 13:
-cs = new jalview.schemes.PurinePyrimidineColourScheme ();
-break;
-case 15:
-cs = new jalview.schemes.TCoffeeColourScheme (coll);
-break;
-case 16:
-cs = new jalview.schemes.RNAHelicesColour (coll);
-break;
-case 0:
-var col = new Array (24);
-for (var i = 0; i < 24; i++) {
-col[i] = java.awt.Color.white;
-}
-cs = new jalview.schemes.UserColourScheme (col);
-break;
-default:
-break;
-}
-return cs;
-}, "jalview.datamodel.AnnotatedCollectionI,~N");
-c$.getAWTColorFromName = Clazz.defineMethod (c$, "getAWTColorFromName",
-function (name) {
-var col = null;
-name = name.toLowerCase ();
-if (name.equals ("black")) {
-col = java.awt.Color.black;
-} else if (name.equals ("blue")) {
-col = java.awt.Color.blue;
-} else if (name.equals ("cyan")) {
-col = java.awt.Color.cyan;
-} else if (name.equals ("darkGray")) {
-col = java.awt.Color.darkGray;
-} else if (name.equals ("gray")) {
-col = java.awt.Color.gray;
-} else if (name.equals ("green")) {
-col = java.awt.Color.green;
-} else if (name.equals ("lightGray")) {
-col = java.awt.Color.lightGray;
-} else if (name.equals ("magenta")) {
-col = java.awt.Color.magenta;
-} else if (name.equals ("orange")) {
-col = java.awt.Color.orange;
-} else if (name.equals ("pink")) {
-col = java.awt.Color.pink;
-} else if (name.equals ("red")) {
-col = java.awt.Color.red;
-} else if (name.equals ("white")) {
-col = java.awt.Color.white;
-} else if (name.equals ("yellow")) {
-col = java.awt.Color.yellow;
-}return col;
-}, "~S");
-c$.initRnaHelicesShading = Clazz.defineMethod (c$, "initRnaHelicesShading",
-function (n) {
-var j = 0;
-if (jalview.schemes.ColourSchemeProperty.rnaHelices == null) {
-jalview.schemes.ColourSchemeProperty.rnaHelices = new Array (n + 1);
-} else if (jalview.schemes.ColourSchemeProperty.rnaHelices != null && jalview.schemes.ColourSchemeProperty.rnaHelices.length <= n) {
-var t = new Array (n + 1);
-System.arraycopy (jalview.schemes.ColourSchemeProperty.rnaHelices, 0, t, 0, jalview.schemes.ColourSchemeProperty.rnaHelices.length);
-j = jalview.schemes.ColourSchemeProperty.rnaHelices.length;
-jalview.schemes.ColourSchemeProperty.rnaHelices = t;
-} else {
-return;
-}for (; j <= n; j++) {
-jalview.schemes.ColourSchemeProperty.rnaHelices[j] = jalview.util.ColorUtils.generateRandomColor (java.awt.Color.white);
-}
-}, "~N");
-Clazz.defineStatics (c$,
-"UNDEFINED", -1,
-"USER_DEFINED", 0,
-"NONE", 1,
-"CLUSTAL", 2,
-"BLOSUM", 3,
-"PID", 4,
-"ZAPPO", 5,
-"TAYLOR", 6,
-"HYDROPHOBIC", 7,
-"HELIX", 8,
-"STRAND", 9,
-"TURN", 10,
-"BURIED", 11,
-"NUCLEOTIDE", 12,
-"PURINEPYRIMIDINE", 13,
-"COVARIATION", 14,
-"TCOFFEE", 15,
-"RNAHELIX", 16,
-"RNAINTERACTION", 17,
-"FIRST_COLOUR", 1,
-"LAST_COLOUR", 17,
-"rnaHelices", null);
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (null, "jalview.schemes.ColourSchemeProperty", ["jalview.schemes.Blosum62ColourScheme", "$.BuriedColourScheme", "$.ClustalxColourScheme", "$.HelixColourScheme", "$.HydrophobicColourScheme", "$.NucleotideColourScheme", "$.PIDColourScheme", "$.PurinePyrimidineColourScheme", "$.RNAHelicesColour", "$.StrandColourScheme", "$.TCoffeeColourScheme", "$.TaylorColourScheme", "$.TurnColourScheme", "$.UserColourScheme", "$.ZappoColourScheme", "jalview.util.ColorUtils", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "ColourSchemeProperty");
+c$.getColourIndexFromName = Clazz.defineMethod (c$, "getColourIndexFromName",
+function (name) {
+var ret = -1;
+if (name.equalsIgnoreCase ("Clustal")) {
+ret = 2;
+} else if (name.equalsIgnoreCase ("Blosum62")) {
+ret = 3;
+} else if (name.equalsIgnoreCase ("% Identity")) {
+ret = 4;
+} else if (name.equalsIgnoreCase ("Zappo")) {
+ret = 5;
+} else if (name.equalsIgnoreCase ("Taylor")) {
+ret = 6;
+} else if (name.equalsIgnoreCase ("Hydrophobic")) {
+ret = 7;
+} else if (name.equalsIgnoreCase ("Helix Propensity")) {
+ret = 8;
+} else if (name.equalsIgnoreCase ("Strand Propensity")) {
+ret = 9;
+} else if (name.equalsIgnoreCase ("Turn Propensity")) {
+ret = 10;
+} else if (name.equalsIgnoreCase ("Buried Index")) {
+ret = 11;
+} else if (name.equalsIgnoreCase ("Nucleotide")) {
+ret = 12;
+} else if (name.equalsIgnoreCase ("T-Coffee Scores")) {
+ret = 15;
+} else if (name.equalsIgnoreCase ("User Defined")) {
+ret = 0;
+} else if (name.equalsIgnoreCase ("None")) {
+ret = 1;
+} else if (name.equalsIgnoreCase ("Purine/Pyrimidine")) {
+ret = 13;
+} else if (name.equalsIgnoreCase ("RNA Interaction type")) {
+ret = 17;
+} else if (name.equalsIgnoreCase ("RNA Helices")) {
+ret = 16;
+}return ret;
+}, "~S");
+c$.getColourName = Clazz.defineMethod (c$, "getColourName",
+function (cs) {
+var index = 1;
+if (Clazz.instanceOf (cs, jalview.schemes.ClustalxColourScheme)) {
+index = 2;
+} else if (Clazz.instanceOf (cs, jalview.schemes.Blosum62ColourScheme)) {
+index = 3;
+} else if (Clazz.instanceOf (cs, jalview.schemes.PIDColourScheme)) {
+index = 4;
+} else if (Clazz.instanceOf (cs, jalview.schemes.ZappoColourScheme)) {
+index = 5;
+} else if (Clazz.instanceOf (cs, jalview.schemes.TaylorColourScheme)) {
+index = 6;
+} else if (Clazz.instanceOf (cs, jalview.schemes.HydrophobicColourScheme)) {
+index = 7;
+} else if (Clazz.instanceOf (cs, jalview.schemes.HelixColourScheme)) {
+index = 8;
+} else if (Clazz.instanceOf (cs, jalview.schemes.StrandColourScheme)) {
+index = 9;
+} else if (Clazz.instanceOf (cs, jalview.schemes.TurnColourScheme)) {
+index = 10;
+} else if (Clazz.instanceOf (cs, jalview.schemes.BuriedColourScheme)) {
+index = 11;
+} else if (Clazz.instanceOf (cs, jalview.schemes.NucleotideColourScheme)) {
+index = 12;
+} else if (Clazz.instanceOf (cs, jalview.schemes.PurinePyrimidineColourScheme)) {
+index = 13;
+} else if (Clazz.instanceOf (cs, jalview.schemes.TCoffeeColourScheme)) {
+index = 15;
+} else if (Clazz.instanceOf (cs, jalview.schemes.RNAHelicesColour)) {
+index = 16;
+} else if (Clazz.instanceOf (cs, jalview.schemes.UserColourScheme)) {
+if (((cs).getName () != null) && ((cs).getName ().length > 0)) {
+return (cs).getName ();
+}index = 0;
+}return jalview.schemes.ColourSchemeProperty.getColourName (index);
+}, "jalview.schemes.ColourSchemeI");
+c$.getColourName = Clazz.defineMethod (c$, "getColourName",
+function (index) {
+var ret = null;
+switch (index) {
+case 2:
+ret = "Clustal";
+break;
+case 3:
+ret = "Blosum62";
+break;
+case 4:
+ret = "% Identity";
+break;
+case 5:
+ret = "Zappo";
+break;
+case 6:
+ret = "Taylor";
+break;
+case 7:
+ret = "Hydrophobic";
+break;
+case 8:
+ret = "Helix Propensity";
+break;
+case 9:
+ret = "Strand Propensity";
+break;
+case 10:
+ret = "Turn Propensity";
+break;
+case 11:
+ret = "Buried Index";
+break;
+case 12:
+ret = "Nucleotide";
+break;
+case 13:
+ret = "Purine/Pyrimidine";
+break;
+case 15:
+ret = "T-Coffee Scores";
+break;
+case 17:
+ret = "RNA Interaction type";
+break;
+case 16:
+ret = "RNA Helices";
+break;
+case 0:
+ret = "User Defined";
+break;
+default:
+ret = "None";
+break;
+}
+return ret;
+}, "~N");
+c$.getColour = Clazz.defineMethod (c$, "getColour",
+function (alignment, name) {
+var colindex = jalview.schemes.ColourSchemeProperty.getColourIndexFromName (name);
+if (colindex == -1) {
+if (name.indexOf ('=') == -1) {
+try {
+return new jalview.schemes.UserColourScheme (name);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+} else {
+try {
+var ucs = new jalview.schemes.UserColourScheme ("white");
+ucs.parseAppletParameter (name);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+}}return jalview.schemes.ColourSchemeProperty.getColour (alignment, jalview.schemes.ColourSchemeProperty.getColourIndexFromName (name));
+}, "jalview.datamodel.AnnotatedCollectionI,~S");
+c$.getColour = Clazz.defineMethod (c$, "getColour",
+function (coll, index) {
+var cs = null;
+switch (index) {
+case 2:
+cs = new jalview.schemes.ClustalxColourScheme (coll, null);
+break;
+case 3:
+cs = new jalview.schemes.Blosum62ColourScheme ();
+break;
+case 4:
+cs = new jalview.schemes.PIDColourScheme ();
+break;
+case 5:
+cs = new jalview.schemes.ZappoColourScheme ();
+break;
+case 6:
+cs = new jalview.schemes.TaylorColourScheme ();
+break;
+case 7:
+cs = new jalview.schemes.HydrophobicColourScheme ();
+break;
+case 8:
+cs = new jalview.schemes.HelixColourScheme ();
+break;
+case 9:
+cs = new jalview.schemes.StrandColourScheme ();
+break;
+case 10:
+cs = new jalview.schemes.TurnColourScheme ();
+break;
+case 11:
+cs = new jalview.schemes.BuriedColourScheme ();
+break;
+case 12:
+cs = new jalview.schemes.NucleotideColourScheme ();
+break;
+case 13:
+cs = new jalview.schemes.PurinePyrimidineColourScheme ();
+break;
+case 15:
+cs = new jalview.schemes.TCoffeeColourScheme (coll);
+break;
+case 16:
+cs = new jalview.schemes.RNAHelicesColour (coll);
+break;
+case 0:
+var col = new Array (24);
+for (var i = 0; i < 24; i++) {
+col[i] = java.awt.Color.white;
+}
+cs = new jalview.schemes.UserColourScheme (col);
+break;
+default:
+break;
+}
+return cs;
+}, "jalview.datamodel.AnnotatedCollectionI,~N");
+c$.getAWTColorFromName = Clazz.defineMethod (c$, "getAWTColorFromName",
+function (name) {
+var col = null;
+name = name.toLowerCase ();
+if (name.equals ("black")) {
+col = java.awt.Color.black;
+} else if (name.equals ("blue")) {
+col = java.awt.Color.blue;
+} else if (name.equals ("cyan")) {
+col = java.awt.Color.cyan;
+} else if (name.equals ("darkGray")) {
+col = java.awt.Color.darkGray;
+} else if (name.equals ("gray")) {
+col = java.awt.Color.gray;
+} else if (name.equals ("green")) {
+col = java.awt.Color.green;
+} else if (name.equals ("lightGray")) {
+col = java.awt.Color.lightGray;
+} else if (name.equals ("magenta")) {
+col = java.awt.Color.magenta;
+} else if (name.equals ("orange")) {
+col = java.awt.Color.orange;
+} else if (name.equals ("pink")) {
+col = java.awt.Color.pink;
+} else if (name.equals ("red")) {
+col = java.awt.Color.red;
+} else if (name.equals ("white")) {
+col = java.awt.Color.white;
+} else if (name.equals ("yellow")) {
+col = java.awt.Color.yellow;
+}return col;
+}, "~S");
+c$.initRnaHelicesShading = Clazz.defineMethod (c$, "initRnaHelicesShading",
+function (n) {
+var j = 0;
+if (jalview.schemes.ColourSchemeProperty.rnaHelices == null) {
+jalview.schemes.ColourSchemeProperty.rnaHelices = new Array (n + 1);
+} else if (jalview.schemes.ColourSchemeProperty.rnaHelices != null && jalview.schemes.ColourSchemeProperty.rnaHelices.length <= n) {
+var t = new Array (n + 1);
+System.arraycopy (jalview.schemes.ColourSchemeProperty.rnaHelices, 0, t, 0, jalview.schemes.ColourSchemeProperty.rnaHelices.length);
+j = jalview.schemes.ColourSchemeProperty.rnaHelices.length;
+jalview.schemes.ColourSchemeProperty.rnaHelices = t;
+} else {
+return;
+}for (; j <= n; j++) {
+jalview.schemes.ColourSchemeProperty.rnaHelices[j] = jalview.util.ColorUtils.generateRandomColor (java.awt.Color.white);
+}
+}, "~N");
+Clazz.defineStatics (c$,
+"UNDEFINED", -1,
+"USER_DEFINED", 0,
+"NONE", 1,
+"CLUSTAL", 2,
+"BLOSUM", 3,
+"PID", 4,
+"ZAPPO", 5,
+"TAYLOR", 6,
+"HYDROPHOBIC", 7,
+"HELIX", 8,
+"STRAND", 9,
+"TURN", 10,
+"BURIED", 11,
+"NUCLEOTIDE", 12,
+"PURINEPYRIMIDINE", 13,
+"COVARIATION", 14,
+"TCOFFEE", 15,
+"RNAHELIX", 16,
+"RNAINTERACTION", 17,
+"FIRST_COLOUR", 1,
+"LAST_COLOUR", 17,
+"rnaHelices", null);
+});
diff --git a/bin/jalview/schemes/Consensus.js b/bin/jalview/schemes/Consensus.js
index 39d8ac9..45c3c6a 100644
--- a/bin/jalview/schemes/Consensus.js
+++ b/bin/jalview/schemes/Consensus.js
@@ -1,45 +1,45 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (null, "jalview.schemes.Consensus", ["jalview.schemes.ResidueProperties"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.mask = null;
-this.threshold = 0;
-this.maskstr = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "Consensus");
-Clazz.makeConstructor (c$,
-function (mask, threshold) {
-this.maskstr = mask;
-this.setMask (mask);
-this.threshold = threshold;
-}, "~S,~N");
-Clazz.defineMethod (c$, "setMask",
-function (s) {
-this.mask = this.setNums (s);
-}, "~S");
-Clazz.defineMethod (c$, "isConserved",
-function (cons2, col, size) {
-return this.isConserved (cons2, col, size, true);
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "isConserved",
-function (cons2, col, size, includeGaps) {
-var tot = 0;
-if (!includeGaps) {
-size -= cons2[col][cons2[col].length - 1];
-}for (var i = 0; i < this.mask.length; i++) {
-tot += cons2[col][this.mask[i]];
-}
-if (tot > ((this.threshold * size) / 100)) {
-return true;
-}return false;
-}, "~A,~N,~N,~B");
-Clazz.defineMethod (c$, "setNums",
-function (s) {
-var out = Clazz.newIntArray (s.length, 0);
-var i = 0;
-while (i < s.length) {
-out[i] = jalview.schemes.ResidueProperties.aaIndex[s.charCodeAt (i)];
-i++;
-}
-return out;
-}, "~S");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (null, "jalview.schemes.Consensus", ["jalview.schemes.ResidueProperties"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.mask = null;
+this.threshold = 0;
+this.maskstr = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "Consensus");
+Clazz.makeConstructor (c$,
+function (mask, threshold) {
+this.maskstr = mask;
+this.setMask (mask);
+this.threshold = threshold;
+}, "~S,~N");
+Clazz.defineMethod (c$, "setMask",
+function (s) {
+this.mask = this.setNums (s);
+}, "~S");
+Clazz.defineMethod (c$, "isConserved",
+function (cons2, col, size) {
+return this.isConserved (cons2, col, size, true);
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "isConserved",
+function (cons2, col, size, includeGaps) {
+var tot = 0;
+if (!includeGaps) {
+size -= cons2[col][cons2[col].length - 1];
+}for (var i = 0; i < this.mask.length; i++) {
+tot += cons2[col][this.mask[i]];
+}
+if (tot > ((this.threshold * size) / 100)) {
+return true;
+}return false;
+}, "~A,~N,~N,~B");
+Clazz.defineMethod (c$, "setNums",
+function (s) {
+var out = Clazz.newIntArray (s.length, 0);
+var i = 0;
+while (i < s.length) {
+out[i] = jalview.schemes.ResidueProperties.aaIndex[s.charCodeAt (i)];
+i++;
+}
+return out;
+}, "~S");
+});
diff --git a/bin/jalview/schemes/CovariationColourScheme.js b/bin/jalview/schemes/CovariationColourScheme.js
index 3d75e42..68c8f15 100644
--- a/bin/jalview/schemes/CovariationColourScheme.js
+++ b/bin/jalview/schemes/CovariationColourScheme.js
@@ -1,41 +1,41 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme", "java.util.Hashtable"], "jalview.schemes.CovariationColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.ColorUtils", "java.awt.Color"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.helixcolorhash = null;
-this.positionsToHelix = null;
-this.numHelix = 0;
-this.annotation = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "CovariationColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.prepareFields (c$, function () {
-this.helixcolorhash = new java.util.Hashtable ();
-this.positionsToHelix = new java.util.Hashtable ();
-});
-Clazz.makeConstructor (c$,
-function (annotation) {
-Clazz.superConstructor (this, jalview.schemes.CovariationColourScheme, []);
-this.annotation = annotation;
-for (var x = 0; x < this.annotation._rnasecstr.length; x++) {
-this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getBegin ()), this.annotation._rnasecstr[x].getFeatureGroup ());
-this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getEnd ()), this.annotation._rnasecstr[x].getFeatureGroup ());
-if (Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ()) > this.numHelix) {
-this.numHelix = Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ());
-}}
-for (var j = 0; j <= this.numHelix; j++) {
-this.helixcolorhash.put (Integer.toString (j), jalview.util.ColorUtils.generateRandomColor (java.awt.Color.white));
-}
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return jalview.schemes.ResidueProperties.purinepyrimidine[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j) {
-var currentColour = java.awt.Color.white;
-var currentHelix = null;
-currentHelix = this.positionsToHelix.get (new Integer (j));
-if (currentHelix != null) {
-currentColour = this.helixcolorhash.get (currentHelix);
-}return currentColour;
-}, "~S,~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme", "java.util.Hashtable"], "jalview.schemes.CovariationColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.ColorUtils", "java.awt.Color"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.helixcolorhash = null;
+this.positionsToHelix = null;
+this.numHelix = 0;
+this.annotation = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "CovariationColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.prepareFields (c$, function () {
+this.helixcolorhash = new java.util.Hashtable ();
+this.positionsToHelix = new java.util.Hashtable ();
+});
+Clazz.makeConstructor (c$,
+function (annotation) {
+Clazz.superConstructor (this, jalview.schemes.CovariationColourScheme, []);
+this.annotation = annotation;
+for (var x = 0; x < this.annotation._rnasecstr.length; x++) {
+this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getBegin ()), this.annotation._rnasecstr[x].getFeatureGroup ());
+this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getEnd ()), this.annotation._rnasecstr[x].getFeatureGroup ());
+if (Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ()) > this.numHelix) {
+this.numHelix = Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ());
+}}
+for (var j = 0; j <= this.numHelix; j++) {
+this.helixcolorhash.put (Integer.toString (j), jalview.util.ColorUtils.generateRandomColor (java.awt.Color.white));
+}
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return jalview.schemes.ResidueProperties.purinepyrimidine[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j) {
+var currentColour = java.awt.Color.white;
+var currentHelix = null;
+currentHelix = this.positionsToHelix.get (new Integer (j));
+if (currentHelix != null) {
+currentColour = this.helixcolorhash.get (currentHelix);
+}return currentColour;
+}, "~S,~N");
+});
diff --git a/bin/jalview/schemes/FollowerColourScheme.js b/bin/jalview/schemes/FollowerColourScheme.js
index e73b3d9..e71f907 100644
--- a/bin/jalview/schemes/FollowerColourScheme.js
+++ b/bin/jalview/schemes/FollowerColourScheme.js
@@ -1,26 +1,26 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.FollowerColourScheme", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.colourScheme = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "FollowerColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.defineMethod (c$, "getBaseColour",
-function () {
-return this.colourScheme;
-});
-Clazz.overrideMethod (c$, "setConsensus",
-function (consensus) {
-if (this.colourScheme != null) {
-this.colourScheme.setConsensus (consensus);
-}}, "~A");
-Clazz.overrideMethod (c$, "setConservation",
-function (cons) {
-if (this.colourScheme != null) {
-this.colourScheme.setConservation (cons);
-}}, "jalview.analysis.Conservation");
-Clazz.overrideMethod (c$, "setConservationInc",
-function (i) {
-if (this.colourScheme != null) {
-this.colourScheme.setConservationInc (i);
-}}, "~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.FollowerColourScheme", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.colourScheme = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "FollowerColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.defineMethod (c$, "getBaseColour",
+function () {
+return this.colourScheme;
+});
+Clazz.overrideMethod (c$, "setConsensus",
+function (consensus) {
+if (this.colourScheme != null) {
+this.colourScheme.setConsensus (consensus);
+}}, "~A");
+Clazz.overrideMethod (c$, "setConservation",
+function (cons) {
+if (this.colourScheme != null) {
+this.colourScheme.setConservation (cons);
+}}, "jalview.analysis.Conservation");
+Clazz.overrideMethod (c$, "setConservationInc",
+function (i) {
+if (this.colourScheme != null) {
+this.colourScheme.setConservationInc (i);
+}}, "~N");
+});
diff --git a/bin/jalview/schemes/GraduatedColor.js b/bin/jalview/schemes/GraduatedColor.js
index 5daa0fb..e9998a1 100644
--- a/bin/jalview/schemes/GraduatedColor.js
+++ b/bin/jalview/schemes/GraduatedColor.js
@@ -1,160 +1,160 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (null, "jalview.schemes.GraduatedColor", ["jalview.schemes.UserColourScheme", "java.awt.Color", "java.lang.Float"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.thresholdState = -1;
-this.lr = 0;
-this.lg = 0;
-this.lb = 0;
-this.dr = 0;
-this.dg = 0;
-this.db = 0;
-this.base = 0;
-this.range = 0;
-this.thrsh = 0;
-this.tolow = false;
-this.autoScale = true;
-this.ucs = null;
-this.colourByLabel = false;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "GraduatedColor");
-Clazz.makeConstructor (c$,
-function (low, high, min, max) {
-this.thrsh = NaN;
-this.tolow = min >= max;
-this.lr = low.getRed () / 255;
-this.lg = low.getGreen () / 255;
-this.lb = low.getBlue () / 255;
-this.dr = (high.getRed () / 255) - this.lr;
-this.dg = (high.getGreen () / 255) - this.lg;
-this.db = (high.getBlue () / 255) - this.lb;
-if (this.tolow) {
-this.base = max;
-this.range = min - max;
-} else {
-this.base = min;
-this.range = max - min;
-}}, "java.awt.Color,java.awt.Color,~N,~N");
-Clazz.makeConstructor (c$,
-function (oldcs) {
-this.lr = oldcs.lr;
-this.lg = oldcs.lg;
-this.lb = oldcs.lb;
-this.dr = oldcs.dr;
-this.dg = oldcs.dg;
-this.db = oldcs.db;
-this.base = oldcs.base;
-this.range = oldcs.range;
-this.tolow = oldcs.tolow;
-this.thresholdState = oldcs.thresholdState;
-this.thrsh = oldcs.thrsh;
-this.autoScale = oldcs.autoScale;
-this.colourByLabel = oldcs.colourByLabel;
-}, "jalview.schemes.GraduatedColor");
-Clazz.makeConstructor (c$,
-function (oldcs, min, max) {
-this.construct (oldcs);
-this.updateBounds (min, max);
-}, "jalview.schemes.GraduatedColor,~N,~N");
-Clazz.defineMethod (c$, "getMinColor",
-function () {
-return new java.awt.Color (this.lr, this.lg, this.lb);
-});
-Clazz.defineMethod (c$, "getMaxColor",
-function () {
-return new java.awt.Color (this.lr + this.dr, this.lg + this.dg, this.lb + this.db);
-});
-Clazz.defineMethod (c$, "getTolow",
-function () {
-return this.tolow;
-});
-Clazz.defineMethod (c$, "setTolow",
-function (tolower) {
-this.tolow = tolower;
-}, "~B");
-Clazz.defineMethod (c$, "isColored",
-function (feature) {
-var val = feature.getScore ();
-if (Float.isNaN (val)) {
-return true;
-}if (this.thresholdState == -1) {
-return true;
-}if (Float.isNaN (this.thrsh)) {
-return true;
-}var rtn = this.thresholdState == 1;
-if (val <= this.thrsh) {
-return !rtn;
-} else {
-return rtn;
-}}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "isColourByLabel",
-function () {
-return this.colourByLabel;
-});
-Clazz.defineMethod (c$, "setColourByLabel",
-function (colourByLabel) {
-this.colourByLabel = colourByLabel;
-}, "~B");
-Clazz.defineMethod (c$, "findColor",
-function (feature) {
-if (this.colourByLabel) {
-if (this.ucs == null) {
-this.ucs = new jalview.schemes.UserColourScheme ();
-}return this.ucs.createColourFromName (feature.getDescription ());
-}if (this.range == 0.0) {
-return this.getMaxColor ();
-}var scr = feature.getScore ();
-if (Float.isNaN (scr)) {
-return this.getMinColor ();
-}var scl = (scr - this.base) / this.range;
-if (this.tolow) {
-scl = -scl;
-}if (scl < 0) {
-scl = 0;
-}if (scl > 1) {
-scl = 1;
-}return new java.awt.Color (this.lr + scl * this.dr, this.lg + scl * this.dg, this.lb + scl * this.db);
-}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "setThresh",
-function (value) {
-this.thrsh = value;
-}, "~N");
-Clazz.defineMethod (c$, "getThresh",
-function () {
-return this.thrsh;
-});
-Clazz.defineMethod (c$, "setThreshType",
-function (aboveThreshold) {
-this.thresholdState = aboveThreshold;
-}, "~N");
-Clazz.defineMethod (c$, "getThreshType",
-function () {
-return this.thresholdState;
-});
-Clazz.defineMethod (c$, "getMax",
-function () {
-return (this.tolow) ? this.base : (this.base + this.range);
-});
-Clazz.defineMethod (c$, "getMin",
-function () {
-return (this.tolow) ? (this.base + this.range) : this.base;
-});
-Clazz.defineMethod (c$, "isAutoScale",
-function () {
-return this.autoScale;
-});
-Clazz.defineMethod (c$, "setAutoScaled",
-function (autoscale) {
-this.autoScale = autoscale;
-}, "~B");
-Clazz.defineMethod (c$, "updateBounds",
-function (min, max) {
-if (max < min) {
-this.base = max;
-this.range = min - max;
-this.tolow = true;
-} else {
-this.base = min;
-this.range = max - min;
-this.tolow = false;
-}}, "~N,~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (null, "jalview.schemes.GraduatedColor", ["jalview.schemes.UserColourScheme", "java.awt.Color", "java.lang.Float"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.thresholdState = -1;
+this.lr = 0;
+this.lg = 0;
+this.lb = 0;
+this.dr = 0;
+this.dg = 0;
+this.db = 0;
+this.base = 0;
+this.range = 0;
+this.thrsh = 0;
+this.tolow = false;
+this.autoScale = true;
+this.ucs = null;
+this.colourByLabel = false;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "GraduatedColor");
+Clazz.makeConstructor (c$,
+function (low, high, min, max) {
+this.thrsh = NaN;
+this.tolow = min >= max;
+this.lr = low.getRed () / 255;
+this.lg = low.getGreen () / 255;
+this.lb = low.getBlue () / 255;
+this.dr = (high.getRed () / 255) - this.lr;
+this.dg = (high.getGreen () / 255) - this.lg;
+this.db = (high.getBlue () / 255) - this.lb;
+if (this.tolow) {
+this.base = max;
+this.range = min - max;
+} else {
+this.base = min;
+this.range = max - min;
+}}, "java.awt.Color,java.awt.Color,~N,~N");
+Clazz.makeConstructor (c$,
+function (oldcs) {
+this.lr = oldcs.lr;
+this.lg = oldcs.lg;
+this.lb = oldcs.lb;
+this.dr = oldcs.dr;
+this.dg = oldcs.dg;
+this.db = oldcs.db;
+this.base = oldcs.base;
+this.range = oldcs.range;
+this.tolow = oldcs.tolow;
+this.thresholdState = oldcs.thresholdState;
+this.thrsh = oldcs.thrsh;
+this.autoScale = oldcs.autoScale;
+this.colourByLabel = oldcs.colourByLabel;
+}, "jalview.schemes.GraduatedColor");
+Clazz.makeConstructor (c$,
+function (oldcs, min, max) {
+this.construct (oldcs);
+this.updateBounds (min, max);
+}, "jalview.schemes.GraduatedColor,~N,~N");
+Clazz.defineMethod (c$, "getMinColor",
+function () {
+return new java.awt.Color (this.lr, this.lg, this.lb);
+});
+Clazz.defineMethod (c$, "getMaxColor",
+function () {
+return new java.awt.Color (this.lr + this.dr, this.lg + this.dg, this.lb + this.db);
+});
+Clazz.defineMethod (c$, "getTolow",
+function () {
+return this.tolow;
+});
+Clazz.defineMethod (c$, "setTolow",
+function (tolower) {
+this.tolow = tolower;
+}, "~B");
+Clazz.defineMethod (c$, "isColored",
+function (feature) {
+var val = feature.getScore ();
+if (Float.isNaN (val)) {
+return true;
+}if (this.thresholdState == -1) {
+return true;
+}if (Float.isNaN (this.thrsh)) {
+return true;
+}var rtn = this.thresholdState == 1;
+if (val <= this.thrsh) {
+return !rtn;
+} else {
+return rtn;
+}}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "isColourByLabel",
+function () {
+return this.colourByLabel;
+});
+Clazz.defineMethod (c$, "setColourByLabel",
+function (colourByLabel) {
+this.colourByLabel = colourByLabel;
+}, "~B");
+Clazz.defineMethod (c$, "findColor",
+function (feature) {
+if (this.colourByLabel) {
+if (this.ucs == null) {
+this.ucs = new jalview.schemes.UserColourScheme ();
+}return this.ucs.createColourFromName (feature.getDescription ());
+}if (this.range == 0.0) {
+return this.getMaxColor ();
+}var scr = feature.getScore ();
+if (Float.isNaN (scr)) {
+return this.getMinColor ();
+}var scl = (scr - this.base) / this.range;
+if (this.tolow) {
+scl = -scl;
+}if (scl < 0) {
+scl = 0;
+}if (scl > 1) {
+scl = 1;
+}return new java.awt.Color (this.lr + scl * this.dr, this.lg + scl * this.dg, this.lb + scl * this.db);
+}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "setThresh",
+function (value) {
+this.thrsh = value;
+}, "~N");
+Clazz.defineMethod (c$, "getThresh",
+function () {
+return this.thrsh;
+});
+Clazz.defineMethod (c$, "setThreshType",
+function (aboveThreshold) {
+this.thresholdState = aboveThreshold;
+}, "~N");
+Clazz.defineMethod (c$, "getThreshType",
+function () {
+return this.thresholdState;
+});
+Clazz.defineMethod (c$, "getMax",
+function () {
+return (this.tolow) ? this.base : (this.base + this.range);
+});
+Clazz.defineMethod (c$, "getMin",
+function () {
+return (this.tolow) ? (this.base + this.range) : this.base;
+});
+Clazz.defineMethod (c$, "isAutoScale",
+function () {
+return this.autoScale;
+});
+Clazz.defineMethod (c$, "setAutoScaled",
+function (autoscale) {
+this.autoScale = autoscale;
+}, "~B");
+Clazz.defineMethod (c$, "updateBounds",
+function (min, max) {
+if (max < min) {
+this.base = max;
+this.range = min - max;
+this.tolow = true;
+} else {
+this.base = min;
+this.range = max - min;
+this.tolow = false;
+}}, "~N,~N");
+});
diff --git a/bin/jalview/schemes/HelixColourScheme.js b/bin/jalview/schemes/HelixColourScheme.js
index 4768a33..64e88e9 100644
--- a/bin/jalview/schemes/HelixColourScheme.js
+++ b/bin/jalview/schemes/HelixColourScheme.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.HelixColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "HelixColourScheme", jalview.schemes.ScoreColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.HelixColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.helix, 0.57, 1.51]);
-});
-Clazz.overrideMethod (c$, "makeColour",
-function (c) {
-return new java.awt.Color (c, 1.0 - c, c);
-}, "~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.HelixColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "HelixColourScheme", jalview.schemes.ScoreColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.HelixColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.helix, 0.57, 1.51]);
+});
+Clazz.overrideMethod (c$, "makeColour",
+function (c) {
+return new java.awt.Color (c, 1.0 - c, c);
+}, "~N");
+});
diff --git a/bin/jalview/schemes/HydrophobicColourScheme.js b/bin/jalview/schemes/HydrophobicColourScheme.js
index 02e1bbd..224f202 100644
--- a/bin/jalview/schemes/HydrophobicColourScheme.js
+++ b/bin/jalview/schemes/HydrophobicColourScheme.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.HydrophobicColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "HydrophobicColourScheme", jalview.schemes.ScoreColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.HydrophobicColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.hyd, -3.9, 4.5]);
-});
-Clazz.overrideMethod (c$, "makeColour",
-function (c) {
-return new java.awt.Color (c, 0.0, 1.0 - c);
-}, "~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.HydrophobicColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "HydrophobicColourScheme", jalview.schemes.ScoreColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.HydrophobicColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.hyd, -3.9, 4.5]);
+});
+Clazz.overrideMethod (c$, "makeColour",
+function (c) {
+return new java.awt.Color (c, 0.0, 1.0 - c);
+}, "~N");
+});
diff --git a/bin/jalview/schemes/NucleotideColourScheme.js b/bin/jalview/schemes/NucleotideColourScheme.js
index 1345bc6..abdfb5e 100644
--- a/bin/jalview/schemes/NucleotideColourScheme.js
+++ b/bin/jalview/schemes/NucleotideColourScheme.js
@@ -1,31 +1,31 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.NucleotideColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "NucleotideColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.NucleotideColourScheme, [jalview.schemes.ResidueProperties.nucleotideIndex, jalview.schemes.ResidueProperties.nucleotide, 0]);
-});
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-var currentColour;
-if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
-try {
-currentColour = this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-return java.awt.Color.white;
-} else {
-throw ex;
-}
-}
-} else {
-return java.awt.Color.white;
-}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.NucleotideColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "NucleotideColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.NucleotideColourScheme, [jalview.schemes.ResidueProperties.nucleotideIndex, jalview.schemes.ResidueProperties.nucleotide, 0]);
+});
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+var currentColour;
+if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
+try {
+currentColour = this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+return java.awt.Color.white;
+} else {
+throw ex;
+}
+}
+} else {
+return java.awt.Color.white;
+}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/schemes/PIDColourScheme.js b/bin/jalview/schemes/PIDColourScheme.js
index 093328c..bdf6f24 100644
--- a/bin/jalview/schemes/PIDColourScheme.js
+++ b/bin/jalview/schemes/PIDColourScheme.js
@@ -1,39 +1,39 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.PIDColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.pidColours = null;
-this.thresholds = null;
-this.group = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "PIDColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.PIDColourScheme, []);
-this.pidColours = jalview.schemes.ResidueProperties.pidColours;
-this.thresholds = jalview.schemes.ResidueProperties.pidThresholds;
-});
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-if ('a' <= c && c <= 'z') {
-c = String.fromCharCode (c.charCodeAt (0) - (32));
-}if (this.consensus == null || j >= this.consensus.length || this.consensus[j] == null) {
-return java.awt.Color.white;
-}if ((this.threshold != 0) && !this.aboveThreshold (c, j)) {
-return java.awt.Color.white;
-}var currentColour = java.awt.Color.white;
-var sc = 0;
-if (this.consensus.length <= j) {
-return java.awt.Color.white;
-}if ((Integer.parseInt (this.consensus[j].get ("C").toString ()) != -1) && this.consensus[j].contains (String.valueOf (c))) {
-sc = (this.consensus[j].get (this.ignoreGaps)).floatValue ();
-if (!jalview.util.Comparison.isGap (c)) {
-for (var i = 0; i < this.thresholds.length; i++) {
-if (sc > this.thresholds[i]) {
-currentColour = this.pidColours[i];
-break;
-}}
-}}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.PIDColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.pidColours = null;
+this.thresholds = null;
+this.group = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "PIDColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.PIDColourScheme, []);
+this.pidColours = jalview.schemes.ResidueProperties.pidColours;
+this.thresholds = jalview.schemes.ResidueProperties.pidThresholds;
+});
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+if ('a' <= c && c <= 'z') {
+c = String.fromCharCode (c.charCodeAt (0) - (32));
+}if (this.consensus == null || j >= this.consensus.length || this.consensus[j] == null) {
+return java.awt.Color.white;
+}if ((this.threshold != 0) && !this.aboveThreshold (c, j)) {
+return java.awt.Color.white;
+}var currentColour = java.awt.Color.white;
+var sc = 0;
+if (this.consensus.length <= j) {
+return java.awt.Color.white;
+}if ((Integer.parseInt (this.consensus[j].get ("C").toString ()) != -1) && this.consensus[j].contains (String.valueOf (c))) {
+sc = (this.consensus[j].get (this.ignoreGaps)).floatValue ();
+if (!jalview.util.Comparison.isGap (c)) {
+for (var i = 0; i < this.thresholds.length; i++) {
+if (sc > this.thresholds[i]) {
+currentColour = this.pidColours[i];
+break;
+}}
+}}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/schemes/PurinePyrimidineColourScheme.js b/bin/jalview/schemes/PurinePyrimidineColourScheme.js
index be4e523..514d31b 100644
--- a/bin/jalview/schemes/PurinePyrimidineColourScheme.js
+++ b/bin/jalview/schemes/PurinePyrimidineColourScheme.js
@@ -1,31 +1,31 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.PurinePyrimidineColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "PurinePyrimidineColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.PurinePyrimidineColourScheme, [jalview.schemes.ResidueProperties.purinepyrimidineIndex, jalview.schemes.ResidueProperties.purinepyrimidine, 0]);
-});
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return this.colors[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j) {
-var currentColour;
-if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
-try {
-currentColour = this.colors[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-return java.awt.Color.white;
-} else {
-throw ex;
-}
-}
-} else {
-return java.awt.Color.white;
-}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.PurinePyrimidineColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "PurinePyrimidineColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.PurinePyrimidineColourScheme, [jalview.schemes.ResidueProperties.purinepyrimidineIndex, jalview.schemes.ResidueProperties.purinepyrimidine, 0]);
+});
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return this.colors[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j) {
+var currentColour;
+if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
+try {
+currentColour = this.colors[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+return java.awt.Color.white;
+} else {
+throw ex;
+}
+}
+} else {
+return java.awt.Color.white;
+}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N");
+});
diff --git a/bin/jalview/schemes/RNAHelicesColour.js b/bin/jalview/schemes/RNAHelicesColour.js
index 5023c90..c7d3af2 100644
--- a/bin/jalview/schemes/RNAHelicesColour.js
+++ b/bin/jalview/schemes/RNAHelicesColour.js
@@ -1,68 +1,68 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme", "java.util.Hashtable"], "jalview.schemes.RNAHelicesColour", ["jalview.schemes.ResidueProperties", "jalview.util.ColorUtils", "java.awt.Color"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.helixcolorhash = null;
-this.positionsToHelix = null;
-this.numHelix = 0;
-this.annotation = null;
-this.lastrefresh = -1;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "RNAHelicesColour", jalview.schemes.ResidueColourScheme);
-Clazz.prepareFields (c$, function () {
-this.helixcolorhash = new java.util.Hashtable ();
-this.positionsToHelix = new java.util.Hashtable ();
-});
-Clazz.makeConstructor (c$,
-function (annotation) {
-Clazz.superConstructor (this, jalview.schemes.RNAHelicesColour, [jalview.schemes.ResidueProperties.nucleotideIndex]);
-this.annotation = annotation;
-this.refresh ();
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.makeConstructor (c$,
-function (alignment) {
-Clazz.superConstructor (this, jalview.schemes.RNAHelicesColour, [jalview.schemes.ResidueProperties.nucleotideIndex]);
-this.alignmentChanged (alignment, null);
-}, "jalview.datamodel.AnnotatedCollectionI");
-Clazz.overrideMethod (c$, "alignmentChanged",
-function (alignment, hiddenReps) {
-var annotations = alignment.getAlignmentAnnotation ();
-for (var i = 0; i < annotations.length; i++) {
-if (annotations[i].getRNAStruc () != null) {
-this.annotation = annotations[i];
-break;
-}}
-this.refresh ();
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.defineMethod (c$, "refresh",
-function () {
-if (this.annotation != null && ((this.annotation._rnasecstr == null || this.lastrefresh != this.annotation._rnasecstr.hashCode ()) && this.annotation.isValidStruc ())) {
-this.annotation.getRNAStruc ();
-this.lastrefresh = this.annotation._rnasecstr.hashCode ();
-this.numHelix = 0;
-this.positionsToHelix = new java.util.Hashtable ();
-for (var x = 0; x < this.annotation._rnasecstr.length; x++) {
-this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getBegin ()), this.annotation._rnasecstr[x].getFeatureGroup ());
-this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getEnd ()), this.annotation._rnasecstr[x].getFeatureGroup ());
-if (Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ()) > this.numHelix) {
-this.numHelix = Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ());
-}}
-for (var j = 0; j <= this.numHelix; j++) {
-if (!this.helixcolorhash.containsKey (Integer.toString (j))) {
-this.helixcolorhash.put (Integer.toString (j), jalview.util.ColorUtils.generateRandomColor (java.awt.Color.white));
-}}
-}});
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return jalview.schemes.ResidueProperties.purinepyrimidine[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-this.refresh ();
-var currentColour = java.awt.Color.white;
-var currentHelix = null;
-currentHelix = this.positionsToHelix.get (new Integer (j));
-if (currentHelix != null) {
-currentColour = this.helixcolorhash.get (currentHelix);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme", "java.util.Hashtable"], "jalview.schemes.RNAHelicesColour", ["jalview.schemes.ResidueProperties", "jalview.util.ColorUtils", "java.awt.Color"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.helixcolorhash = null;
+this.positionsToHelix = null;
+this.numHelix = 0;
+this.annotation = null;
+this.lastrefresh = -1;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "RNAHelicesColour", jalview.schemes.ResidueColourScheme);
+Clazz.prepareFields (c$, function () {
+this.helixcolorhash = new java.util.Hashtable ();
+this.positionsToHelix = new java.util.Hashtable ();
+});
+Clazz.makeConstructor (c$,
+function (annotation) {
+Clazz.superConstructor (this, jalview.schemes.RNAHelicesColour, [jalview.schemes.ResidueProperties.nucleotideIndex]);
+this.annotation = annotation;
+this.refresh ();
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.makeConstructor (c$,
+function (alignment) {
+Clazz.superConstructor (this, jalview.schemes.RNAHelicesColour, [jalview.schemes.ResidueProperties.nucleotideIndex]);
+this.alignmentChanged (alignment, null);
+}, "jalview.datamodel.AnnotatedCollectionI");
+Clazz.overrideMethod (c$, "alignmentChanged",
+function (alignment, hiddenReps) {
+var annotations = alignment.getAlignmentAnnotation ();
+for (var i = 0; i < annotations.length; i++) {
+if (annotations[i].getRNAStruc () != null) {
+this.annotation = annotations[i];
+break;
+}}
+this.refresh ();
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.defineMethod (c$, "refresh",
+function () {
+if (this.annotation != null && ((this.annotation._rnasecstr == null || this.lastrefresh != this.annotation._rnasecstr.hashCode ()) && this.annotation.isValidStruc ())) {
+this.annotation.getRNAStruc ();
+this.lastrefresh = this.annotation._rnasecstr.hashCode ();
+this.numHelix = 0;
+this.positionsToHelix = new java.util.Hashtable ();
+for (var x = 0; x < this.annotation._rnasecstr.length; x++) {
+this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getBegin ()), this.annotation._rnasecstr[x].getFeatureGroup ());
+this.positionsToHelix.put (new Integer (this.annotation._rnasecstr[x].getEnd ()), this.annotation._rnasecstr[x].getFeatureGroup ());
+if (Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ()) > this.numHelix) {
+this.numHelix = Integer.parseInt (this.annotation._rnasecstr[x].getFeatureGroup ());
+}}
+for (var j = 0; j <= this.numHelix; j++) {
+if (!this.helixcolorhash.containsKey (Integer.toString (j))) {
+this.helixcolorhash.put (Integer.toString (j), jalview.util.ColorUtils.generateRandomColor (java.awt.Color.white));
+}}
+}});
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return jalview.schemes.ResidueProperties.purinepyrimidine[jalview.schemes.ResidueProperties.purinepyrimidineIndex[c.charCodeAt (0)]];
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+this.refresh ();
+var currentColour = java.awt.Color.white;
+var currentHelix = null;
+currentHelix = this.positionsToHelix.get (new Integer (j));
+if (currentHelix != null) {
+currentColour = this.helixcolorhash.get (currentHelix);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/schemes/RNAHelicesColourChooser.js b/bin/jalview/schemes/RNAHelicesColourChooser.js
index 27a0f25..0d9cf26 100644
--- a/bin/jalview/schemes/RNAHelicesColourChooser.js
+++ b/bin/jalview/schemes/RNAHelicesColourChooser.js
@@ -1,63 +1,63 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (null, "jalview.schemes.RNAHelicesColourChooser", ["jalview.schemes.RNAHelicesColour", "java.util.Hashtable", "$.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.av = null;
-this.ap = null;
-this.oldcs = null;
-this.oldgroupColours = null;
-this.currentAnnotation = null;
-this.adjusting = false;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "RNAHelicesColourChooser");
-Clazz.makeConstructor (c$,
-function (av, ap) {
-this.oldcs = av.getGlobalColourScheme ();
-if (av.getAlignment ().getGroups () != null) {
-this.oldgroupColours = new java.util.Hashtable ();
-for (var sg, $sg = ap.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (sg.cs != null) {
-this.oldgroupColours.put (sg, sg.cs);
-}}
-}this.av = av;
-this.ap = ap;
-if (Clazz.instanceOf (this.oldcs, jalview.schemes.RNAHelicesColour)) {
-var rhc = this.oldcs;
-}this.adjusting = true;
-var list = new java.util.Vector ();
-var index = 1;
-for (var i = 0; i < av.getAlignment ().getAlignmentAnnotation ().length; i++) {
-var label = av.getAlignment ().getAlignmentAnnotation ()[i].label;
-if (!list.contains (label)) list.addElement (label);
- else list.addElement (label + "_" + (index++));
-}
-this.adjusting = false;
-this.changeColour ();
-}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
-Clazz.defineMethod (c$, "changeColour",
-function () {
-if (this.adjusting) {
-return;
-}var rhc = null;
-rhc = new jalview.schemes.RNAHelicesColour (this.av.getAlignment ());
-this.av.setGlobalColourScheme (rhc);
-if (this.av.getAlignment ().getGroups () != null) {
-for (var sg, $sg = this.ap.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (sg.cs == null) {
-continue;
-}sg.cs = new jalview.schemes.RNAHelicesColour (sg);
-}
-}this.ap.paintAlignment (false);
-});
-Clazz.defineMethod (c$, "reset",
-function () {
-this.av.setGlobalColourScheme (this.oldcs);
-if (this.av.getAlignment ().getGroups () != null) {
-for (var sg, $sg = this.ap.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-sg.cs = this.oldgroupColours.get (sg);
-}
-}});
-Clazz.defineMethod (c$, "annotations_actionPerformed",
-function (e) {
-this.changeColour ();
-}, "java.awt.event.ActionEvent");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (null, "jalview.schemes.RNAHelicesColourChooser", ["jalview.schemes.RNAHelicesColour", "java.util.Hashtable", "$.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.av = null;
+this.ap = null;
+this.oldcs = null;
+this.oldgroupColours = null;
+this.currentAnnotation = null;
+this.adjusting = false;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "RNAHelicesColourChooser");
+Clazz.makeConstructor (c$,
+function (av, ap) {
+this.oldcs = av.getGlobalColourScheme ();
+if (av.getAlignment ().getGroups () != null) {
+this.oldgroupColours = new java.util.Hashtable ();
+for (var sg, $sg = ap.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (sg.cs != null) {
+this.oldgroupColours.put (sg, sg.cs);
+}}
+}this.av = av;
+this.ap = ap;
+if (Clazz.instanceOf (this.oldcs, jalview.schemes.RNAHelicesColour)) {
+var rhc = this.oldcs;
+}this.adjusting = true;
+var list = new java.util.Vector ();
+var index = 1;
+for (var i = 0; i < av.getAlignment ().getAlignmentAnnotation ().length; i++) {
+var label = av.getAlignment ().getAlignmentAnnotation ()[i].label;
+if (!list.contains (label)) list.addElement (label);
+ else list.addElement (label + "_" + (index++));
+}
+this.adjusting = false;
+this.changeColour ();
+}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
+Clazz.defineMethod (c$, "changeColour",
+function () {
+if (this.adjusting) {
+return;
+}var rhc = null;
+rhc = new jalview.schemes.RNAHelicesColour (this.av.getAlignment ());
+this.av.setGlobalColourScheme (rhc);
+if (this.av.getAlignment ().getGroups () != null) {
+for (var sg, $sg = this.ap.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (sg.cs == null) {
+continue;
+}sg.cs = new jalview.schemes.RNAHelicesColour (sg);
+}
+}this.ap.paintAlignment (false);
+});
+Clazz.defineMethod (c$, "reset",
+function () {
+this.av.setGlobalColourScheme (this.oldcs);
+if (this.av.getAlignment ().getGroups () != null) {
+for (var sg, $sg = this.ap.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+sg.cs = this.oldgroupColours.get (sg);
+}
+}});
+Clazz.defineMethod (c$, "annotations_actionPerformed",
+function (e) {
+this.changeColour ();
+}, "java.awt.event.ActionEvent");
+});
diff --git a/bin/jalview/schemes/RNAInteractionColourScheme.js b/bin/jalview/schemes/RNAInteractionColourScheme.js
index 9c2e946..6935253 100644
--- a/bin/jalview/schemes/RNAInteractionColourScheme.js
+++ b/bin/jalview/schemes/RNAInteractionColourScheme.js
@@ -1,27 +1,27 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.RNAInteractionColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "RNAInteractionColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-var currentColour;
-if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
-try {
-currentColour = this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-return java.awt.Color.white;
-} else {
-throw ex;
-}
-}
-} else {
-return java.awt.Color.white;
-}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.RNAInteractionColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "RNAInteractionColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+var currentColour;
+if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
+try {
+currentColour = this.colors[jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)]];
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+return java.awt.Color.white;
+} else {
+throw ex;
+}
+}
+} else {
+return java.awt.Color.white;
+}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+});
diff --git a/bin/jalview/schemes/ResidueColourScheme.js b/bin/jalview/schemes/ResidueColourScheme.js
index aaf6ef5..9b2382f 100644
--- a/bin/jalview/schemes/ResidueColourScheme.js
+++ b/bin/jalview/schemes/ResidueColourScheme.js
@@ -1,146 +1,146 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ColourSchemeI"], "jalview.schemes.ResidueColourScheme", ["jalview.util.Comparison", "$.MessageManager", "java.awt.Color", "java.lang.Error"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.symbolIndex = null;
-this.conservationColouring = false;
-this.colors = null;
-this.threshold = 0;
-this.ignoreGaps = "G";
-this.consensus = null;
-this.conservation = null;
-this.conservationLength = 0;
-this.inc = 30;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "ResidueColourScheme", null, jalview.schemes.ColourSchemeI);
-Clazz.makeConstructor (c$,
-function (aaOrnaIndex, colours, threshold) {
-this.symbolIndex = aaOrnaIndex;
-this.colors = colours;
-this.threshold = threshold;
-}, "~A,~A,~N");
-Clazz.makeConstructor (c$,
-function (aaOrNaIndex) {
-this.symbolIndex = aaOrNaIndex;
-}, "~A");
-Clazz.makeConstructor (c$,
-function () {
-this.symbolIndex = null;
-});
-Clazz.defineMethod (c$, "findColour",
-function (c) {
-return this.colors == null ? java.awt.Color.white : this.colors[this.symbolIndex[c.charCodeAt (0)]];
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-var currentColour;
-if (this.colors != null && this.symbolIndex != null && (this.threshold == 0) || this.aboveThreshold (c, j)) {
-currentColour = this.colors[this.symbolIndex[c.charCodeAt (0)]];
-} else {
-currentColour = java.awt.Color.white;
-}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "getThreshold",
-function () {
-return this.threshold;
-});
-Clazz.overrideMethod (c$, "setThreshold",
-function (ct, ignoreGaps) {
-this.threshold = ct;
-if (ignoreGaps) {
-this.ignoreGaps = "N";
-} else {
-this.ignoreGaps = "G";
-}}, "~N,~B");
-Clazz.defineMethod (c$, "aboveThreshold",
-function (c, j) {
-if ('a' <= c && c <= 'z') {
-c = String.fromCharCode (c.charCodeAt (0) - (32));
-}if (this.consensus == null || this.consensus.length < j || this.consensus[j] == null) {
-return false;
-}if (((this.consensus[j].get ("C")).intValue () != -1) && this.consensus[j].contains (String.valueOf (c))) {
-if ((this.consensus[j].get (this.ignoreGaps)).floatValue () >= this.threshold) {
-return true;
-}}return false;
-}, "~S,~N");
-Clazz.overrideMethod (c$, "conservationApplied",
-function () {
-return this.conservationColouring;
-});
-Clazz.overrideMethod (c$, "setConservationApplied",
-function (conservationApplied) {
-this.conservationColouring = conservationApplied;
-}, "~B");
-Clazz.overrideMethod (c$, "setConservationInc",
-function (i) {
-this.inc = i;
-}, "~N");
-Clazz.overrideMethod (c$, "getConservationInc",
-function () {
-return this.inc;
-});
-Clazz.overrideMethod (c$, "setConsensus",
-function (consensus) {
-if (consensus == null) {
-return;
-}this.consensus = consensus;
-}, "~A");
-Clazz.overrideMethod (c$, "setConservation",
-function (cons) {
-if (cons == null) {
-this.conservationColouring = false;
-this.conservation = null;
-} else {
-this.conservationColouring = true;
-var i;
-var iSize = cons.getConsSequence ().getLength ();
-this.conservation = Clazz.newCharArray (iSize, '\0');
-for (i = 0; i < iSize; i++) {
-this.conservation[i] = cons.getConsSequence ().getCharAt (i);
-}
-this.conservationLength = this.conservation.length;
-}}, "jalview.analysis.Conservation");
-Clazz.defineMethod (c$, "applyConservation",
-function (currentColour, i) {
-if ((this.conservationLength > i) && (this.conservation[i] != '*') && (this.conservation[i] != '+')) {
-if (jalview.util.Comparison.isGap (this.conservation[i])) {
-currentColour = java.awt.Color.white;
-} else {
-var t = 11 - ((this.conservation[i]).charCodeAt (0) - 48);
-if (t == 0) {
-return java.awt.Color.white;
-}var red = currentColour.getRed ();
-var green = currentColour.getGreen ();
-var blue = currentColour.getBlue ();
-var dr = 255 - red;
-var dg = 255 - green;
-var db = 255 - blue;
-dr *= t / 10;
-dg *= t / 10;
-db *= t / 10;
-red += (this.inc / 20) * dr;
-green += (this.inc / 20) * dg;
-blue += (this.inc / 20) * db;
-if (red > 255 || green > 255 || blue > 255) {
-currentColour = java.awt.Color.white;
-} else {
-currentColour = new java.awt.Color (red, green, blue);
-}}}return currentColour;
-}, "java.awt.Color,~N");
-Clazz.overrideMethod (c$, "alignmentChanged",
-function (alignment, hiddenReps) {
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.overrideMethod (c$, "applyTo",
-function (sg, hiddenRepSequences) {
-try {
-return this.getClass ().newInstance ();
-} catch (q) {
-if (Clazz.exceptionOf (q, Exception)) {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_cannot_duplicate_colour_scheme", Clazz.newArray (-1, [this.getClass ().getName ()])), q);
-} else {
-throw q;
-}
-}
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ColourSchemeI"], "jalview.schemes.ResidueColourScheme", ["jalview.util.Comparison", "$.MessageManager", "java.awt.Color", "java.lang.Error"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.symbolIndex = null;
+this.conservationColouring = false;
+this.colors = null;
+this.threshold = 0;
+this.ignoreGaps = "G";
+this.consensus = null;
+this.conservation = null;
+this.conservationLength = 0;
+this.inc = 30;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "ResidueColourScheme", null, jalview.schemes.ColourSchemeI);
+Clazz.makeConstructor (c$,
+function (aaOrnaIndex, colours, threshold) {
+this.symbolIndex = aaOrnaIndex;
+this.colors = colours;
+this.threshold = threshold;
+}, "~A,~A,~N");
+Clazz.makeConstructor (c$,
+function (aaOrNaIndex) {
+this.symbolIndex = aaOrNaIndex;
+}, "~A");
+Clazz.makeConstructor (c$,
+function () {
+this.symbolIndex = null;
+});
+Clazz.defineMethod (c$, "findColour",
+function (c) {
+return this.colors == null ? java.awt.Color.white : this.colors[this.symbolIndex[c.charCodeAt (0)]];
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+var currentColour;
+if (this.colors != null && this.symbolIndex != null && (this.threshold == 0) || this.aboveThreshold (c, j)) {
+currentColour = this.colors[this.symbolIndex[c.charCodeAt (0)]];
+} else {
+currentColour = java.awt.Color.white;
+}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "getThreshold",
+function () {
+return this.threshold;
+});
+Clazz.overrideMethod (c$, "setThreshold",
+function (ct, ignoreGaps) {
+this.threshold = ct;
+if (ignoreGaps) {
+this.ignoreGaps = "N";
+} else {
+this.ignoreGaps = "G";
+}}, "~N,~B");
+Clazz.defineMethod (c$, "aboveThreshold",
+function (c, j) {
+if ('a' <= c && c <= 'z') {
+c = String.fromCharCode (c.charCodeAt (0) - (32));
+}if (this.consensus == null || this.consensus.length < j || this.consensus[j] == null) {
+return false;
+}if (((this.consensus[j].get ("C")).intValue () != -1) && this.consensus[j].contains (String.valueOf (c))) {
+if ((this.consensus[j].get (this.ignoreGaps)).floatValue () >= this.threshold) {
+return true;
+}}return false;
+}, "~S,~N");
+Clazz.overrideMethod (c$, "conservationApplied",
+function () {
+return this.conservationColouring;
+});
+Clazz.overrideMethod (c$, "setConservationApplied",
+function (conservationApplied) {
+this.conservationColouring = conservationApplied;
+}, "~B");
+Clazz.overrideMethod (c$, "setConservationInc",
+function (i) {
+this.inc = i;
+}, "~N");
+Clazz.overrideMethod (c$, "getConservationInc",
+function () {
+return this.inc;
+});
+Clazz.overrideMethod (c$, "setConsensus",
+function (consensus) {
+if (consensus == null) {
+return;
+}this.consensus = consensus;
+}, "~A");
+Clazz.overrideMethod (c$, "setConservation",
+function (cons) {
+if (cons == null) {
+this.conservationColouring = false;
+this.conservation = null;
+} else {
+this.conservationColouring = true;
+var i;
+var iSize = cons.getConsSequence ().getLength ();
+this.conservation = Clazz.newCharArray (iSize, '\0');
+for (i = 0; i < iSize; i++) {
+this.conservation[i] = cons.getConsSequence ().getCharAt (i);
+}
+this.conservationLength = this.conservation.length;
+}}, "jalview.analysis.Conservation");
+Clazz.defineMethod (c$, "applyConservation",
+function (currentColour, i) {
+if ((this.conservationLength > i) && (this.conservation[i] != '*') && (this.conservation[i] != '+')) {
+if (jalview.util.Comparison.isGap (this.conservation[i])) {
+currentColour = java.awt.Color.white;
+} else {
+var t = 11 - ((this.conservation[i]).charCodeAt (0) - 48);
+if (t == 0) {
+return java.awt.Color.white;
+}var red = currentColour.getRed ();
+var green = currentColour.getGreen ();
+var blue = currentColour.getBlue ();
+var dr = 255 - red;
+var dg = 255 - green;
+var db = 255 - blue;
+dr *= t / 10;
+dg *= t / 10;
+db *= t / 10;
+red += (this.inc / 20) * dr;
+green += (this.inc / 20) * dg;
+blue += (this.inc / 20) * db;
+if (red > 255 || green > 255 || blue > 255) {
+currentColour = java.awt.Color.white;
+} else {
+currentColour = new java.awt.Color (red, green, blue);
+}}}return currentColour;
+}, "java.awt.Color,~N");
+Clazz.overrideMethod (c$, "alignmentChanged",
+function (alignment, hiddenReps) {
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.overrideMethod (c$, "applyTo",
+function (sg, hiddenRepSequences) {
+try {
+return this.getClass ().newInstance ();
+} catch (q) {
+if (Clazz.exceptionOf (q, Exception)) {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_cannot_duplicate_colour_scheme", Clazz.newArray (-1, [this.getClass ().getName ()])), q);
+} else {
+throw q;
+}
+}
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+});
diff --git a/bin/jalview/schemes/ResidueProperties.class b/bin/jalview/schemes/ResidueProperties.class
index c98cf35..539dcc8 100644
Binary files a/bin/jalview/schemes/ResidueProperties.class and b/bin/jalview/schemes/ResidueProperties.class differ
diff --git a/bin/jalview/schemes/ResidueProperties.js b/bin/jalview/schemes/ResidueProperties.js
index 612edb4..2a81845 100644
--- a/bin/jalview/schemes/ResidueProperties.js
+++ b/bin/jalview/schemes/ResidueProperties.js
@@ -1,1090 +1,1090 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.analysis.scoremodels.FeatureScoreModel", "$.PIDScoreModel", "jalview.schemes.ScoreMatrix", "java.awt.Color", "java.util.ArrayList", "$.HashMap", "$.Hashtable", "$.Vector"], "jalview.schemes.ResidueProperties", ["java.lang.StringBuffer"], function () {
-c$ = Clazz.declareType (jalview.schemes, "ResidueProperties");
-c$.buildAmbiguityCodonSet = Clazz.defineMethod (c$, "buildAmbiguityCodonSet",
-function () {
-if (jalview.schemes.ResidueProperties._ambiguityCodes.size () > 0) {
-System.err.println ("Ignoring multiple calls to buildAmbiguityCodonSet");
-return;
-}for (var acode, $acode = jalview.schemes.ResidueProperties.ambiguityCodes.entrySet ().iterator (); $acode.hasNext () && ((acode = $acode.next ()) || true);) {
-for (var r, $r = 0, $$r = acode.getValue (); $r < $$r.length && ((r = $$r[$r]) || true); $r++) {
-var codesfor = jalview.schemes.ResidueProperties._ambiguityCodes.get (r);
-if (codesfor == null) {
-jalview.schemes.ResidueProperties._ambiguityCodes.put (r, codesfor = new java.util.ArrayList ());
-}if (!codesfor.contains (acode.getKey ())) {
-codesfor.add (acode.getKey ());
-} else {
-System.err.println ("Inconsistency in the IUBMB ambiguity code nomenclature table: collision for " + acode.getKey () + " in residue " + r);
-}}
-}
-var unambcodons = jalview.schemes.ResidueProperties.codonHash2.keySet ().toArray ( new Array (jalview.schemes.ResidueProperties.codonHash2.size ()));
-for (var codon, $codon = 0, $$codon = unambcodons; $codon < $$codon.length && ((codon = $$codon[$codon]) || true); $codon++) {
-var residue = jalview.schemes.ResidueProperties.codonHash2.get (codon);
-var acodon = new Array (codon.length);
-for (var i = 0, iSize = codon.length; i < iSize; i++) {
-var _ac = "" + codon.charAt (i);
-var acodes = jalview.schemes.ResidueProperties._ambiguityCodes.get (_ac);
-if (acodes != null) {
-acodon[i] = acodes.toArray ( new Array (acodes.size ()));
-} else {
-acodon[i] = Clazz.newArray (-1, []);
-}}
-var tpos = Clazz.newIntArray (codon.length, 0);
-var cpos = Clazz.newIntArray (codon.length, 0);
-for (var i = 0; i < tpos.length; i++) {
-tpos[i] = -1;
-}
-tpos[acodon.length - 1] = 0;
-var ipos;
-var j;
-while (tpos[0] < acodon[0].length) {
-var allres = Clazz.newCharArray (tpos.length, '\0');
-var _acodon = "";
-var _anuc;
-for (ipos = 0; ipos < tpos.length; ipos++) {
-if (acodon[ipos].length == 0 || tpos[ipos] < 0) {
-_acodon += codon.charAt (ipos);
-allres[ipos] = Clazz.newCharArray (-1, [codon.charAt (ipos)]);
-} else {
-_acodon += acodon[ipos][tpos[ipos]];
-var altbase = jalview.schemes.ResidueProperties.ambiguityCodes.get (acodon[ipos][tpos[ipos]]);
-allres[ipos] = Clazz.newCharArray (altbase.length, '\0');
-j = 0;
-for (var ab, $ab = 0, $$ab = altbase; $ab < $$ab.length && ((ab = $$ab[$ab]) || true); $ab++) {
-allres[ipos][j++] = ab.charAt (0);
-}
-}}
-for (ipos = 0; ipos < cpos.length; ipos++) {
-cpos[ipos] = 0;
-}
-var valid = true;
-do {
-var _codon = "";
-for (j = 0; j < cpos.length; j++) {
-_codon += allres[j][cpos[j]];
-}
-var tr = jalview.schemes.ResidueProperties.codonHash2.get (_codon);
-if (valid = (tr != null && tr.equals (residue))) {
-ipos = acodon.length - 1;
-while (++cpos[ipos] >= allres[ipos].length && ipos > 0) {
-cpos[ipos] = 0;
-ipos--;
-}
-}} while (valid && cpos[0] < allres[0].length);
-if (valid) {
-jalview.schemes.ResidueProperties.codonHash2.put (_acodon, residue);
-} else {
-}ipos = acodon.length - 1;
-while (++tpos[ipos] >= acodon[ipos].length && ipos > 0) {
-tpos[ipos] = -1;
-ipos--;
-}
-}
-}
-});
-c$.getHydmax = Clazz.defineMethod (c$, "getHydmax",
-function () {
-return 4.5;
-});
-c$.getHydmin = Clazz.defineMethod (c$, "getHydmin",
-function () {
-return -3.9;
-});
-c$.getHyd = Clazz.defineMethod (c$, "getHyd",
-function () {
-return jalview.schemes.ResidueProperties.hyd;
-});
-c$.getAA3Hash = Clazz.defineMethod (c$, "getAA3Hash",
-function () {
-return jalview.schemes.ResidueProperties.aa3Hash;
-});
-c$.getDNA = Clazz.defineMethod (c$, "getDNA",
-function () {
-return jalview.schemes.ResidueProperties.DNA;
-});
-c$.getBLOSUM62 = Clazz.defineMethod (c$, "getBLOSUM62",
-function () {
-return jalview.schemes.ResidueProperties.BLOSUM62;
-});
-c$.getPAM250 = Clazz.defineMethod (c$, "getPAM250",
-function (A1, A2) {
-return jalview.schemes.ResidueProperties.getPAM250 (A1.charAt (0), A2.charAt (0));
-}, "~S,~S");
-c$.getBLOSUM62 = Clazz.defineMethod (c$, "getBLOSUM62",
-function (c1, c2) {
-var pog = 0;
-try {
-var a = jalview.schemes.ResidueProperties.aaIndex[c1.charCodeAt (0)];
-var b = jalview.schemes.ResidueProperties.aaIndex[c2.charCodeAt (0)];
-pog = jalview.schemes.ResidueProperties.BLOSUM62[a][b];
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-return pog;
-}, "~S,~S");
-c$.getCodons = Clazz.defineMethod (c$, "getCodons",
-function (res) {
-if (jalview.schemes.ResidueProperties.codonHash.containsKey (res)) {
-return jalview.schemes.ResidueProperties.codonHash.get (res);
-}return null;
-}, "~S");
-c$.codonTranslate = Clazz.defineMethod (c$, "codonTranslate",
-function (lccodon) {
-if (false) {
-return jalview.schemes.ResidueProperties._codonTranslate (lccodon);
-}var cdn = jalview.schemes.ResidueProperties.codonHash2.get (lccodon.toUpperCase ());
-if (cdn != null && cdn.equals ("*")) {
-return "STOP";
-}return cdn;
-}, "~S");
-c$._codonTranslate = Clazz.defineMethod (c$, "_codonTranslate",
-function (lccodon) {
-var codon = lccodon.toUpperCase ();
-if (codon.indexOf ('X') > -1 || codon.indexOf ('N') > -1) {
-return "X";
-}for (var key, $key = jalview.schemes.ResidueProperties.codonHash.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
-if (jalview.schemes.ResidueProperties.codonHash.get (key).contains (codon)) {
-return key;
-}}
-return null;
-}, "~S");
-c$.getDefaultPeptideMatrix = Clazz.defineMethod (c$, "getDefaultPeptideMatrix",
-function () {
-return jalview.schemes.ResidueProperties.getBLOSUM62 ();
-});
-c$.getDefaultDnaMatrix = Clazz.defineMethod (c$, "getDefaultDnaMatrix",
-function () {
-return jalview.schemes.ResidueProperties.getDNA ();
-});
-c$.getScoreMatrix = Clazz.defineMethod (c$, "getScoreMatrix",
-function (pwtype) {
-var val = jalview.schemes.ResidueProperties.scoreMatrices.get (pwtype);
-if (val != null && Clazz.instanceOf (val, jalview.schemes.ScoreMatrix)) {
-return val;
-}return null;
-}, "~S");
-c$.getScoreModel = Clazz.defineMethod (c$, "getScoreModel",
-function (pwtype) {
-return jalview.schemes.ResidueProperties.scoreMatrices.get (pwtype);
-}, "~S");
-c$.getPAM250 = Clazz.defineMethod (c$, "getPAM250",
-function (c, d) {
-var a = jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)];
-var b = jalview.schemes.ResidueProperties.aaIndex[d.charCodeAt (0)];
-var pog = jalview.schemes.ResidueProperties.PAM250[a][b];
-return pog;
-}, "~S,~S");
-c$.getDssp3state = Clazz.defineMethod (c$, "getDssp3state",
-function (ssstring) {
-if (ssstring == null) {
-return null;
-}var ss = new StringBuffer ();
-for (var i = 0; i < ssstring.length; i++) {
-var ssc = ssstring.substring (i, i + 1);
-if (jalview.schemes.ResidueProperties.toDssp3State.containsKey (ssc)) {
-ss.append (jalview.schemes.ResidueProperties.toDssp3State.get (ssc));
-} else {
-ss.append (" ");
-}}
-return ss.toString ();
-}, "~S");
-c$.getRNASecStrucState = Clazz.defineMethod (c$, "getRNASecStrucState",
-function (ssstring) {
-if (ssstring == null) {
-return null;
-}var ss = new StringBuffer ();
-for (var i = 0; i < ssstring.length; i++) {
-var ssc = ssstring.substring (i, i + 1);
-if (jalview.schemes.ResidueProperties.toRNAssState.containsKey (ssc)) {
-ss.append (ssc);
-} else {
-ss.append (" ");
-}}
-return ss.toString ();
-}, "~S");
-c$.isCloseParenRNA = Clazz.defineMethod (c$, "isCloseParenRNA",
-function (dc) {
-return jalview.schemes.ResidueProperties.RNAcloseParen[dc.charCodeAt (0)];
-}, "~S");
-c$.getResidues = Clazz.defineMethod (c$, "getResidues",
-function (nucleotide, includeAmbiguous) {
-var result = new java.util.ArrayList ();
-if (nucleotide) {
-for (var nuc, $nuc = jalview.schemes.ResidueProperties.nucleotideName.keySet ().iterator (); $nuc.hasNext () && ((nuc = $nuc.next ()) || true);) {
-var val = jalview.schemes.ResidueProperties.nucleotideIndex[nuc.charCodeAt (0)];
-if ((!includeAmbiguous && val > 4) || (val >= 10)) {
-continue;
-}nuc = nuc.toUpperCase ();
-if (!result.contains (nuc)) {
-result.add (nuc);
-}}
-} else {
-for (var res, $res = jalview.schemes.ResidueProperties.aa3Hash.keySet ().iterator (); $res.hasNext () && ((res = $res.next ()) || true);) {
-var index = jalview.schemes.ResidueProperties.aa3Hash.get (res).intValue ();
-if ((!includeAmbiguous && index >= 20) || index >= 23) {
-continue;
-}res = res.toUpperCase ();
-if (!result.contains (res)) {
-result.add (res);
-}}
-}return result;
-}, "~B,~B");
-c$.scoreMatrices = c$.prototype.scoreMatrices = new java.util.Hashtable ();
-Clazz.defineStatics (c$,
-"aaIndex", null,
-"nucleotideIndex", null,
-"purinepyrimidineIndex", null);
-c$.aa3Hash = c$.prototype.aa3Hash = new java.util.HashMap ();
-c$.aa2Triplet = c$.prototype.aa2Triplet = new java.util.HashMap ();
-c$.nucleotideName = c$.prototype.nucleotideName = new java.util.HashMap ();
-{
-jalview.schemes.ResidueProperties.aaIndex = Clazz.newIntArray (255, 0);
-for (var i = 0; i < 255; i++) {
-jalview.schemes.ResidueProperties.aaIndex[i] = 23;
-}
-jalview.schemes.ResidueProperties.aaIndex['A'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.aaIndex['R'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.aaIndex['N'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.aaIndex['D'.charCodeAt (0)] = 3;
-jalview.schemes.ResidueProperties.aaIndex['C'.charCodeAt (0)] = 4;
-jalview.schemes.ResidueProperties.aaIndex['Q'.charCodeAt (0)] = 5;
-jalview.schemes.ResidueProperties.aaIndex['E'.charCodeAt (0)] = 6;
-jalview.schemes.ResidueProperties.aaIndex['G'.charCodeAt (0)] = 7;
-jalview.schemes.ResidueProperties.aaIndex['H'.charCodeAt (0)] = 8;
-jalview.schemes.ResidueProperties.aaIndex['I'.charCodeAt (0)] = 9;
-jalview.schemes.ResidueProperties.aaIndex['L'.charCodeAt (0)] = 10;
-jalview.schemes.ResidueProperties.aaIndex['K'.charCodeAt (0)] = 11;
-jalview.schemes.ResidueProperties.aaIndex['M'.charCodeAt (0)] = 12;
-jalview.schemes.ResidueProperties.aaIndex['F'.charCodeAt (0)] = 13;
-jalview.schemes.ResidueProperties.aaIndex['P'.charCodeAt (0)] = 14;
-jalview.schemes.ResidueProperties.aaIndex['S'.charCodeAt (0)] = 15;
-jalview.schemes.ResidueProperties.aaIndex['T'.charCodeAt (0)] = 16;
-jalview.schemes.ResidueProperties.aaIndex['W'.charCodeAt (0)] = 17;
-jalview.schemes.ResidueProperties.aaIndex['Y'.charCodeAt (0)] = 18;
-jalview.schemes.ResidueProperties.aaIndex['V'.charCodeAt (0)] = 19;
-jalview.schemes.ResidueProperties.aaIndex['B'.charCodeAt (0)] = 20;
-jalview.schemes.ResidueProperties.aaIndex['Z'.charCodeAt (0)] = 21;
-jalview.schemes.ResidueProperties.aaIndex['X'.charCodeAt (0)] = 22;
-jalview.schemes.ResidueProperties.aaIndex['U'.charCodeAt (0)] = 22;
-jalview.schemes.ResidueProperties.aaIndex['a'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.aaIndex['r'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.aaIndex['n'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.aaIndex['d'.charCodeAt (0)] = 3;
-jalview.schemes.ResidueProperties.aaIndex['c'.charCodeAt (0)] = 4;
-jalview.schemes.ResidueProperties.aaIndex['q'.charCodeAt (0)] = 5;
-jalview.schemes.ResidueProperties.aaIndex['e'.charCodeAt (0)] = 6;
-jalview.schemes.ResidueProperties.aaIndex['g'.charCodeAt (0)] = 7;
-jalview.schemes.ResidueProperties.aaIndex['h'.charCodeAt (0)] = 8;
-jalview.schemes.ResidueProperties.aaIndex['i'.charCodeAt (0)] = 9;
-jalview.schemes.ResidueProperties.aaIndex['l'.charCodeAt (0)] = 10;
-jalview.schemes.ResidueProperties.aaIndex['k'.charCodeAt (0)] = 11;
-jalview.schemes.ResidueProperties.aaIndex['m'.charCodeAt (0)] = 12;
-jalview.schemes.ResidueProperties.aaIndex['f'.charCodeAt (0)] = 13;
-jalview.schemes.ResidueProperties.aaIndex['p'.charCodeAt (0)] = 14;
-jalview.schemes.ResidueProperties.aaIndex['s'.charCodeAt (0)] = 15;
-jalview.schemes.ResidueProperties.aaIndex['t'.charCodeAt (0)] = 16;
-jalview.schemes.ResidueProperties.aaIndex['w'.charCodeAt (0)] = 17;
-jalview.schemes.ResidueProperties.aaIndex['y'.charCodeAt (0)] = 18;
-jalview.schemes.ResidueProperties.aaIndex['v'.charCodeAt (0)] = 19;
-jalview.schemes.ResidueProperties.aaIndex['b'.charCodeAt (0)] = 20;
-jalview.schemes.ResidueProperties.aaIndex['z'.charCodeAt (0)] = 21;
-jalview.schemes.ResidueProperties.aaIndex['x'.charCodeAt (0)] = 22;
-jalview.schemes.ResidueProperties.aaIndex['u'.charCodeAt (0)] = 22;
-}Clazz.defineStatics (c$,
-"maxProteinIndex", 23,
-"maxNucleotideIndex", 10);
-{
-jalview.schemes.ResidueProperties.nucleotideIndex = Clazz.newIntArray (255, 0);
-for (var i = 0; i < 255; i++) {
-jalview.schemes.ResidueProperties.nucleotideIndex[i] = 10;
-}
-jalview.schemes.ResidueProperties.nucleotideIndex['A'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.nucleotideIndex['a'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.nucleotideIndex['C'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.nucleotideIndex['c'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.nucleotideIndex['G'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.nucleotideIndex['g'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.nucleotideIndex['T'.charCodeAt (0)] = 3;
-jalview.schemes.ResidueProperties.nucleotideIndex['t'.charCodeAt (0)] = 3;
-jalview.schemes.ResidueProperties.nucleotideIndex['U'.charCodeAt (0)] = 4;
-jalview.schemes.ResidueProperties.nucleotideIndex['u'.charCodeAt (0)] = 4;
-jalview.schemes.ResidueProperties.nucleotideIndex['I'.charCodeAt (0)] = 5;
-jalview.schemes.ResidueProperties.nucleotideIndex['i'.charCodeAt (0)] = 5;
-jalview.schemes.ResidueProperties.nucleotideIndex['X'.charCodeAt (0)] = 6;
-jalview.schemes.ResidueProperties.nucleotideIndex['x'.charCodeAt (0)] = 6;
-jalview.schemes.ResidueProperties.nucleotideIndex['R'.charCodeAt (0)] = 7;
-jalview.schemes.ResidueProperties.nucleotideIndex['r'.charCodeAt (0)] = 7;
-jalview.schemes.ResidueProperties.nucleotideIndex['Y'.charCodeAt (0)] = 8;
-jalview.schemes.ResidueProperties.nucleotideIndex['y'.charCodeAt (0)] = 8;
-jalview.schemes.ResidueProperties.nucleotideIndex['N'.charCodeAt (0)] = 9;
-jalview.schemes.ResidueProperties.nucleotideIndex['n'.charCodeAt (0)] = 9;
-jalview.schemes.ResidueProperties.nucleotideName.put ("A", "Adenine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("a", "Adenine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("G", "Guanine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("g", "Guanine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("C", "Cytosine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("c", "Cytosine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("T", "Thymine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("t", "Thymine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("U", "Uracil");
-jalview.schemes.ResidueProperties.nucleotideName.put ("u", "Uracil");
-jalview.schemes.ResidueProperties.nucleotideName.put ("I", "Inosine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("i", "Inosine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("X", "Xanthine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("x", "Xanthine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("R", "Unknown Purine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("r", "Unknown Purine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("Y", "Unknown Pyrimidine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("y", "Unknown Pyrimidine");
-jalview.schemes.ResidueProperties.nucleotideName.put ("N", "Unknown");
-jalview.schemes.ResidueProperties.nucleotideName.put ("n", "Unknown");
-jalview.schemes.ResidueProperties.nucleotideName.put ("W", "Weak nucleotide (A or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("w", "Weak nucleotide (A or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("S", "Strong nucleotide (G or C)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("s", "Strong nucleotide (G or C)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("M", "Amino (A or C)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("m", "Amino (A or C)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("K", "Keto (G or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("k", "Keto (G or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("B", "Not A (G or C or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("b", "Not A (G or C or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("H", "Not G (A or C or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("h", "Not G (A or C or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("D", "Not C (A or G or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("d", "Not C (A or G or T)");
-jalview.schemes.ResidueProperties.nucleotideName.put ("V", "Not T (A or G or C");
-jalview.schemes.ResidueProperties.nucleotideName.put ("v", "Not T (A or G or C");
-}{
-jalview.schemes.ResidueProperties.purinepyrimidineIndex = Clazz.newIntArray (255, 0);
-for (var i = 0; i < 255; i++) {
-jalview.schemes.ResidueProperties.purinepyrimidineIndex[i] = 3;
-}
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['A'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['a'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['C'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['c'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['G'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['g'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['T'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['t'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['U'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['u'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['I'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['i'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['X'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['x'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['R'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['r'.charCodeAt (0)] = 0;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['Y'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['y'.charCodeAt (0)] = 1;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['N'.charCodeAt (0)] = 2;
-jalview.schemes.ResidueProperties.purinepyrimidineIndex['n'.charCodeAt (0)] = 2;
-}{
-jalview.schemes.ResidueProperties.aa3Hash.put ("ALA", new Integer (0));
-jalview.schemes.ResidueProperties.aa3Hash.put ("ARG", new Integer (1));
-jalview.schemes.ResidueProperties.aa3Hash.put ("ASN", new Integer (2));
-jalview.schemes.ResidueProperties.aa3Hash.put ("ASP", new Integer (3));
-jalview.schemes.ResidueProperties.aa3Hash.put ("CYS", new Integer (4));
-jalview.schemes.ResidueProperties.aa3Hash.put ("GLN", new Integer (5));
-jalview.schemes.ResidueProperties.aa3Hash.put ("GLU", new Integer (6));
-jalview.schemes.ResidueProperties.aa3Hash.put ("GLY", new Integer (7));
-jalview.schemes.ResidueProperties.aa3Hash.put ("HIS", new Integer (8));
-jalview.schemes.ResidueProperties.aa3Hash.put ("ILE", new Integer (9));
-jalview.schemes.ResidueProperties.aa3Hash.put ("LEU", new Integer (10));
-jalview.schemes.ResidueProperties.aa3Hash.put ("LYS", new Integer (11));
-jalview.schemes.ResidueProperties.aa3Hash.put ("MET", new Integer (12));
-jalview.schemes.ResidueProperties.aa3Hash.put ("PHE", new Integer (13));
-jalview.schemes.ResidueProperties.aa3Hash.put ("PRO", new Integer (14));
-jalview.schemes.ResidueProperties.aa3Hash.put ("SER", new Integer (15));
-jalview.schemes.ResidueProperties.aa3Hash.put ("THR", new Integer (16));
-jalview.schemes.ResidueProperties.aa3Hash.put ("TRP", new Integer (17));
-jalview.schemes.ResidueProperties.aa3Hash.put ("TYR", new Integer (18));
-jalview.schemes.ResidueProperties.aa3Hash.put ("VAL", new Integer (19));
-jalview.schemes.ResidueProperties.aa3Hash.put ("ASX", new Integer (20));
-jalview.schemes.ResidueProperties.aa3Hash.put ("GLX", new Integer (21));
-jalview.schemes.ResidueProperties.aa3Hash.put ("XAA", new Integer (22));
-jalview.schemes.ResidueProperties.aa3Hash.put ("-", new Integer (23));
-jalview.schemes.ResidueProperties.aa3Hash.put ("*", new Integer (23));
-jalview.schemes.ResidueProperties.aa3Hash.put (".", new Integer (23));
-jalview.schemes.ResidueProperties.aa3Hash.put (" ", new Integer (23));
-jalview.schemes.ResidueProperties.aa3Hash.put ("Gap", new Integer (23));
-}{
-jalview.schemes.ResidueProperties.aa2Triplet.put ("A", "ALA");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("a", "ALA");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("R", "ARG");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("r", "ARG");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("N", "ASN");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("n", "ASN");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("D", "ASP");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("d", "ASP");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("C", "CYS");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("c", "CYS");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("Q", "GLN");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("q", "GLN");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("E", "GLU");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("e", "GLU");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("G", "GLY");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("g", "GLY");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("H", "HIS");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("h", "HIS");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("I", "ILE");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("i", "ILE");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("L", "LEU");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("l", "LEU");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("K", "LYS");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("k", "LYS");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("M", "MET");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("m", "MET");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("F", "PHE");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("f", "PHE");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("P", "PRO");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("p", "PRO");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("S", "SER");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("s", "SER");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("T", "THR");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("t", "THR");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("W", "TRP");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("w", "TRP");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("Y", "TYR");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("y", "TYR");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("V", "VAL");
-jalview.schemes.ResidueProperties.aa2Triplet.put ("v", "VAL");
-}Clazz.defineStatics (c$,
-"aa", Clazz.newArray (-1, ["A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "_", "*", ".", " "]));
-c$.midBlue = c$.prototype.midBlue = new java.awt.Color (100, 100, 255);
-c$.scaleColours = c$.prototype.scaleColours = new java.util.Vector ();
-{
-jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (114, 0, 147));
-jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (156, 0, 98));
-jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (190, 0, 0));
-jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.red);
-jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (255, 125, 0));
-jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.orange);
-jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (255, 194, 85));
-jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.yellow);
-jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (255, 255, 181));
-jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.white);
-}c$.taylor = c$.prototype.taylor = Clazz.newArray (-1, [ new java.awt.Color (204, 255, 0), new java.awt.Color (0, 0, 255), new java.awt.Color (204, 0, 255), new java.awt.Color (255, 0, 0), new java.awt.Color (255, 255, 0), new java.awt.Color (255, 0, 204), new java.awt.Color (255, 0, 102), new java.awt.Color (255, 153, 0), new java.awt.Color (0, 102, 255), new java.awt.Color (102, 255, 0), new java.awt.Color (51, 255, 0), new java.awt.Color (102, 0, 255), new java.awt.Color (0, 255, 0), new java.awt.Color (0, 255, 102), new java.awt.Color (255, 204, 0), new java.awt.Color (255, 51, 0), new java.awt.Color (255, 102, 0), new java.awt.Color (0, 204, 255), new java.awt.Color (0, 255, 204), new java.awt.Color (153, 255, 0), java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white]);
-c$.nucleotide = c$.prototype.nucleotide = Clazz.newArray (-1, [ new java.awt.Color (100, 247, 63), new java.awt.Color (255, 179, 64), new java.awt.Color (235, 65, 60), new java.awt.Color (60, 136, 238), new java.awt.Color (60, 136, 238), java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white]);
-c$.purinepyrimidine = c$.prototype.purinepyrimidine = Clazz.newArray (-1, [ new java.awt.Color (255, 131, 250), new java.awt.Color (64, 224, 208), java.awt.Color.white, java.awt.Color.white]);
-c$.zappo = c$.prototype.zappo = Clazz.newArray (-1, [java.awt.Color.pink, jalview.schemes.ResidueProperties.midBlue, java.awt.Color.green, java.awt.Color.red, java.awt.Color.yellow, java.awt.Color.green, java.awt.Color.red, java.awt.Color.magenta, jalview.schemes.ResidueProperties.midBlue, java.awt.Color.pink, java.awt.Color.pink, jalview.schemes.ResidueProperties.midBlue, java.awt.Color.pink, java.awt.Color.orange, java.awt.Color.magenta, java.awt.Color.green, java.awt.Color.green, java.awt.Color.orange, java.awt.Color.orange, java.awt.Color.pink, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white]);
-Clazz.defineStatics (c$,
-"hyd2", Clazz.newDoubleArray (-1, [0.62, 0.29, -0.9, -0.74, 1.19, 0.48, -0.4, 1.38, -1.5, 1.06, 0.64, -0.78, 0.12, -0.85, -2.53, -0.18, -0.05, 1.08, 0.81, 0.0, 0.26, 0.0, 0.0]),
-"helix", Clazz.newDoubleArray (-1, [1.42, 0.98, 0.67, 1.01, 0.70, 1.11, 1.51, 0.57, 1.00, 1.08, 1.21, 1.16, 1.45, 1.13, 0.57, 0.77, 0.83, 1.08, 0.69, 1.06, 0.84, 1.31, 1.00, 0.0]),
-"helixmin", 0.57,
-"helixmax", 1.51,
-"strand", Clazz.newDoubleArray (-1, [0.83, 0.93, 0.89, 0.54, 1.19, 1.10, 0.37, 0.75, 0.87, 1.60, 1.30, 0.74, 1.05, 1.38, 0.55, 0.75, 1.19, 1.37, 1.47, 1.70, 0.72, 0.74, 1.0, 0.0]),
-"strandmin", 0.37,
-"strandmax", 1.7,
-"turn", Clazz.newDoubleArray (-1, [0.66, 0.95, 1.56, 1.46, 1.19, 0.98, 0.74, 1.56, 0.95, 0.47, 0.59, 1.01, 0.60, 0.60, 1.52, 1.43, 0.96, 0.96, 1.14, 0.50, 1.51, 0.86, 1.00, 0, 0]),
-"turnmin", 0.47,
-"turnmax", 1.56,
-"buried", Clazz.newDoubleArray (-1, [1.7, 0.1, 0.4, 0.4, 4.6, 0.3, 0.3, 1.8, 0.8, 3.1, 2.4, 0.05, 1.9, 2.2, 0.6, 0.8, 0.7, 1.6, 0.5, 2.9, 0.4, 0.3, 1.358, 0.00]),
-"buriedmin", 0.05,
-"buriedmax", 4.6,
-"hyd", Clazz.newDoubleArray (-1, [1.8, -4.5, -3.5, -3.5, 2.5, -3.5, -3.5, -0.4, -3.2, 4.5, 3.8, -3.9, 1.9, 2.8, -1.6, -0.8, -0.7, -0.9, -1.3, 4.2, -3.5, -3.5, -0.49, 0.0]),
-"hydmax", 4.5,
-"hydmin", -3.9,
-"BLOSUM62", Clazz.newArray (-1, [ Clazz.newIntArray (-1, [4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4]), Clazz.newIntArray (-1, [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4]), Clazz.newIntArray (-1, [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4]), Clazz.newIntArray (-1, [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4]), Clazz.newIntArray (-1, [0, 3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4]), Clazz.newIntArray (-1, [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4]), Clazz.newIntArray (-1, [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4]), Clazz.newIntArray (-1, [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4]), Clazz.newIntArray (-1, [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4]), Clazz.newIntArray (-1, [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4]), Clazz.newIntArray (-1, [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4]), Clazz.newIntArray (-1, [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4]), Clazz.newIntArray (-1, [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4]), Clazz.newIntArray (-1, [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4]), Clazz.newIntArray (-1, [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4]), Clazz.newIntArray (-1, [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4]), Clazz.newIntArray (-1, [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4]), Clazz.newIntArray (-1, [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4]), Clazz.newIntArray (-1, [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4]), Clazz.newIntArray (-1, [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4]), Clazz.newIntArray (-1, [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4]), Clazz.newIntArray (-1, [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4]), Clazz.newIntArray (-1, [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4]), Clazz.newIntArray (-1, [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1])]),
-"PAM250", Clazz.newArray (-1, [ Clazz.newIntArray (-1, [2, -2, 0, 0, -2, 0, 0, 1, -1, -1, -2, -1, -1, -3, 1, 1, 1, -6, -3, 0, 0, 0, 0, -8]), Clazz.newIntArray (-1, [-2, 6, 0, -1, -4, 1, -1, -3, 2, -2, -3, 3, 0, -4, 0, 0, -1, 2, -4, -2, -1, 0, -1, -8]), Clazz.newIntArray (-1, [0, 0, 2, 2, -4, 1, 1, 0, 2, -2, -3, 1, -2, -3, 0, 1, 0, -4, -2, -2, 2, 1, 0, -8]), Clazz.newIntArray (-1, [0, -1, 2, 4, -5, 2, 3, 1, 1, -2, -4, 0, -3, -6, -1, 0, 0, -7, -4, -2, 3, 3, -1, -8]), Clazz.newIntArray (-1, [-2, -4, -4, -5, 12, -5, -5, -3, -3, -2, -6, -5, -5, -4, -3, 0, -2, -8, 0, -2, -4, -5, -3, -8]), Clazz.newIntArray (-1, [0, 1, 1, 2, -5, 4, 2, -1, 3, -2, -2, 1, -1, -5, 0, -1, -1, -5, -4, -2, 1, 3, -1, -8]), Clazz.newIntArray (-1, [0, -1, 1, 3, -5, 2, 4, 0, 1, -2, -3, 0, -2, -5, -1, 0, 0, -7, -4, -2, 3, 3, -1, -8]), Clazz.newIntArray (-1, [1, -3, 0, 1, -3, -1, 0, 5, -2, -3, -4, -2, -3, -5, 0, 1, 0, -7, -5, -1, 0, 0, -1, -8]), Clazz.newIntArray (-1, [-1, 2, 2, 1, -3, 3, 1, -2, 6, -2, -2, 0, -2, -2, 0, -1, -1, -3, 0, -2, 1, 2, -1, -8]), Clazz.newIntArray (-1, [-1, -2, -2, -2, -2, -2, -2, -3, -2, 5, 2, -2, 2, 1, -2, -1, 0, -5, -1, 4, -2, -2, -1, -8]), Clazz.newIntArray (-1, [-2, -3, -3, -4, -6, -2, -3, -4, -2, 2, 6, -3, 4, 2, -3, -3, -2, -2, -1, 2, -3, -3, -1, -8]), Clazz.newIntArray (-1, [-1, 3, 1, 0, -5, 1, 0, -2, 0, -2, -3, 5, 0, -5, -1, 0, 0, -3, -4, -2, 1, 0, -1, -8]), Clazz.newIntArray (-1, [-1, 0, -2, -3, -5, -1, -2, -3, -2, 2, 4, 0, 6, 0, -2, -2, -1, -4, -2, 2, -2, -2, -1, -8]), Clazz.newIntArray (-1, [-3, -4, -3, -6, -4, -5, -5, -5, -2, 1, 2, -5, 0, 9, -5, -3, -3, 0, 7, -1, -4, -5, -2, -8]), Clazz.newIntArray (-1, [1, 0, 0, -1, -3, 0, -1, 0, 0, -2, -3, -1, -2, -5, 6, 1, 0, -6, -5, -1, -1, 0, -1, -8]), Clazz.newIntArray (-1, [1, 0, 1, 0, 0, -1, 0, 1, -1, -1, -3, 0, -2, -3, 1, 2, 1, -2, -3, -1, 0, 0, 0, -8]), Clazz.newIntArray (-1, [1, -1, 0, 0, -2, -1, 0, 0, -1, 0, -2, 0, -1, -3, 0, 1, 3, -5, -3, 0, 0, -1, 0, -8]), Clazz.newIntArray (-1, [-6, 2, -4, -7, -8, -5, -7, -7, -3, -5, -2, -3, -4, 0, -6, -2, -5, 17, 0, -6, -5, -6, -4, -8]), Clazz.newIntArray (-1, [-3, -4, -2, -4, 0, -4, -4, -5, 0, -1, -1, -4, -2, 7, -5, -3, -3, 0, 10, -2, -3, -4, -2, -8]), Clazz.newIntArray (-1, [0, -2, -2, -2, -2, -2, -2, -1, -2, 4, 2, -2, 2, -1, -1, -1, 0, -6, -2, 4, -2, -2, -1, -8]), Clazz.newIntArray (-1, [0, -1, 2, 3, -4, 1, 3, 0, 1, -2, -3, 1, -2, -4, -1, 0, 0, -5, -3, -2, 3, 2, -1, -8]), Clazz.newIntArray (-1, [0, 0, 1, 3, -5, 3, 3, 0, 2, -2, -3, 0, -2, -5, 0, 0, -1, -6, -4, -2, 2, 3, -1, -8]), Clazz.newIntArray (-1, [0, -1, 0, -1, -3, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, 0, 0, -4, -2, -1, -1, -1, -1, -8]), Clazz.newIntArray (-1, [-8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1])]));
-c$.ssHash = c$.prototype.ssHash = new java.util.Hashtable ();
-{
-jalview.schemes.ResidueProperties.ssHash.put ("H", java.awt.Color.magenta);
-jalview.schemes.ResidueProperties.ssHash.put ("E", java.awt.Color.yellow);
-jalview.schemes.ResidueProperties.ssHash.put ("-", java.awt.Color.white);
-jalview.schemes.ResidueProperties.ssHash.put (".", java.awt.Color.white);
-jalview.schemes.ResidueProperties.ssHash.put ("S", java.awt.Color.cyan);
-jalview.schemes.ResidueProperties.ssHash.put ("T", java.awt.Color.blue);
-jalview.schemes.ResidueProperties.ssHash.put ("G", java.awt.Color.pink);
-jalview.schemes.ResidueProperties.ssHash.put ("I", java.awt.Color.pink);
-jalview.schemes.ResidueProperties.ssHash.put ("B", java.awt.Color.yellow);
-}Clazz.defineStatics (c$,
-"DNA", Clazz.newArray (-1, [ Clazz.newIntArray (-1, [10, -8, -8, -8, -8, 1, 1, 1, -8, 1, 1]), Clazz.newIntArray (-1, [-8, 10, -8, -8, -8, 1, 1, -8, 1, 1, 1]), Clazz.newIntArray (-1, [-8, -8, 10, -8, -8, 1, 1, 1, -8, 1, 1]), Clazz.newIntArray (-1, [-8, -8, -8, 10, 10, 1, 1, -8, 1, 1, 1]), Clazz.newIntArray (-1, [-8, -8, -8, 10, 10, 1, 1, -8, 1, 1, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 10, 0, 0, 0, 1, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 0, 10, 0, 0, 1, 1]), Clazz.newIntArray (-1, [1, -8, 1, -8, -8, 0, 0, 10, -8, 1, 1]), Clazz.newIntArray (-1, [-8, 1, -8, 1, 1, 0, 0, -8, 10, 1, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])]));
-{
-jalview.schemes.ResidueProperties.scoreMatrices.put ("BLOSUM62", new jalview.schemes.ScoreMatrix ("BLOSUM62", jalview.schemes.ResidueProperties.BLOSUM62, 0));
-jalview.schemes.ResidueProperties.scoreMatrices.put ("PAM250", new jalview.schemes.ScoreMatrix ("PAM250", jalview.schemes.ResidueProperties.PAM250, 0));
-jalview.schemes.ResidueProperties.scoreMatrices.put ("DNA", new jalview.schemes.ScoreMatrix ("DNA", jalview.schemes.ResidueProperties.DNA, 1));
-}c$.pidColours = c$.prototype.pidColours = Clazz.newArray (-1, [jalview.schemes.ResidueProperties.midBlue, new java.awt.Color (153, 153, 255), new java.awt.Color (204, 204, 255)]);
-Clazz.defineStatics (c$,
-"pidThresholds", Clazz.newFloatArray (-1, [80, 60, 40]));
-c$.codonHash = c$.prototype.codonHash = new java.util.HashMap ();
-c$.Lys = c$.prototype.Lys = new java.util.ArrayList ();
-c$.Asn = c$.prototype.Asn = new java.util.ArrayList ();
-c$.Gln = c$.prototype.Gln = new java.util.ArrayList ();
-c$.His = c$.prototype.His = new java.util.ArrayList ();
-c$.Glu = c$.prototype.Glu = new java.util.ArrayList ();
-c$.Asp = c$.prototype.Asp = new java.util.ArrayList ();
-c$.Tyr = c$.prototype.Tyr = new java.util.ArrayList ();
-c$.Thr = c$.prototype.Thr = new java.util.ArrayList ();
-c$.Pro = c$.prototype.Pro = new java.util.ArrayList ();
-c$.Ala = c$.prototype.Ala = new java.util.ArrayList ();
-c$.Ser = c$.prototype.Ser = new java.util.ArrayList ();
-c$.Arg = c$.prototype.Arg = new java.util.ArrayList ();
-c$.Gly = c$.prototype.Gly = new java.util.ArrayList ();
-c$.Trp = c$.prototype.Trp = new java.util.ArrayList ();
-c$.Cys = c$.prototype.Cys = new java.util.ArrayList ();
-c$.Ile = c$.prototype.Ile = new java.util.ArrayList ();
-c$.Met = c$.prototype.Met = new java.util.ArrayList ();
-c$.Leu = c$.prototype.Leu = new java.util.ArrayList ();
-c$.Val = c$.prototype.Val = new java.util.ArrayList ();
-c$.Phe = c$.prototype.Phe = new java.util.ArrayList ();
-c$.STOP = c$.prototype.STOP = new java.util.ArrayList ();
-Clazz.defineStatics (c$,
-"START", "ATG");
-{
-jalview.schemes.ResidueProperties.codonHash.put ("K", jalview.schemes.ResidueProperties.Lys);
-jalview.schemes.ResidueProperties.codonHash.put ("N", jalview.schemes.ResidueProperties.Asn);
-jalview.schemes.ResidueProperties.codonHash.put ("Q", jalview.schemes.ResidueProperties.Gln);
-jalview.schemes.ResidueProperties.codonHash.put ("H", jalview.schemes.ResidueProperties.His);
-jalview.schemes.ResidueProperties.codonHash.put ("E", jalview.schemes.ResidueProperties.Glu);
-jalview.schemes.ResidueProperties.codonHash.put ("D", jalview.schemes.ResidueProperties.Asp);
-jalview.schemes.ResidueProperties.codonHash.put ("Y", jalview.schemes.ResidueProperties.Tyr);
-jalview.schemes.ResidueProperties.codonHash.put ("T", jalview.schemes.ResidueProperties.Thr);
-jalview.schemes.ResidueProperties.codonHash.put ("P", jalview.schemes.ResidueProperties.Pro);
-jalview.schemes.ResidueProperties.codonHash.put ("A", jalview.schemes.ResidueProperties.Ala);
-jalview.schemes.ResidueProperties.codonHash.put ("S", jalview.schemes.ResidueProperties.Ser);
-jalview.schemes.ResidueProperties.codonHash.put ("R", jalview.schemes.ResidueProperties.Arg);
-jalview.schemes.ResidueProperties.codonHash.put ("G", jalview.schemes.ResidueProperties.Gly);
-jalview.schemes.ResidueProperties.codonHash.put ("W", jalview.schemes.ResidueProperties.Trp);
-jalview.schemes.ResidueProperties.codonHash.put ("C", jalview.schemes.ResidueProperties.Cys);
-jalview.schemes.ResidueProperties.codonHash.put ("I", jalview.schemes.ResidueProperties.Ile);
-jalview.schemes.ResidueProperties.codonHash.put ("M", jalview.schemes.ResidueProperties.Met);
-jalview.schemes.ResidueProperties.codonHash.put ("L", jalview.schemes.ResidueProperties.Leu);
-jalview.schemes.ResidueProperties.codonHash.put ("V", jalview.schemes.ResidueProperties.Val);
-jalview.schemes.ResidueProperties.codonHash.put ("F", jalview.schemes.ResidueProperties.Phe);
-jalview.schemes.ResidueProperties.codonHash.put ("STOP", jalview.schemes.ResidueProperties.STOP);
-}c$.ambiguityCodes = c$.prototype.ambiguityCodes = new java.util.Hashtable ();
-c$.codonHash2 = c$.prototype.codonHash2 = new java.util.Hashtable ();
-c$._ambiguityCodes = c$.prototype._ambiguityCodes = new java.util.Hashtable ();
-{
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("R", Clazz.newArray (-1, ["A", "G"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("Y", Clazz.newArray (-1, ["T", "C"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("W", Clazz.newArray (-1, ["A", "T"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("S", Clazz.newArray (-1, ["G", "C"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("M", Clazz.newArray (-1, ["A", "C"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("K", Clazz.newArray (-1, ["G", "T"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("H", Clazz.newArray (-1, ["A", "T", "C"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("B", Clazz.newArray (-1, ["G", "T", "C"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("V", Clazz.newArray (-1, ["G", "A", "C"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("D", Clazz.newArray (-1, ["G", "A", "T"]));
-jalview.schemes.ResidueProperties.ambiguityCodes.put ("N", Clazz.newArray (-1, ["G", "A", "T", "C"]));
-jalview.schemes.ResidueProperties.codonHash2.put ("AAA", "K");
-jalview.schemes.ResidueProperties.codonHash2.put ("AAG", "K");
-jalview.schemes.ResidueProperties.codonHash2.put ("AAC", "N");
-jalview.schemes.ResidueProperties.codonHash2.put ("AAT", "N");
-jalview.schemes.ResidueProperties.codonHash2.put ("CAA", "Q");
-jalview.schemes.ResidueProperties.codonHash2.put ("CAG", "Q");
-jalview.schemes.ResidueProperties.codonHash2.put ("CAC", "H");
-jalview.schemes.ResidueProperties.codonHash2.put ("CAT", "H");
-jalview.schemes.ResidueProperties.codonHash2.put ("GAA", "E");
-jalview.schemes.ResidueProperties.codonHash2.put ("GAG", "E");
-jalview.schemes.ResidueProperties.codonHash2.put ("GAC", "D");
-jalview.schemes.ResidueProperties.codonHash2.put ("GAT", "D");
-jalview.schemes.ResidueProperties.codonHash2.put ("TAC", "Y");
-jalview.schemes.ResidueProperties.codonHash2.put ("TAT", "Y");
-jalview.schemes.ResidueProperties.codonHash2.put ("ACA", "T");
-jalview.schemes.ResidueProperties.codonHash2.put ("ACC", "T");
-jalview.schemes.ResidueProperties.codonHash2.put ("ACT", "T");
-jalview.schemes.ResidueProperties.codonHash2.put ("ACG", "T");
-jalview.schemes.ResidueProperties.codonHash2.put ("CCA", "P");
-jalview.schemes.ResidueProperties.codonHash2.put ("CCG", "P");
-jalview.schemes.ResidueProperties.codonHash2.put ("CCC", "P");
-jalview.schemes.ResidueProperties.codonHash2.put ("CCT", "P");
-jalview.schemes.ResidueProperties.codonHash2.put ("GCA", "A");
-jalview.schemes.ResidueProperties.codonHash2.put ("GCG", "A");
-jalview.schemes.ResidueProperties.codonHash2.put ("GCC", "A");
-jalview.schemes.ResidueProperties.codonHash2.put ("GCT", "A");
-jalview.schemes.ResidueProperties.codonHash2.put ("TCA", "S");
-jalview.schemes.ResidueProperties.codonHash2.put ("TCG", "S");
-jalview.schemes.ResidueProperties.codonHash2.put ("TCC", "S");
-jalview.schemes.ResidueProperties.codonHash2.put ("TCT", "S");
-jalview.schemes.ResidueProperties.codonHash2.put ("AGC", "S");
-jalview.schemes.ResidueProperties.codonHash2.put ("AGT", "S");
-jalview.schemes.ResidueProperties.codonHash2.put ("AGA", "R");
-jalview.schemes.ResidueProperties.codonHash2.put ("AGG", "R");
-jalview.schemes.ResidueProperties.codonHash2.put ("CGA", "R");
-jalview.schemes.ResidueProperties.codonHash2.put ("CGG", "R");
-jalview.schemes.ResidueProperties.codonHash2.put ("CGC", "R");
-jalview.schemes.ResidueProperties.codonHash2.put ("CGT", "R");
-jalview.schemes.ResidueProperties.codonHash2.put ("GGA", "G");
-jalview.schemes.ResidueProperties.codonHash2.put ("GGG", "G");
-jalview.schemes.ResidueProperties.codonHash2.put ("GGC", "G");
-jalview.schemes.ResidueProperties.codonHash2.put ("GGT", "G");
-jalview.schemes.ResidueProperties.codonHash2.put ("TGA", "*");
-jalview.schemes.ResidueProperties.codonHash2.put ("TAA", "*");
-jalview.schemes.ResidueProperties.codonHash2.put ("TAG", "*");
-jalview.schemes.ResidueProperties.codonHash2.put ("TGG", "W");
-jalview.schemes.ResidueProperties.codonHash2.put ("TGC", "C");
-jalview.schemes.ResidueProperties.codonHash2.put ("TGT", "C");
-jalview.schemes.ResidueProperties.codonHash2.put ("ATA", "I");
-jalview.schemes.ResidueProperties.codonHash2.put ("ATC", "I");
-jalview.schemes.ResidueProperties.codonHash2.put ("ATT", "I");
-jalview.schemes.ResidueProperties.codonHash2.put ("ATG", "M");
-jalview.schemes.ResidueProperties.codonHash2.put ("CTA", "L");
-jalview.schemes.ResidueProperties.codonHash2.put ("CTG", "L");
-jalview.schemes.ResidueProperties.codonHash2.put ("CTC", "L");
-jalview.schemes.ResidueProperties.codonHash2.put ("CTT", "L");
-jalview.schemes.ResidueProperties.codonHash2.put ("TTA", "L");
-jalview.schemes.ResidueProperties.codonHash2.put ("TTG", "L");
-jalview.schemes.ResidueProperties.codonHash2.put ("GTA", "V");
-jalview.schemes.ResidueProperties.codonHash2.put ("GTG", "V");
-jalview.schemes.ResidueProperties.codonHash2.put ("GTC", "V");
-jalview.schemes.ResidueProperties.codonHash2.put ("GTT", "V");
-jalview.schemes.ResidueProperties.codonHash2.put ("TTC", "F");
-jalview.schemes.ResidueProperties.codonHash2.put ("TTT", "F");
-jalview.schemes.ResidueProperties.buildAmbiguityCodonSet ();
-}{
-jalview.schemes.ResidueProperties.Lys.add ("AAA");
-jalview.schemes.ResidueProperties.Lys.add ("AAG");
-jalview.schemes.ResidueProperties.Asn.add ("AAC");
-jalview.schemes.ResidueProperties.Asn.add ("AAT");
-jalview.schemes.ResidueProperties.Gln.add ("CAA");
-jalview.schemes.ResidueProperties.Gln.add ("CAG");
-jalview.schemes.ResidueProperties.His.add ("CAC");
-jalview.schemes.ResidueProperties.His.add ("CAT");
-jalview.schemes.ResidueProperties.Glu.add ("GAA");
-jalview.schemes.ResidueProperties.Glu.add ("GAG");
-jalview.schemes.ResidueProperties.Asp.add ("GAC");
-jalview.schemes.ResidueProperties.Asp.add ("GAT");
-jalview.schemes.ResidueProperties.Tyr.add ("TAC");
-jalview.schemes.ResidueProperties.Tyr.add ("TAT");
-jalview.schemes.ResidueProperties.Thr.add ("ACA");
-jalview.schemes.ResidueProperties.Thr.add ("ACG");
-jalview.schemes.ResidueProperties.Thr.add ("ACC");
-jalview.schemes.ResidueProperties.Thr.add ("ACT");
-jalview.schemes.ResidueProperties.Pro.add ("CCA");
-jalview.schemes.ResidueProperties.Pro.add ("CCG");
-jalview.schemes.ResidueProperties.Pro.add ("CCC");
-jalview.schemes.ResidueProperties.Pro.add ("CCT");
-jalview.schemes.ResidueProperties.Ala.add ("GCA");
-jalview.schemes.ResidueProperties.Ala.add ("GCG");
-jalview.schemes.ResidueProperties.Ala.add ("GCC");
-jalview.schemes.ResidueProperties.Ala.add ("GCT");
-jalview.schemes.ResidueProperties.Ser.add ("TCA");
-jalview.schemes.ResidueProperties.Ser.add ("TCG");
-jalview.schemes.ResidueProperties.Ser.add ("TCC");
-jalview.schemes.ResidueProperties.Ser.add ("TCT");
-jalview.schemes.ResidueProperties.Ser.add ("AGC");
-jalview.schemes.ResidueProperties.Ser.add ("AGT");
-jalview.schemes.ResidueProperties.Arg.add ("AGA");
-jalview.schemes.ResidueProperties.Arg.add ("AGG");
-jalview.schemes.ResidueProperties.Arg.add ("CGA");
-jalview.schemes.ResidueProperties.Arg.add ("CGG");
-jalview.schemes.ResidueProperties.Arg.add ("CGC");
-jalview.schemes.ResidueProperties.Arg.add ("CGT");
-jalview.schemes.ResidueProperties.Gly.add ("GGA");
-jalview.schemes.ResidueProperties.Gly.add ("GGG");
-jalview.schemes.ResidueProperties.Gly.add ("GGC");
-jalview.schemes.ResidueProperties.Gly.add ("GGT");
-jalview.schemes.ResidueProperties.STOP.add ("TGA");
-jalview.schemes.ResidueProperties.STOP.add ("TAA");
-jalview.schemes.ResidueProperties.STOP.add ("TAG");
-jalview.schemes.ResidueProperties.Trp.add ("TGG");
-jalview.schemes.ResidueProperties.Cys.add ("TGC");
-jalview.schemes.ResidueProperties.Cys.add ("TGT");
-jalview.schemes.ResidueProperties.Ile.add ("ATA");
-jalview.schemes.ResidueProperties.Ile.add ("ATC");
-jalview.schemes.ResidueProperties.Ile.add ("ATT");
-jalview.schemes.ResidueProperties.Met.add ("ATG");
-jalview.schemes.ResidueProperties.Leu.add ("CTA");
-jalview.schemes.ResidueProperties.Leu.add ("CTG");
-jalview.schemes.ResidueProperties.Leu.add ("CTC");
-jalview.schemes.ResidueProperties.Leu.add ("CTT");
-jalview.schemes.ResidueProperties.Leu.add ("TTA");
-jalview.schemes.ResidueProperties.Leu.add ("TTG");
-jalview.schemes.ResidueProperties.Val.add ("GTA");
-jalview.schemes.ResidueProperties.Val.add ("GTG");
-jalview.schemes.ResidueProperties.Val.add ("GTC");
-jalview.schemes.ResidueProperties.Val.add ("GTT");
-jalview.schemes.ResidueProperties.Phe.add ("TTC");
-jalview.schemes.ResidueProperties.Phe.add ("TTT");
-}c$.propHash = c$.prototype.propHash = new java.util.Hashtable ();
-c$.hydrophobic = c$.prototype.hydrophobic = new java.util.Hashtable ();
-c$.polar = c$.prototype.polar = new java.util.Hashtable ();
-c$.small = c$.prototype.small = new java.util.Hashtable ();
-c$.positive = c$.prototype.positive = new java.util.Hashtable ();
-c$.negative = c$.prototype.negative = new java.util.Hashtable ();
-c$.charged = c$.prototype.charged = new java.util.Hashtable ();
-c$.aromatic = c$.prototype.aromatic = new java.util.Hashtable ();
-c$.aliphatic = c$.prototype.aliphatic = new java.util.Hashtable ();
-c$.tiny = c$.prototype.tiny = new java.util.Hashtable ();
-c$.proline = c$.prototype.proline = new java.util.Hashtable ();
-{
-jalview.schemes.ResidueProperties.hydrophobic.put ("I", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("L", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("V", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("C", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("A", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("G", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("M", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("F", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("Y", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("W", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("H", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("K", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("X", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("*", new Integer (1));
-jalview.schemes.ResidueProperties.hydrophobic.put ("R", new Integer (0));
-jalview.schemes.ResidueProperties.hydrophobic.put ("E", new Integer (0));
-jalview.schemes.ResidueProperties.hydrophobic.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.hydrophobic.put ("D", new Integer (0));
-jalview.schemes.ResidueProperties.hydrophobic.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.hydrophobic.put ("S", new Integer (0));
-jalview.schemes.ResidueProperties.hydrophobic.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.hydrophobic.put ("P", new Integer (0));
-}{
-jalview.schemes.ResidueProperties.polar.put ("Y", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("W", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("H", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("K", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("R", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("E", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("Q", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("D", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("N", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("S", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("T", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("X", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("*", new Integer (1));
-jalview.schemes.ResidueProperties.polar.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("V", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("A", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("G", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.polar.put ("P", new Integer (0));
-}{
-jalview.schemes.ResidueProperties.small.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("V", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("C", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("A", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("G", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("Y", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("W", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("H", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("K", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("R", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("E", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.small.put ("D", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("N", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("S", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("T", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("P", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.small.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.positive.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("V", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("A", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("G", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("Y", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("W", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("H", new Integer (1));
-jalview.schemes.ResidueProperties.positive.put ("K", new Integer (1));
-jalview.schemes.ResidueProperties.positive.put ("R", new Integer (1));
-jalview.schemes.ResidueProperties.positive.put ("E", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("D", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("S", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("P", new Integer (0));
-jalview.schemes.ResidueProperties.positive.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.positive.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.negative.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("V", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("A", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("G", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("Y", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("W", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("H", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("K", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("R", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("E", new Integer (1));
-jalview.schemes.ResidueProperties.negative.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("D", new Integer (1));
-jalview.schemes.ResidueProperties.negative.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("S", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("P", new Integer (0));
-jalview.schemes.ResidueProperties.negative.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.negative.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.charged.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("V", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("A", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("G", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("Y", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("W", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("H", new Integer (1));
-jalview.schemes.ResidueProperties.charged.put ("K", new Integer (1));
-jalview.schemes.ResidueProperties.charged.put ("R", new Integer (1));
-jalview.schemes.ResidueProperties.charged.put ("E", new Integer (1));
-jalview.schemes.ResidueProperties.charged.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("D", new Integer (1));
-jalview.schemes.ResidueProperties.charged.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("S", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("P", new Integer (0));
-jalview.schemes.ResidueProperties.charged.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.charged.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.aromatic.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("V", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("A", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("G", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("F", new Integer (1));
-jalview.schemes.ResidueProperties.aromatic.put ("Y", new Integer (1));
-jalview.schemes.ResidueProperties.aromatic.put ("W", new Integer (1));
-jalview.schemes.ResidueProperties.aromatic.put ("H", new Integer (1));
-jalview.schemes.ResidueProperties.aromatic.put ("K", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("R", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("E", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("D", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("S", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("P", new Integer (0));
-jalview.schemes.ResidueProperties.aromatic.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.aromatic.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.aliphatic.put ("I", new Integer (1));
-jalview.schemes.ResidueProperties.aliphatic.put ("L", new Integer (1));
-jalview.schemes.ResidueProperties.aliphatic.put ("V", new Integer (1));
-jalview.schemes.ResidueProperties.aliphatic.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("A", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("G", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("Y", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("W", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("H", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("K", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("R", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("E", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("D", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("S", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("P", new Integer (0));
-jalview.schemes.ResidueProperties.aliphatic.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.aliphatic.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.tiny.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("V", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("A", new Integer (1));
-jalview.schemes.ResidueProperties.tiny.put ("G", new Integer (1));
-jalview.schemes.ResidueProperties.tiny.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("Y", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("W", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("H", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("K", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("R", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("E", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("D", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("S", new Integer (1));
-jalview.schemes.ResidueProperties.tiny.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("P", new Integer (0));
-jalview.schemes.ResidueProperties.tiny.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.tiny.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.proline.put ("I", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("L", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("V", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("C", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("A", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("G", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("M", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("F", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("Y", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("W", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("H", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("K", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("R", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("E", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("Q", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("D", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("N", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("S", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("T", new Integer (0));
-jalview.schemes.ResidueProperties.proline.put ("P", new Integer (1));
-jalview.schemes.ResidueProperties.proline.put ("-", new Integer (1));
-jalview.schemes.ResidueProperties.proline.put ("*", new Integer (1));
-}{
-jalview.schemes.ResidueProperties.propHash.put ("hydrophobic", jalview.schemes.ResidueProperties.hydrophobic);
-jalview.schemes.ResidueProperties.propHash.put ("small", jalview.schemes.ResidueProperties.small);
-jalview.schemes.ResidueProperties.propHash.put ("positive", jalview.schemes.ResidueProperties.positive);
-jalview.schemes.ResidueProperties.propHash.put ("negative", jalview.schemes.ResidueProperties.negative);
-jalview.schemes.ResidueProperties.propHash.put ("charged", jalview.schemes.ResidueProperties.charged);
-jalview.schemes.ResidueProperties.propHash.put ("aromatic", jalview.schemes.ResidueProperties.aromatic);
-jalview.schemes.ResidueProperties.propHash.put ("aliphatic", jalview.schemes.ResidueProperties.aliphatic);
-jalview.schemes.ResidueProperties.propHash.put ("tiny", jalview.schemes.ResidueProperties.tiny);
-jalview.schemes.ResidueProperties.propHash.put ("proline", jalview.schemes.ResidueProperties.proline);
-jalview.schemes.ResidueProperties.propHash.put ("polar", jalview.schemes.ResidueProperties.polar);
-}{
-var propMatrixF = Clazz.newIntArray (23, 23, 0);
-var propMatrixPos = Clazz.newIntArray (23, 23, 0);
-var propMatrixEpos = Clazz.newIntArray (23, 23, 0);
-for (var i = 0; i < 23; i++) {
-var maxF = 0;
-var maxP = 0;
-var maxEP = 0;
-var ic = "";
-if (jalview.schemes.ResidueProperties.aa.length > i) {
-ic += jalview.schemes.ResidueProperties.aa[i];
-} else {
-ic = "-";
-}for (var j = i + 1; j < 23; j++) {
-var jc = "";
-if (jalview.schemes.ResidueProperties.aa.length > j) {
-jc += jalview.schemes.ResidueProperties.aa[j];
-} else {
-jc = "-";
-}propMatrixF[i][j] = 0;
-propMatrixPos[i][j] = 0;
-propMatrixEpos[i][j] = 0;
-for (var en = jalview.schemes.ResidueProperties.propHash.keys (); en.hasMoreElements (); ) {
-var ph = en.nextElement ();
-var pph = jalview.schemes.ResidueProperties.propHash.get (ph);
-if (pph.get (ic) != null && pph.get (jc) != null) {
-var icp = pph.get (ic).intValue ();
-var jcp = pph.get (jc).intValue ();
-propMatrixPos[i][j] += icp == jcp && icp > 0 ? 2 : 0;
-propMatrixPos[j][i] += icp == jcp && icp > 0 ? 2 : 0;
-propMatrixF[i][j] += icp == jcp ? 2 : 0;
-propMatrixF[j][i] += icp == jcp ? 2 : 0;
-propMatrixEpos[i][j] += icp == jcp ? (1 + icp * 2) : 0;
-propMatrixEpos[j][i] += icp == jcp ? (1 + icp * 2) : 0;
-}}
-if (maxF < propMatrixF[i][j]) {
-maxF = propMatrixF[i][j];
-}if (maxP < propMatrixPos[i][j]) {
-maxP = propMatrixPos[i][j];
-}if (maxEP < propMatrixEpos[i][j]) {
-maxEP = propMatrixEpos[i][j];
-}}
-propMatrixF[i][i] = maxF;
-propMatrixPos[i][i] = maxP;
-propMatrixEpos[i][i] = maxEP;
-}
-jalview.schemes.ResidueProperties.scoreMatrices.put ("PID", new jalview.analysis.scoremodels.PIDScoreModel ());
-jalview.schemes.ResidueProperties.scoreMatrices.put ("Displayed Features", new jalview.analysis.scoremodels.FeatureScoreModel ());
-}Clazz.defineStatics (c$,
-"toDssp3State", null);
-{
-jalview.schemes.ResidueProperties.toDssp3State = new java.util.Hashtable ();
-jalview.schemes.ResidueProperties.toDssp3State.put ("H", "H");
-jalview.schemes.ResidueProperties.toDssp3State.put ("E", "E");
-jalview.schemes.ResidueProperties.toDssp3State.put ("C", " ");
-jalview.schemes.ResidueProperties.toDssp3State.put (" ", " ");
-jalview.schemes.ResidueProperties.toDssp3State.put ("T", " ");
-jalview.schemes.ResidueProperties.toDssp3State.put ("B", "E");
-jalview.schemes.ResidueProperties.toDssp3State.put ("G", "H");
-jalview.schemes.ResidueProperties.toDssp3State.put ("I", "H");
-jalview.schemes.ResidueProperties.toDssp3State.put ("X", " ");
-}Clazz.defineStatics (c$,
-"toRNAssState", null,
-"RNAcloseParen", Clazz.newBooleanArray (255, false));
-{
-jalview.schemes.ResidueProperties.toRNAssState = new java.util.Hashtable ();
-jalview.schemes.ResidueProperties.toRNAssState.put (")", "(");
-jalview.schemes.ResidueProperties.toRNAssState.put ("(", "(");
-jalview.schemes.ResidueProperties.toRNAssState.put ("]", "[");
-jalview.schemes.ResidueProperties.toRNAssState.put ("[", "[");
-jalview.schemes.ResidueProperties.toRNAssState.put ("{", "{");
-jalview.schemes.ResidueProperties.toRNAssState.put ("}", "{");
-jalview.schemes.ResidueProperties.toRNAssState.put (">", ">");
-jalview.schemes.ResidueProperties.toRNAssState.put ("<", ">");
-jalview.schemes.ResidueProperties.toRNAssState.put ("A", "A");
-jalview.schemes.ResidueProperties.toRNAssState.put ("a", "A");
-jalview.schemes.ResidueProperties.toRNAssState.put ("B", "B");
-jalview.schemes.ResidueProperties.toRNAssState.put ("b", "B");
-jalview.schemes.ResidueProperties.toRNAssState.put ("C", "C");
-jalview.schemes.ResidueProperties.toRNAssState.put ("c", "C");
-jalview.schemes.ResidueProperties.toRNAssState.put ("D", "D");
-jalview.schemes.ResidueProperties.toRNAssState.put ("d", "D");
-jalview.schemes.ResidueProperties.toRNAssState.put ("E", "E");
-jalview.schemes.ResidueProperties.toRNAssState.put ("e", "E");
-jalview.schemes.ResidueProperties.toRNAssState.put ("F", "F");
-jalview.schemes.ResidueProperties.toRNAssState.put ("f", "F");
-jalview.schemes.ResidueProperties.toRNAssState.put ("G", "G");
-jalview.schemes.ResidueProperties.toRNAssState.put ("g", "G");
-jalview.schemes.ResidueProperties.toRNAssState.put ("H", "H");
-jalview.schemes.ResidueProperties.toRNAssState.put ("h", "H");
-jalview.schemes.ResidueProperties.toRNAssState.put ("I", "I");
-jalview.schemes.ResidueProperties.toRNAssState.put ("i", "I");
-jalview.schemes.ResidueProperties.toRNAssState.put ("J", "J");
-jalview.schemes.ResidueProperties.toRNAssState.put ("j", "J");
-jalview.schemes.ResidueProperties.toRNAssState.put ("K", "K");
-jalview.schemes.ResidueProperties.toRNAssState.put ("k", "K");
-jalview.schemes.ResidueProperties.toRNAssState.put ("L", "L");
-jalview.schemes.ResidueProperties.toRNAssState.put ("l", "L");
-jalview.schemes.ResidueProperties.toRNAssState.put ("M", "M");
-jalview.schemes.ResidueProperties.toRNAssState.put ("m", "M");
-jalview.schemes.ResidueProperties.toRNAssState.put ("N", "N");
-jalview.schemes.ResidueProperties.toRNAssState.put ("n", "N");
-jalview.schemes.ResidueProperties.toRNAssState.put ("O", "O");
-jalview.schemes.ResidueProperties.toRNAssState.put ("o", "O");
-jalview.schemes.ResidueProperties.toRNAssState.put ("P", "P");
-jalview.schemes.ResidueProperties.toRNAssState.put ("p", "P");
-jalview.schemes.ResidueProperties.toRNAssState.put ("Q", "Q");
-jalview.schemes.ResidueProperties.toRNAssState.put ("q", "Q");
-jalview.schemes.ResidueProperties.toRNAssState.put ("R", "R");
-jalview.schemes.ResidueProperties.toRNAssState.put ("r", "R");
-jalview.schemes.ResidueProperties.toRNAssState.put ("S", "S");
-jalview.schemes.ResidueProperties.toRNAssState.put ("s", "S");
-jalview.schemes.ResidueProperties.toRNAssState.put ("T", "T");
-jalview.schemes.ResidueProperties.toRNAssState.put ("t", "T");
-jalview.schemes.ResidueProperties.toRNAssState.put ("U", "U");
-jalview.schemes.ResidueProperties.toRNAssState.put ("u", "U");
-jalview.schemes.ResidueProperties.toRNAssState.put ("V", "V");
-jalview.schemes.ResidueProperties.toRNAssState.put ("v", "V");
-jalview.schemes.ResidueProperties.toRNAssState.put ("W", "W");
-jalview.schemes.ResidueProperties.toRNAssState.put ("w", "W");
-jalview.schemes.ResidueProperties.toRNAssState.put ("X", "X");
-jalview.schemes.ResidueProperties.toRNAssState.put ("x", "X");
-jalview.schemes.ResidueProperties.toRNAssState.put ("Y", "Y");
-jalview.schemes.ResidueProperties.toRNAssState.put ("y", "Y");
-jalview.schemes.ResidueProperties.toRNAssState.put ("Z", "Z");
-jalview.schemes.ResidueProperties.toRNAssState.put ("z", "Z");
-for (var p = 0; p < jalview.schemes.ResidueProperties.RNAcloseParen.length; p++) {
-jalview.schemes.ResidueProperties.RNAcloseParen[p] = false;
-}
-for (var k, $k = jalview.schemes.ResidueProperties.toRNAssState.keySet ().iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {
-jalview.schemes.ResidueProperties.RNAcloseParen[k.charCodeAt (0)] = k.charAt (0) != jalview.schemes.ResidueProperties.toRNAssState.get (k).charAt (0);
-}
-}});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.analysis.scoremodels.FeatureScoreModel", "$.PIDScoreModel", "jalview.schemes.ScoreMatrix", "java.awt.Color", "java.util.ArrayList", "$.HashMap", "$.Hashtable", "$.Vector"], "jalview.schemes.ResidueProperties", ["java.lang.StringBuffer"], function () {
+c$ = Clazz.declareType (jalview.schemes, "ResidueProperties");
+c$.buildAmbiguityCodonSet = Clazz.defineMethod (c$, "buildAmbiguityCodonSet",
+function () {
+if (jalview.schemes.ResidueProperties._ambiguityCodes.size () > 0) {
+System.err.println ("Ignoring multiple calls to buildAmbiguityCodonSet");
+return;
+}for (var acode, $acode = jalview.schemes.ResidueProperties.ambiguityCodes.entrySet ().iterator (); $acode.hasNext () && ((acode = $acode.next ()) || true);) {
+for (var r, $r = 0, $$r = acode.getValue (); $r < $$r.length && ((r = $$r[$r]) || true); $r++) {
+var codesfor = jalview.schemes.ResidueProperties._ambiguityCodes.get (r);
+if (codesfor == null) {
+jalview.schemes.ResidueProperties._ambiguityCodes.put (r, codesfor = new java.util.ArrayList ());
+}if (!codesfor.contains (acode.getKey ())) {
+codesfor.add (acode.getKey ());
+} else {
+System.err.println ("Inconsistency in the IUBMB ambiguity code nomenclature table: collision for " + acode.getKey () + " in residue " + r);
+}}
+}
+var unambcodons = jalview.schemes.ResidueProperties.codonHash2.keySet ().toArray ( new Array (jalview.schemes.ResidueProperties.codonHash2.size ()));
+for (var codon, $codon = 0, $$codon = unambcodons; $codon < $$codon.length && ((codon = $$codon[$codon]) || true); $codon++) {
+var residue = jalview.schemes.ResidueProperties.codonHash2.get (codon);
+var acodon = new Array (codon.length);
+for (var i = 0, iSize = codon.length; i < iSize; i++) {
+var _ac = "" + codon.charAt (i);
+var acodes = jalview.schemes.ResidueProperties._ambiguityCodes.get (_ac);
+if (acodes != null) {
+acodon[i] = acodes.toArray ( new Array (acodes.size ()));
+} else {
+acodon[i] = Clazz.newArray (-1, []);
+}}
+var tpos = Clazz.newIntArray (codon.length, 0);
+var cpos = Clazz.newIntArray (codon.length, 0);
+for (var i = 0; i < tpos.length; i++) {
+tpos[i] = -1;
+}
+tpos[acodon.length - 1] = 0;
+var ipos;
+var j;
+while (tpos[0] < acodon[0].length) {
+var allres = Clazz.newCharArray (tpos.length, '\0');
+var _acodon = "";
+var _anuc;
+for (ipos = 0; ipos < tpos.length; ipos++) {
+if (acodon[ipos].length == 0 || tpos[ipos] < 0) {
+_acodon += codon.charAt (ipos);
+allres[ipos] = Clazz.newCharArray (-1, [codon.charAt (ipos)]);
+} else {
+_acodon += acodon[ipos][tpos[ipos]];
+var altbase = jalview.schemes.ResidueProperties.ambiguityCodes.get (acodon[ipos][tpos[ipos]]);
+allres[ipos] = Clazz.newCharArray (altbase.length, '\0');
+j = 0;
+for (var ab, $ab = 0, $$ab = altbase; $ab < $$ab.length && ((ab = $$ab[$ab]) || true); $ab++) {
+allres[ipos][j++] = ab.charAt (0);
+}
+}}
+for (ipos = 0; ipos < cpos.length; ipos++) {
+cpos[ipos] = 0;
+}
+var valid = true;
+do {
+var _codon = "";
+for (j = 0; j < cpos.length; j++) {
+_codon += allres[j][cpos[j]];
+}
+var tr = jalview.schemes.ResidueProperties.codonHash2.get (_codon);
+if (valid = (tr != null && tr.equals (residue))) {
+ipos = acodon.length - 1;
+while (++cpos[ipos] >= allres[ipos].length && ipos > 0) {
+cpos[ipos] = 0;
+ipos--;
+}
+}} while (valid && cpos[0] < allres[0].length);
+if (valid) {
+jalview.schemes.ResidueProperties.codonHash2.put (_acodon, residue);
+} else {
+}ipos = acodon.length - 1;
+while (++tpos[ipos] >= acodon[ipos].length && ipos > 0) {
+tpos[ipos] = -1;
+ipos--;
+}
+}
+}
+});
+c$.getHydmax = Clazz.defineMethod (c$, "getHydmax",
+function () {
+return 4.5;
+});
+c$.getHydmin = Clazz.defineMethod (c$, "getHydmin",
+function () {
+return -3.9;
+});
+c$.getHyd = Clazz.defineMethod (c$, "getHyd",
+function () {
+return jalview.schemes.ResidueProperties.hyd;
+});
+c$.getAA3Hash = Clazz.defineMethod (c$, "getAA3Hash",
+function () {
+return jalview.schemes.ResidueProperties.aa3Hash;
+});
+c$.getDNA = Clazz.defineMethod (c$, "getDNA",
+function () {
+return jalview.schemes.ResidueProperties.DNA;
+});
+c$.getBLOSUM62 = Clazz.defineMethod (c$, "getBLOSUM62",
+function () {
+return jalview.schemes.ResidueProperties.BLOSUM62;
+});
+c$.getPAM250 = Clazz.defineMethod (c$, "getPAM250",
+function (A1, A2) {
+return jalview.schemes.ResidueProperties.getPAM250 (A1.charAt (0), A2.charAt (0));
+}, "~S,~S");
+c$.getBLOSUM62 = Clazz.defineMethod (c$, "getBLOSUM62",
+function (c1, c2) {
+var pog = 0;
+try {
+var a = jalview.schemes.ResidueProperties.aaIndex[c1.charCodeAt (0)];
+var b = jalview.schemes.ResidueProperties.aaIndex[c2.charCodeAt (0)];
+pog = jalview.schemes.ResidueProperties.BLOSUM62[a][b];
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+return pog;
+}, "~S,~S");
+c$.getCodons = Clazz.defineMethod (c$, "getCodons",
+function (res) {
+if (jalview.schemes.ResidueProperties.codonHash.containsKey (res)) {
+return jalview.schemes.ResidueProperties.codonHash.get (res);
+}return null;
+}, "~S");
+c$.codonTranslate = Clazz.defineMethod (c$, "codonTranslate",
+function (lccodon) {
+if (false) {
+return jalview.schemes.ResidueProperties._codonTranslate (lccodon);
+}var cdn = jalview.schemes.ResidueProperties.codonHash2.get (lccodon.toUpperCase ());
+if (cdn != null && cdn.equals ("*")) {
+return "STOP";
+}return cdn;
+}, "~S");
+c$._codonTranslate = Clazz.defineMethod (c$, "_codonTranslate",
+function (lccodon) {
+var codon = lccodon.toUpperCase ();
+if (codon.indexOf ('X') > -1 || codon.indexOf ('N') > -1) {
+return "X";
+}for (var key, $key = jalview.schemes.ResidueProperties.codonHash.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
+if (jalview.schemes.ResidueProperties.codonHash.get (key).contains (codon)) {
+return key;
+}}
+return null;
+}, "~S");
+c$.getDefaultPeptideMatrix = Clazz.defineMethod (c$, "getDefaultPeptideMatrix",
+function () {
+return jalview.schemes.ResidueProperties.getBLOSUM62 ();
+});
+c$.getDefaultDnaMatrix = Clazz.defineMethod (c$, "getDefaultDnaMatrix",
+function () {
+return jalview.schemes.ResidueProperties.getDNA ();
+});
+c$.getScoreMatrix = Clazz.defineMethod (c$, "getScoreMatrix",
+function (pwtype) {
+var val = jalview.schemes.ResidueProperties.scoreMatrices.get (pwtype);
+if (val != null && Clazz.instanceOf (val, jalview.schemes.ScoreMatrix)) {
+return val;
+}return null;
+}, "~S");
+c$.getScoreModel = Clazz.defineMethod (c$, "getScoreModel",
+function (pwtype) {
+return jalview.schemes.ResidueProperties.scoreMatrices.get (pwtype);
+}, "~S");
+c$.getPAM250 = Clazz.defineMethod (c$, "getPAM250",
+function (c, d) {
+var a = jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)];
+var b = jalview.schemes.ResidueProperties.aaIndex[d.charCodeAt (0)];
+var pog = jalview.schemes.ResidueProperties.PAM250[a][b];
+return pog;
+}, "~S,~S");
+c$.getDssp3state = Clazz.defineMethod (c$, "getDssp3state",
+function (ssstring) {
+if (ssstring == null) {
+return null;
+}var ss = new StringBuffer ();
+for (var i = 0; i < ssstring.length; i++) {
+var ssc = ssstring.substring (i, i + 1);
+if (jalview.schemes.ResidueProperties.toDssp3State.containsKey (ssc)) {
+ss.append (jalview.schemes.ResidueProperties.toDssp3State.get (ssc));
+} else {
+ss.append (" ");
+}}
+return ss.toString ();
+}, "~S");
+c$.getRNASecStrucState = Clazz.defineMethod (c$, "getRNASecStrucState",
+function (ssstring) {
+if (ssstring == null) {
+return null;
+}var ss = new StringBuffer ();
+for (var i = 0; i < ssstring.length; i++) {
+var ssc = ssstring.substring (i, i + 1);
+if (jalview.schemes.ResidueProperties.toRNAssState.containsKey (ssc)) {
+ss.append (ssc);
+} else {
+ss.append (" ");
+}}
+return ss.toString ();
+}, "~S");
+c$.isCloseParenRNA = Clazz.defineMethod (c$, "isCloseParenRNA",
+function (dc) {
+return jalview.schemes.ResidueProperties.RNAcloseParen[dc.charCodeAt (0)];
+}, "~S");
+c$.getResidues = Clazz.defineMethod (c$, "getResidues",
+function (nucleotide, includeAmbiguous) {
+var result = new java.util.ArrayList ();
+if (nucleotide) {
+for (var nuc, $nuc = jalview.schemes.ResidueProperties.nucleotideName.keySet ().iterator (); $nuc.hasNext () && ((nuc = $nuc.next ()) || true);) {
+var val = jalview.schemes.ResidueProperties.nucleotideIndex[nuc.charCodeAt (0)];
+if ((!includeAmbiguous && val > 4) || (val >= 10)) {
+continue;
+}nuc = nuc.toUpperCase ();
+if (!result.contains (nuc)) {
+result.add (nuc);
+}}
+} else {
+for (var res, $res = jalview.schemes.ResidueProperties.aa3Hash.keySet ().iterator (); $res.hasNext () && ((res = $res.next ()) || true);) {
+var index = jalview.schemes.ResidueProperties.aa3Hash.get (res).intValue ();
+if ((!includeAmbiguous && index >= 20) || index >= 23) {
+continue;
+}res = res.toUpperCase ();
+if (!result.contains (res)) {
+result.add (res);
+}}
+}return result;
+}, "~B,~B");
+c$.scoreMatrices = c$.prototype.scoreMatrices = new java.util.Hashtable ();
+Clazz.defineStatics (c$,
+"aaIndex", null,
+"nucleotideIndex", null,
+"purinepyrimidineIndex", null);
+c$.aa3Hash = c$.prototype.aa3Hash = new java.util.HashMap ();
+c$.aa2Triplet = c$.prototype.aa2Triplet = new java.util.HashMap ();
+c$.nucleotideName = c$.prototype.nucleotideName = new java.util.HashMap ();
+{
+jalview.schemes.ResidueProperties.aaIndex = Clazz.newIntArray (255, 0);
+for (var i = 0; i < 255; i++) {
+jalview.schemes.ResidueProperties.aaIndex[i] = 23;
+}
+jalview.schemes.ResidueProperties.aaIndex['A'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.aaIndex['R'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.aaIndex['N'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.aaIndex['D'.charCodeAt (0)] = 3;
+jalview.schemes.ResidueProperties.aaIndex['C'.charCodeAt (0)] = 4;
+jalview.schemes.ResidueProperties.aaIndex['Q'.charCodeAt (0)] = 5;
+jalview.schemes.ResidueProperties.aaIndex['E'.charCodeAt (0)] = 6;
+jalview.schemes.ResidueProperties.aaIndex['G'.charCodeAt (0)] = 7;
+jalview.schemes.ResidueProperties.aaIndex['H'.charCodeAt (0)] = 8;
+jalview.schemes.ResidueProperties.aaIndex['I'.charCodeAt (0)] = 9;
+jalview.schemes.ResidueProperties.aaIndex['L'.charCodeAt (0)] = 10;
+jalview.schemes.ResidueProperties.aaIndex['K'.charCodeAt (0)] = 11;
+jalview.schemes.ResidueProperties.aaIndex['M'.charCodeAt (0)] = 12;
+jalview.schemes.ResidueProperties.aaIndex['F'.charCodeAt (0)] = 13;
+jalview.schemes.ResidueProperties.aaIndex['P'.charCodeAt (0)] = 14;
+jalview.schemes.ResidueProperties.aaIndex['S'.charCodeAt (0)] = 15;
+jalview.schemes.ResidueProperties.aaIndex['T'.charCodeAt (0)] = 16;
+jalview.schemes.ResidueProperties.aaIndex['W'.charCodeAt (0)] = 17;
+jalview.schemes.ResidueProperties.aaIndex['Y'.charCodeAt (0)] = 18;
+jalview.schemes.ResidueProperties.aaIndex['V'.charCodeAt (0)] = 19;
+jalview.schemes.ResidueProperties.aaIndex['B'.charCodeAt (0)] = 20;
+jalview.schemes.ResidueProperties.aaIndex['Z'.charCodeAt (0)] = 21;
+jalview.schemes.ResidueProperties.aaIndex['X'.charCodeAt (0)] = 22;
+jalview.schemes.ResidueProperties.aaIndex['U'.charCodeAt (0)] = 22;
+jalview.schemes.ResidueProperties.aaIndex['a'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.aaIndex['r'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.aaIndex['n'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.aaIndex['d'.charCodeAt (0)] = 3;
+jalview.schemes.ResidueProperties.aaIndex['c'.charCodeAt (0)] = 4;
+jalview.schemes.ResidueProperties.aaIndex['q'.charCodeAt (0)] = 5;
+jalview.schemes.ResidueProperties.aaIndex['e'.charCodeAt (0)] = 6;
+jalview.schemes.ResidueProperties.aaIndex['g'.charCodeAt (0)] = 7;
+jalview.schemes.ResidueProperties.aaIndex['h'.charCodeAt (0)] = 8;
+jalview.schemes.ResidueProperties.aaIndex['i'.charCodeAt (0)] = 9;
+jalview.schemes.ResidueProperties.aaIndex['l'.charCodeAt (0)] = 10;
+jalview.schemes.ResidueProperties.aaIndex['k'.charCodeAt (0)] = 11;
+jalview.schemes.ResidueProperties.aaIndex['m'.charCodeAt (0)] = 12;
+jalview.schemes.ResidueProperties.aaIndex['f'.charCodeAt (0)] = 13;
+jalview.schemes.ResidueProperties.aaIndex['p'.charCodeAt (0)] = 14;
+jalview.schemes.ResidueProperties.aaIndex['s'.charCodeAt (0)] = 15;
+jalview.schemes.ResidueProperties.aaIndex['t'.charCodeAt (0)] = 16;
+jalview.schemes.ResidueProperties.aaIndex['w'.charCodeAt (0)] = 17;
+jalview.schemes.ResidueProperties.aaIndex['y'.charCodeAt (0)] = 18;
+jalview.schemes.ResidueProperties.aaIndex['v'.charCodeAt (0)] = 19;
+jalview.schemes.ResidueProperties.aaIndex['b'.charCodeAt (0)] = 20;
+jalview.schemes.ResidueProperties.aaIndex['z'.charCodeAt (0)] = 21;
+jalview.schemes.ResidueProperties.aaIndex['x'.charCodeAt (0)] = 22;
+jalview.schemes.ResidueProperties.aaIndex['u'.charCodeAt (0)] = 22;
+}Clazz.defineStatics (c$,
+"maxProteinIndex", 23,
+"maxNucleotideIndex", 10);
+{
+jalview.schemes.ResidueProperties.nucleotideIndex = Clazz.newIntArray (255, 0);
+for (var i = 0; i < 255; i++) {
+jalview.schemes.ResidueProperties.nucleotideIndex[i] = 10;
+}
+jalview.schemes.ResidueProperties.nucleotideIndex['A'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.nucleotideIndex['a'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.nucleotideIndex['C'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.nucleotideIndex['c'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.nucleotideIndex['G'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.nucleotideIndex['g'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.nucleotideIndex['T'.charCodeAt (0)] = 3;
+jalview.schemes.ResidueProperties.nucleotideIndex['t'.charCodeAt (0)] = 3;
+jalview.schemes.ResidueProperties.nucleotideIndex['U'.charCodeAt (0)] = 4;
+jalview.schemes.ResidueProperties.nucleotideIndex['u'.charCodeAt (0)] = 4;
+jalview.schemes.ResidueProperties.nucleotideIndex['I'.charCodeAt (0)] = 5;
+jalview.schemes.ResidueProperties.nucleotideIndex['i'.charCodeAt (0)] = 5;
+jalview.schemes.ResidueProperties.nucleotideIndex['X'.charCodeAt (0)] = 6;
+jalview.schemes.ResidueProperties.nucleotideIndex['x'.charCodeAt (0)] = 6;
+jalview.schemes.ResidueProperties.nucleotideIndex['R'.charCodeAt (0)] = 7;
+jalview.schemes.ResidueProperties.nucleotideIndex['r'.charCodeAt (0)] = 7;
+jalview.schemes.ResidueProperties.nucleotideIndex['Y'.charCodeAt (0)] = 8;
+jalview.schemes.ResidueProperties.nucleotideIndex['y'.charCodeAt (0)] = 8;
+jalview.schemes.ResidueProperties.nucleotideIndex['N'.charCodeAt (0)] = 9;
+jalview.schemes.ResidueProperties.nucleotideIndex['n'.charCodeAt (0)] = 9;
+jalview.schemes.ResidueProperties.nucleotideName.put ("A", "Adenine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("a", "Adenine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("G", "Guanine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("g", "Guanine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("C", "Cytosine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("c", "Cytosine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("T", "Thymine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("t", "Thymine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("U", "Uracil");
+jalview.schemes.ResidueProperties.nucleotideName.put ("u", "Uracil");
+jalview.schemes.ResidueProperties.nucleotideName.put ("I", "Inosine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("i", "Inosine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("X", "Xanthine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("x", "Xanthine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("R", "Unknown Purine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("r", "Unknown Purine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("Y", "Unknown Pyrimidine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("y", "Unknown Pyrimidine");
+jalview.schemes.ResidueProperties.nucleotideName.put ("N", "Unknown");
+jalview.schemes.ResidueProperties.nucleotideName.put ("n", "Unknown");
+jalview.schemes.ResidueProperties.nucleotideName.put ("W", "Weak nucleotide (A or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("w", "Weak nucleotide (A or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("S", "Strong nucleotide (G or C)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("s", "Strong nucleotide (G or C)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("M", "Amino (A or C)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("m", "Amino (A or C)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("K", "Keto (G or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("k", "Keto (G or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("B", "Not A (G or C or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("b", "Not A (G or C or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("H", "Not G (A or C or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("h", "Not G (A or C or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("D", "Not C (A or G or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("d", "Not C (A or G or T)");
+jalview.schemes.ResidueProperties.nucleotideName.put ("V", "Not T (A or G or C");
+jalview.schemes.ResidueProperties.nucleotideName.put ("v", "Not T (A or G or C");
+}{
+jalview.schemes.ResidueProperties.purinepyrimidineIndex = Clazz.newIntArray (255, 0);
+for (var i = 0; i < 255; i++) {
+jalview.schemes.ResidueProperties.purinepyrimidineIndex[i] = 3;
+}
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['A'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['a'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['C'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['c'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['G'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['g'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['T'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['t'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['U'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['u'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['I'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['i'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['X'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['x'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['R'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['r'.charCodeAt (0)] = 0;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['Y'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['y'.charCodeAt (0)] = 1;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['N'.charCodeAt (0)] = 2;
+jalview.schemes.ResidueProperties.purinepyrimidineIndex['n'.charCodeAt (0)] = 2;
+}{
+jalview.schemes.ResidueProperties.aa3Hash.put ("ALA", new Integer (0));
+jalview.schemes.ResidueProperties.aa3Hash.put ("ARG", new Integer (1));
+jalview.schemes.ResidueProperties.aa3Hash.put ("ASN", new Integer (2));
+jalview.schemes.ResidueProperties.aa3Hash.put ("ASP", new Integer (3));
+jalview.schemes.ResidueProperties.aa3Hash.put ("CYS", new Integer (4));
+jalview.schemes.ResidueProperties.aa3Hash.put ("GLN", new Integer (5));
+jalview.schemes.ResidueProperties.aa3Hash.put ("GLU", new Integer (6));
+jalview.schemes.ResidueProperties.aa3Hash.put ("GLY", new Integer (7));
+jalview.schemes.ResidueProperties.aa3Hash.put ("HIS", new Integer (8));
+jalview.schemes.ResidueProperties.aa3Hash.put ("ILE", new Integer (9));
+jalview.schemes.ResidueProperties.aa3Hash.put ("LEU", new Integer (10));
+jalview.schemes.ResidueProperties.aa3Hash.put ("LYS", new Integer (11));
+jalview.schemes.ResidueProperties.aa3Hash.put ("MET", new Integer (12));
+jalview.schemes.ResidueProperties.aa3Hash.put ("PHE", new Integer (13));
+jalview.schemes.ResidueProperties.aa3Hash.put ("PRO", new Integer (14));
+jalview.schemes.ResidueProperties.aa3Hash.put ("SER", new Integer (15));
+jalview.schemes.ResidueProperties.aa3Hash.put ("THR", new Integer (16));
+jalview.schemes.ResidueProperties.aa3Hash.put ("TRP", new Integer (17));
+jalview.schemes.ResidueProperties.aa3Hash.put ("TYR", new Integer (18));
+jalview.schemes.ResidueProperties.aa3Hash.put ("VAL", new Integer (19));
+jalview.schemes.ResidueProperties.aa3Hash.put ("ASX", new Integer (20));
+jalview.schemes.ResidueProperties.aa3Hash.put ("GLX", new Integer (21));
+jalview.schemes.ResidueProperties.aa3Hash.put ("XAA", new Integer (22));
+jalview.schemes.ResidueProperties.aa3Hash.put ("-", new Integer (23));
+jalview.schemes.ResidueProperties.aa3Hash.put ("*", new Integer (23));
+jalview.schemes.ResidueProperties.aa3Hash.put (".", new Integer (23));
+jalview.schemes.ResidueProperties.aa3Hash.put (" ", new Integer (23));
+jalview.schemes.ResidueProperties.aa3Hash.put ("Gap", new Integer (23));
+}{
+jalview.schemes.ResidueProperties.aa2Triplet.put ("A", "ALA");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("a", "ALA");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("R", "ARG");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("r", "ARG");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("N", "ASN");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("n", "ASN");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("D", "ASP");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("d", "ASP");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("C", "CYS");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("c", "CYS");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("Q", "GLN");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("q", "GLN");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("E", "GLU");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("e", "GLU");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("G", "GLY");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("g", "GLY");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("H", "HIS");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("h", "HIS");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("I", "ILE");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("i", "ILE");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("L", "LEU");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("l", "LEU");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("K", "LYS");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("k", "LYS");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("M", "MET");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("m", "MET");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("F", "PHE");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("f", "PHE");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("P", "PRO");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("p", "PRO");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("S", "SER");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("s", "SER");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("T", "THR");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("t", "THR");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("W", "TRP");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("w", "TRP");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("Y", "TYR");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("y", "TYR");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("V", "VAL");
+jalview.schemes.ResidueProperties.aa2Triplet.put ("v", "VAL");
+}Clazz.defineStatics (c$,
+"aa", Clazz.newArray (-1, ["A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "_", "*", ".", " "]));
+c$.midBlue = c$.prototype.midBlue = new java.awt.Color (100, 100, 255);
+c$.scaleColours = c$.prototype.scaleColours = new java.util.Vector ();
+{
+jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (114, 0, 147));
+jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (156, 0, 98));
+jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (190, 0, 0));
+jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.red);
+jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (255, 125, 0));
+jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.orange);
+jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (255, 194, 85));
+jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.yellow);
+jalview.schemes.ResidueProperties.scaleColours.addElement ( new java.awt.Color (255, 255, 181));
+jalview.schemes.ResidueProperties.scaleColours.addElement (java.awt.Color.white);
+}c$.taylor = c$.prototype.taylor = Clazz.newArray (-1, [ new java.awt.Color (204, 255, 0), new java.awt.Color (0, 0, 255), new java.awt.Color (204, 0, 255), new java.awt.Color (255, 0, 0), new java.awt.Color (255, 255, 0), new java.awt.Color (255, 0, 204), new java.awt.Color (255, 0, 102), new java.awt.Color (255, 153, 0), new java.awt.Color (0, 102, 255), new java.awt.Color (102, 255, 0), new java.awt.Color (51, 255, 0), new java.awt.Color (102, 0, 255), new java.awt.Color (0, 255, 0), new java.awt.Color (0, 255, 102), new java.awt.Color (255, 204, 0), new java.awt.Color (255, 51, 0), new java.awt.Color (255, 102, 0), new java.awt.Color (0, 204, 255), new java.awt.Color (0, 255, 204), new java.awt.Color (153, 255, 0), java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white]);
+c$.nucleotide = c$.prototype.nucleotide = Clazz.newArray (-1, [ new java.awt.Color (100, 247, 63), new java.awt.Color (255, 179, 64), new java.awt.Color (235, 65, 60), new java.awt.Color (60, 136, 238), new java.awt.Color (60, 136, 238), java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white]);
+c$.purinepyrimidine = c$.prototype.purinepyrimidine = Clazz.newArray (-1, [ new java.awt.Color (255, 131, 250), new java.awt.Color (64, 224, 208), java.awt.Color.white, java.awt.Color.white]);
+c$.zappo = c$.prototype.zappo = Clazz.newArray (-1, [java.awt.Color.pink, jalview.schemes.ResidueProperties.midBlue, java.awt.Color.green, java.awt.Color.red, java.awt.Color.yellow, java.awt.Color.green, java.awt.Color.red, java.awt.Color.magenta, jalview.schemes.ResidueProperties.midBlue, java.awt.Color.pink, java.awt.Color.pink, jalview.schemes.ResidueProperties.midBlue, java.awt.Color.pink, java.awt.Color.orange, java.awt.Color.magenta, java.awt.Color.green, java.awt.Color.green, java.awt.Color.orange, java.awt.Color.orange, java.awt.Color.pink, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white, java.awt.Color.white]);
+Clazz.defineStatics (c$,
+"hyd2", Clazz.newDoubleArray (-1, [0.62, 0.29, -0.9, -0.74, 1.19, 0.48, -0.4, 1.38, -1.5, 1.06, 0.64, -0.78, 0.12, -0.85, -2.53, -0.18, -0.05, 1.08, 0.81, 0.0, 0.26, 0.0, 0.0]),
+"helix", Clazz.newDoubleArray (-1, [1.42, 0.98, 0.67, 1.01, 0.70, 1.11, 1.51, 0.57, 1.00, 1.08, 1.21, 1.16, 1.45, 1.13, 0.57, 0.77, 0.83, 1.08, 0.69, 1.06, 0.84, 1.31, 1.00, 0.0]),
+"helixmin", 0.57,
+"helixmax", 1.51,
+"strand", Clazz.newDoubleArray (-1, [0.83, 0.93, 0.89, 0.54, 1.19, 1.10, 0.37, 0.75, 0.87, 1.60, 1.30, 0.74, 1.05, 1.38, 0.55, 0.75, 1.19, 1.37, 1.47, 1.70, 0.72, 0.74, 1.0, 0.0]),
+"strandmin", 0.37,
+"strandmax", 1.7,
+"turn", Clazz.newDoubleArray (-1, [0.66, 0.95, 1.56, 1.46, 1.19, 0.98, 0.74, 1.56, 0.95, 0.47, 0.59, 1.01, 0.60, 0.60, 1.52, 1.43, 0.96, 0.96, 1.14, 0.50, 1.51, 0.86, 1.00, 0, 0]),
+"turnmin", 0.47,
+"turnmax", 1.56,
+"buried", Clazz.newDoubleArray (-1, [1.7, 0.1, 0.4, 0.4, 4.6, 0.3, 0.3, 1.8, 0.8, 3.1, 2.4, 0.05, 1.9, 2.2, 0.6, 0.8, 0.7, 1.6, 0.5, 2.9, 0.4, 0.3, 1.358, 0.00]),
+"buriedmin", 0.05,
+"buriedmax", 4.6,
+"hyd", Clazz.newDoubleArray (-1, [1.8, -4.5, -3.5, -3.5, 2.5, -3.5, -3.5, -0.4, -3.2, 4.5, 3.8, -3.9, 1.9, 2.8, -1.6, -0.8, -0.7, -0.9, -1.3, 4.2, -3.5, -3.5, -0.49, 0.0]),
+"hydmax", 4.5,
+"hydmin", -3.9,
+"BLOSUM62", Clazz.newArray (-1, [ Clazz.newIntArray (-1, [4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4]), Clazz.newIntArray (-1, [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4]), Clazz.newIntArray (-1, [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4]), Clazz.newIntArray (-1, [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4]), Clazz.newIntArray (-1, [0, 3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4]), Clazz.newIntArray (-1, [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4]), Clazz.newIntArray (-1, [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4]), Clazz.newIntArray (-1, [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4]), Clazz.newIntArray (-1, [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4]), Clazz.newIntArray (-1, [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4]), Clazz.newIntArray (-1, [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4]), Clazz.newIntArray (-1, [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4]), Clazz.newIntArray (-1, [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4]), Clazz.newIntArray (-1, [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4]), Clazz.newIntArray (-1, [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4]), Clazz.newIntArray (-1, [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4]), Clazz.newIntArray (-1, [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4]), Clazz.newIntArray (-1, [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4]), Clazz.newIntArray (-1, [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4]), Clazz.newIntArray (-1, [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4]), Clazz.newIntArray (-1, [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4]), Clazz.newIntArray (-1, [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4]), Clazz.newIntArray (-1, [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4]), Clazz.newIntArray (-1, [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1])]),
+"PAM250", Clazz.newArray (-1, [ Clazz.newIntArray (-1, [2, -2, 0, 0, -2, 0, 0, 1, -1, -1, -2, -1, -1, -3, 1, 1, 1, -6, -3, 0, 0, 0, 0, -8]), Clazz.newIntArray (-1, [-2, 6, 0, -1, -4, 1, -1, -3, 2, -2, -3, 3, 0, -4, 0, 0, -1, 2, -4, -2, -1, 0, -1, -8]), Clazz.newIntArray (-1, [0, 0, 2, 2, -4, 1, 1, 0, 2, -2, -3, 1, -2, -3, 0, 1, 0, -4, -2, -2, 2, 1, 0, -8]), Clazz.newIntArray (-1, [0, -1, 2, 4, -5, 2, 3, 1, 1, -2, -4, 0, -3, -6, -1, 0, 0, -7, -4, -2, 3, 3, -1, -8]), Clazz.newIntArray (-1, [-2, -4, -4, -5, 12, -5, -5, -3, -3, -2, -6, -5, -5, -4, -3, 0, -2, -8, 0, -2, -4, -5, -3, -8]), Clazz.newIntArray (-1, [0, 1, 1, 2, -5, 4, 2, -1, 3, -2, -2, 1, -1, -5, 0, -1, -1, -5, -4, -2, 1, 3, -1, -8]), Clazz.newIntArray (-1, [0, -1, 1, 3, -5, 2, 4, 0, 1, -2, -3, 0, -2, -5, -1, 0, 0, -7, -4, -2, 3, 3, -1, -8]), Clazz.newIntArray (-1, [1, -3, 0, 1, -3, -1, 0, 5, -2, -3, -4, -2, -3, -5, 0, 1, 0, -7, -5, -1, 0, 0, -1, -8]), Clazz.newIntArray (-1, [-1, 2, 2, 1, -3, 3, 1, -2, 6, -2, -2, 0, -2, -2, 0, -1, -1, -3, 0, -2, 1, 2, -1, -8]), Clazz.newIntArray (-1, [-1, -2, -2, -2, -2, -2, -2, -3, -2, 5, 2, -2, 2, 1, -2, -1, 0, -5, -1, 4, -2, -2, -1, -8]), Clazz.newIntArray (-1, [-2, -3, -3, -4, -6, -2, -3, -4, -2, 2, 6, -3, 4, 2, -3, -3, -2, -2, -1, 2, -3, -3, -1, -8]), Clazz.newIntArray (-1, [-1, 3, 1, 0, -5, 1, 0, -2, 0, -2, -3, 5, 0, -5, -1, 0, 0, -3, -4, -2, 1, 0, -1, -8]), Clazz.newIntArray (-1, [-1, 0, -2, -3, -5, -1, -2, -3, -2, 2, 4, 0, 6, 0, -2, -2, -1, -4, -2, 2, -2, -2, -1, -8]), Clazz.newIntArray (-1, [-3, -4, -3, -6, -4, -5, -5, -5, -2, 1, 2, -5, 0, 9, -5, -3, -3, 0, 7, -1, -4, -5, -2, -8]), Clazz.newIntArray (-1, [1, 0, 0, -1, -3, 0, -1, 0, 0, -2, -3, -1, -2, -5, 6, 1, 0, -6, -5, -1, -1, 0, -1, -8]), Clazz.newIntArray (-1, [1, 0, 1, 0, 0, -1, 0, 1, -1, -1, -3, 0, -2, -3, 1, 2, 1, -2, -3, -1, 0, 0, 0, -8]), Clazz.newIntArray (-1, [1, -1, 0, 0, -2, -1, 0, 0, -1, 0, -2, 0, -1, -3, 0, 1, 3, -5, -3, 0, 0, -1, 0, -8]), Clazz.newIntArray (-1, [-6, 2, -4, -7, -8, -5, -7, -7, -3, -5, -2, -3, -4, 0, -6, -2, -5, 17, 0, -6, -5, -6, -4, -8]), Clazz.newIntArray (-1, [-3, -4, -2, -4, 0, -4, -4, -5, 0, -1, -1, -4, -2, 7, -5, -3, -3, 0, 10, -2, -3, -4, -2, -8]), Clazz.newIntArray (-1, [0, -2, -2, -2, -2, -2, -2, -1, -2, 4, 2, -2, 2, -1, -1, -1, 0, -6, -2, 4, -2, -2, -1, -8]), Clazz.newIntArray (-1, [0, -1, 2, 3, -4, 1, 3, 0, 1, -2, -3, 1, -2, -4, -1, 0, 0, -5, -3, -2, 3, 2, -1, -8]), Clazz.newIntArray (-1, [0, 0, 1, 3, -5, 3, 3, 0, 2, -2, -3, 0, -2, -5, 0, 0, -1, -6, -4, -2, 2, 3, -1, -8]), Clazz.newIntArray (-1, [0, -1, 0, -1, -3, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, 0, 0, -4, -2, -1, -1, -1, -1, -8]), Clazz.newIntArray (-1, [-8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, 1])]));
+c$.ssHash = c$.prototype.ssHash = new java.util.Hashtable ();
+{
+jalview.schemes.ResidueProperties.ssHash.put ("H", java.awt.Color.magenta);
+jalview.schemes.ResidueProperties.ssHash.put ("E", java.awt.Color.yellow);
+jalview.schemes.ResidueProperties.ssHash.put ("-", java.awt.Color.white);
+jalview.schemes.ResidueProperties.ssHash.put (".", java.awt.Color.white);
+jalview.schemes.ResidueProperties.ssHash.put ("S", java.awt.Color.cyan);
+jalview.schemes.ResidueProperties.ssHash.put ("T", java.awt.Color.blue);
+jalview.schemes.ResidueProperties.ssHash.put ("G", java.awt.Color.pink);
+jalview.schemes.ResidueProperties.ssHash.put ("I", java.awt.Color.pink);
+jalview.schemes.ResidueProperties.ssHash.put ("B", java.awt.Color.yellow);
+}Clazz.defineStatics (c$,
+"DNA", Clazz.newArray (-1, [ Clazz.newIntArray (-1, [10, -8, -8, -8, -8, 1, 1, 1, -8, 1, 1]), Clazz.newIntArray (-1, [-8, 10, -8, -8, -8, 1, 1, -8, 1, 1, 1]), Clazz.newIntArray (-1, [-8, -8, 10, -8, -8, 1, 1, 1, -8, 1, 1]), Clazz.newIntArray (-1, [-8, -8, -8, 10, 10, 1, 1, -8, 1, 1, 1]), Clazz.newIntArray (-1, [-8, -8, -8, 10, 10, 1, 1, -8, 1, 1, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 10, 0, 0, 0, 1, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 0, 10, 0, 0, 1, 1]), Clazz.newIntArray (-1, [1, -8, 1, -8, -8, 0, 0, 10, -8, 1, 1]), Clazz.newIntArray (-1, [-8, 1, -8, 1, 1, 0, 0, -8, 10, 1, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1]), Clazz.newIntArray (-1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])]));
+{
+jalview.schemes.ResidueProperties.scoreMatrices.put ("BLOSUM62", new jalview.schemes.ScoreMatrix ("BLOSUM62", jalview.schemes.ResidueProperties.BLOSUM62, 0));
+jalview.schemes.ResidueProperties.scoreMatrices.put ("PAM250", new jalview.schemes.ScoreMatrix ("PAM250", jalview.schemes.ResidueProperties.PAM250, 0));
+jalview.schemes.ResidueProperties.scoreMatrices.put ("DNA", new jalview.schemes.ScoreMatrix ("DNA", jalview.schemes.ResidueProperties.DNA, 1));
+}c$.pidColours = c$.prototype.pidColours = Clazz.newArray (-1, [jalview.schemes.ResidueProperties.midBlue, new java.awt.Color (153, 153, 255), new java.awt.Color (204, 204, 255)]);
+Clazz.defineStatics (c$,
+"pidThresholds", Clazz.newFloatArray (-1, [80, 60, 40]));
+c$.codonHash = c$.prototype.codonHash = new java.util.HashMap ();
+c$.Lys = c$.prototype.Lys = new java.util.ArrayList ();
+c$.Asn = c$.prototype.Asn = new java.util.ArrayList ();
+c$.Gln = c$.prototype.Gln = new java.util.ArrayList ();
+c$.His = c$.prototype.His = new java.util.ArrayList ();
+c$.Glu = c$.prototype.Glu = new java.util.ArrayList ();
+c$.Asp = c$.prototype.Asp = new java.util.ArrayList ();
+c$.Tyr = c$.prototype.Tyr = new java.util.ArrayList ();
+c$.Thr = c$.prototype.Thr = new java.util.ArrayList ();
+c$.Pro = c$.prototype.Pro = new java.util.ArrayList ();
+c$.Ala = c$.prototype.Ala = new java.util.ArrayList ();
+c$.Ser = c$.prototype.Ser = new java.util.ArrayList ();
+c$.Arg = c$.prototype.Arg = new java.util.ArrayList ();
+c$.Gly = c$.prototype.Gly = new java.util.ArrayList ();
+c$.Trp = c$.prototype.Trp = new java.util.ArrayList ();
+c$.Cys = c$.prototype.Cys = new java.util.ArrayList ();
+c$.Ile = c$.prototype.Ile = new java.util.ArrayList ();
+c$.Met = c$.prototype.Met = new java.util.ArrayList ();
+c$.Leu = c$.prototype.Leu = new java.util.ArrayList ();
+c$.Val = c$.prototype.Val = new java.util.ArrayList ();
+c$.Phe = c$.prototype.Phe = new java.util.ArrayList ();
+c$.STOP = c$.prototype.STOP = new java.util.ArrayList ();
+Clazz.defineStatics (c$,
+"START", "ATG");
+{
+jalview.schemes.ResidueProperties.codonHash.put ("K", jalview.schemes.ResidueProperties.Lys);
+jalview.schemes.ResidueProperties.codonHash.put ("N", jalview.schemes.ResidueProperties.Asn);
+jalview.schemes.ResidueProperties.codonHash.put ("Q", jalview.schemes.ResidueProperties.Gln);
+jalview.schemes.ResidueProperties.codonHash.put ("H", jalview.schemes.ResidueProperties.His);
+jalview.schemes.ResidueProperties.codonHash.put ("E", jalview.schemes.ResidueProperties.Glu);
+jalview.schemes.ResidueProperties.codonHash.put ("D", jalview.schemes.ResidueProperties.Asp);
+jalview.schemes.ResidueProperties.codonHash.put ("Y", jalview.schemes.ResidueProperties.Tyr);
+jalview.schemes.ResidueProperties.codonHash.put ("T", jalview.schemes.ResidueProperties.Thr);
+jalview.schemes.ResidueProperties.codonHash.put ("P", jalview.schemes.ResidueProperties.Pro);
+jalview.schemes.ResidueProperties.codonHash.put ("A", jalview.schemes.ResidueProperties.Ala);
+jalview.schemes.ResidueProperties.codonHash.put ("S", jalview.schemes.ResidueProperties.Ser);
+jalview.schemes.ResidueProperties.codonHash.put ("R", jalview.schemes.ResidueProperties.Arg);
+jalview.schemes.ResidueProperties.codonHash.put ("G", jalview.schemes.ResidueProperties.Gly);
+jalview.schemes.ResidueProperties.codonHash.put ("W", jalview.schemes.ResidueProperties.Trp);
+jalview.schemes.ResidueProperties.codonHash.put ("C", jalview.schemes.ResidueProperties.Cys);
+jalview.schemes.ResidueProperties.codonHash.put ("I", jalview.schemes.ResidueProperties.Ile);
+jalview.schemes.ResidueProperties.codonHash.put ("M", jalview.schemes.ResidueProperties.Met);
+jalview.schemes.ResidueProperties.codonHash.put ("L", jalview.schemes.ResidueProperties.Leu);
+jalview.schemes.ResidueProperties.codonHash.put ("V", jalview.schemes.ResidueProperties.Val);
+jalview.schemes.ResidueProperties.codonHash.put ("F", jalview.schemes.ResidueProperties.Phe);
+jalview.schemes.ResidueProperties.codonHash.put ("STOP", jalview.schemes.ResidueProperties.STOP);
+}c$.ambiguityCodes = c$.prototype.ambiguityCodes = new java.util.Hashtable ();
+c$.codonHash2 = c$.prototype.codonHash2 = new java.util.Hashtable ();
+c$._ambiguityCodes = c$.prototype._ambiguityCodes = new java.util.Hashtable ();
+{
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("R", Clazz.newArray (-1, ["A", "G"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("Y", Clazz.newArray (-1, ["T", "C"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("W", Clazz.newArray (-1, ["A", "T"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("S", Clazz.newArray (-1, ["G", "C"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("M", Clazz.newArray (-1, ["A", "C"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("K", Clazz.newArray (-1, ["G", "T"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("H", Clazz.newArray (-1, ["A", "T", "C"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("B", Clazz.newArray (-1, ["G", "T", "C"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("V", Clazz.newArray (-1, ["G", "A", "C"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("D", Clazz.newArray (-1, ["G", "A", "T"]));
+jalview.schemes.ResidueProperties.ambiguityCodes.put ("N", Clazz.newArray (-1, ["G", "A", "T", "C"]));
+jalview.schemes.ResidueProperties.codonHash2.put ("AAA", "K");
+jalview.schemes.ResidueProperties.codonHash2.put ("AAG", "K");
+jalview.schemes.ResidueProperties.codonHash2.put ("AAC", "N");
+jalview.schemes.ResidueProperties.codonHash2.put ("AAT", "N");
+jalview.schemes.ResidueProperties.codonHash2.put ("CAA", "Q");
+jalview.schemes.ResidueProperties.codonHash2.put ("CAG", "Q");
+jalview.schemes.ResidueProperties.codonHash2.put ("CAC", "H");
+jalview.schemes.ResidueProperties.codonHash2.put ("CAT", "H");
+jalview.schemes.ResidueProperties.codonHash2.put ("GAA", "E");
+jalview.schemes.ResidueProperties.codonHash2.put ("GAG", "E");
+jalview.schemes.ResidueProperties.codonHash2.put ("GAC", "D");
+jalview.schemes.ResidueProperties.codonHash2.put ("GAT", "D");
+jalview.schemes.ResidueProperties.codonHash2.put ("TAC", "Y");
+jalview.schemes.ResidueProperties.codonHash2.put ("TAT", "Y");
+jalview.schemes.ResidueProperties.codonHash2.put ("ACA", "T");
+jalview.schemes.ResidueProperties.codonHash2.put ("ACC", "T");
+jalview.schemes.ResidueProperties.codonHash2.put ("ACT", "T");
+jalview.schemes.ResidueProperties.codonHash2.put ("ACG", "T");
+jalview.schemes.ResidueProperties.codonHash2.put ("CCA", "P");
+jalview.schemes.ResidueProperties.codonHash2.put ("CCG", "P");
+jalview.schemes.ResidueProperties.codonHash2.put ("CCC", "P");
+jalview.schemes.ResidueProperties.codonHash2.put ("CCT", "P");
+jalview.schemes.ResidueProperties.codonHash2.put ("GCA", "A");
+jalview.schemes.ResidueProperties.codonHash2.put ("GCG", "A");
+jalview.schemes.ResidueProperties.codonHash2.put ("GCC", "A");
+jalview.schemes.ResidueProperties.codonHash2.put ("GCT", "A");
+jalview.schemes.ResidueProperties.codonHash2.put ("TCA", "S");
+jalview.schemes.ResidueProperties.codonHash2.put ("TCG", "S");
+jalview.schemes.ResidueProperties.codonHash2.put ("TCC", "S");
+jalview.schemes.ResidueProperties.codonHash2.put ("TCT", "S");
+jalview.schemes.ResidueProperties.codonHash2.put ("AGC", "S");
+jalview.schemes.ResidueProperties.codonHash2.put ("AGT", "S");
+jalview.schemes.ResidueProperties.codonHash2.put ("AGA", "R");
+jalview.schemes.ResidueProperties.codonHash2.put ("AGG", "R");
+jalview.schemes.ResidueProperties.codonHash2.put ("CGA", "R");
+jalview.schemes.ResidueProperties.codonHash2.put ("CGG", "R");
+jalview.schemes.ResidueProperties.codonHash2.put ("CGC", "R");
+jalview.schemes.ResidueProperties.codonHash2.put ("CGT", "R");
+jalview.schemes.ResidueProperties.codonHash2.put ("GGA", "G");
+jalview.schemes.ResidueProperties.codonHash2.put ("GGG", "G");
+jalview.schemes.ResidueProperties.codonHash2.put ("GGC", "G");
+jalview.schemes.ResidueProperties.codonHash2.put ("GGT", "G");
+jalview.schemes.ResidueProperties.codonHash2.put ("TGA", "*");
+jalview.schemes.ResidueProperties.codonHash2.put ("TAA", "*");
+jalview.schemes.ResidueProperties.codonHash2.put ("TAG", "*");
+jalview.schemes.ResidueProperties.codonHash2.put ("TGG", "W");
+jalview.schemes.ResidueProperties.codonHash2.put ("TGC", "C");
+jalview.schemes.ResidueProperties.codonHash2.put ("TGT", "C");
+jalview.schemes.ResidueProperties.codonHash2.put ("ATA", "I");
+jalview.schemes.ResidueProperties.codonHash2.put ("ATC", "I");
+jalview.schemes.ResidueProperties.codonHash2.put ("ATT", "I");
+jalview.schemes.ResidueProperties.codonHash2.put ("ATG", "M");
+jalview.schemes.ResidueProperties.codonHash2.put ("CTA", "L");
+jalview.schemes.ResidueProperties.codonHash2.put ("CTG", "L");
+jalview.schemes.ResidueProperties.codonHash2.put ("CTC", "L");
+jalview.schemes.ResidueProperties.codonHash2.put ("CTT", "L");
+jalview.schemes.ResidueProperties.codonHash2.put ("TTA", "L");
+jalview.schemes.ResidueProperties.codonHash2.put ("TTG", "L");
+jalview.schemes.ResidueProperties.codonHash2.put ("GTA", "V");
+jalview.schemes.ResidueProperties.codonHash2.put ("GTG", "V");
+jalview.schemes.ResidueProperties.codonHash2.put ("GTC", "V");
+jalview.schemes.ResidueProperties.codonHash2.put ("GTT", "V");
+jalview.schemes.ResidueProperties.codonHash2.put ("TTC", "F");
+jalview.schemes.ResidueProperties.codonHash2.put ("TTT", "F");
+jalview.schemes.ResidueProperties.buildAmbiguityCodonSet ();
+}{
+jalview.schemes.ResidueProperties.Lys.add ("AAA");
+jalview.schemes.ResidueProperties.Lys.add ("AAG");
+jalview.schemes.ResidueProperties.Asn.add ("AAC");
+jalview.schemes.ResidueProperties.Asn.add ("AAT");
+jalview.schemes.ResidueProperties.Gln.add ("CAA");
+jalview.schemes.ResidueProperties.Gln.add ("CAG");
+jalview.schemes.ResidueProperties.His.add ("CAC");
+jalview.schemes.ResidueProperties.His.add ("CAT");
+jalview.schemes.ResidueProperties.Glu.add ("GAA");
+jalview.schemes.ResidueProperties.Glu.add ("GAG");
+jalview.schemes.ResidueProperties.Asp.add ("GAC");
+jalview.schemes.ResidueProperties.Asp.add ("GAT");
+jalview.schemes.ResidueProperties.Tyr.add ("TAC");
+jalview.schemes.ResidueProperties.Tyr.add ("TAT");
+jalview.schemes.ResidueProperties.Thr.add ("ACA");
+jalview.schemes.ResidueProperties.Thr.add ("ACG");
+jalview.schemes.ResidueProperties.Thr.add ("ACC");
+jalview.schemes.ResidueProperties.Thr.add ("ACT");
+jalview.schemes.ResidueProperties.Pro.add ("CCA");
+jalview.schemes.ResidueProperties.Pro.add ("CCG");
+jalview.schemes.ResidueProperties.Pro.add ("CCC");
+jalview.schemes.ResidueProperties.Pro.add ("CCT");
+jalview.schemes.ResidueProperties.Ala.add ("GCA");
+jalview.schemes.ResidueProperties.Ala.add ("GCG");
+jalview.schemes.ResidueProperties.Ala.add ("GCC");
+jalview.schemes.ResidueProperties.Ala.add ("GCT");
+jalview.schemes.ResidueProperties.Ser.add ("TCA");
+jalview.schemes.ResidueProperties.Ser.add ("TCG");
+jalview.schemes.ResidueProperties.Ser.add ("TCC");
+jalview.schemes.ResidueProperties.Ser.add ("TCT");
+jalview.schemes.ResidueProperties.Ser.add ("AGC");
+jalview.schemes.ResidueProperties.Ser.add ("AGT");
+jalview.schemes.ResidueProperties.Arg.add ("AGA");
+jalview.schemes.ResidueProperties.Arg.add ("AGG");
+jalview.schemes.ResidueProperties.Arg.add ("CGA");
+jalview.schemes.ResidueProperties.Arg.add ("CGG");
+jalview.schemes.ResidueProperties.Arg.add ("CGC");
+jalview.schemes.ResidueProperties.Arg.add ("CGT");
+jalview.schemes.ResidueProperties.Gly.add ("GGA");
+jalview.schemes.ResidueProperties.Gly.add ("GGG");
+jalview.schemes.ResidueProperties.Gly.add ("GGC");
+jalview.schemes.ResidueProperties.Gly.add ("GGT");
+jalview.schemes.ResidueProperties.STOP.add ("TGA");
+jalview.schemes.ResidueProperties.STOP.add ("TAA");
+jalview.schemes.ResidueProperties.STOP.add ("TAG");
+jalview.schemes.ResidueProperties.Trp.add ("TGG");
+jalview.schemes.ResidueProperties.Cys.add ("TGC");
+jalview.schemes.ResidueProperties.Cys.add ("TGT");
+jalview.schemes.ResidueProperties.Ile.add ("ATA");
+jalview.schemes.ResidueProperties.Ile.add ("ATC");
+jalview.schemes.ResidueProperties.Ile.add ("ATT");
+jalview.schemes.ResidueProperties.Met.add ("ATG");
+jalview.schemes.ResidueProperties.Leu.add ("CTA");
+jalview.schemes.ResidueProperties.Leu.add ("CTG");
+jalview.schemes.ResidueProperties.Leu.add ("CTC");
+jalview.schemes.ResidueProperties.Leu.add ("CTT");
+jalview.schemes.ResidueProperties.Leu.add ("TTA");
+jalview.schemes.ResidueProperties.Leu.add ("TTG");
+jalview.schemes.ResidueProperties.Val.add ("GTA");
+jalview.schemes.ResidueProperties.Val.add ("GTG");
+jalview.schemes.ResidueProperties.Val.add ("GTC");
+jalview.schemes.ResidueProperties.Val.add ("GTT");
+jalview.schemes.ResidueProperties.Phe.add ("TTC");
+jalview.schemes.ResidueProperties.Phe.add ("TTT");
+}c$.propHash = c$.prototype.propHash = new java.util.Hashtable ();
+c$.hydrophobic = c$.prototype.hydrophobic = new java.util.Hashtable ();
+c$.polar = c$.prototype.polar = new java.util.Hashtable ();
+c$.small = c$.prototype.small = new java.util.Hashtable ();
+c$.positive = c$.prototype.positive = new java.util.Hashtable ();
+c$.negative = c$.prototype.negative = new java.util.Hashtable ();
+c$.charged = c$.prototype.charged = new java.util.Hashtable ();
+c$.aromatic = c$.prototype.aromatic = new java.util.Hashtable ();
+c$.aliphatic = c$.prototype.aliphatic = new java.util.Hashtable ();
+c$.tiny = c$.prototype.tiny = new java.util.Hashtable ();
+c$.proline = c$.prototype.proline = new java.util.Hashtable ();
+{
+jalview.schemes.ResidueProperties.hydrophobic.put ("I", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("L", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("V", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("C", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("A", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("G", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("M", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("F", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("Y", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("W", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("H", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("K", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("X", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("*", new Integer (1));
+jalview.schemes.ResidueProperties.hydrophobic.put ("R", new Integer (0));
+jalview.schemes.ResidueProperties.hydrophobic.put ("E", new Integer (0));
+jalview.schemes.ResidueProperties.hydrophobic.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.hydrophobic.put ("D", new Integer (0));
+jalview.schemes.ResidueProperties.hydrophobic.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.hydrophobic.put ("S", new Integer (0));
+jalview.schemes.ResidueProperties.hydrophobic.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.hydrophobic.put ("P", new Integer (0));
+}{
+jalview.schemes.ResidueProperties.polar.put ("Y", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("W", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("H", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("K", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("R", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("E", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("Q", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("D", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("N", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("S", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("T", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("X", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("*", new Integer (1));
+jalview.schemes.ResidueProperties.polar.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("V", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("A", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("G", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.polar.put ("P", new Integer (0));
+}{
+jalview.schemes.ResidueProperties.small.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("V", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("C", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("A", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("G", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("Y", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("W", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("H", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("K", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("R", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("E", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.small.put ("D", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("N", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("S", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("T", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("P", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.small.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.positive.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("V", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("A", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("G", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("Y", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("W", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("H", new Integer (1));
+jalview.schemes.ResidueProperties.positive.put ("K", new Integer (1));
+jalview.schemes.ResidueProperties.positive.put ("R", new Integer (1));
+jalview.schemes.ResidueProperties.positive.put ("E", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("D", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("S", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("P", new Integer (0));
+jalview.schemes.ResidueProperties.positive.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.positive.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.negative.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("V", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("A", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("G", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("Y", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("W", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("H", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("K", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("R", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("E", new Integer (1));
+jalview.schemes.ResidueProperties.negative.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("D", new Integer (1));
+jalview.schemes.ResidueProperties.negative.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("S", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("P", new Integer (0));
+jalview.schemes.ResidueProperties.negative.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.negative.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.charged.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("V", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("A", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("G", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("Y", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("W", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("H", new Integer (1));
+jalview.schemes.ResidueProperties.charged.put ("K", new Integer (1));
+jalview.schemes.ResidueProperties.charged.put ("R", new Integer (1));
+jalview.schemes.ResidueProperties.charged.put ("E", new Integer (1));
+jalview.schemes.ResidueProperties.charged.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("D", new Integer (1));
+jalview.schemes.ResidueProperties.charged.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("S", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("P", new Integer (0));
+jalview.schemes.ResidueProperties.charged.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.charged.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.aromatic.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("V", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("A", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("G", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("F", new Integer (1));
+jalview.schemes.ResidueProperties.aromatic.put ("Y", new Integer (1));
+jalview.schemes.ResidueProperties.aromatic.put ("W", new Integer (1));
+jalview.schemes.ResidueProperties.aromatic.put ("H", new Integer (1));
+jalview.schemes.ResidueProperties.aromatic.put ("K", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("R", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("E", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("D", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("S", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("P", new Integer (0));
+jalview.schemes.ResidueProperties.aromatic.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.aromatic.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.aliphatic.put ("I", new Integer (1));
+jalview.schemes.ResidueProperties.aliphatic.put ("L", new Integer (1));
+jalview.schemes.ResidueProperties.aliphatic.put ("V", new Integer (1));
+jalview.schemes.ResidueProperties.aliphatic.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("A", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("G", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("Y", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("W", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("H", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("K", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("R", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("E", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("D", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("S", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("P", new Integer (0));
+jalview.schemes.ResidueProperties.aliphatic.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.aliphatic.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.tiny.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("V", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("A", new Integer (1));
+jalview.schemes.ResidueProperties.tiny.put ("G", new Integer (1));
+jalview.schemes.ResidueProperties.tiny.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("Y", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("W", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("H", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("K", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("R", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("E", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("D", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("S", new Integer (1));
+jalview.schemes.ResidueProperties.tiny.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("P", new Integer (0));
+jalview.schemes.ResidueProperties.tiny.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.tiny.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.proline.put ("I", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("L", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("V", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("C", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("A", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("G", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("M", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("F", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("Y", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("W", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("H", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("K", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("R", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("E", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("Q", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("D", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("N", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("S", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("T", new Integer (0));
+jalview.schemes.ResidueProperties.proline.put ("P", new Integer (1));
+jalview.schemes.ResidueProperties.proline.put ("-", new Integer (1));
+jalview.schemes.ResidueProperties.proline.put ("*", new Integer (1));
+}{
+jalview.schemes.ResidueProperties.propHash.put ("hydrophobic", jalview.schemes.ResidueProperties.hydrophobic);
+jalview.schemes.ResidueProperties.propHash.put ("small", jalview.schemes.ResidueProperties.small);
+jalview.schemes.ResidueProperties.propHash.put ("positive", jalview.schemes.ResidueProperties.positive);
+jalview.schemes.ResidueProperties.propHash.put ("negative", jalview.schemes.ResidueProperties.negative);
+jalview.schemes.ResidueProperties.propHash.put ("charged", jalview.schemes.ResidueProperties.charged);
+jalview.schemes.ResidueProperties.propHash.put ("aromatic", jalview.schemes.ResidueProperties.aromatic);
+jalview.schemes.ResidueProperties.propHash.put ("aliphatic", jalview.schemes.ResidueProperties.aliphatic);
+jalview.schemes.ResidueProperties.propHash.put ("tiny", jalview.schemes.ResidueProperties.tiny);
+jalview.schemes.ResidueProperties.propHash.put ("proline", jalview.schemes.ResidueProperties.proline);
+jalview.schemes.ResidueProperties.propHash.put ("polar", jalview.schemes.ResidueProperties.polar);
+}{
+var propMatrixF = Clazz.newIntArray (23, 23, 0);
+var propMatrixPos = Clazz.newIntArray (23, 23, 0);
+var propMatrixEpos = Clazz.newIntArray (23, 23, 0);
+for (var i = 0; i < 23; i++) {
+var maxF = 0;
+var maxP = 0;
+var maxEP = 0;
+var ic = "";
+if (jalview.schemes.ResidueProperties.aa.length > i) {
+ic += jalview.schemes.ResidueProperties.aa[i];
+} else {
+ic = "-";
+}for (var j = i + 1; j < 23; j++) {
+var jc = "";
+if (jalview.schemes.ResidueProperties.aa.length > j) {
+jc += jalview.schemes.ResidueProperties.aa[j];
+} else {
+jc = "-";
+}propMatrixF[i][j] = 0;
+propMatrixPos[i][j] = 0;
+propMatrixEpos[i][j] = 0;
+for (var en = jalview.schemes.ResidueProperties.propHash.keys (); en.hasMoreElements (); ) {
+var ph = en.nextElement ();
+var pph = jalview.schemes.ResidueProperties.propHash.get (ph);
+if (pph.get (ic) != null && pph.get (jc) != null) {
+var icp = pph.get (ic).intValue ();
+var jcp = pph.get (jc).intValue ();
+propMatrixPos[i][j] += icp == jcp && icp > 0 ? 2 : 0;
+propMatrixPos[j][i] += icp == jcp && icp > 0 ? 2 : 0;
+propMatrixF[i][j] += icp == jcp ? 2 : 0;
+propMatrixF[j][i] += icp == jcp ? 2 : 0;
+propMatrixEpos[i][j] += icp == jcp ? (1 + icp * 2) : 0;
+propMatrixEpos[j][i] += icp == jcp ? (1 + icp * 2) : 0;
+}}
+if (maxF < propMatrixF[i][j]) {
+maxF = propMatrixF[i][j];
+}if (maxP < propMatrixPos[i][j]) {
+maxP = propMatrixPos[i][j];
+}if (maxEP < propMatrixEpos[i][j]) {
+maxEP = propMatrixEpos[i][j];
+}}
+propMatrixF[i][i] = maxF;
+propMatrixPos[i][i] = maxP;
+propMatrixEpos[i][i] = maxEP;
+}
+jalview.schemes.ResidueProperties.scoreMatrices.put ("PID", new jalview.analysis.scoremodels.PIDScoreModel ());
+jalview.schemes.ResidueProperties.scoreMatrices.put ("Displayed Features", new jalview.analysis.scoremodels.FeatureScoreModel ());
+}Clazz.defineStatics (c$,
+"toDssp3State", null);
+{
+jalview.schemes.ResidueProperties.toDssp3State = new java.util.Hashtable ();
+jalview.schemes.ResidueProperties.toDssp3State.put ("H", "H");
+jalview.schemes.ResidueProperties.toDssp3State.put ("E", "E");
+jalview.schemes.ResidueProperties.toDssp3State.put ("C", " ");
+jalview.schemes.ResidueProperties.toDssp3State.put (" ", " ");
+jalview.schemes.ResidueProperties.toDssp3State.put ("T", " ");
+jalview.schemes.ResidueProperties.toDssp3State.put ("B", "E");
+jalview.schemes.ResidueProperties.toDssp3State.put ("G", "H");
+jalview.schemes.ResidueProperties.toDssp3State.put ("I", "H");
+jalview.schemes.ResidueProperties.toDssp3State.put ("X", " ");
+}Clazz.defineStatics (c$,
+"toRNAssState", null,
+"RNAcloseParen", Clazz.newBooleanArray (255, false));
+{
+jalview.schemes.ResidueProperties.toRNAssState = new java.util.Hashtable ();
+jalview.schemes.ResidueProperties.toRNAssState.put (")", "(");
+jalview.schemes.ResidueProperties.toRNAssState.put ("(", "(");
+jalview.schemes.ResidueProperties.toRNAssState.put ("]", "[");
+jalview.schemes.ResidueProperties.toRNAssState.put ("[", "[");
+jalview.schemes.ResidueProperties.toRNAssState.put ("{", "{");
+jalview.schemes.ResidueProperties.toRNAssState.put ("}", "{");
+jalview.schemes.ResidueProperties.toRNAssState.put (">", ">");
+jalview.schemes.ResidueProperties.toRNAssState.put ("<", ">");
+jalview.schemes.ResidueProperties.toRNAssState.put ("A", "A");
+jalview.schemes.ResidueProperties.toRNAssState.put ("a", "A");
+jalview.schemes.ResidueProperties.toRNAssState.put ("B", "B");
+jalview.schemes.ResidueProperties.toRNAssState.put ("b", "B");
+jalview.schemes.ResidueProperties.toRNAssState.put ("C", "C");
+jalview.schemes.ResidueProperties.toRNAssState.put ("c", "C");
+jalview.schemes.ResidueProperties.toRNAssState.put ("D", "D");
+jalview.schemes.ResidueProperties.toRNAssState.put ("d", "D");
+jalview.schemes.ResidueProperties.toRNAssState.put ("E", "E");
+jalview.schemes.ResidueProperties.toRNAssState.put ("e", "E");
+jalview.schemes.ResidueProperties.toRNAssState.put ("F", "F");
+jalview.schemes.ResidueProperties.toRNAssState.put ("f", "F");
+jalview.schemes.ResidueProperties.toRNAssState.put ("G", "G");
+jalview.schemes.ResidueProperties.toRNAssState.put ("g", "G");
+jalview.schemes.ResidueProperties.toRNAssState.put ("H", "H");
+jalview.schemes.ResidueProperties.toRNAssState.put ("h", "H");
+jalview.schemes.ResidueProperties.toRNAssState.put ("I", "I");
+jalview.schemes.ResidueProperties.toRNAssState.put ("i", "I");
+jalview.schemes.ResidueProperties.toRNAssState.put ("J", "J");
+jalview.schemes.ResidueProperties.toRNAssState.put ("j", "J");
+jalview.schemes.ResidueProperties.toRNAssState.put ("K", "K");
+jalview.schemes.ResidueProperties.toRNAssState.put ("k", "K");
+jalview.schemes.ResidueProperties.toRNAssState.put ("L", "L");
+jalview.schemes.ResidueProperties.toRNAssState.put ("l", "L");
+jalview.schemes.ResidueProperties.toRNAssState.put ("M", "M");
+jalview.schemes.ResidueProperties.toRNAssState.put ("m", "M");
+jalview.schemes.ResidueProperties.toRNAssState.put ("N", "N");
+jalview.schemes.ResidueProperties.toRNAssState.put ("n", "N");
+jalview.schemes.ResidueProperties.toRNAssState.put ("O", "O");
+jalview.schemes.ResidueProperties.toRNAssState.put ("o", "O");
+jalview.schemes.ResidueProperties.toRNAssState.put ("P", "P");
+jalview.schemes.ResidueProperties.toRNAssState.put ("p", "P");
+jalview.schemes.ResidueProperties.toRNAssState.put ("Q", "Q");
+jalview.schemes.ResidueProperties.toRNAssState.put ("q", "Q");
+jalview.schemes.ResidueProperties.toRNAssState.put ("R", "R");
+jalview.schemes.ResidueProperties.toRNAssState.put ("r", "R");
+jalview.schemes.ResidueProperties.toRNAssState.put ("S", "S");
+jalview.schemes.ResidueProperties.toRNAssState.put ("s", "S");
+jalview.schemes.ResidueProperties.toRNAssState.put ("T", "T");
+jalview.schemes.ResidueProperties.toRNAssState.put ("t", "T");
+jalview.schemes.ResidueProperties.toRNAssState.put ("U", "U");
+jalview.schemes.ResidueProperties.toRNAssState.put ("u", "U");
+jalview.schemes.ResidueProperties.toRNAssState.put ("V", "V");
+jalview.schemes.ResidueProperties.toRNAssState.put ("v", "V");
+jalview.schemes.ResidueProperties.toRNAssState.put ("W", "W");
+jalview.schemes.ResidueProperties.toRNAssState.put ("w", "W");
+jalview.schemes.ResidueProperties.toRNAssState.put ("X", "X");
+jalview.schemes.ResidueProperties.toRNAssState.put ("x", "X");
+jalview.schemes.ResidueProperties.toRNAssState.put ("Y", "Y");
+jalview.schemes.ResidueProperties.toRNAssState.put ("y", "Y");
+jalview.schemes.ResidueProperties.toRNAssState.put ("Z", "Z");
+jalview.schemes.ResidueProperties.toRNAssState.put ("z", "Z");
+for (var p = 0; p < jalview.schemes.ResidueProperties.RNAcloseParen.length; p++) {
+jalview.schemes.ResidueProperties.RNAcloseParen[p] = false;
+}
+for (var k, $k = jalview.schemes.ResidueProperties.toRNAssState.keySet ().iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {
+jalview.schemes.ResidueProperties.RNAcloseParen[k.charCodeAt (0)] = k.charAt (0) != jalview.schemes.ResidueProperties.toRNAssState.get (k).charAt (0);
+}
+}});
diff --git a/bin/jalview/schemes/ScoreColourScheme.js b/bin/jalview/schemes/ScoreColourScheme.js
index 5027bdf..f097a40 100644
--- a/bin/jalview/schemes/ScoreColourScheme.js
+++ b/bin/jalview/schemes/ScoreColourScheme.js
@@ -1,43 +1,43 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.ScoreColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.min = 0;
-this.max = 0;
-this.scores = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "ScoreColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function (symbolIndex, scores, min, max) {
-Clazz.superConstructor (this, jalview.schemes.ScoreColourScheme, [symbolIndex]);
-this.scores = scores;
-this.min = min;
-this.max = max;
-var i;
-var iSize = scores.length;
-this.colors = new Array (scores.length);
-for (i = 0; i < iSize; i++) {
-var red = (scores[i] - min) / (max - min);
-if (red > 1.0) {
-red = 1.0;
-}if (red < 0.0) {
-red = 0.0;
-}this.colors[i] = this.makeColour (red);
-}
-}, "~A,~A,~N,~N");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-if (this.threshold > 0) {
-if (!this.aboveThreshold (c, j)) {
-return java.awt.Color.white;
-}}if (jalview.util.Comparison.isGap (c)) {
-return java.awt.Color.white;
-}var currentColour = this.colors[jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)]];
-if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "makeColour",
-function (c) {
-return new java.awt.Color (c, 0.0, 1.0 - c);
-}, "~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.ScoreColourScheme", ["jalview.schemes.ResidueProperties", "jalview.util.Comparison", "java.awt.Color"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.min = 0;
+this.max = 0;
+this.scores = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "ScoreColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function (symbolIndex, scores, min, max) {
+Clazz.superConstructor (this, jalview.schemes.ScoreColourScheme, [symbolIndex]);
+this.scores = scores;
+this.min = min;
+this.max = max;
+var i;
+var iSize = scores.length;
+this.colors = new Array (scores.length);
+for (i = 0; i < iSize; i++) {
+var red = (scores[i] - min) / (max - min);
+if (red > 1.0) {
+red = 1.0;
+}if (red < 0.0) {
+red = 0.0;
+}this.colors[i] = this.makeColour (red);
+}
+}, "~A,~A,~N,~N");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+if (this.threshold > 0) {
+if (!this.aboveThreshold (c, j)) {
+return java.awt.Color.white;
+}}if (jalview.util.Comparison.isGap (c)) {
+return java.awt.Color.white;
+}var currentColour = this.colors[jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)]];
+if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "makeColour",
+function (c) {
+return new java.awt.Color (c, 0.0, 1.0 - c);
+}, "~N");
+});
diff --git a/bin/jalview/schemes/ScoreMatrix.js b/bin/jalview/schemes/ScoreMatrix.js
index a12c842..401ab41 100644
--- a/bin/jalview/schemes/ScoreMatrix.js
+++ b/bin/jalview/schemes/ScoreMatrix.js
@@ -1,86 +1,86 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.analysis.scoremodels.PairwiseSeqScoreModel", "jalview.api.analysis.ScoreModelI"], "jalview.schemes.ScoreMatrix", ["jalview.schemes.ResidueProperties", "java.lang.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.name = null;
-this.matrix = null;
-this.type = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "ScoreMatrix", jalview.analysis.scoremodels.PairwiseSeqScoreModel, jalview.api.analysis.ScoreModelI);
-Clazz.overrideMethod (c$, "getName",
-function () {
-return this.name;
-});
-Clazz.makeConstructor (c$,
-function (name, matrix, type) {
-Clazz.superConstructor (this, jalview.schemes.ScoreMatrix, []);
-this.matrix = matrix;
-this.type = type;
-this.name = name;
-}, "~S,~A,~N");
-Clazz.overrideMethod (c$, "isDNA",
-function () {
-return this.type == 1;
-});
-Clazz.overrideMethod (c$, "isProtein",
-function () {
-return this.type == 0;
-});
-Clazz.overrideMethod (c$, "getMatrix",
-function () {
-return this.matrix;
-});
-Clazz.defineMethod (c$, "getPairwiseScore",
-function (A1, A2) {
-return this.getPairwiseScore (A1.charAt (0), A2.charAt (0));
-}, "~S,~S");
-Clazz.defineMethod (c$, "getPairwiseScore",
-function (c, d) {
-var pog = 0;
-try {
-var a = (this.type == 0) ? jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)] : jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)];
-var b = (this.type == 0) ? jalview.schemes.ResidueProperties.aaIndex[d.charCodeAt (0)] : jalview.schemes.ResidueProperties.nucleotideIndex[d.charCodeAt (0)];
-pog = this.matrix[a][b];
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-return pog;
-}, "~S,~S");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.outputMatrix (false);
-});
-Clazz.defineMethod (c$, "outputMatrix",
-function (html) {
-var sb = new StringBuffer ();
-var symbols = (this.type == 0) ? jalview.schemes.ResidueProperties.aaIndex : jalview.schemes.ResidueProperties.nucleotideIndex;
-var symMax = (this.type == 0) ? 23 : 10;
-var header = true;
-if (html) {
-sb.append ("");
-}for (var sym = 'A'; sym <= 'Z'; sym = String.fromCharCode (sym.charCodeAt (0) + 1)) {
-if (symbols[sym.charCodeAt (0)] >= 0 && symbols[sym.charCodeAt (0)] < symMax) {
-if (header) {
-sb.append (html ? " " : "");
-for (var sym2 = 'A'; sym2 <= 'Z'; sym2 = String.fromCharCode (sym2.charCodeAt (0) + 1)) {
-if (symbols[sym2.charCodeAt (0)] >= 0 && symbols[sym2.charCodeAt (0)] < symMax) {
-sb.append ((html ? " " : "\t") + sym2 + (html ? " " : ""));
-}}
-header = false;
-sb.append (html ? " \n" : "\n");
-}if (html) {
-sb.append ("");
-}sb.append ((html ? "" : "") + sym + (html ? " " : ""));
-for (var sym2 = 'A'; sym2 <= 'Z'; sym2 = String.fromCharCode (sym2.charCodeAt (0) + 1)) {
-if (symbols[sym2.charCodeAt (0)] >= 0 && symbols[sym2.charCodeAt (0)] < symMax) {
-sb.append ((html ? "" : "\t") + this.matrix[symbols[sym.charCodeAt (0)]][symbols[sym2.charCodeAt (0)]] + (html ? " " : ""));
-}}
-sb.append (html ? " \n" : "\n");
-}}
-if (html) {
-sb.append ("
");
-}return sb.toString ();
-}, "~B");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.analysis.scoremodels.PairwiseSeqScoreModel", "jalview.api.analysis.ScoreModelI"], "jalview.schemes.ScoreMatrix", ["jalview.schemes.ResidueProperties", "java.lang.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.name = null;
+this.matrix = null;
+this.type = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "ScoreMatrix", jalview.analysis.scoremodels.PairwiseSeqScoreModel, jalview.api.analysis.ScoreModelI);
+Clazz.overrideMethod (c$, "getName",
+function () {
+return this.name;
+});
+Clazz.makeConstructor (c$,
+function (name, matrix, type) {
+Clazz.superConstructor (this, jalview.schemes.ScoreMatrix, []);
+this.matrix = matrix;
+this.type = type;
+this.name = name;
+}, "~S,~A,~N");
+Clazz.overrideMethod (c$, "isDNA",
+function () {
+return this.type == 1;
+});
+Clazz.overrideMethod (c$, "isProtein",
+function () {
+return this.type == 0;
+});
+Clazz.overrideMethod (c$, "getMatrix",
+function () {
+return this.matrix;
+});
+Clazz.defineMethod (c$, "getPairwiseScore",
+function (A1, A2) {
+return this.getPairwiseScore (A1.charAt (0), A2.charAt (0));
+}, "~S,~S");
+Clazz.defineMethod (c$, "getPairwiseScore",
+function (c, d) {
+var pog = 0;
+try {
+var a = (this.type == 0) ? jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)] : jalview.schemes.ResidueProperties.nucleotideIndex[c.charCodeAt (0)];
+var b = (this.type == 0) ? jalview.schemes.ResidueProperties.aaIndex[d.charCodeAt (0)] : jalview.schemes.ResidueProperties.nucleotideIndex[d.charCodeAt (0)];
+pog = this.matrix[a][b];
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+return pog;
+}, "~S,~S");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.outputMatrix (false);
+});
+Clazz.defineMethod (c$, "outputMatrix",
+function (html) {
+var sb = new StringBuffer ();
+var symbols = (this.type == 0) ? jalview.schemes.ResidueProperties.aaIndex : jalview.schemes.ResidueProperties.nucleotideIndex;
+var symMax = (this.type == 0) ? 23 : 10;
+var header = true;
+if (html) {
+sb.append ("");
+}for (var sym = 'A'; sym <= 'Z'; sym = String.fromCharCode (sym.charCodeAt (0) + 1)) {
+if (symbols[sym.charCodeAt (0)] >= 0 && symbols[sym.charCodeAt (0)] < symMax) {
+if (header) {
+sb.append (html ? " " : "");
+for (var sym2 = 'A'; sym2 <= 'Z'; sym2 = String.fromCharCode (sym2.charCodeAt (0) + 1)) {
+if (symbols[sym2.charCodeAt (0)] >= 0 && symbols[sym2.charCodeAt (0)] < symMax) {
+sb.append ((html ? " " : "\t") + sym2 + (html ? " " : ""));
+}}
+header = false;
+sb.append (html ? " \n" : "\n");
+}if (html) {
+sb.append ("");
+}sb.append ((html ? "" : "") + sym + (html ? " " : ""));
+for (var sym2 = 'A'; sym2 <= 'Z'; sym2 = String.fromCharCode (sym2.charCodeAt (0) + 1)) {
+if (symbols[sym2.charCodeAt (0)] >= 0 && symbols[sym2.charCodeAt (0)] < symMax) {
+sb.append ((html ? "" : "\t") + this.matrix[symbols[sym.charCodeAt (0)]][symbols[sym2.charCodeAt (0)]] + (html ? " " : ""));
+}}
+sb.append (html ? " \n" : "\n");
+}}
+if (html) {
+sb.append ("
");
+}return sb.toString ();
+}, "~B");
+});
diff --git a/bin/jalview/schemes/StrandColourScheme.js b/bin/jalview/schemes/StrandColourScheme.js
index cf2f6bf..7ccf062 100644
--- a/bin/jalview/schemes/StrandColourScheme.js
+++ b/bin/jalview/schemes/StrandColourScheme.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.StrandColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "StrandColourScheme", jalview.schemes.ScoreColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.StrandColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.strand, 0.37, 1.7]);
-});
-Clazz.overrideMethod (c$, "makeColour",
-function (c) {
-return new java.awt.Color (c, c, 1.0 - c);
-}, "~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.StrandColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "StrandColourScheme", jalview.schemes.ScoreColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.StrandColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.strand, 0.37, 1.7]);
+});
+Clazz.overrideMethod (c$, "makeColour",
+function (c) {
+return new java.awt.Color (c, c, 1.0 - c);
+}, "~N");
+});
diff --git a/bin/jalview/schemes/TCoffeeColourScheme.js b/bin/jalview/schemes/TCoffeeColourScheme.js
index 0952425..6350ad9 100644
--- a/bin/jalview/schemes/TCoffeeColourScheme.js
+++ b/bin/jalview/schemes/TCoffeeColourScheme.js
@@ -1,45 +1,45 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme", "java.awt.Color"], "jalview.schemes.TCoffeeColourScheme", ["jalview.datamodel.AlignmentI", "java.util.ArrayList", "$.IdentityHashMap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.seqMap = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "TCoffeeColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function (alignment) {
-Clazz.superConstructor (this, jalview.schemes.TCoffeeColourScheme, []);
-this.alignmentChanged (alignment, null);
-}, "jalview.datamodel.AnnotatedCollectionI");
-Clazz.overrideMethod (c$, "alignmentChanged",
-function (alignment, hiddenReps) {
-var annots = new java.util.ArrayList ();
-this.seqMap = new java.util.IdentityHashMap ();
-var alcontext = Clazz.instanceOf (alignment, jalview.datamodel.AlignmentI) ? alignment : alignment.getContext ();
-var w = 0;
-for (var al, $al = alcontext.findAnnotation ("TCoffeeScore").iterator (); $al.hasNext () && ((al = $al.next ()) || true);) {
-if (al.sequenceRef != null && !al.belowAlignment) {
-annots.add (al);
-if (w < al.annotations.length) {
-w = al.annotations.length;
-}var scores = new Array (al.annotations.length);
-var i = 0;
-for (var an, $an = 0, $$an = al.annotations; $an < $$an.length && ((an = $$an[$an]) || true); $an++) {
-scores[i++] = (an != null) ? an.colour : java.awt.Color.white;
-}
-this.seqMap.put (al.sequenceRef, scores);
-}}
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-var cols;
-if (this.seqMap == null || (cols = this.seqMap.get (seq)) == null) {
-return java.awt.Color.white;
-}if (j < 0 || j >= cols.length) {
-return java.awt.Color.white;
-}return cols[j];
-}, "~S,~N,jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "applyTo",
-function (sg, hiddenRepSequences) {
-return new jalview.schemes.TCoffeeColourScheme (sg);
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-c$.$colors = c$.prototype.$colors = Clazz.newArray (-1, [ new java.awt.Color (102, 102, 255), new java.awt.Color (0, 255, 0), new java.awt.Color (102, 255, 0), new java.awt.Color (204, 255, 0), new java.awt.Color (255, 255, 0), new java.awt.Color (255, 204, 0), new java.awt.Color (255, 153, 0), new java.awt.Color (255, 102, 0), new java.awt.Color (255, 51, 0), new java.awt.Color (255, 34, 0)]);
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme", "java.awt.Color"], "jalview.schemes.TCoffeeColourScheme", ["jalview.datamodel.AlignmentI", "java.util.ArrayList", "$.IdentityHashMap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.seqMap = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "TCoffeeColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function (alignment) {
+Clazz.superConstructor (this, jalview.schemes.TCoffeeColourScheme, []);
+this.alignmentChanged (alignment, null);
+}, "jalview.datamodel.AnnotatedCollectionI");
+Clazz.overrideMethod (c$, "alignmentChanged",
+function (alignment, hiddenReps) {
+var annots = new java.util.ArrayList ();
+this.seqMap = new java.util.IdentityHashMap ();
+var alcontext = Clazz.instanceOf (alignment, jalview.datamodel.AlignmentI) ? alignment : alignment.getContext ();
+var w = 0;
+for (var al, $al = alcontext.findAnnotation ("TCoffeeScore").iterator (); $al.hasNext () && ((al = $al.next ()) || true);) {
+if (al.sequenceRef != null && !al.belowAlignment) {
+annots.add (al);
+if (w < al.annotations.length) {
+w = al.annotations.length;
+}var scores = new Array (al.annotations.length);
+var i = 0;
+for (var an, $an = 0, $$an = al.annotations; $an < $$an.length && ((an = $$an[$an]) || true); $an++) {
+scores[i++] = (an != null) ? an.colour : java.awt.Color.white;
+}
+this.seqMap.put (al.sequenceRef, scores);
+}}
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+var cols;
+if (this.seqMap == null || (cols = this.seqMap.get (seq)) == null) {
+return java.awt.Color.white;
+}if (j < 0 || j >= cols.length) {
+return java.awt.Color.white;
+}return cols[j];
+}, "~S,~N,jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "applyTo",
+function (sg, hiddenRepSequences) {
+return new jalview.schemes.TCoffeeColourScheme (sg);
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+c$.$colors = c$.prototype.$colors = Clazz.newArray (-1, [ new java.awt.Color (102, 102, 255), new java.awt.Color (0, 255, 0), new java.awt.Color (102, 255, 0), new java.awt.Color (204, 255, 0), new java.awt.Color (255, 255, 0), new java.awt.Color (255, 204, 0), new java.awt.Color (255, 153, 0), new java.awt.Color (255, 102, 0), new java.awt.Color (255, 51, 0), new java.awt.Color (255, 34, 0)]);
+});
diff --git a/bin/jalview/schemes/TaylorColourScheme.js b/bin/jalview/schemes/TaylorColourScheme.js
index 156c6fc..65bba75 100644
--- a/bin/jalview/schemes/TaylorColourScheme.js
+++ b/bin/jalview/schemes/TaylorColourScheme.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.TaylorColourScheme", ["jalview.schemes.ResidueProperties"], function () {
-c$ = Clazz.declareType (jalview.schemes, "TaylorColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.TaylorColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.taylor, 0]);
-});
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.TaylorColourScheme", ["jalview.schemes.ResidueProperties"], function () {
+c$ = Clazz.declareType (jalview.schemes, "TaylorColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.TaylorColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.taylor, 0]);
+});
+});
diff --git a/bin/jalview/schemes/TurnColourScheme.js b/bin/jalview/schemes/TurnColourScheme.js
index 74fe374..7e440d8 100644
--- a/bin/jalview/schemes/TurnColourScheme.js
+++ b/bin/jalview/schemes/TurnColourScheme.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.TurnColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
-c$ = Clazz.declareType (jalview.schemes, "TurnColourScheme", jalview.schemes.ScoreColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.TurnColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.turn, 0.47, 1.56]);
-});
-Clazz.overrideMethod (c$, "makeColour",
-function (c) {
-return new java.awt.Color (c, 1 - c, 1 - c);
-}, "~N");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ScoreColourScheme"], "jalview.schemes.TurnColourScheme", ["jalview.schemes.ResidueProperties", "java.awt.Color"], function () {
+c$ = Clazz.declareType (jalview.schemes, "TurnColourScheme", jalview.schemes.ScoreColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.TurnColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.turn, 0.47, 1.56]);
+});
+Clazz.overrideMethod (c$, "makeColour",
+function (c) {
+return new java.awt.Color (c, 1 - c, 1 - c);
+}, "~N");
+});
diff --git a/bin/jalview/schemes/UserColourScheme.class b/bin/jalview/schemes/UserColourScheme.class
index c6ab601..5ca8ca9 100644
Binary files a/bin/jalview/schemes/UserColourScheme.class and b/bin/jalview/schemes/UserColourScheme.class differ
diff --git a/bin/jalview/schemes/UserColourScheme.js b/bin/jalview/schemes/UserColourScheme.js
index dcf5f86..ee83987 100644
--- a/bin/jalview/schemes/UserColourScheme.js
+++ b/bin/jalview/schemes/UserColourScheme.js
@@ -1,165 +1,165 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.UserColourScheme", ["jalview.schemes.ColourSchemeProperty", "$.ResidueProperties", "java.awt.Color", "java.util.StringTokenizer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.lowerCaseColours = null;
-this.schemeName = null;
-Clazz.instantialize (this, arguments);
-}, jalview.schemes, "UserColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.UserColourScheme, [jalview.schemes.ResidueProperties.aaIndex]);
-});
-Clazz.makeConstructor (c$,
-function (newColors) {
-Clazz.superConstructor (this, jalview.schemes.UserColourScheme, [jalview.schemes.ResidueProperties.aaIndex]);
-this.colors = newColors;
-}, "~A");
-Clazz.overrideMethod (c$, "applyTo",
-function (sg, hiddenRepSequences) {
-var usc = new jalview.schemes.UserColourScheme (this.colors);
-if (this.lowerCaseColours != null) {
-usc.schemeName = String.instantialize (this.schemeName);
-usc.lowerCaseColours = new Array (this.lowerCaseColours.length);
-System.arraycopy (this.lowerCaseColours, 0, usc.lowerCaseColours, 0, this.lowerCaseColours.length);
-}return usc;
-}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
-Clazz.makeConstructor (c$,
-function (colour) {
-Clazz.superConstructor (this, jalview.schemes.UserColourScheme, [jalview.schemes.ResidueProperties.aaIndex]);
-var col = this.getColourFromString (colour);
-if (col == null) {
-System.out.println ("Unknown colour!! " + colour);
-col = this.createColourFromName (colour);
-}this.colors = new Array (24);
-for (var i = 0; i < 24; i++) {
-this.colors[i] = col;
-}
-this.schemeName = colour;
-}, "~S");
-Clazz.defineMethod (c$, "getColours",
-function () {
-return this.colors;
-});
-Clazz.defineMethod (c$, "getLowerCaseColours",
-function () {
-return this.lowerCaseColours;
-});
-Clazz.defineMethod (c$, "setName",
-function (name) {
-this.schemeName = name;
-}, "~S");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.schemeName;
-});
-Clazz.defineMethod (c$, "getColourFromString",
-function (colour) {
-colour = colour.trim ();
-var col = null;
-try {
-var value = Integer.parseInt (colour, 16);
-col = new java.awt.Color (value);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, NumberFormatException)) {
-} else {
-throw ex;
-}
-}
-if (col == null) {
-col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName (colour);
-}if (col == null) {
-try {
-var st = new java.util.StringTokenizer (colour, ",");
-var r = Integer.parseInt (st.nextToken ());
-var g = Integer.parseInt (st.nextToken ());
-var b = Integer.parseInt (st.nextToken ());
-col = new java.awt.Color (r, g, b);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-} else {
-throw ex;
-}
-}
-}return col;
-}, "~S");
-Clazz.defineMethod (c$, "createColourFromName",
-function (name) {
-var r;
-var g;
-var b;
-var lsize = name.length;
-var start = 0;
-var end = Clazz.doubleToInt (lsize / 3);
-var rgbOffset = Math.abs (name.hashCode () % 10) * 15;
-r = Math.abs (name.substring (start, end).hashCode () + rgbOffset) % 210 + 20;
-start = end;
-end += Clazz.doubleToInt (lsize / 3);
-if (end > lsize) {
-end = lsize;
-}g = Math.abs (name.substring (start, end).hashCode () + rgbOffset) % 210 + 20;
-b = Math.abs (name.substring (end).hashCode () + rgbOffset) % 210 + 20;
-var color = new java.awt.Color (r, g, b);
-return color;
-}, "~S");
-Clazz.defineMethod (c$, "parseAppletParameter",
-function (paramValue) {
-var st = new java.util.StringTokenizer (paramValue, ";");
-var st2;
-var token = null;
-var colour;
-var residues;
-try {
-while (st.hasMoreElements ()) {
-token = st.nextToken ().trim ();
-residues = token.substring (0, token.indexOf ("="));
-colour = token.substring (token.indexOf ("=") + 1);
-st2 = new java.util.StringTokenizer (residues, " ,");
-while (st2.hasMoreTokens ()) {
-token = st2.nextToken ();
-if (jalview.schemes.ResidueProperties.aaIndex[token.charCodeAt (0)] == -1) {
-continue;
-}var colIndex = jalview.schemes.ResidueProperties.aaIndex[token.charCodeAt (0)];
-if (token.equalsIgnoreCase ("lowerCase")) {
-if (this.lowerCaseColours == null) {
-this.lowerCaseColours = new Array (23);
-}for (var i = 0; i < 23; i++) {
-if (this.lowerCaseColours[i] == null) {
-this.lowerCaseColours[i] = this.getColourFromString (colour);
-}}
-continue;
-}if (token.equals (token.toLowerCase ())) {
-if (this.lowerCaseColours == null) {
-this.lowerCaseColours = new Array (23);
-}this.lowerCaseColours[colIndex] = this.getColourFromString (colour);
-} else {
-this.colors[colIndex] = this.getColourFromString (colour);
-}}
-}
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-System.out.println ("Error parsing userDefinedColours:\n" + token + "\n" + ex);
-} else {
-throw ex;
-}
-}
-}, "~S");
-Clazz.defineMethod (c$, "findColour",
-function (c, j, seq) {
-var currentColour;
-var index = jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)];
-if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
-if (this.lowerCaseColours != null && 'a' <= c && c <= 'z') {
-currentColour = this.lowerCaseColours[index];
-} else {
-currentColour = this.colors[index];
-}} else {
-currentColour = java.awt.Color.white;
-}if (this.conservationColouring) {
-currentColour = this.applyConservation (currentColour, j);
-}return currentColour;
-}, "~S,~N,jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "setLowerCaseColours",
-function (lcolours) {
-this.lowerCaseColours = lcolours;
-}, "~A");
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.UserColourScheme", ["jalview.schemes.ColourSchemeProperty", "$.ResidueProperties", "java.awt.Color", "java.util.StringTokenizer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.lowerCaseColours = null;
+this.schemeName = null;
+Clazz.instantialize (this, arguments);
+}, jalview.schemes, "UserColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.UserColourScheme, [jalview.schemes.ResidueProperties.aaIndex]);
+});
+Clazz.makeConstructor (c$,
+function (newColors) {
+Clazz.superConstructor (this, jalview.schemes.UserColourScheme, [jalview.schemes.ResidueProperties.aaIndex]);
+this.colors = newColors;
+}, "~A");
+Clazz.overrideMethod (c$, "applyTo",
+function (sg, hiddenRepSequences) {
+var usc = new jalview.schemes.UserColourScheme (this.colors);
+if (this.lowerCaseColours != null) {
+usc.schemeName = String.instantialize (this.schemeName);
+usc.lowerCaseColours = new Array (this.lowerCaseColours.length);
+System.arraycopy (this.lowerCaseColours, 0, usc.lowerCaseColours, 0, this.lowerCaseColours.length);
+}return usc;
+}, "jalview.datamodel.AnnotatedCollectionI,java.util.Map");
+Clazz.makeConstructor (c$,
+function (colour) {
+Clazz.superConstructor (this, jalview.schemes.UserColourScheme, [jalview.schemes.ResidueProperties.aaIndex]);
+var col = this.getColourFromString (colour);
+if (col == null) {
+System.out.println ("Unknown colour!! " + colour);
+col = this.createColourFromName (colour);
+}this.colors = new Array (24);
+for (var i = 0; i < 24; i++) {
+this.colors[i] = col;
+}
+this.schemeName = colour;
+}, "~S");
+Clazz.defineMethod (c$, "getColours",
+function () {
+return this.colors;
+});
+Clazz.defineMethod (c$, "getLowerCaseColours",
+function () {
+return this.lowerCaseColours;
+});
+Clazz.defineMethod (c$, "setName",
+function (name) {
+this.schemeName = name;
+}, "~S");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.schemeName;
+});
+Clazz.defineMethod (c$, "getColourFromString",
+function (colour) {
+colour = colour.trim ();
+var col = null;
+try {
+var value = Integer.parseInt (colour, 16);
+col = new java.awt.Color (value);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, NumberFormatException)) {
+} else {
+throw ex;
+}
+}
+if (col == null) {
+col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName (colour);
+}if (col == null) {
+try {
+var st = new java.util.StringTokenizer (colour, ",");
+var r = Integer.parseInt (st.nextToken ());
+var g = Integer.parseInt (st.nextToken ());
+var b = Integer.parseInt (st.nextToken ());
+col = new java.awt.Color (r, g, b);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+} else {
+throw ex;
+}
+}
+}return col;
+}, "~S");
+Clazz.defineMethod (c$, "createColourFromName",
+function (name) {
+var r;
+var g;
+var b;
+var lsize = name.length;
+var start = 0;
+var end = Clazz.doubleToInt (lsize / 3);
+var rgbOffset = Math.abs (name.hashCode () % 10) * 15;
+r = Math.abs (name.substring (start, end).hashCode () + rgbOffset) % 210 + 20;
+start = end;
+end += Clazz.doubleToInt (lsize / 3);
+if (end > lsize) {
+end = lsize;
+}g = Math.abs (name.substring (start, end).hashCode () + rgbOffset) % 210 + 20;
+b = Math.abs (name.substring (end).hashCode () + rgbOffset) % 210 + 20;
+var color = new java.awt.Color (r, g, b);
+return color;
+}, "~S");
+Clazz.defineMethod (c$, "parseAppletParameter",
+function (paramValue) {
+var st = new java.util.StringTokenizer (paramValue, ";");
+var st2;
+var token = null;
+var colour;
+var residues;
+try {
+while (st.hasMoreElements ()) {
+token = st.nextToken ().trim ();
+residues = token.substring (0, token.indexOf ("="));
+colour = token.substring (token.indexOf ("=") + 1);
+st2 = new java.util.StringTokenizer (residues, " ,");
+while (st2.hasMoreTokens ()) {
+token = st2.nextToken ();
+if (jalview.schemes.ResidueProperties.aaIndex[token.charCodeAt (0)] == -1) {
+continue;
+}var colIndex = jalview.schemes.ResidueProperties.aaIndex[token.charCodeAt (0)];
+if (token.equalsIgnoreCase ("lowerCase")) {
+if (this.lowerCaseColours == null) {
+this.lowerCaseColours = new Array (23);
+}for (var i = 0; i < 23; i++) {
+if (this.lowerCaseColours[i] == null) {
+this.lowerCaseColours[i] = this.getColourFromString (colour);
+}}
+continue;
+}if (token.equals (token.toLowerCase ())) {
+if (this.lowerCaseColours == null) {
+this.lowerCaseColours = new Array (23);
+}this.lowerCaseColours[colIndex] = this.getColourFromString (colour);
+} else {
+this.colors[colIndex] = this.getColourFromString (colour);
+}}
+}
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.out.println ("Error parsing userDefinedColours:\n" + token + "\n" + ex);
+} else {
+throw ex;
+}
+}
+}, "~S");
+Clazz.defineMethod (c$, "findColour",
+function (c, j, seq) {
+var currentColour;
+var index = jalview.schemes.ResidueProperties.aaIndex[c.charCodeAt (0)];
+if ((this.threshold == 0) || this.aboveThreshold (c, j)) {
+if (this.lowerCaseColours != null && 'a' <= c && c <= 'z') {
+currentColour = this.lowerCaseColours[index];
+} else {
+currentColour = this.colors[index];
+}} else {
+currentColour = java.awt.Color.white;
+}if (this.conservationColouring) {
+currentColour = this.applyConservation (currentColour, j);
+}return currentColour;
+}, "~S,~N,jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "setLowerCaseColours",
+function (lcolours) {
+this.lowerCaseColours = lcolours;
+}, "~A");
+});
diff --git a/bin/jalview/schemes/ZappoColourScheme.js b/bin/jalview/schemes/ZappoColourScheme.js
index fc253d3..b63064e 100644
--- a/bin/jalview/schemes/ZappoColourScheme.js
+++ b/bin/jalview/schemes/ZappoColourScheme.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("jalview.schemes");
-Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.ZappoColourScheme", ["jalview.schemes.ResidueProperties"], function () {
-c$ = Clazz.declareType (jalview.schemes, "ZappoColourScheme", jalview.schemes.ResidueColourScheme);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.schemes.ZappoColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.zappo, 0]);
-});
-});
+Clazz.declarePackage ("jalview.schemes");
+Clazz.load (["jalview.schemes.ResidueColourScheme"], "jalview.schemes.ZappoColourScheme", ["jalview.schemes.ResidueProperties"], function () {
+c$ = Clazz.declareType (jalview.schemes, "ZappoColourScheme", jalview.schemes.ResidueColourScheme);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.schemes.ZappoColourScheme, [jalview.schemes.ResidueProperties.aaIndex, jalview.schemes.ResidueProperties.zappo, 0]);
+});
+});
diff --git a/bin/jalview/schemes/package.js b/bin/jalview/schemes/package.js
index 045573a..5891eb2 100644
--- a/bin/jalview/schemes/package.js
+++ b/bin/jalview/schemes/package.js
@@ -1,5 +1,5 @@
-var path = ClazzLoader.getClasspathFor ("jalview.schemes.package");
-path = path.substring (0, path.lastIndexOf ("package.js"));
-ClazzLoader.jarClasspath (path + "ClustalxColourScheme.js", [
-"jalview.schemes.ConsensusColour",
-"$.ClustalxColourScheme"]);
+var path = ClazzLoader.getClasspathFor ("jalview.schemes.package");
+path = path.substring (0, path.lastIndexOf ("package.js"));
+ClazzLoader.jarClasspath (path + "ClustalxColourScheme.js", [
+"jalview.schemes.ConsensusColour",
+"$.ClustalxColourScheme"]);
diff --git a/bin/jalview/structure/AlignmentViewPanelListener.js b/bin/jalview/structure/AlignmentViewPanelListener.js
index 979d03f..d293108 100644
--- a/bin/jalview/structure/AlignmentViewPanelListener.js
+++ b/bin/jalview/structure/AlignmentViewPanelListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "AlignmentViewPanelListener");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "AlignmentViewPanelListener");
diff --git a/bin/jalview/structure/AtomSpec.js b/bin/jalview/structure/AtomSpec.js
index 3e50bc2..0023fdc 100644
--- a/bin/jalview/structure/AtomSpec.js
+++ b/bin/jalview/structure/AtomSpec.js
@@ -1,35 +1,35 @@
-Clazz.declarePackage ("jalview.structure");
-c$ = Clazz.decorateAsClass (function () {
-this.pdbFile = null;
-this.chain = null;
-this.pdbResNum = 0;
-this.atomIndex = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.structure, "AtomSpec");
-Clazz.makeConstructor (c$,
-function (pdbFile, chain, resNo, atomNo) {
-this.pdbFile = pdbFile;
-this.chain = chain;
-this.pdbResNum = resNo;
-this.atomIndex = atomNo;
-}, "~S,~S,~N,~N");
-Clazz.defineMethod (c$, "getPdbFile",
-function () {
-return this.pdbFile;
-});
-Clazz.defineMethod (c$, "getChain",
-function () {
-return this.chain;
-});
-Clazz.defineMethod (c$, "getPdbResNum",
-function () {
-return this.pdbResNum;
-});
-Clazz.defineMethod (c$, "getAtomIndex",
-function () {
-return this.atomIndex;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "pdbFile: " + this.pdbFile + ", chain: " + this.chain + ", res: " + this.pdbResNum + ", atom: " + this.atomIndex;
-});
+Clazz.declarePackage ("jalview.structure");
+c$ = Clazz.decorateAsClass (function () {
+this.pdbFile = null;
+this.chain = null;
+this.pdbResNum = 0;
+this.atomIndex = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.structure, "AtomSpec");
+Clazz.makeConstructor (c$,
+function (pdbFile, chain, resNo, atomNo) {
+this.pdbFile = pdbFile;
+this.chain = chain;
+this.pdbResNum = resNo;
+this.atomIndex = atomNo;
+}, "~S,~S,~N,~N");
+Clazz.defineMethod (c$, "getPdbFile",
+function () {
+return this.pdbFile;
+});
+Clazz.defineMethod (c$, "getChain",
+function () {
+return this.chain;
+});
+Clazz.defineMethod (c$, "getPdbResNum",
+function () {
+return this.pdbResNum;
+});
+Clazz.defineMethod (c$, "getAtomIndex",
+function () {
+return this.atomIndex;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "pdbFile: " + this.pdbFile + ", chain: " + this.chain + ", res: " + this.pdbResNum + ", atom: " + this.atomIndex;
+});
diff --git a/bin/jalview/structure/CommandListener.js b/bin/jalview/structure/CommandListener.js
index 5f0c290..8901ca3 100644
--- a/bin/jalview/structure/CommandListener.js
+++ b/bin/jalview/structure/CommandListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "CommandListener");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "CommandListener");
diff --git a/bin/jalview/structure/SecondaryStructureListener.js b/bin/jalview/structure/SecondaryStructureListener.js
index d9e73f4..b16a9bc 100644
--- a/bin/jalview/structure/SecondaryStructureListener.js
+++ b/bin/jalview/structure/SecondaryStructureListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "SecondaryStructureListener");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "SecondaryStructureListener");
diff --git a/bin/jalview/structure/SelectionListener.js b/bin/jalview/structure/SelectionListener.js
index f7ce6dc..6dc17bd 100644
--- a/bin/jalview/structure/SelectionListener.js
+++ b/bin/jalview/structure/SelectionListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "SelectionListener");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "SelectionListener");
diff --git a/bin/jalview/structure/SelectionSource.js b/bin/jalview/structure/SelectionSource.js
index 995ec35..7bb91f3 100644
--- a/bin/jalview/structure/SelectionSource.js
+++ b/bin/jalview/structure/SelectionSource.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "SelectionSource");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "SelectionSource");
diff --git a/bin/jalview/structure/SequenceListener.js b/bin/jalview/structure/SequenceListener.js
index 026c9c1..6ff05ae 100644
--- a/bin/jalview/structure/SequenceListener.js
+++ b/bin/jalview/structure/SequenceListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "SequenceListener");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "SequenceListener");
diff --git a/bin/jalview/structure/StructureListener.js b/bin/jalview/structure/StructureListener.js
index 47bde4f..e5ea9ef 100644
--- a/bin/jalview/structure/StructureListener.js
+++ b/bin/jalview/structure/StructureListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "StructureListener");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "StructureListener");
diff --git a/bin/jalview/structure/StructureMapping.js b/bin/jalview/structure/StructureMapping.js
index 8cf2f33..40c774f 100644
--- a/bin/jalview/structure/StructureMapping.js
+++ b/bin/jalview/structure/StructureMapping.js
@@ -1,69 +1,69 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.load (null, "jalview.structure.StructureMapping", ["jalview.datamodel.AlignmentAnnotation"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.mappingDetails = null;
-this.sequence = null;
-this.pdbfile = null;
-this.pdbid = null;
-this.pdbchain = null;
-this.mapping = null;
-Clazz.instantialize (this, arguments);
-}, jalview.structure, "StructureMapping");
-Clazz.makeConstructor (c$,
-function (seq, pdbfile, pdbid, chain, mapping, mappingDetails) {
-this.sequence = seq;
-this.pdbfile = pdbfile;
-this.pdbid = pdbid;
-this.pdbchain = chain;
-this.mapping = mapping;
-this.mappingDetails = mappingDetails;
-}, "jalview.datamodel.SequenceI,~S,~S,~S,~A,~S");
-Clazz.defineMethod (c$, "getSequence",
-function () {
-return this.sequence;
-});
-Clazz.defineMethod (c$, "getChain",
-function () {
-return this.pdbchain;
-});
-Clazz.defineMethod (c$, "getPdbId",
-function () {
-return this.pdbid;
-});
-Clazz.defineMethod (c$, "getAtomNum",
-function (seqpos) {
-if (this.mapping.length > seqpos) {
-return this.mapping[seqpos][1];
-} else {
-return 0;
-}}, "~N");
-Clazz.defineMethod (c$, "getPDBResNum",
-function (seqpos) {
-if (this.mapping.length > seqpos) {
-return this.mapping[seqpos][0];
-} else {
-return 0;
-}}, "~N");
-Clazz.defineMethod (c$, "getSeqPos",
-function (pdbResNum) {
-for (var i = 0; i < this.mapping.length; i++) {
-if (this.mapping[i][0] == pdbResNum) {
-return i;
-}}
-return -1;
-}, "~N");
-Clazz.defineMethod (c$, "transfer",
-function (ana) {
-var ala_copy = new jalview.datamodel.AlignmentAnnotation (ana);
-var ds = this.sequence;
-while (ds.getDatasetSequence () != null) {
-ds = ds.getDatasetSequence ();
-}
-ala_copy.remap (ds, this.mapping, -1, -1, 0);
-ds.addAlignmentAnnotation (ala_copy);
-if (ds !== this.sequence) {
-ala_copy = new jalview.datamodel.AlignmentAnnotation (ala_copy);
-this.sequence.addAlignmentAnnotation (ala_copy);
-}return ala_copy;
-}, "jalview.datamodel.AlignmentAnnotation");
-});
+Clazz.declarePackage ("jalview.structure");
+Clazz.load (null, "jalview.structure.StructureMapping", ["jalview.datamodel.AlignmentAnnotation"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.mappingDetails = null;
+this.sequence = null;
+this.pdbfile = null;
+this.pdbid = null;
+this.pdbchain = null;
+this.mapping = null;
+Clazz.instantialize (this, arguments);
+}, jalview.structure, "StructureMapping");
+Clazz.makeConstructor (c$,
+function (seq, pdbfile, pdbid, chain, mapping, mappingDetails) {
+this.sequence = seq;
+this.pdbfile = pdbfile;
+this.pdbid = pdbid;
+this.pdbchain = chain;
+this.mapping = mapping;
+this.mappingDetails = mappingDetails;
+}, "jalview.datamodel.SequenceI,~S,~S,~S,~A,~S");
+Clazz.defineMethod (c$, "getSequence",
+function () {
+return this.sequence;
+});
+Clazz.defineMethod (c$, "getChain",
+function () {
+return this.pdbchain;
+});
+Clazz.defineMethod (c$, "getPdbId",
+function () {
+return this.pdbid;
+});
+Clazz.defineMethod (c$, "getAtomNum",
+function (seqpos) {
+if (this.mapping.length > seqpos) {
+return this.mapping[seqpos][1];
+} else {
+return 0;
+}}, "~N");
+Clazz.defineMethod (c$, "getPDBResNum",
+function (seqpos) {
+if (this.mapping.length > seqpos) {
+return this.mapping[seqpos][0];
+} else {
+return 0;
+}}, "~N");
+Clazz.defineMethod (c$, "getSeqPos",
+function (pdbResNum) {
+for (var i = 0; i < this.mapping.length; i++) {
+if (this.mapping[i][0] == pdbResNum) {
+return i;
+}}
+return -1;
+}, "~N");
+Clazz.defineMethod (c$, "transfer",
+function (ana) {
+var ala_copy = new jalview.datamodel.AlignmentAnnotation (ana);
+var ds = this.sequence;
+while (ds.getDatasetSequence () != null) {
+ds = ds.getDatasetSequence ();
+}
+ala_copy.remap (ds, this.mapping, -1, -1, 0);
+ds.addAlignmentAnnotation (ala_copy);
+if (ds !== this.sequence) {
+ala_copy = new jalview.datamodel.AlignmentAnnotation (ala_copy);
+this.sequence.addAlignmentAnnotation (ala_copy);
+}return ala_copy;
+}, "jalview.datamodel.AlignmentAnnotation");
+});
diff --git a/bin/jalview/structure/StructureMappingcommandSet.js b/bin/jalview/structure/StructureMappingcommandSet.js
index 2f615c6..97ef9f5 100644
--- a/bin/jalview/structure/StructureMappingcommandSet.js
+++ b/bin/jalview/structure/StructureMappingcommandSet.js
@@ -1,13 +1,13 @@
-Clazz.declarePackage ("jalview.structure");
-c$ = Clazz.decorateAsClass (function () {
-this.mapping = null;
-this.commands = null;
-this.handledBy = null;
-Clazz.instantialize (this, arguments);
-}, jalview.structure, "StructureMappingcommandSet");
-Clazz.makeConstructor (c$,
-function (handledBy, files, commands) {
-this.mapping = files;
-this.handledBy = handledBy;
-this.commands = commands;
-}, "~O,~S,~A");
+Clazz.declarePackage ("jalview.structure");
+c$ = Clazz.decorateAsClass (function () {
+this.mapping = null;
+this.commands = null;
+this.handledBy = null;
+Clazz.instantialize (this, arguments);
+}, jalview.structure, "StructureMappingcommandSet");
+Clazz.makeConstructor (c$,
+function (handledBy, files, commands) {
+this.mapping = files;
+this.handledBy = handledBy;
+this.commands = commands;
+}, "~O,~S,~A");
diff --git a/bin/jalview/structure/StructureSelectionManager.class b/bin/jalview/structure/StructureSelectionManager.class
index bd3d0d7..837803e 100644
Binary files a/bin/jalview/structure/StructureSelectionManager.class and b/bin/jalview/structure/StructureSelectionManager.class differ
diff --git a/bin/jalview/structure/StructureSelectionManager.js b/bin/jalview/structure/StructureSelectionManager.js
index 681a2a7..cdbab51 100644
--- a/bin/jalview/structure/StructureSelectionManager.js
+++ b/bin/jalview/structure/StructureSelectionManager.js
@@ -1,511 +1,511 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.load (["java.util.ArrayList", "$.HashMap", "$.LinkedHashSet", "$.Vector"], "jalview.structure.StructureSelectionManager", ["MCview.PDBfile", "jalview.analysis.AlignSeq", "jalview.commands.EditCommand", "$.OrderCommand", "jalview.datamodel.Mapping", "$.SearchResults", "jalview.io.AppletFormatAdapter", "jalview.structure.AtomSpec", "$.SecondaryStructureListener", "$.SequenceListener", "$.StructureListener", "$.StructureMapping", "$.VamsasListener", "jalview.util.MappingUtils", "$.MessageManager", "java.lang.Error", "$.NullPointerException", "$.StringBuilder", "java.util.Arrays", "$.Collections", "$.IdentityHashMap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.mappings = null;
-this.processSecondaryStructure = false;
-this.secStructServices = false;
-this.addTempFacAnnot = false;
-this.seqmappings = null;
-this.seqMappingRefCounts = null;
-this.commandListeners = null;
-this.sel_listeners = null;
-this.pdbIdFileName = null;
-this.pdbFileNameId = null;
-this.relaySeqMappings = true;
-this.listeners = null;
-this.handlingVamsasMo = false;
-this.lastmsg = 0;
-this.view_listeners = null;
-Clazz.instantialize (this, arguments);
-}, jalview.structure, "StructureSelectionManager");
-Clazz.prepareFields (c$, function () {
-this.mappings = new java.util.ArrayList ();
-this.seqmappings = new java.util.LinkedHashSet ();
-this.seqMappingRefCounts = new java.util.HashMap ();
-this.commandListeners = new java.util.ArrayList ();
-this.sel_listeners = new java.util.ArrayList ();
-this.pdbIdFileName = new java.util.HashMap ();
-this.pdbFileNameId = new java.util.HashMap ();
-this.listeners = new java.util.Vector ();
-this.view_listeners = new java.util.Vector ();
-});
-Clazz.defineMethod (c$, "isSecStructServices",
-function () {
-return this.secStructServices;
-});
-Clazz.defineMethod (c$, "setSecStructServices",
-function (secStructServices) {
-this.secStructServices = secStructServices;
-}, "~B");
-Clazz.defineMethod (c$, "isAddTempFacAnnot",
-function () {
-return this.addTempFacAnnot;
-});
-Clazz.defineMethod (c$, "setAddTempFacAnnot",
-function (addTempFacAnnot) {
-this.addTempFacAnnot = addTempFacAnnot;
-}, "~B");
-Clazz.defineMethod (c$, "isProcessSecondaryStructure",
-function () {
-return this.processSecondaryStructure;
-});
-Clazz.defineMethod (c$, "setProcessSecondaryStructure",
-function (enable) {
-this.processSecondaryStructure = enable;
-}, "~B");
-Clazz.defineMethod (c$, "reportMapping",
-function () {
-if (this.mappings.isEmpty ()) {
-System.err.println ("reportMapping: No PDB/Sequence mappings.");
-} else {
-System.err.println ("reportMapping: There are " + this.mappings.size () + " mappings.");
-var i = 0;
-for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
-System.err.println ("mapping " + i++ + " : " + sm.pdbfile);
-}
-}});
-Clazz.defineMethod (c$, "registerPDBFile",
-function (idForFile, absoluteFile) {
-this.pdbIdFileName.put (idForFile, absoluteFile);
-this.pdbFileNameId.put (absoluteFile, idForFile);
-}, "~S,~S");
-Clazz.defineMethod (c$, "findIdForPDBFile",
-function (idOrFile) {
-var id = this.pdbFileNameId.get (idOrFile);
-return id;
-}, "~S");
-Clazz.defineMethod (c$, "findFileForPDBId",
-function (idOrFile) {
-var id = this.pdbIdFileName.get (idOrFile);
-return id;
-}, "~S");
-Clazz.defineMethod (c$, "isPDBFileRegistered",
-function (idOrFile) {
-return this.pdbFileNameId.containsKey (idOrFile) || this.pdbIdFileName.containsKey (idOrFile);
-}, "~S");
-c$.getStructureSelectionManager = Clazz.defineMethod (c$, "getStructureSelectionManager",
-function (context) {
-if (context == null) {
-if (jalview.structure.StructureSelectionManager.nullProvider == null) {
-if (jalview.structure.StructureSelectionManager.instances != null) {
-throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_structure_selection_manager_null"), new NullPointerException (jalview.util.MessageManager.getString ("exception.ssm_context_is_null")));
-} else {
-jalview.structure.StructureSelectionManager.nullProvider = new jalview.structure.StructureSelectionManager ();
-}return jalview.structure.StructureSelectionManager.nullProvider;
-}}if (jalview.structure.StructureSelectionManager.instances == null) {
-jalview.structure.StructureSelectionManager.instances = new java.util.IdentityHashMap ();
-}var instance = jalview.structure.StructureSelectionManager.instances.get (context);
-if (instance == null) {
-if (jalview.structure.StructureSelectionManager.nullProvider != null) {
-instance = jalview.structure.StructureSelectionManager.nullProvider;
-} else {
-instance = new jalview.structure.StructureSelectionManager ();
-}jalview.structure.StructureSelectionManager.instances.put (context, instance);
-}return instance;
-}, "jalview.api.StructureSelectionManagerProvider");
-Clazz.defineMethod (c$, "setRelaySeqMappings",
-function (relay) {
-this.relaySeqMappings = relay;
-}, "~B");
-Clazz.defineMethod (c$, "isRelaySeqMappingsEnabled",
-function () {
-return this.relaySeqMappings;
-});
-Clazz.defineMethod (c$, "addStructureViewerListener",
-function (svl) {
-if (!this.listeners.contains (svl)) {
-this.listeners.addElement (svl);
-}}, "~O");
-Clazz.defineMethod (c$, "alreadyMappedToFile",
-function (pdbid) {
-for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
-if (sm.getPdbId ().equals (pdbid)) {
-return sm.pdbfile;
-}}
-return null;
-}, "~S");
-Clazz.defineMethod (c$, "setMapping",
-function (sequence, targetChains, pdbFile, protocol) {
-return this.setMapping (true, sequence, targetChains, pdbFile, protocol);
-}, "~A,~A,~S,~S");
-Clazz.defineMethod (c$, "setMapping",
-function (forStructureView, sequence, targetChains, pdbFile, protocol) {
-var parseSecStr = this.processSecondaryStructure;
-if (this.isPDBFileRegistered (pdbFile)) {
-for (var sq, $sq = 0, $$sq = sequence; $sq < $$sq.length && ((sq = $$sq[$sq]) || true); $sq++) {
-var ds = sq;
-while (ds.getDatasetSequence () != null) {
-ds = ds.getDatasetSequence ();
-}
-;if (ds.getAnnotation () != null) {
-for (var ala, $ala = 0, $$ala = ds.getAnnotation (); $ala < $$ala.length && ((ala = $$ala[$ala]) || true); $ala++) {
-if (MCview.PDBfile.isCalcIdForFile (ala, this.findIdForPDBFile (pdbFile))) {
-parseSecStr = false;
-}}
-}}
-}var pdb = null;
-try {
-pdb = new MCview.PDBfile (this.addTempFacAnnot, parseSecStr, this.secStructServices, pdbFile, protocol);
-if (pdb.id != null && pdb.id.trim ().length > 0 && jalview.io.AppletFormatAdapter.FILE.equals (protocol)) {
-this.registerPDBFile (pdb.id.trim (), pdbFile);
-}} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-return null;
-} else {
-throw ex;
-}
-}
-var targetChain;
-for (var s = 0; s < sequence.length; s++) {
-var infChain = true;
-var seq = sequence[s];
-if (targetChains != null && targetChains[s] != null) {
-infChain = false;
-targetChain = targetChains[s];
-} else if (seq.getName ().indexOf ("|") > -1) {
-targetChain = seq.getName ().substring (seq.getName ().lastIndexOf ("|") + 1);
-if (targetChain.length > 1) {
-if (targetChain.trim ().length == 0) {
-targetChain = " ";
-} else {
-targetChain = "";
-}}} else {
-targetChain = "";
-}var max = -10;
-var maxAlignseq = null;
-var maxChainId = " ";
-var maxChain = null;
-var first = true;
-for (var chain, $chain = pdb.chains.iterator (); $chain.hasNext () && ((chain = $chain.next ()) || true);) {
-if (targetChain.length > 0 && !targetChain.equals (chain.id) && !infChain) {
-continue;
-}var type = chain.isNa ? "dna" : "pep";
-var as = jalview.analysis.AlignSeq.doGlobalNWAlignment (seq, chain.sequence, type);
-if (first || as.maxscore > max || (as.maxscore == max && chain.id.equals (targetChain))) {
-first = false;
-maxChain = chain;
-max = as.maxscore;
-maxAlignseq = as;
-maxChainId = chain.id;
-}}
-if (maxChain == null) {
-continue;
-}var mappingDetails = new StringBuilder (128);
-mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("PDB Sequence is :").append (jalview.structure.StructureSelectionManager.NEWLINE).append ("Sequence = ").append (maxChain.sequence.getSequenceAsString ());
-mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("No of residues = ").append (maxChain.residues.size ()).append (jalview.structure.StructureSelectionManager.NEWLINE).append (jalview.structure.StructureSelectionManager.NEWLINE);
-var ps = ((Clazz.isClassDefined ("jalview.structure.StructureSelectionManager$1") ? 0 : jalview.structure.StructureSelectionManager.$StructureSelectionManager$1$ ()), Clazz.innerTypeInstance (jalview.structure.StructureSelectionManager$1, this, Clazz.cloneFinals ("mappingDetails", mappingDetails), System.out));
-maxAlignseq.printAlignment (ps);
-mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("PDB start/end ");
-mappingDetails.append (String.valueOf (maxAlignseq.seq2start)).append (" ");
-mappingDetails.append (String.valueOf (maxAlignseq.seq2end));
-mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("SEQ start/end ");
-mappingDetails.append (String.valueOf (maxAlignseq.seq1start + seq.getStart () - 1)).append (" ");
-mappingDetails.append (String.valueOf (maxAlignseq.seq1end + seq.getEnd () - 1));
-maxChain.makeExactMapping (maxAlignseq, seq);
-var sqmpping = maxAlignseq.getMappingFromS1 (false);
-var omap = new jalview.datamodel.Mapping (sqmpping.getMap ().getInverse ());
-maxChain.transferRESNUMFeatures (seq, null);
-var mapping = Clazz.newIntArray (seq.findPosition (seq.getLength ()) + 2, 2, 0);
-var resNum = -10000;
-var index = 0;
-do {
-var tmp = maxChain.atoms.elementAt (index);
-if (resNum != tmp.resNumber && tmp.alignmentMapping != -1) {
-resNum = tmp.resNumber;
-mapping[tmp.alignmentMapping + 1][0] = tmp.resNumber;
-mapping[tmp.alignmentMapping + 1][1] = tmp.atomIndex;
-}index++;
-} while (index < maxChain.atoms.size ());
-if (protocol.equals (jalview.io.AppletFormatAdapter.PASTE)) {
-pdbFile = "INLINE" + pdb.id;
-}var newMapping = new jalview.structure.StructureMapping (seq, pdbFile, pdb.id, maxChainId, mapping, mappingDetails.toString ());
-if (forStructureView) {
-this.mappings.add (newMapping);
-}maxChain.transferResidueAnnotation (newMapping, sqmpping);
-}
-return pdb;
-}, "~B,~A,~A,~S,~S");
-Clazz.defineMethod (c$, "removeStructureViewerListener",
-function (svl, pdbfiles) {
-this.listeners.removeElement (svl);
-if (Clazz.instanceOf (svl, jalview.structure.SequenceListener)) {
-for (var i = 0; i < this.listeners.size (); i++) {
-if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.StructureListener)) {
-(this.listeners.elementAt (i)).releaseReferences (svl);
-}}
-}if (pdbfiles == null) {
-return;
-}var pdbs = new java.util.ArrayList (java.util.Arrays.asList (pdbfiles));
-var sl;
-for (var i = 0; i < this.listeners.size (); i++) {
-if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.StructureListener)) {
-sl = this.listeners.elementAt (i);
-for (var pdbfile, $pdbfile = 0, $$pdbfile = sl.getPdbFile (); $pdbfile < $$pdbfile.length && ((pdbfile = $$pdbfile[$pdbfile]) || true); $pdbfile++) {
-pdbs.remove (pdbfile);
-}
-}}
-if (pdbs.size () > 0) {
-var tmp = new java.util.ArrayList ();
-for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
-if (!pdbs.contains (sm.pdbfile)) {
-tmp.add (sm);
-}}
-this.mappings = tmp;
-}}, "~O,~A");
-Clazz.defineMethod (c$, "mouseOverStructure",
-function (pdbResNum, chain, pdbfile) {
-var atomSpec = new jalview.structure.AtomSpec (pdbfile, chain, pdbResNum, 0);
-var atoms = java.util.Collections.singletonList (atomSpec);
-this.mouseOverStructure (atoms);
-}, "~N,~S,~S");
-Clazz.defineMethod (c$, "mouseOverStructure",
-function (atoms) {
-if (this.listeners == null) {
-return;
-}var hasSequenceListener = false;
-for (var i = 0; i < this.listeners.size (); i++) {
-if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.SequenceListener)) {
-hasSequenceListener = true;
-}}
-if (!hasSequenceListener) {
-return;
-}var results = new jalview.datamodel.SearchResults ();
-for (var atom, $atom = atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
-var lastseq = null;
-var lastipos = -1;
-for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
-if (sm.pdbfile.equals (atom.getPdbFile ()) && sm.pdbchain.equals (atom.getChain ())) {
-var indexpos = sm.getSeqPos (atom.getPdbResNum ());
-if (lastipos != indexpos && lastseq !== sm.sequence) {
-results.addResult (sm.sequence, indexpos, indexpos);
-lastipos = indexpos;
-lastseq = sm.sequence;
-for (var acf, $acf = this.seqmappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-acf.markMappedRegion (sm.sequence, indexpos, results);
-}
-}}}
-}
-for (var li, $li = this.listeners.iterator (); $li.hasNext () && ((li = $li.next ()) || true);) {
-if (Clazz.instanceOf (li, jalview.structure.SequenceListener)) {
-(li).highlightSequence (results);
-}}
-}, "java.util.List");
-Clazz.defineMethod (c$, "mouseOverSequence",
-function (seq, indexpos, index, source) {
-var hasSequenceListeners = this.handlingVamsasMo || !this.seqmappings.isEmpty ();
-var results = null;
-if (index == -1) {
-index = seq.findPosition (indexpos);
-}for (var i = 0; i < this.listeners.size (); i++) {
-var listener = this.listeners.elementAt (i);
-if (listener === source) {
-continue;
-}if (Clazz.instanceOf (listener, jalview.structure.StructureListener)) {
-this.highlightStructure (listener, seq, index);
-} else {
-if (Clazz.instanceOf (listener, jalview.structure.SequenceListener)) {
-var seqListener = listener;
-if (hasSequenceListeners && seqListener.getVamsasSource () !== source) {
-if (this.relaySeqMappings) {
-if (results == null) {
-results = jalview.util.MappingUtils.buildSearchResults (seq, index, this.seqmappings);
-}if (this.handlingVamsasMo) {
-results.addResult (seq, index, index);
-}seqListener.highlightSequence (results);
-}}} else if (Clazz.instanceOf (listener, jalview.structure.VamsasListener) && !this.handlingVamsasMo) {
-(listener).mouseOverSequence (seq, indexpos, source);
-} else if (Clazz.instanceOf (listener, jalview.structure.SecondaryStructureListener)) {
-(listener).mouseOverSequence (seq, indexpos, index);
-}}}
-}, "jalview.datamodel.SequenceI,~N,~N,jalview.structure.VamsasSource");
-Clazz.defineMethod (c$, "highlightStructure",
-function (sl, seq, index) {
-if (!sl.isListeningFor (seq)) {
-return;
-}var atomNo;
-var atoms = new java.util.ArrayList ();
-for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
-if (sm.sequence === seq || sm.sequence === seq.getDatasetSequence ()) {
-atomNo = sm.getAtomNum (index);
-if (atomNo > 0) {
-atoms.add ( new jalview.structure.AtomSpec (sm.pdbfile, sm.pdbchain, sm.getPDBResNum (index), atomNo));
-}}}
-sl.highlightAtoms (atoms);
-}, "jalview.structure.StructureListener,jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "mouseOverVamsasSequence",
-function (sequenceI, position, source) {
-this.handlingVamsasMo = true;
-var msg = sequenceI.hashCode () * (1 + position);
-if (this.lastmsg != msg) {
-this.lastmsg = msg;
-this.mouseOverSequence (sequenceI, position, -1, source);
-}this.handlingVamsasMo = false;
-}, "jalview.datamodel.SequenceI,~N,jalview.structure.VamsasSource");
-Clazz.defineMethod (c$, "colourSequenceFromStructure",
-function (seq, pdbid) {
-return null;
-}, "jalview.datamodel.SequenceI,~S");
-Clazz.defineMethod (c$, "structureSelectionChanged",
-function () {
-});
-Clazz.defineMethod (c$, "sequenceSelectionChanged",
-function () {
-});
-Clazz.defineMethod (c$, "sequenceColoursChanged",
-function (source) {
-var sl;
-for (var i = 0; i < this.listeners.size (); i++) {
-if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.StructureListener)) {
-sl = this.listeners.elementAt (i);
-sl.updateColours (source);
-}}
-}, "~O");
-Clazz.defineMethod (c$, "getMapping",
-function (pdbfile) {
-var tmp = new java.util.ArrayList ();
-for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
-if (sm.pdbfile.equals (pdbfile)) {
-tmp.add (sm);
-}}
-return tmp.toArray ( new Array (tmp.size ()));
-}, "~S");
-Clazz.defineMethod (c$, "printMappings",
-function (pdbfile, seqs) {
-if (pdbfile == null || seqs == null || seqs.isEmpty ()) {
-return "";
-}var sb = new StringBuilder (64);
-for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
-if (sm.pdbfile.equals (pdbfile) && seqs.contains (sm.sequence)) {
-sb.append (sm.mappingDetails);
-sb.append (jalview.structure.StructureSelectionManager.NEWLINE);
-sb.append ("=====================");
-sb.append (jalview.structure.StructureSelectionManager.NEWLINE);
-}}
-sb.append (jalview.structure.StructureSelectionManager.NEWLINE);
-return sb.toString ();
-}, "~S,java.util.List");
-Clazz.defineMethod (c$, "removeMappings",
-function (set) {
-if (set != null) {
-for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-this.removeMapping (acf);
-}
-}}, "java.util.Set");
-Clazz.defineMethod (c$, "removeMapping",
-function (acf) {
-if (acf != null && this.seqmappings.contains (acf)) {
-var count = (this.seqMappingRefCounts.get (acf)).intValue ();
-count--;
-if (count > 0) {
-this.seqMappingRefCounts.put (acf, new Integer (count));
-} else {
-this.seqmappings.remove (acf);
-this.seqMappingRefCounts.remove (acf);
-}}}, "jalview.datamodel.AlignedCodonFrame");
-Clazz.defineMethod (c$, "addMappings",
-function (set) {
-if (set != null) {
-for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-this.addMapping (acf);
-}
-}}, "java.util.Set");
-Clazz.defineMethod (c$, "addMapping",
-function (acf) {
-if (acf != null) {
-if (this.seqmappings.contains (acf)) {
-this.seqMappingRefCounts.put (acf, new Integer ((this.seqMappingRefCounts.get (acf)).intValue () + 1));
-} else {
-this.seqmappings.add (acf);
-this.seqMappingRefCounts.put (acf, new Integer (1));
-}}}, "jalview.datamodel.AlignedCodonFrame");
-Clazz.defineMethod (c$, "addSelectionListener",
-function (selecter) {
-if (!this.sel_listeners.contains (selecter)) {
-this.sel_listeners.add (selecter);
-}}, "jalview.structure.SelectionListener");
-Clazz.defineMethod (c$, "removeSelectionListener",
-function (toremove) {
-if (this.sel_listeners.contains (toremove)) {
-this.sel_listeners.remove (toremove);
-}}, "jalview.structure.SelectionListener");
-Clazz.defineMethod (c$, "sendSelection",
-function (selection, colsel, source) {
-for (var slis, $slis = this.sel_listeners.iterator (); $slis.hasNext () && ((slis = $slis.next ()) || true);) {
-if (slis !== source) {
-slis.selection (selection, colsel, source);
-}}
-}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
-Clazz.defineMethod (c$, "sendViewPosition",
-function (source, startRes, endRes, startSeq, endSeq) {
-if (this.view_listeners != null && this.view_listeners.size () > 0) {
-var listeners = this.view_listeners.elements ();
-while (listeners.hasMoreElements ()) {
-var slis = listeners.nextElement ();
-if (slis !== source) {
-slis.viewPosition (startRes, endRes, startSeq, endSeq, source);
-};}
-}}, "jalview.api.AlignmentViewPanel,~N,~N,~N,~N");
-c$.release = Clazz.defineMethod (c$, "release",
-function (jalviewLite) {
-{
-if (jalview.structure.StructureSelectionManager.instances == null) {
-return;
-}var mnger = (jalview.structure.StructureSelectionManager.instances.get (jalviewLite));
-if (mnger != null) {
-jalview.structure.StructureSelectionManager.instances.remove (jalviewLite);
-try {
-mnger.finalize ();
-} catch (x) {
-}
-}}}, "jalview.api.StructureSelectionManagerProvider");
-Clazz.defineMethod (c$, "registerPDBEntry",
-function (pdbentry) {
-if (pdbentry.getFile () != null && pdbentry.getFile ().trim ().length > 0) {
-this.registerPDBFile (pdbentry.getId (), pdbentry.getFile ());
-}}, "jalview.datamodel.PDBEntry");
-Clazz.defineMethod (c$, "addCommandListener",
-function (cl) {
-if (!this.commandListeners.contains (cl)) {
-this.commandListeners.add (cl);
-}}, "jalview.structure.CommandListener");
-Clazz.defineMethod (c$, "hasCommandListener",
-function (cl) {
-return this.commandListeners.contains (cl);
-}, "jalview.structure.CommandListener");
-Clazz.defineMethod (c$, "removeCommandListener",
-function (l) {
-return this.commandListeners.remove (l);
-}, "jalview.structure.CommandListener");
-Clazz.defineMethod (c$, "commandPerformed",
-function (command, undo, source) {
-for (var listener, $listener = this.commandListeners.iterator (); $listener.hasNext () && ((listener = $listener.next ()) || true);) {
-listener.mirrorCommand (command, undo, this, source);
-}
-}, "jalview.commands.CommandI,~B,jalview.structure.VamsasSource");
-Clazz.defineMethod (c$, "mapCommand",
-function (command, undo, mapTo, gapChar) {
-if (Clazz.instanceOf (command, jalview.commands.EditCommand)) {
-return jalview.util.MappingUtils.mapEditCommand (command, undo, mapTo, gapChar, this.seqmappings);
-} else if (Clazz.instanceOf (command, jalview.commands.OrderCommand)) {
-return jalview.util.MappingUtils.mapOrderCommand (command, undo, mapTo, this.seqmappings);
-}return null;
-}, "jalview.commands.CommandI,~B,jalview.datamodel.AlignmentI,~S");
-c$.$StructureSelectionManager$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.structure, "StructureSelectionManager$1", java.io.PrintStream);
-Clazz.defineMethod (c$, "print",
-function (x) {
-this.f$.mappingDetails.append (x);
-}, "~S");
-Clazz.defineMethod (c$, "println",
-function () {
-this.f$.mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE);
-});
-c$ = Clazz.p0p ();
-};
-c$.NEWLINE = c$.prototype.NEWLINE = System.lineSeparator ();
-Clazz.defineStatics (c$,
-"instances", null,
-"nullProvider", null);
-});
+Clazz.declarePackage ("jalview.structure");
+Clazz.load (["java.util.ArrayList", "$.HashMap", "$.LinkedHashSet", "$.Vector"], "jalview.structure.StructureSelectionManager", ["MCview.PDBfile", "jalview.analysis.AlignSeq", "jalview.commands.EditCommand", "$.OrderCommand", "jalview.datamodel.Mapping", "$.SearchResults", "jalview.io.AppletFormatAdapter", "jalview.structure.AtomSpec", "$.SecondaryStructureListener", "$.SequenceListener", "$.StructureListener", "$.StructureMapping", "$.VamsasListener", "jalview.util.MappingUtils", "$.MessageManager", "java.lang.Error", "$.NullPointerException", "$.StringBuilder", "java.util.Arrays", "$.Collections", "$.IdentityHashMap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.mappings = null;
+this.processSecondaryStructure = false;
+this.secStructServices = false;
+this.addTempFacAnnot = false;
+this.seqmappings = null;
+this.seqMappingRefCounts = null;
+this.commandListeners = null;
+this.sel_listeners = null;
+this.pdbIdFileName = null;
+this.pdbFileNameId = null;
+this.relaySeqMappings = true;
+this.listeners = null;
+this.handlingVamsasMo = false;
+this.lastmsg = 0;
+this.view_listeners = null;
+Clazz.instantialize (this, arguments);
+}, jalview.structure, "StructureSelectionManager");
+Clazz.prepareFields (c$, function () {
+this.mappings = new java.util.ArrayList ();
+this.seqmappings = new java.util.LinkedHashSet ();
+this.seqMappingRefCounts = new java.util.HashMap ();
+this.commandListeners = new java.util.ArrayList ();
+this.sel_listeners = new java.util.ArrayList ();
+this.pdbIdFileName = new java.util.HashMap ();
+this.pdbFileNameId = new java.util.HashMap ();
+this.listeners = new java.util.Vector ();
+this.view_listeners = new java.util.Vector ();
+});
+Clazz.defineMethod (c$, "isSecStructServices",
+function () {
+return this.secStructServices;
+});
+Clazz.defineMethod (c$, "setSecStructServices",
+function (secStructServices) {
+this.secStructServices = secStructServices;
+}, "~B");
+Clazz.defineMethod (c$, "isAddTempFacAnnot",
+function () {
+return this.addTempFacAnnot;
+});
+Clazz.defineMethod (c$, "setAddTempFacAnnot",
+function (addTempFacAnnot) {
+this.addTempFacAnnot = addTempFacAnnot;
+}, "~B");
+Clazz.defineMethod (c$, "isProcessSecondaryStructure",
+function () {
+return this.processSecondaryStructure;
+});
+Clazz.defineMethod (c$, "setProcessSecondaryStructure",
+function (enable) {
+this.processSecondaryStructure = enable;
+}, "~B");
+Clazz.defineMethod (c$, "reportMapping",
+function () {
+if (this.mappings.isEmpty ()) {
+System.err.println ("reportMapping: No PDB/Sequence mappings.");
+} else {
+System.err.println ("reportMapping: There are " + this.mappings.size () + " mappings.");
+var i = 0;
+for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
+System.err.println ("mapping " + i++ + " : " + sm.pdbfile);
+}
+}});
+Clazz.defineMethod (c$, "registerPDBFile",
+function (idForFile, absoluteFile) {
+this.pdbIdFileName.put (idForFile, absoluteFile);
+this.pdbFileNameId.put (absoluteFile, idForFile);
+}, "~S,~S");
+Clazz.defineMethod (c$, "findIdForPDBFile",
+function (idOrFile) {
+var id = this.pdbFileNameId.get (idOrFile);
+return id;
+}, "~S");
+Clazz.defineMethod (c$, "findFileForPDBId",
+function (idOrFile) {
+var id = this.pdbIdFileName.get (idOrFile);
+return id;
+}, "~S");
+Clazz.defineMethod (c$, "isPDBFileRegistered",
+function (idOrFile) {
+return this.pdbFileNameId.containsKey (idOrFile) || this.pdbIdFileName.containsKey (idOrFile);
+}, "~S");
+c$.getStructureSelectionManager = Clazz.defineMethod (c$, "getStructureSelectionManager",
+function (context) {
+if (context == null) {
+if (jalview.structure.StructureSelectionManager.nullProvider == null) {
+if (jalview.structure.StructureSelectionManager.instances != null) {
+throw new Error (jalview.util.MessageManager.getString ("error.implementation_error_structure_selection_manager_null"), new NullPointerException (jalview.util.MessageManager.getString ("exception.ssm_context_is_null")));
+} else {
+jalview.structure.StructureSelectionManager.nullProvider = new jalview.structure.StructureSelectionManager ();
+}return jalview.structure.StructureSelectionManager.nullProvider;
+}}if (jalview.structure.StructureSelectionManager.instances == null) {
+jalview.structure.StructureSelectionManager.instances = new java.util.IdentityHashMap ();
+}var instance = jalview.structure.StructureSelectionManager.instances.get (context);
+if (instance == null) {
+if (jalview.structure.StructureSelectionManager.nullProvider != null) {
+instance = jalview.structure.StructureSelectionManager.nullProvider;
+} else {
+instance = new jalview.structure.StructureSelectionManager ();
+}jalview.structure.StructureSelectionManager.instances.put (context, instance);
+}return instance;
+}, "jalview.api.StructureSelectionManagerProvider");
+Clazz.defineMethod (c$, "setRelaySeqMappings",
+function (relay) {
+this.relaySeqMappings = relay;
+}, "~B");
+Clazz.defineMethod (c$, "isRelaySeqMappingsEnabled",
+function () {
+return this.relaySeqMappings;
+});
+Clazz.defineMethod (c$, "addStructureViewerListener",
+function (svl) {
+if (!this.listeners.contains (svl)) {
+this.listeners.addElement (svl);
+}}, "~O");
+Clazz.defineMethod (c$, "alreadyMappedToFile",
+function (pdbid) {
+for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
+if (sm.getPdbId ().equals (pdbid)) {
+return sm.pdbfile;
+}}
+return null;
+}, "~S");
+Clazz.defineMethod (c$, "setMapping",
+function (sequence, targetChains, pdbFile, protocol) {
+return this.setMapping (true, sequence, targetChains, pdbFile, protocol);
+}, "~A,~A,~S,~S");
+Clazz.defineMethod (c$, "setMapping",
+function (forStructureView, sequence, targetChains, pdbFile, protocol) {
+var parseSecStr = this.processSecondaryStructure;
+if (this.isPDBFileRegistered (pdbFile)) {
+for (var sq, $sq = 0, $$sq = sequence; $sq < $$sq.length && ((sq = $$sq[$sq]) || true); $sq++) {
+var ds = sq;
+while (ds.getDatasetSequence () != null) {
+ds = ds.getDatasetSequence ();
+}
+;if (ds.getAnnotation () != null) {
+for (var ala, $ala = 0, $$ala = ds.getAnnotation (); $ala < $$ala.length && ((ala = $$ala[$ala]) || true); $ala++) {
+if (MCview.PDBfile.isCalcIdForFile (ala, this.findIdForPDBFile (pdbFile))) {
+parseSecStr = false;
+}}
+}}
+}var pdb = null;
+try {
+pdb = new MCview.PDBfile (this.addTempFacAnnot, parseSecStr, this.secStructServices, pdbFile, protocol);
+if (pdb.id != null && pdb.id.trim ().length > 0 && jalview.io.AppletFormatAdapter.FILE.equals (protocol)) {
+this.registerPDBFile (pdb.id.trim (), pdbFile);
+}} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+return null;
+} else {
+throw ex;
+}
+}
+var targetChain;
+for (var s = 0; s < sequence.length; s++) {
+var infChain = true;
+var seq = sequence[s];
+if (targetChains != null && targetChains[s] != null) {
+infChain = false;
+targetChain = targetChains[s];
+} else if (seq.getName ().indexOf ("|") > -1) {
+targetChain = seq.getName ().substring (seq.getName ().lastIndexOf ("|") + 1);
+if (targetChain.length > 1) {
+if (targetChain.trim ().length == 0) {
+targetChain = " ";
+} else {
+targetChain = "";
+}}} else {
+targetChain = "";
+}var max = -10;
+var maxAlignseq = null;
+var maxChainId = " ";
+var maxChain = null;
+var first = true;
+for (var chain, $chain = pdb.chains.iterator (); $chain.hasNext () && ((chain = $chain.next ()) || true);) {
+if (targetChain.length > 0 && !targetChain.equals (chain.id) && !infChain) {
+continue;
+}var type = chain.isNa ? "dna" : "pep";
+var as = jalview.analysis.AlignSeq.doGlobalNWAlignment (seq, chain.sequence, type);
+if (first || as.maxscore > max || (as.maxscore == max && chain.id.equals (targetChain))) {
+first = false;
+maxChain = chain;
+max = as.maxscore;
+maxAlignseq = as;
+maxChainId = chain.id;
+}}
+if (maxChain == null) {
+continue;
+}var mappingDetails = new StringBuilder (128);
+mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("PDB Sequence is :").append (jalview.structure.StructureSelectionManager.NEWLINE).append ("Sequence = ").append (maxChain.sequence.getSequenceAsString ());
+mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("No of residues = ").append (maxChain.residues.size ()).append (jalview.structure.StructureSelectionManager.NEWLINE).append (jalview.structure.StructureSelectionManager.NEWLINE);
+var ps = ((Clazz.isClassDefined ("jalview.structure.StructureSelectionManager$1") ? 0 : jalview.structure.StructureSelectionManager.$StructureSelectionManager$1$ ()), Clazz.innerTypeInstance (jalview.structure.StructureSelectionManager$1, this, Clazz.cloneFinals ("mappingDetails", mappingDetails), System.out));
+maxAlignseq.printAlignment (ps);
+mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("PDB start/end ");
+mappingDetails.append (String.valueOf (maxAlignseq.seq2start)).append (" ");
+mappingDetails.append (String.valueOf (maxAlignseq.seq2end));
+mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE).append ("SEQ start/end ");
+mappingDetails.append (String.valueOf (maxAlignseq.seq1start + seq.getStart () - 1)).append (" ");
+mappingDetails.append (String.valueOf (maxAlignseq.seq1end + seq.getEnd () - 1));
+maxChain.makeExactMapping (maxAlignseq, seq);
+var sqmpping = maxAlignseq.getMappingFromS1 (false);
+var omap = new jalview.datamodel.Mapping (sqmpping.getMap ().getInverse ());
+maxChain.transferRESNUMFeatures (seq, null);
+var mapping = Clazz.newIntArray (seq.findPosition (seq.getLength ()) + 2, 2, 0);
+var resNum = -10000;
+var index = 0;
+do {
+var tmp = maxChain.atoms.elementAt (index);
+if (resNum != tmp.resNumber && tmp.alignmentMapping != -1) {
+resNum = tmp.resNumber;
+mapping[tmp.alignmentMapping + 1][0] = tmp.resNumber;
+mapping[tmp.alignmentMapping + 1][1] = tmp.atomIndex;
+}index++;
+} while (index < maxChain.atoms.size ());
+if (protocol.equals (jalview.io.AppletFormatAdapter.PASTE)) {
+pdbFile = "INLINE" + pdb.id;
+}var newMapping = new jalview.structure.StructureMapping (seq, pdbFile, pdb.id, maxChainId, mapping, mappingDetails.toString ());
+if (forStructureView) {
+this.mappings.add (newMapping);
+}maxChain.transferResidueAnnotation (newMapping, sqmpping);
+}
+return pdb;
+}, "~B,~A,~A,~S,~S");
+Clazz.defineMethod (c$, "removeStructureViewerListener",
+function (svl, pdbfiles) {
+this.listeners.removeElement (svl);
+if (Clazz.instanceOf (svl, jalview.structure.SequenceListener)) {
+for (var i = 0; i < this.listeners.size (); i++) {
+if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.StructureListener)) {
+(this.listeners.elementAt (i)).releaseReferences (svl);
+}}
+}if (pdbfiles == null) {
+return;
+}var pdbs = new java.util.ArrayList (java.util.Arrays.asList (pdbfiles));
+var sl;
+for (var i = 0; i < this.listeners.size (); i++) {
+if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.StructureListener)) {
+sl = this.listeners.elementAt (i);
+for (var pdbfile, $pdbfile = 0, $$pdbfile = sl.getPdbFile (); $pdbfile < $$pdbfile.length && ((pdbfile = $$pdbfile[$pdbfile]) || true); $pdbfile++) {
+pdbs.remove (pdbfile);
+}
+}}
+if (pdbs.size () > 0) {
+var tmp = new java.util.ArrayList ();
+for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
+if (!pdbs.contains (sm.pdbfile)) {
+tmp.add (sm);
+}}
+this.mappings = tmp;
+}}, "~O,~A");
+Clazz.defineMethod (c$, "mouseOverStructure",
+function (pdbResNum, chain, pdbfile) {
+var atomSpec = new jalview.structure.AtomSpec (pdbfile, chain, pdbResNum, 0);
+var atoms = java.util.Collections.singletonList (atomSpec);
+this.mouseOverStructure (atoms);
+}, "~N,~S,~S");
+Clazz.defineMethod (c$, "mouseOverStructure",
+function (atoms) {
+if (this.listeners == null) {
+return;
+}var hasSequenceListener = false;
+for (var i = 0; i < this.listeners.size (); i++) {
+if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.SequenceListener)) {
+hasSequenceListener = true;
+}}
+if (!hasSequenceListener) {
+return;
+}var results = new jalview.datamodel.SearchResults ();
+for (var atom, $atom = atoms.iterator (); $atom.hasNext () && ((atom = $atom.next ()) || true);) {
+var lastseq = null;
+var lastipos = -1;
+for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
+if (sm.pdbfile.equals (atom.getPdbFile ()) && sm.pdbchain.equals (atom.getChain ())) {
+var indexpos = sm.getSeqPos (atom.getPdbResNum ());
+if (lastipos != indexpos && lastseq !== sm.sequence) {
+results.addResult (sm.sequence, indexpos, indexpos);
+lastipos = indexpos;
+lastseq = sm.sequence;
+for (var acf, $acf = this.seqmappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+acf.markMappedRegion (sm.sequence, indexpos, results);
+}
+}}}
+}
+for (var li, $li = this.listeners.iterator (); $li.hasNext () && ((li = $li.next ()) || true);) {
+if (Clazz.instanceOf (li, jalview.structure.SequenceListener)) {
+(li).highlightSequence (results);
+}}
+}, "java.util.List");
+Clazz.defineMethod (c$, "mouseOverSequence",
+function (seq, indexpos, index, source) {
+var hasSequenceListeners = this.handlingVamsasMo || !this.seqmappings.isEmpty ();
+var results = null;
+if (index == -1) {
+index = seq.findPosition (indexpos);
+}for (var i = 0; i < this.listeners.size (); i++) {
+var listener = this.listeners.elementAt (i);
+if (listener === source) {
+continue;
+}if (Clazz.instanceOf (listener, jalview.structure.StructureListener)) {
+this.highlightStructure (listener, seq, index);
+} else {
+if (Clazz.instanceOf (listener, jalview.structure.SequenceListener)) {
+var seqListener = listener;
+if (hasSequenceListeners && seqListener.getVamsasSource () !== source) {
+if (this.relaySeqMappings) {
+if (results == null) {
+results = jalview.util.MappingUtils.buildSearchResults (seq, index, this.seqmappings);
+}if (this.handlingVamsasMo) {
+results.addResult (seq, index, index);
+}seqListener.highlightSequence (results);
+}}} else if (Clazz.instanceOf (listener, jalview.structure.VamsasListener) && !this.handlingVamsasMo) {
+(listener).mouseOverSequence (seq, indexpos, source);
+} else if (Clazz.instanceOf (listener, jalview.structure.SecondaryStructureListener)) {
+(listener).mouseOverSequence (seq, indexpos, index);
+}}}
+}, "jalview.datamodel.SequenceI,~N,~N,jalview.structure.VamsasSource");
+Clazz.defineMethod (c$, "highlightStructure",
+function (sl, seq, index) {
+if (!sl.isListeningFor (seq)) {
+return;
+}var atomNo;
+var atoms = new java.util.ArrayList ();
+for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
+if (sm.sequence === seq || sm.sequence === seq.getDatasetSequence ()) {
+atomNo = sm.getAtomNum (index);
+if (atomNo > 0) {
+atoms.add ( new jalview.structure.AtomSpec (sm.pdbfile, sm.pdbchain, sm.getPDBResNum (index), atomNo));
+}}}
+sl.highlightAtoms (atoms);
+}, "jalview.structure.StructureListener,jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "mouseOverVamsasSequence",
+function (sequenceI, position, source) {
+this.handlingVamsasMo = true;
+var msg = sequenceI.hashCode () * (1 + position);
+if (this.lastmsg != msg) {
+this.lastmsg = msg;
+this.mouseOverSequence (sequenceI, position, -1, source);
+}this.handlingVamsasMo = false;
+}, "jalview.datamodel.SequenceI,~N,jalview.structure.VamsasSource");
+Clazz.defineMethod (c$, "colourSequenceFromStructure",
+function (seq, pdbid) {
+return null;
+}, "jalview.datamodel.SequenceI,~S");
+Clazz.defineMethod (c$, "structureSelectionChanged",
+function () {
+});
+Clazz.defineMethod (c$, "sequenceSelectionChanged",
+function () {
+});
+Clazz.defineMethod (c$, "sequenceColoursChanged",
+function (source) {
+var sl;
+for (var i = 0; i < this.listeners.size (); i++) {
+if (Clazz.instanceOf (this.listeners.elementAt (i), jalview.structure.StructureListener)) {
+sl = this.listeners.elementAt (i);
+sl.updateColours (source);
+}}
+}, "~O");
+Clazz.defineMethod (c$, "getMapping",
+function (pdbfile) {
+var tmp = new java.util.ArrayList ();
+for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
+if (sm.pdbfile.equals (pdbfile)) {
+tmp.add (sm);
+}}
+return tmp.toArray ( new Array (tmp.size ()));
+}, "~S");
+Clazz.defineMethod (c$, "printMappings",
+function (pdbfile, seqs) {
+if (pdbfile == null || seqs == null || seqs.isEmpty ()) {
+return "";
+}var sb = new StringBuilder (64);
+for (var sm, $sm = this.mappings.iterator (); $sm.hasNext () && ((sm = $sm.next ()) || true);) {
+if (sm.pdbfile.equals (pdbfile) && seqs.contains (sm.sequence)) {
+sb.append (sm.mappingDetails);
+sb.append (jalview.structure.StructureSelectionManager.NEWLINE);
+sb.append ("=====================");
+sb.append (jalview.structure.StructureSelectionManager.NEWLINE);
+}}
+sb.append (jalview.structure.StructureSelectionManager.NEWLINE);
+return sb.toString ();
+}, "~S,java.util.List");
+Clazz.defineMethod (c$, "removeMappings",
+function (set) {
+if (set != null) {
+for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+this.removeMapping (acf);
+}
+}}, "java.util.Set");
+Clazz.defineMethod (c$, "removeMapping",
+function (acf) {
+if (acf != null && this.seqmappings.contains (acf)) {
+var count = (this.seqMappingRefCounts.get (acf)).intValue ();
+count--;
+if (count > 0) {
+this.seqMappingRefCounts.put (acf, new Integer (count));
+} else {
+this.seqmappings.remove (acf);
+this.seqMappingRefCounts.remove (acf);
+}}}, "jalview.datamodel.AlignedCodonFrame");
+Clazz.defineMethod (c$, "addMappings",
+function (set) {
+if (set != null) {
+for (var acf, $acf = set.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+this.addMapping (acf);
+}
+}}, "java.util.Set");
+Clazz.defineMethod (c$, "addMapping",
+function (acf) {
+if (acf != null) {
+if (this.seqmappings.contains (acf)) {
+this.seqMappingRefCounts.put (acf, new Integer ((this.seqMappingRefCounts.get (acf)).intValue () + 1));
+} else {
+this.seqmappings.add (acf);
+this.seqMappingRefCounts.put (acf, new Integer (1));
+}}}, "jalview.datamodel.AlignedCodonFrame");
+Clazz.defineMethod (c$, "addSelectionListener",
+function (selecter) {
+if (!this.sel_listeners.contains (selecter)) {
+this.sel_listeners.add (selecter);
+}}, "jalview.structure.SelectionListener");
+Clazz.defineMethod (c$, "removeSelectionListener",
+function (toremove) {
+if (this.sel_listeners.contains (toremove)) {
+this.sel_listeners.remove (toremove);
+}}, "jalview.structure.SelectionListener");
+Clazz.defineMethod (c$, "sendSelection",
+function (selection, colsel, source) {
+for (var slis, $slis = this.sel_listeners.iterator (); $slis.hasNext () && ((slis = $slis.next ()) || true);) {
+if (slis !== source) {
+slis.selection (selection, colsel, source);
+}}
+}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
+Clazz.defineMethod (c$, "sendViewPosition",
+function (source, startRes, endRes, startSeq, endSeq) {
+if (this.view_listeners != null && this.view_listeners.size () > 0) {
+var listeners = this.view_listeners.elements ();
+while (listeners.hasMoreElements ()) {
+var slis = listeners.nextElement ();
+if (slis !== source) {
+slis.viewPosition (startRes, endRes, startSeq, endSeq, source);
+};}
+}}, "jalview.api.AlignmentViewPanel,~N,~N,~N,~N");
+c$.release = Clazz.defineMethod (c$, "release",
+function (jalviewLite) {
+{
+if (jalview.structure.StructureSelectionManager.instances == null) {
+return;
+}var mnger = (jalview.structure.StructureSelectionManager.instances.get (jalviewLite));
+if (mnger != null) {
+jalview.structure.StructureSelectionManager.instances.remove (jalviewLite);
+try {
+mnger.finalize ();
+} catch (x) {
+}
+}}}, "jalview.api.StructureSelectionManagerProvider");
+Clazz.defineMethod (c$, "registerPDBEntry",
+function (pdbentry) {
+if (pdbentry.getFile () != null && pdbentry.getFile ().trim ().length > 0) {
+this.registerPDBFile (pdbentry.getId (), pdbentry.getFile ());
+}}, "jalview.datamodel.PDBEntry");
+Clazz.defineMethod (c$, "addCommandListener",
+function (cl) {
+if (!this.commandListeners.contains (cl)) {
+this.commandListeners.add (cl);
+}}, "jalview.structure.CommandListener");
+Clazz.defineMethod (c$, "hasCommandListener",
+function (cl) {
+return this.commandListeners.contains (cl);
+}, "jalview.structure.CommandListener");
+Clazz.defineMethod (c$, "removeCommandListener",
+function (l) {
+return this.commandListeners.remove (l);
+}, "jalview.structure.CommandListener");
+Clazz.defineMethod (c$, "commandPerformed",
+function (command, undo, source) {
+for (var listener, $listener = this.commandListeners.iterator (); $listener.hasNext () && ((listener = $listener.next ()) || true);) {
+listener.mirrorCommand (command, undo, this, source);
+}
+}, "jalview.commands.CommandI,~B,jalview.structure.VamsasSource");
+Clazz.defineMethod (c$, "mapCommand",
+function (command, undo, mapTo, gapChar) {
+if (Clazz.instanceOf (command, jalview.commands.EditCommand)) {
+return jalview.util.MappingUtils.mapEditCommand (command, undo, mapTo, gapChar, this.seqmappings);
+} else if (Clazz.instanceOf (command, jalview.commands.OrderCommand)) {
+return jalview.util.MappingUtils.mapOrderCommand (command, undo, mapTo, this.seqmappings);
+}return null;
+}, "jalview.commands.CommandI,~B,jalview.datamodel.AlignmentI,~S");
+c$.$StructureSelectionManager$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.structure, "StructureSelectionManager$1", java.io.PrintStream);
+Clazz.defineMethod (c$, "print",
+function (x) {
+this.f$.mappingDetails.append (x);
+}, "~S");
+Clazz.defineMethod (c$, "println",
+function () {
+this.f$.mappingDetails.append (jalview.structure.StructureSelectionManager.NEWLINE);
+});
+c$ = Clazz.p0p ();
+};
+c$.NEWLINE = c$.prototype.NEWLINE = System.lineSeparator ();
+Clazz.defineStatics (c$,
+"instances", null,
+"nullProvider", null);
+});
diff --git a/bin/jalview/structure/VamsasListener.js b/bin/jalview/structure/VamsasListener.js
index 4d4fcbc..3e2c764 100644
--- a/bin/jalview/structure/VamsasListener.js
+++ b/bin/jalview/structure/VamsasListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "VamsasListener");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "VamsasListener");
diff --git a/bin/jalview/structure/VamsasSource.js b/bin/jalview/structure/VamsasSource.js
index a910ac7..6654402 100644
--- a/bin/jalview/structure/VamsasSource.js
+++ b/bin/jalview/structure/VamsasSource.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("jalview.structure");
-Clazz.declareInterface (jalview.structure, "VamsasSource");
+Clazz.declarePackage ("jalview.structure");
+Clazz.declareInterface (jalview.structure, "VamsasSource");
diff --git a/bin/jalview/structures/models/AAStructureBindingModel.class b/bin/jalview/structures/models/AAStructureBindingModel.class
index 41ab261..db598fb 100644
Binary files a/bin/jalview/structures/models/AAStructureBindingModel.class and b/bin/jalview/structures/models/AAStructureBindingModel.class differ
diff --git a/bin/jalview/structures/models/AAStructureBindingModel.js b/bin/jalview/structures/models/AAStructureBindingModel.js
index f64bb34..a66cb14 100644
--- a/bin/jalview/structures/models/AAStructureBindingModel.js
+++ b/bin/jalview/structures/models/AAStructureBindingModel.js
@@ -1,306 +1,306 @@
-Clazz.declarePackage ("jalview.structures.models");
-Clazz.load (["jalview.api.StructureSelectionManagerProvider", "jalview.structure.StructureListener", "jalview.structures.models.SequenceStructureBindingModel"], "jalview.structures.models.AAStructureBindingModel", ["jalview.util.Comparison", "$.MessageManager", "java.lang.Error", "$.StringBuilder", "java.util.ArrayList", "$.Arrays"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ssm = null;
-this.pdbEntry = null;
-this.sequence = null;
-this.chains = null;
-this.protocol = null;
-this.colourBySequence = true;
-this.nucleotide = false;
-if (!Clazz.isClassDefined ("jalview.structures.models.AAStructureBindingModel.SuperposeData")) {
-jalview.structures.models.AAStructureBindingModel.$AAStructureBindingModel$SuperposeData$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.structures.models, "AAStructureBindingModel", jalview.structures.models.SequenceStructureBindingModel, [jalview.structure.StructureListener, jalview.api.StructureSelectionManagerProvider]);
-Clazz.makeConstructor (c$,
-function (ssm, seqs) {
-Clazz.superConstructor (this, jalview.structures.models.AAStructureBindingModel, []);
-this.ssm = ssm;
-this.sequence = seqs;
-}, "jalview.structure.StructureSelectionManager,~A");
-Clazz.makeConstructor (c$,
-function (ssm, pdbentry, sequenceIs, chains, protocol) {
-Clazz.superConstructor (this, jalview.structures.models.AAStructureBindingModel, []);
-this.ssm = ssm;
-this.sequence = sequenceIs;
-this.nucleotide = jalview.util.Comparison.isNucleotide2 (sequenceIs);
-this.chains = chains;
-this.pdbEntry = pdbentry;
-this.protocol = protocol;
-if (chains == null) {
-this.chains = new Array (pdbentry.length);
-}}, "jalview.structure.StructureSelectionManager,~A,~A,~A,~S");
-Clazz.defineMethod (c$, "getSsm",
-function () {
-return this.ssm;
-});
-Clazz.defineMethod (c$, "getPdbEntry",
-function (i) {
-return (this.pdbEntry != null && this.pdbEntry.length > i) ? this.pdbEntry[i] : null;
-}, "~N");
-Clazz.defineMethod (c$, "hasPdbId",
-function (pdbId) {
-if (this.pdbEntry != null) {
-for (var pdb, $pdb = 0, $$pdb = this.pdbEntry; $pdb < $$pdb.length && ((pdb = $$pdb[$pdb]) || true); $pdb++) {
-if (pdb.getId ().equals (pdbId)) {
-return true;
-}}
-}return false;
-}, "~S");
-Clazz.defineMethod (c$, "getPdbCount",
-function () {
-return this.pdbEntry == null ? 0 : this.pdbEntry.length;
-});
-Clazz.defineMethod (c$, "getSequence",
-function () {
-return this.sequence;
-});
-Clazz.defineMethod (c$, "getChains",
-function () {
-return this.chains;
-});
-Clazz.defineMethod (c$, "getProtocol",
-function () {
-return this.protocol;
-});
-Clazz.defineMethod (c$, "setPdbentry",
-function (pdbentry) {
-this.pdbEntry = pdbentry;
-}, "~A");
-Clazz.defineMethod (c$, "setSequence",
-function (sequence) {
-this.sequence = sequence;
-}, "~A");
-Clazz.defineMethod (c$, "setChains",
-function (chains) {
-this.chains = chains;
-}, "~A");
-Clazz.defineMethod (c$, "getViewerTitle",
-function (viewerName, verbose) {
-if (this.getSequence () == null || this.getSequence ().length < 1 || this.getPdbCount () < 1 || this.getSequence ()[0].length < 1) {
-return ("Jalview " + viewerName + " Window");
-}var title = new StringBuilder (64);
-var pdbEntry = this.getPdbEntry (0);
-title.append (viewerName + " view for " + this.getSequence ()[0][0].getName () + ":" + pdbEntry.getId ());
-if (verbose) {
-if (pdbEntry.getProperty () != null) {
-if (pdbEntry.getProperty ().get ("method") != null) {
-title.append (" Method: ");
-title.append (pdbEntry.getProperty ().get ("method"));
-}if (pdbEntry.getProperty ().get ("chains") != null) {
-title.append (" Chain:");
-title.append (pdbEntry.getProperty ().get ("chains"));
-}}}return title.toString ();
-}, "~S,~B");
-Clazz.defineMethod (c$, "releaseUIResources",
-function () {
-});
-Clazz.defineMethod (c$, "isColourBySequence",
-function () {
-return this.colourBySequence;
-});
-Clazz.defineMethod (c$, "setColourBySequence",
-function (colourBySequence) {
-this.colourBySequence = colourBySequence;
-}, "~B");
-Clazz.defineMethod (c$, "addSequenceAndChain",
-function (pe, seq, tchain) {
-if (pe < 0 || pe >= this.getPdbCount ()) {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_no_pdbentry_from_index", Clazz.newArray (-1, [Integer.$valueOf (pe).toString ()])));
-}var nullChain = "TheNullChain";
-var s = new java.util.ArrayList ();
-var c = new java.util.ArrayList ();
-if (this.getChains () == null) {
-this.setChains ( new Array (this.getPdbCount ()));
-}if (this.getSequence ()[pe] != null) {
-for (var i = 0; i < this.getSequence ()[pe].length; i++) {
-s.add (this.getSequence ()[pe][i]);
-if (this.getChains ()[pe] != null) {
-if (i < this.getChains ()[pe].length) {
-c.add (this.getChains ()[pe][i]);
-} else {
-c.add ("TheNullChain");
-}} else {
-if (tchain != null && tchain.length > 0) {
-c.add ("TheNullChain");
-}}}
-}for (var i = 0; i < seq.length; i++) {
-if (!s.contains (seq[i])) {
-s.add (seq[i]);
-if (tchain != null && i < tchain.length) {
-c.add (tchain[i] == null ? "TheNullChain" : tchain[i]);
-}}}
-var tmp = s.toArray ( new Array (s.size ()));
-this.getSequence ()[pe] = tmp;
-if (c.size () > 0) {
-var tch = c.toArray ( new Array (c.size ()));
-for (var i = 0; i < tch.length; i++) {
-if (tch[i] === "TheNullChain") {
-tch[i] = null;
-}}
-this.getChains ()[pe] = tch;
-} else {
-this.getChains ()[pe] = null;
-}}, "~N,~A,~A");
-Clazz.defineMethod (c$, "addSequenceAndChain",
-function (pdbe, seq, chns) {
-var v = new java.util.ArrayList ();
-var rtn = new java.util.ArrayList ();
-for (var i = 0; i < this.getPdbCount (); i++) {
-v.add (this.getPdbEntry (i));
-}
-for (var i = 0; i < pdbe.length; i++) {
-var r = v.indexOf (pdbe[i]);
-if (r == -1 || r >= this.getPdbCount ()) {
-rtn.add ( Clazz.newIntArray (-1, [v.size (), i]));
-v.add (pdbe[i]);
-} else {
-this.addSequenceAndChain (r, seq[i], chns[i]);
-}}
-pdbe = v.toArray ( new Array (v.size ()));
-this.setPdbentry (pdbe);
-if (rtn.size () > 0) {
-var sqs = new Array (this.getPdbCount ());
-var sch = new Array (this.getPdbCount ());
-System.arraycopy (this.getSequence (), 0, sqs, 0, this.getSequence ().length);
-System.arraycopy (this.getChains (), 0, sch, 0, this.getChains ().length);
-this.setSequence (sqs);
-this.setChains (sch);
-pdbe = new Array (rtn.size ());
-for (var r = 0; r < pdbe.length; r++) {
-var stri = (rtn.get (r));
-pdbe[r] = this.getPdbEntry (stri[0]);
-this.addSequenceAndChain (stri[0], seq[stri[1]], chns[stri[1]]);
-}
-} else {
-pdbe = null;
-}return pdbe;
-}, "~A,~A,~A");
-Clazz.defineMethod (c$, "addSequence",
-function (pe, seq) {
-this.addSequenceAndChain (pe, seq, null);
-}, "~N,~A");
-Clazz.defineMethod (c$, "addSequenceForStructFile",
-function (pdbFile, seq) {
-for (var pe = 0; pe < this.getPdbCount (); pe++) {
-if (this.getPdbEntry (pe).getFile ().equals (pdbFile)) {
-this.addSequence (pe, seq);
-}}
-}, "~S,~A");
-Clazz.defineMethod (c$, "isNucleotide",
-function () {
-return this.nucleotide;
-});
-Clazz.defineMethod (c$, "printMappings",
-function () {
-if (this.pdbEntry == null) {
-return "";
-}var sb = new StringBuilder (128);
-for (var pdbe = 0; pdbe < this.getPdbCount (); pdbe++) {
-var pdbfile = this.getPdbEntry (pdbe).getFile ();
-var seqs = java.util.Arrays.asList (this.getSequence ()[pdbe]);
-sb.append (this.getSsm ().printMappings (pdbfile, seqs));
-}
-return sb.toString ();
-});
-Clazz.defineMethod (c$, "getMappedPosition",
-function (seq, alignedPos, mapping) {
-if (alignedPos >= seq.getLength ()) {
-return -1;
-}if (jalview.util.Comparison.isGap (seq.getCharAt (alignedPos))) {
-return -1;
-}var seqPos = seq.findPosition (alignedPos);
-var pos = mapping.getPDBResNum (seqPos);
-return pos;
-}, "jalview.datamodel.SequenceI,~N,jalview.structure.StructureMapping");
-Clazz.defineMethod (c$, "findSuperposableResidues",
-function (alignment, matched, structures) {
-var refStructure = -1;
-var files = this.getPdbFile ();
-for (var pdbfnum = 0; pdbfnum < files.length; pdbfnum++) {
-var mappings = this.getSsm ().getMapping (files[pdbfnum]);
-var lastPos = -1;
-var seqCountForPdbFile = this.getSequence ()[pdbfnum].length;
-for (var s = 0; s < seqCountForPdbFile; s++) {
-for (var mapping, $mapping = 0, $$mapping = mappings; $mapping < $$mapping.length && ((mapping = $$mapping[$mapping]) || true); $mapping++) {
-var theSequence = this.getSequence ()[pdbfnum][s];
-if (mapping.getSequence () === theSequence && alignment.findIndex (theSequence) > -1) {
-if (refStructure < 0) {
-refStructure = pdbfnum;
-}for (var r = 0; r < matched.length; r++) {
-if (!matched[r]) {
-continue;
-}var pos = this.getMappedPosition (theSequence, r, mapping);
-if (pos < 1 || pos == lastPos) {
-matched[r] = false;
-continue;
-}lastPos = pos;
-structures[pdbfnum].pdbResNo[r] = pos;
-}
-var chain = mapping.getChain ();
-if (chain != null && chain.trim ().length > 0) {
-structures[pdbfnum].chain = chain;
-}structures[pdbfnum].pdbId = mapping.getPdbId ();
-structures[pdbfnum].isRna = theSequence.getRNA () != null;
-s = seqCountForPdbFile;
-break;
-}}
-}
-}
-return refStructure;
-}, "jalview.datamodel.AlignmentI,~A,~A");
-Clazz.defineMethod (c$, "waitForFileLoad",
-function (files) {
-var starttime = System.currentTimeMillis ();
-var endTime = 10000 + 1000 * files.length + starttime;
-var notLoaded = null;
-var waiting = true;
-while (waiting && System.currentTimeMillis () < endTime) {
-waiting = false;
-for (var file, $file = 0, $$file = files; $file < $$file.length && ((file = $$file[$file]) || true); $file++) {
-notLoaded = file;
-try {
-var sm = this.getSsm ().getMapping (file);
-if (sm == null || sm.length == 0) {
-waiting = true;
-}} catch (x) {
-waiting = true;
-}
-}
-}
-if (waiting) {
-System.err.println ("Timed out waiting for structure viewer to load file " + notLoaded);
-return false;
-}return true;
-}, "~A");
-Clazz.overrideMethod (c$, "isListeningFor",
-function (seq) {
-if (this.sequence != null) {
-for (var seqs, $seqs = 0, $$seqs = this.sequence; $seqs < $$seqs.length && ((seqs = $$seqs[$seqs]) || true); $seqs++) {
-if (seqs != null) {
-for (var s, $s = 0, $$s = seqs; $s < $$s.length && ((s = $$s[$s]) || true); $s++) {
-if (s === seq) {
-return true;
-}}
-}}
-}return false;
-}, "jalview.datamodel.SequenceI");
-c$.$AAStructureBindingModel$SuperposeData$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.filename = null;
-this.pdbId = null;
-this.chain = "";
-this.isRna = false;
-this.pdbResNo = null;
-Clazz.instantialize (this, arguments);
-}, jalview.structures.models.AAStructureBindingModel, "SuperposeData");
-Clazz.makeConstructor (c$,
-function (a) {
-this.pdbResNo = Clazz.newIntArray (a, 0);
-}, "~N");
-c$ = Clazz.p0p ();
-};
-});
+Clazz.declarePackage ("jalview.structures.models");
+Clazz.load (["jalview.api.StructureSelectionManagerProvider", "jalview.structure.StructureListener", "jalview.structures.models.SequenceStructureBindingModel"], "jalview.structures.models.AAStructureBindingModel", ["jalview.util.Comparison", "$.MessageManager", "java.lang.Error", "$.StringBuilder", "java.util.ArrayList", "$.Arrays"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ssm = null;
+this.pdbEntry = null;
+this.sequence = null;
+this.chains = null;
+this.protocol = null;
+this.colourBySequence = true;
+this.nucleotide = false;
+if (!Clazz.isClassDefined ("jalview.structures.models.AAStructureBindingModel.SuperposeData")) {
+jalview.structures.models.AAStructureBindingModel.$AAStructureBindingModel$SuperposeData$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.structures.models, "AAStructureBindingModel", jalview.structures.models.SequenceStructureBindingModel, [jalview.structure.StructureListener, jalview.api.StructureSelectionManagerProvider]);
+Clazz.makeConstructor (c$,
+function (ssm, seqs) {
+Clazz.superConstructor (this, jalview.structures.models.AAStructureBindingModel, []);
+this.ssm = ssm;
+this.sequence = seqs;
+}, "jalview.structure.StructureSelectionManager,~A");
+Clazz.makeConstructor (c$,
+function (ssm, pdbentry, sequenceIs, chains, protocol) {
+Clazz.superConstructor (this, jalview.structures.models.AAStructureBindingModel, []);
+this.ssm = ssm;
+this.sequence = sequenceIs;
+this.nucleotide = jalview.util.Comparison.isNucleotide2 (sequenceIs);
+this.chains = chains;
+this.pdbEntry = pdbentry;
+this.protocol = protocol;
+if (chains == null) {
+this.chains = new Array (pdbentry.length);
+}}, "jalview.structure.StructureSelectionManager,~A,~A,~A,~S");
+Clazz.defineMethod (c$, "getSsm",
+function () {
+return this.ssm;
+});
+Clazz.defineMethod (c$, "getPdbEntry",
+function (i) {
+return (this.pdbEntry != null && this.pdbEntry.length > i) ? this.pdbEntry[i] : null;
+}, "~N");
+Clazz.defineMethod (c$, "hasPdbId",
+function (pdbId) {
+if (this.pdbEntry != null) {
+for (var pdb, $pdb = 0, $$pdb = this.pdbEntry; $pdb < $$pdb.length && ((pdb = $$pdb[$pdb]) || true); $pdb++) {
+if (pdb.getId ().equals (pdbId)) {
+return true;
+}}
+}return false;
+}, "~S");
+Clazz.defineMethod (c$, "getPdbCount",
+function () {
+return this.pdbEntry == null ? 0 : this.pdbEntry.length;
+});
+Clazz.defineMethod (c$, "getSequence",
+function () {
+return this.sequence;
+});
+Clazz.defineMethod (c$, "getChains",
+function () {
+return this.chains;
+});
+Clazz.defineMethod (c$, "getProtocol",
+function () {
+return this.protocol;
+});
+Clazz.defineMethod (c$, "setPdbentry",
+function (pdbentry) {
+this.pdbEntry = pdbentry;
+}, "~A");
+Clazz.defineMethod (c$, "setSequence",
+function (sequence) {
+this.sequence = sequence;
+}, "~A");
+Clazz.defineMethod (c$, "setChains",
+function (chains) {
+this.chains = chains;
+}, "~A");
+Clazz.defineMethod (c$, "getViewerTitle",
+function (viewerName, verbose) {
+if (this.getSequence () == null || this.getSequence ().length < 1 || this.getPdbCount () < 1 || this.getSequence ()[0].length < 1) {
+return ("Jalview " + viewerName + " Window");
+}var title = new StringBuilder (64);
+var pdbEntry = this.getPdbEntry (0);
+title.append (viewerName + " view for " + this.getSequence ()[0][0].getName () + ":" + pdbEntry.getId ());
+if (verbose) {
+if (pdbEntry.getProperty () != null) {
+if (pdbEntry.getProperty ().get ("method") != null) {
+title.append (" Method: ");
+title.append (pdbEntry.getProperty ().get ("method"));
+}if (pdbEntry.getProperty ().get ("chains") != null) {
+title.append (" Chain:");
+title.append (pdbEntry.getProperty ().get ("chains"));
+}}}return title.toString ();
+}, "~S,~B");
+Clazz.defineMethod (c$, "releaseUIResources",
+function () {
+});
+Clazz.defineMethod (c$, "isColourBySequence",
+function () {
+return this.colourBySequence;
+});
+Clazz.defineMethod (c$, "setColourBySequence",
+function (colourBySequence) {
+this.colourBySequence = colourBySequence;
+}, "~B");
+Clazz.defineMethod (c$, "addSequenceAndChain",
+function (pe, seq, tchain) {
+if (pe < 0 || pe >= this.getPdbCount ()) {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.implementation_error_no_pdbentry_from_index", Clazz.newArray (-1, [Integer.$valueOf (pe).toString ()])));
+}var nullChain = "TheNullChain";
+var s = new java.util.ArrayList ();
+var c = new java.util.ArrayList ();
+if (this.getChains () == null) {
+this.setChains ( new Array (this.getPdbCount ()));
+}if (this.getSequence ()[pe] != null) {
+for (var i = 0; i < this.getSequence ()[pe].length; i++) {
+s.add (this.getSequence ()[pe][i]);
+if (this.getChains ()[pe] != null) {
+if (i < this.getChains ()[pe].length) {
+c.add (this.getChains ()[pe][i]);
+} else {
+c.add ("TheNullChain");
+}} else {
+if (tchain != null && tchain.length > 0) {
+c.add ("TheNullChain");
+}}}
+}for (var i = 0; i < seq.length; i++) {
+if (!s.contains (seq[i])) {
+s.add (seq[i]);
+if (tchain != null && i < tchain.length) {
+c.add (tchain[i] == null ? "TheNullChain" : tchain[i]);
+}}}
+var tmp = s.toArray ( new Array (s.size ()));
+this.getSequence ()[pe] = tmp;
+if (c.size () > 0) {
+var tch = c.toArray ( new Array (c.size ()));
+for (var i = 0; i < tch.length; i++) {
+if (tch[i] === "TheNullChain") {
+tch[i] = null;
+}}
+this.getChains ()[pe] = tch;
+} else {
+this.getChains ()[pe] = null;
+}}, "~N,~A,~A");
+Clazz.defineMethod (c$, "addSequenceAndChain",
+function (pdbe, seq, chns) {
+var v = new java.util.ArrayList ();
+var rtn = new java.util.ArrayList ();
+for (var i = 0; i < this.getPdbCount (); i++) {
+v.add (this.getPdbEntry (i));
+}
+for (var i = 0; i < pdbe.length; i++) {
+var r = v.indexOf (pdbe[i]);
+if (r == -1 || r >= this.getPdbCount ()) {
+rtn.add ( Clazz.newIntArray (-1, [v.size (), i]));
+v.add (pdbe[i]);
+} else {
+this.addSequenceAndChain (r, seq[i], chns[i]);
+}}
+pdbe = v.toArray ( new Array (v.size ()));
+this.setPdbentry (pdbe);
+if (rtn.size () > 0) {
+var sqs = new Array (this.getPdbCount ());
+var sch = new Array (this.getPdbCount ());
+System.arraycopy (this.getSequence (), 0, sqs, 0, this.getSequence ().length);
+System.arraycopy (this.getChains (), 0, sch, 0, this.getChains ().length);
+this.setSequence (sqs);
+this.setChains (sch);
+pdbe = new Array (rtn.size ());
+for (var r = 0; r < pdbe.length; r++) {
+var stri = (rtn.get (r));
+pdbe[r] = this.getPdbEntry (stri[0]);
+this.addSequenceAndChain (stri[0], seq[stri[1]], chns[stri[1]]);
+}
+} else {
+pdbe = null;
+}return pdbe;
+}, "~A,~A,~A");
+Clazz.defineMethod (c$, "addSequence",
+function (pe, seq) {
+this.addSequenceAndChain (pe, seq, null);
+}, "~N,~A");
+Clazz.defineMethod (c$, "addSequenceForStructFile",
+function (pdbFile, seq) {
+for (var pe = 0; pe < this.getPdbCount (); pe++) {
+if (this.getPdbEntry (pe).getFile ().equals (pdbFile)) {
+this.addSequence (pe, seq);
+}}
+}, "~S,~A");
+Clazz.defineMethod (c$, "isNucleotide",
+function () {
+return this.nucleotide;
+});
+Clazz.defineMethod (c$, "printMappings",
+function () {
+if (this.pdbEntry == null) {
+return "";
+}var sb = new StringBuilder (128);
+for (var pdbe = 0; pdbe < this.getPdbCount (); pdbe++) {
+var pdbfile = this.getPdbEntry (pdbe).getFile ();
+var seqs = java.util.Arrays.asList (this.getSequence ()[pdbe]);
+sb.append (this.getSsm ().printMappings (pdbfile, seqs));
+}
+return sb.toString ();
+});
+Clazz.defineMethod (c$, "getMappedPosition",
+function (seq, alignedPos, mapping) {
+if (alignedPos >= seq.getLength ()) {
+return -1;
+}if (jalview.util.Comparison.isGap (seq.getCharAt (alignedPos))) {
+return -1;
+}var seqPos = seq.findPosition (alignedPos);
+var pos = mapping.getPDBResNum (seqPos);
+return pos;
+}, "jalview.datamodel.SequenceI,~N,jalview.structure.StructureMapping");
+Clazz.defineMethod (c$, "findSuperposableResidues",
+function (alignment, matched, structures) {
+var refStructure = -1;
+var files = this.getPdbFile ();
+for (var pdbfnum = 0; pdbfnum < files.length; pdbfnum++) {
+var mappings = this.getSsm ().getMapping (files[pdbfnum]);
+var lastPos = -1;
+var seqCountForPdbFile = this.getSequence ()[pdbfnum].length;
+for (var s = 0; s < seqCountForPdbFile; s++) {
+for (var mapping, $mapping = 0, $$mapping = mappings; $mapping < $$mapping.length && ((mapping = $$mapping[$mapping]) || true); $mapping++) {
+var theSequence = this.getSequence ()[pdbfnum][s];
+if (mapping.getSequence () === theSequence && alignment.findIndex (theSequence) > -1) {
+if (refStructure < 0) {
+refStructure = pdbfnum;
+}for (var r = 0; r < matched.length; r++) {
+if (!matched[r]) {
+continue;
+}var pos = this.getMappedPosition (theSequence, r, mapping);
+if (pos < 1 || pos == lastPos) {
+matched[r] = false;
+continue;
+}lastPos = pos;
+structures[pdbfnum].pdbResNo[r] = pos;
+}
+var chain = mapping.getChain ();
+if (chain != null && chain.trim ().length > 0) {
+structures[pdbfnum].chain = chain;
+}structures[pdbfnum].pdbId = mapping.getPdbId ();
+structures[pdbfnum].isRna = theSequence.getRNA () != null;
+s = seqCountForPdbFile;
+break;
+}}
+}
+}
+return refStructure;
+}, "jalview.datamodel.AlignmentI,~A,~A");
+Clazz.defineMethod (c$, "waitForFileLoad",
+function (files) {
+var starttime = System.currentTimeMillis ();
+var endTime = 10000 + 1000 * files.length + starttime;
+var notLoaded = null;
+var waiting = true;
+while (waiting && System.currentTimeMillis () < endTime) {
+waiting = false;
+for (var file, $file = 0, $$file = files; $file < $$file.length && ((file = $$file[$file]) || true); $file++) {
+notLoaded = file;
+try {
+var sm = this.getSsm ().getMapping (file);
+if (sm == null || sm.length == 0) {
+waiting = true;
+}} catch (x) {
+waiting = true;
+}
+}
+}
+if (waiting) {
+System.err.println ("Timed out waiting for structure viewer to load file " + notLoaded);
+return false;
+}return true;
+}, "~A");
+Clazz.overrideMethod (c$, "isListeningFor",
+function (seq) {
+if (this.sequence != null) {
+for (var seqs, $seqs = 0, $$seqs = this.sequence; $seqs < $$seqs.length && ((seqs = $$seqs[$seqs]) || true); $seqs++) {
+if (seqs != null) {
+for (var s, $s = 0, $$s = seqs; $s < $$s.length && ((s = $$s[$s]) || true); $s++) {
+if (s === seq) {
+return true;
+}}
+}}
+}return false;
+}, "jalview.datamodel.SequenceI");
+c$.$AAStructureBindingModel$SuperposeData$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.filename = null;
+this.pdbId = null;
+this.chain = "";
+this.isRna = false;
+this.pdbResNo = null;
+Clazz.instantialize (this, arguments);
+}, jalview.structures.models.AAStructureBindingModel, "SuperposeData");
+Clazz.makeConstructor (c$,
+function (a) {
+this.pdbResNo = Clazz.newIntArray (a, 0);
+}, "~N");
+c$ = Clazz.p0p ();
+};
+});
diff --git a/bin/jalview/structures/models/SequenceStructureBindingModel.js b/bin/jalview/structures/models/SequenceStructureBindingModel.js
index 98e8875..f9d2e7a 100644
--- a/bin/jalview/structures/models/SequenceStructureBindingModel.js
+++ b/bin/jalview/structures/models/SequenceStructureBindingModel.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("jalview.structures.models");
-Clazz.load (["jalview.api.SequenceStructureBinding"], "jalview.structures.models.SequenceStructureBindingModel", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.loadingFromArchive = false;
-this.loadingFinished = true;
-Clazz.instantialize (this, arguments);
-}, jalview.structures.models, "SequenceStructureBindingModel", null, jalview.api.SequenceStructureBinding);
-Clazz.overrideMethod (c$, "setLoadingFromArchive",
-function (loadingFromArchive) {
-this.loadingFromArchive = loadingFromArchive;
-}, "~B");
-Clazz.overrideMethod (c$, "isLoadingFromArchive",
-function () {
-return this.loadingFromArchive && !this.loadingFinished;
-});
-Clazz.overrideMethod (c$, "isLoadingFinished",
-function () {
-return this.loadingFinished;
-});
-Clazz.overrideMethod (c$, "setFinishedLoadingFromArchive",
-function (finishedLoading) {
-this.loadingFinished = finishedLoading;
-}, "~B");
-});
+Clazz.declarePackage ("jalview.structures.models");
+Clazz.load (["jalview.api.SequenceStructureBinding"], "jalview.structures.models.SequenceStructureBindingModel", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.loadingFromArchive = false;
+this.loadingFinished = true;
+Clazz.instantialize (this, arguments);
+}, jalview.structures.models, "SequenceStructureBindingModel", null, jalview.api.SequenceStructureBinding);
+Clazz.overrideMethod (c$, "setLoadingFromArchive",
+function (loadingFromArchive) {
+this.loadingFromArchive = loadingFromArchive;
+}, "~B");
+Clazz.overrideMethod (c$, "isLoadingFromArchive",
+function () {
+return this.loadingFromArchive && !this.loadingFinished;
+});
+Clazz.overrideMethod (c$, "isLoadingFinished",
+function () {
+return this.loadingFinished;
+});
+Clazz.overrideMethod (c$, "setFinishedLoadingFromArchive",
+function (finishedLoading) {
+this.loadingFinished = finishedLoading;
+}, "~B");
+});
diff --git a/bin/jalview/util/AWTConsole.js b/bin/jalview/util/AWTConsole.js
deleted file mode 100644
index d03b9fa..0000000
--- a/bin/jalview/util/AWTConsole.js
+++ /dev/null
@@ -1,187 +0,0 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.awt.event.ActionListener", "$.WindowAdapter", "$.WindowListener", "java.io.PipedInputStream"], "jalview.util.AWTConsole", ["jalview.util.MessageManager", "java.awt.BorderLayout", "$.Button", "$.Dimension", "$.Frame", "$.GraphicsEnvironment", "$.Panel", "$.TextArea", "$.Toolkit", "java.io.PipedOutputStream", "java.lang.NullPointerException", "$.Thread"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.frame = null;
-this.textArea = null;
-this.reader = null;
-this.reader2 = null;
-this.quit = false;
-this.pin = null;
-this.pin2 = null;
-this.errorThrower = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "AWTConsole", java.awt.event.WindowAdapter, [java.awt.event.WindowListener, java.awt.event.ActionListener, Runnable]);
-Clazz.prepareFields (c$, function () {
-this.pin = new java.io.PipedInputStream ();
-this.pin2 = new java.io.PipedInputStream ();
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.util.AWTConsole, []);
-this.frame = new java.awt.Frame ("Java Console");
-var screenSize = java.awt.Toolkit.getDefaultToolkit ().getScreenSize ();
-var frameSize = new java.awt.Dimension ((Clazz.doubleToInt (screenSize.width / 2)), (Clazz.doubleToInt (screenSize.height / 2)));
-var x = (Clazz.doubleToInt (frameSize.width / 2));
-var y = (Clazz.doubleToInt (frameSize.height / 2));
-this.frame.setBounds (x, y, frameSize.width, frameSize.height);
-this.textArea = new java.awt.TextArea ();
-this.textArea.setEditable (false);
-var button = new java.awt.Button ("clear");
-var panel = new java.awt.Panel ();
-panel.setLayout ( new java.awt.BorderLayout ());
-panel.add (this.textArea, "Center");
-panel.add (button, "South");
-this.frame.add (panel);
-this.frame.setVisible (true);
-this.frame.addWindowListener (this);
-button.addActionListener (this);
-try {
-var pout = new java.io.PipedOutputStream (this.pin);
-System.setOut ( new java.io.PrintStream (pout, true));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, java.io.IOException)) {
-var io = e$$;
-{
-this.textArea.append ("Couldn't redirect STDOUT to this console\n" + io.getMessage ());
-}
-} else if (Clazz.exceptionOf (e$$, SecurityException)) {
-var se = e$$;
-{
-this.textArea.append ("Couldn't redirect STDOUT to this console\n" + se.getMessage ());
-}
-} else {
-throw e$$;
-}
-}
-try {
-var pout2 = new java.io.PipedOutputStream (this.pin2);
-System.setErr ( new java.io.PrintStream (pout2, true));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, java.io.IOException)) {
-var io = e$$;
-{
-this.textArea.append ("Couldn't redirect STDERR to this console\n" + io.getMessage ());
-}
-} else if (Clazz.exceptionOf (e$$, SecurityException)) {
-var se = e$$;
-{
-this.textArea.append ("Couldn't redirect STDERR to this console\n" + se.getMessage ());
-}
-} else {
-throw e$$;
-}
-}
-this.quit = false;
-this.reader = new Thread (this);
-this.reader.setDaemon (true);
-this.reader.start ();
-this.reader2 = new Thread (this);
-this.reader2.setDaemon (true);
-this.reader2.start ();
-System.out.println ("Hello World 2");
-System.out.println ("All fonts available to Graphic2D:\n");
-var ge = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment ();
-var fontNames = ge.getAvailableFontFamilyNames ();
-for (var n = 0; n < fontNames.length; n++) System.out.println (fontNames[n]);
-
-System.out.println ("\nLets throw an error on this console");
-this.errorThrower = new Thread (this);
-this.errorThrower.setDaemon (true);
-this.errorThrower.start ();
-});
-Clazz.overrideMethod (c$, "windowClosed",
-function (evt) {
-this.quit = true;
-this.notifyAll ();
-try {
-this.reader.join (1000);
-this.pin.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-try {
-this.reader2.join (1000);
-this.pin2.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-System.exit (0);
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "windowClosing",
-function (evt) {
-this.frame.setVisible (false);
-this.frame.dispose ();
-}, "java.awt.event.WindowEvent");
-Clazz.overrideMethod (c$, "actionPerformed",
-function (evt) {
-this.textArea.setText ("");
-}, "java.awt.event.ActionEvent");
-Clazz.overrideMethod (c$, "run",
-function () {
-try {
-while (Thread.currentThread () === this.reader) {
-try {
-this.wait (100);
-} catch (ie) {
-if (Clazz.exceptionOf (ie, InterruptedException)) {
-} else {
-throw ie;
-}
-}
-if (this.pin.available () != 0) {
-var input = this.readLine (this.pin);
-this.textArea.append (input);
-}if (this.quit) return;
-}
-while (Thread.currentThread () === this.reader2) {
-try {
-this.wait (100);
-} catch (ie) {
-if (Clazz.exceptionOf (ie, InterruptedException)) {
-} else {
-throw ie;
-}
-}
-if (this.pin2.available () != 0) {
-var input = this.readLine (this.pin2);
-this.textArea.append (input);
-}if (this.quit) return;
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-this.textArea.append ("\nConsole reports an Internal error.");
-this.textArea.append ("The error is: " + e);
-} else {
-throw e;
-}
-}
-if (Thread.currentThread () === this.errorThrower) {
-try {
-this.wait (1000);
-} catch (ie) {
-if (Clazz.exceptionOf (ie, InterruptedException)) {
-} else {
-throw ie;
-}
-}
-throw new NullPointerException (jalview.util.MessageManager.getString ("exception.application_test_npe"));
-}});
-Clazz.defineMethod (c$, "readLine",
-function ($in) {
-var input = "";
-do {
-var available = $in.available ();
-if (available == 0) break;
-var b = Clazz.newByteArray (available, 0);
-$in.read (b);
-input = input + String.instantialize (b, 0, b.length);
-} while (!input.endsWith ("\n") && !input.endsWith ("\r\n") && !this.quit);
-return input;
-}, "java.io.PipedInputStream");
-});
diff --git a/bin/jalview/util/BrowserLauncher.js b/bin/jalview/util/BrowserLauncher.js
deleted file mode 100644
index 0b28b4c..0000000
--- a/bin/jalview/util/BrowserLauncher.js
+++ /dev/null
@@ -1,487 +0,0 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.BrowserLauncher", ["jalview.bin.Cache", "jalview.util.MessageManager", "java.io.File", "$.IOException", "java.lang.Double", "$.Runtime"], function () {
-c$ = Clazz.declareType (jalview.util, "BrowserLauncher");
-c$.loadClasses = Clazz.defineMethod (c$, "loadClasses",
-($fz = function () {
-switch (jalview.util.BrowserLauncher.jvm) {
-case 0:
-try {
-var aeTargetClass = Class.forName ("com.apple.MacOS.AETarget");
-var osUtilsClass = Class.forName ("com.apple.MacOS.OSUtils");
-var appleEventClass = Class.forName ("com.apple.MacOS.AppleEvent");
-var aeClass = Class.forName ("com.apple.MacOS.ae");
-jalview.util.BrowserLauncher.aeDescClass = Class.forName ("com.apple.MacOS.AEDesc");
-jalview.util.BrowserLauncher.aeTargetConstructor = aeTargetClass.getDeclaredConstructor ( Clazz.newArray (-1, [Number]));
-jalview.util.BrowserLauncher.appleEventConstructor = appleEventClass.getDeclaredConstructor ( Clazz.newArray (-1, [Number, Number, aeTargetClass, Number, Number]));
-jalview.util.BrowserLauncher.aeDescConstructor = jalview.util.BrowserLauncher.aeDescClass.getDeclaredConstructor ( Clazz.newArray (-1, [String]));
-jalview.util.BrowserLauncher.makeOSType = osUtilsClass.getDeclaredMethod ("makeOSType", Clazz.newArray (-1, [String]));
-jalview.util.BrowserLauncher.putParameter = appleEventClass.getDeclaredMethod ("putParameter", Clazz.newArray (-1, [Number, jalview.util.BrowserLauncher.aeDescClass]));
-jalview.util.BrowserLauncher.sendNoReply = appleEventClass.getDeclaredMethod ("sendNoReply", Clazz.newArray (-1, []));
-var keyDirectObjectField = aeClass.getDeclaredField ("keyDirectObject");
-jalview.util.BrowserLauncher.keyDirectObject = keyDirectObjectField.get (null);
-var autoGenerateReturnIDField = appleEventClass.getDeclaredField ("kAutoGenerateReturnID");
-jalview.util.BrowserLauncher.kAutoGenerateReturnID = autoGenerateReturnIDField.get (null);
-var anyTransactionIDField = appleEventClass.getDeclaredField ("kAnyTransactionID");
-jalview.util.BrowserLauncher.kAnyTransactionID = anyTransactionIDField.get (null);
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
-var cnfe = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
-var nsme = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, NoSuchFieldException)) {
-var nsfe = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = nsfe.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
-return false;
-}
-} else {
-throw e$$;
-}
-}
-break;
-case 1:
-try {
-jalview.util.BrowserLauncher.mrjFileUtilsClass = Class.forName ("com.apple.mrj.MRJFileUtils");
-jalview.util.BrowserLauncher.mrjOSTypeClass = Class.forName ("com.apple.mrj.MRJOSType");
-var systemFolderField = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredField ("kSystemFolderType");
-jalview.util.BrowserLauncher.kSystemFolderType = systemFolderField.get (null);
-jalview.util.BrowserLauncher.findFolder = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("findFolder", Clazz.newArray (-1, [jalview.util.BrowserLauncher.mrjOSTypeClass]));
-jalview.util.BrowserLauncher.getFileCreator = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("getFileCreator", Clazz.newArray (-1, [java.io.File]));
-jalview.util.BrowserLauncher.getFileType = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("getFileType", Clazz.newArray (-1, [java.io.File]));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
-var cnfe = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, NoSuchFieldException)) {
-var nsfe = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = nsfe.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
-var nsme = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, SecurityException)) {
-var se = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = se.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
-return false;
-}
-} else {
-throw e$$;
-}
-}
-break;
-case 3:
-try {
-var linker = Class.forName ("com.apple.mrj.jdirect.Linker");
-var constructor = linker.getConstructor ( Clazz.newArray (-1, [Class]));
-jalview.util.BrowserLauncher.linkage = constructor.newInstance ( Clazz.newArray (-1, [jalview.util.BrowserLauncher]));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
-var cnfe = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
-var nsme = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
-var ite = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = ite.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, InstantiationException)) {
-var ie = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = ie.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
-return false;
-}
-} else {
-throw e$$;
-}
-}
-break;
-case 4:
-try {
-jalview.util.BrowserLauncher.mrjFileUtilsClass = Class.forName ("com.apple.mrj.MRJFileUtils");
-jalview.util.BrowserLauncher.$openURL = jalview.util.BrowserLauncher.mrjFileUtilsClass.getDeclaredMethod ("openURL", Clazz.newArray (-1, [String]));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, ClassNotFoundException)) {
-var cnfe = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = cnfe.getMessage ();
-return false;
-}
-} else if (Clazz.exceptionOf (e$$, NoSuchMethodException)) {
-var nsme = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = nsme.getMessage ();
-return false;
-}
-} else {
-throw e$$;
-}
-}
-break;
-default:
-break;
-}
-return true;
-}, $fz.isPrivate = true, $fz));
-c$.locateBrowser = Clazz.defineMethod (c$, "locateBrowser",
-($fz = function () {
-if (jalview.util.BrowserLauncher.browser != null) {
-return jalview.util.BrowserLauncher.browser;
-}switch (jalview.util.BrowserLauncher.jvm) {
-case 0:
-try {
-var finderCreatorCode = jalview.util.BrowserLauncher.makeOSType.invoke (null, Clazz.newArray (-1, ["MACS"]));
-var aeTarget = jalview.util.BrowserLauncher.aeTargetConstructor.newInstance ( Clazz.newArray (-1, [finderCreatorCode]));
-var gurlType = jalview.util.BrowserLauncher.makeOSType.invoke (null, Clazz.newArray (-1, ["GURL"]));
-var appleEvent = jalview.util.BrowserLauncher.appleEventConstructor.newInstance ( Clazz.newArray (-1, [gurlType, gurlType, aeTarget, jalview.util.BrowserLauncher.kAutoGenerateReturnID, jalview.util.BrowserLauncher.kAnyTransactionID]));
-return appleEvent;
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else if (Clazz.exceptionOf (e$$, InstantiationException)) {
-var ie = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = ie.getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
-var ite = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = ite.getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else {
-throw e$$;
-}
-}
-case 1:
-var systemFolder;
-try {
-systemFolder = jalview.util.BrowserLauncher.findFolder.invoke (null, Clazz.newArray (-1, [jalview.util.BrowserLauncher.kSystemFolderType]));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, IllegalArgumentException)) {
-var iare = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = iare.getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
-var ite = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = ite.getTargetException ().getClass () + ": " + ite.getTargetException ().getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else {
-throw e$$;
-}
-}
-var systemFolderFiles = systemFolder.list ();
-for (var i = 0; i < systemFolderFiles.length; i++) {
-try {
-var file = new java.io.File (systemFolder, systemFolderFiles[i]);
-if (!file.isFile ()) {
-continue;
-}var fileType = jalview.util.BrowserLauncher.getFileType.invoke (null, Clazz.newArray (-1, [file]));
-if ("FNDR".equals (fileType.toString ())) {
-var fileCreator = jalview.util.BrowserLauncher.getFileCreator.invoke (null, Clazz.newArray (-1, [file]));
-if ("MACS".equals (fileCreator.toString ())) {
-jalview.util.BrowserLauncher.browser = file.toString ();
-return jalview.util.BrowserLauncher.browser;
-}}} catch (e$$) {
-if (Clazz.exceptionOf (e$$, IllegalArgumentException)) {
-var iare = e$$;
-{
-jalview.util.BrowserLauncher.errorMessage = iare.getMessage ();
-return null;
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = iae.getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
-var ite = e$$;
-{
-jalview.util.BrowserLauncher.browser = null;
-jalview.util.BrowserLauncher.errorMessage = ite.getTargetException ().getClass () + ": " + ite.getTargetException ().getMessage ();
-return jalview.util.BrowserLauncher.browser;
-}
-} else {
-throw e$$;
-}
-}
-}
-jalview.util.BrowserLauncher.browser = null;
-break;
-case 3:
-case 4:
-jalview.util.BrowserLauncher.browser = "";
-break;
-case 5:
-jalview.util.BrowserLauncher.browser = "cmd.exe";
-break;
-case 6:
-jalview.util.BrowserLauncher.browser = "command.com";
-break;
-case -1:
-default:
-jalview.util.BrowserLauncher.browser = jalview.bin.Cache.getDefault ("DEFAULT_BROWSER", "firefox");
-break;
-}
-return jalview.util.BrowserLauncher.browser;
-}, $fz.isPrivate = true, $fz));
-c$.resetBrowser = Clazz.defineMethod (c$, "resetBrowser",
-function () {
-jalview.util.BrowserLauncher.browser = null;
-});
-c$.openURL = Clazz.defineMethod (c$, "openURL",
-function (url) {
-if (!jalview.util.BrowserLauncher.loadedWithoutErrors) {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.browser_not_found", Clazz.newArray (-1, [jalview.util.BrowserLauncher.errorMessage])));
-}var browser = jalview.util.BrowserLauncher.locateBrowser ();
-if (browser == null) {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.browser_unable_to_locate", Clazz.newArray (-1, [jalview.util.BrowserLauncher.errorMessage])));
-}switch (jalview.util.BrowserLauncher.jvm) {
-case 0:
-var aeDesc = null;
-try {
-aeDesc = jalview.util.BrowserLauncher.aeDescConstructor.newInstance ( Clazz.newArray (-1, [url]));
-jalview.util.BrowserLauncher.putParameter.invoke (browser, Clazz.newArray (-1, [jalview.util.BrowserLauncher.keyDirectObject, aeDesc]));
-jalview.util.BrowserLauncher.sendNoReply.invoke (browser, Clazz.newArray (-1, []));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
-var ite = e$$;
-{
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.invocation_target_exception_creating_aedesc", Clazz.newArray (-1, [ite.getMessage ()])));
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.illegal_access_building_apple_evt", Clazz.newArray (-1, [iae.getMessage ()])));
-}
-} else if (Clazz.exceptionOf (e$$, InstantiationException)) {
-var ie = e$$;
-{
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.illegal_access_building_apple_evt", Clazz.newArray (-1, [ie.getMessage ()])));
-}
-} else {
-throw e$$;
-}
-} finally {
-aeDesc = null;
-browser = null;
-}
-break;
-case 1:
-Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, url]));
-break;
-case 3:
-var instance = Clazz.newIntArray (1, 0);
-var result = jalview.util.BrowserLauncher.ICStart (instance, 0);
-if (result == 0) {
-var selectionStart = Clazz.newIntArray (-1, [0]);
-var urlBytes = url.getBytes ();
-var selectionEnd = Clazz.newIntArray (-1, [urlBytes.length]);
-result = jalview.util.BrowserLauncher.ICLaunchURL (instance[0], Clazz.newByteArray (-1, [0]), urlBytes, urlBytes.length, selectionStart, selectionEnd);
-if (result == 0) {
-jalview.util.BrowserLauncher.ICStop (instance);
-} else {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.unable_to_launch_url", Clazz.newArray (-1, [Integer.$valueOf (result).toString ()])));
-}} else {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.unable_to_create_internet_config", Clazz.newArray (-1, [Integer.$valueOf (result).toString ()])));
-}break;
-case 4:
-try {
-jalview.util.BrowserLauncher.$openURL.invoke (null, Clazz.newArray (-1, [url]));
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, java.lang.reflect.InvocationTargetException)) {
-var ite = e$$;
-{
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.invocation_target_calling_url", Clazz.newArray (-1, [ite.getMessage ()])));
-}
-} else if (Clazz.exceptionOf (e$$, IllegalAccessException)) {
-var iae = e$$;
-{
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.illegal_access_calling_url", Clazz.newArray (-1, [iae.getMessage ()])));
-}
-} else {
-throw e$$;
-}
-}
-break;
-case 5:
-case 6:
-var process = Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, "/c", "start", "\"\"", '"' + url + '"']));
-try {
-process.waitFor ();
-process.exitValue ();
-} catch (ie) {
-if (Clazz.exceptionOf (ie, InterruptedException)) {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.interrupted_launching_browser", Clazz.newArray (-1, [ie.getMessage ()])));
-} else {
-throw ie;
-}
-}
-break;
-case -1:
-process = Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, "-remote", "openURL(" + url + ", new-window" + ")"]));
-try {
-var exitCode = process.waitFor ();
-if (exitCode != 0) {
-Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, url]));
-}} catch (ie) {
-if (Clazz.exceptionOf (ie, InterruptedException)) {
-throw new java.io.IOException (jalview.util.MessageManager.formatMessage ("exception.interrupted_launching_browser", Clazz.newArray (-1, [ie.getMessage ()])));
-} else {
-throw ie;
-}
-}
-break;
-default:
-Runtime.getRuntime ().exec ( Clazz.newArray (-1, [browser, url]));
-break;
-}
-}, "~S");
-Clazz.defineStatics (c$,
-"jvm", 0,
-"browser", null,
-"loadedWithoutErrors", false,
-"mrjFileUtilsClass", null,
-"mrjOSTypeClass", null,
-"aeDescClass", null,
-"aeTargetConstructor", null,
-"appleEventConstructor", null,
-"aeDescConstructor", null,
-"findFolder", null,
-"getFileCreator", null,
-"getFileType", null,
-"$openURL", null,
-"makeOSType", null,
-"putParameter", null,
-"sendNoReply", null,
-"kSystemFolderType", null,
-"keyDirectObject", null,
-"kAutoGenerateReturnID", null,
-"kAnyTransactionID", null,
-"linkage", null,
-"JDirect_MacOSX", "/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/HIToolbox",
-"MRJ_2_0", 0,
-"MRJ_2_1", 1,
-"MRJ_3_0", 3,
-"MRJ_3_1", 4,
-"WINDOWS_NT", 5,
-"WINDOWS_9x", 6,
-"OTHER", -1,
-"FINDER_TYPE", "FNDR",
-"FINDER_CREATOR", "MACS",
-"GURL_EVENT", "GURL",
-"FIRST_WINDOWS_PARAMETER", "/c",
-"SECOND_WINDOWS_PARAMETER", "start",
-"THIRD_WINDOWS_PARAMETER", "\"\"",
-"NETSCAPE_REMOTE_PARAMETER", "-remote",
-"NETSCAPE_OPEN_PARAMETER_START", "openURL(",
-"NETSCAPE_OPEN_NEW_WINDOW", ", new-window",
-"NETSCAPE_OPEN_PARAMETER_END", ")",
-"errorMessage", null);
-{
-jalview.util.BrowserLauncher.loadedWithoutErrors = true;
-var osName = System.getProperty ("os.name");
-if (osName.startsWith ("Mac OS")) {
-var mrjVersion = System.getProperty ("mrj.version");
-var majorMRJVersion;
-if (mrjVersion == null) {
-majorMRJVersion = "3.1";
-} else {
-majorMRJVersion = mrjVersion.substring (0, 3);
-}try {
-var version = Double.$valueOf (majorMRJVersion).doubleValue ();
-if (version == 2) {
-jalview.util.BrowserLauncher.jvm = 0;
-} else if ((version >= 2.1) && (version < 3)) {
-jalview.util.BrowserLauncher.jvm = 1;
-} else if (version == 3.0) {
-jalview.util.BrowserLauncher.jvm = 3;
-} else if (version >= 3.1) {
-jalview.util.BrowserLauncher.jvm = 4;
-} else {
-jalview.util.BrowserLauncher.loadedWithoutErrors = false;
-jalview.util.BrowserLauncher.errorMessage = "Unsupported MRJ version: " + version;
-}} catch (nfe) {
-if (Clazz.exceptionOf (nfe, NumberFormatException)) {
-jalview.util.BrowserLauncher.loadedWithoutErrors = false;
-jalview.util.BrowserLauncher.errorMessage = "Invalid MRJ version: " + mrjVersion;
-} else {
-throw nfe;
-}
-}
-} else if (osName.startsWith ("Windows")) {
-if (osName.indexOf ("9") != -1) {
-jalview.util.BrowserLauncher.jvm = 6;
-} else {
-jalview.util.BrowserLauncher.jvm = 5;
-}} else {
-jalview.util.BrowserLauncher.jvm = -1;
-}if (jalview.util.BrowserLauncher.loadedWithoutErrors) {
-jalview.util.BrowserLauncher.loadedWithoutErrors = jalview.util.BrowserLauncher.loadClasses ();
-}}});
diff --git a/bin/jalview/util/ColorUtils.js b/bin/jalview/util/ColorUtils.js
index 129c265..ed016da 100644
--- a/bin/jalview/util/ColorUtils.js
+++ b/bin/jalview/util/ColorUtils.js
@@ -1,30 +1,30 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.ColorUtils", ["java.awt.Color", "java.util.Random"], function () {
-c$ = Clazz.declareType (jalview.util, "ColorUtils");
-c$.generateRandomColor = Clazz.defineMethod (c$, "generateRandomColor",
-function (mix) {
-var random = new java.util.Random ();
-var red = random.nextInt (256);
-var green = random.nextInt (256);
-var blue = random.nextInt (256);
-if (mix != null) {
-red = Clazz.doubleToInt ((red + mix.getRed ()) / 2);
-green = Clazz.doubleToInt ((green + mix.getGreen ()) / 2);
-blue = Clazz.doubleToInt ((blue + mix.getBlue ()) / 2);
-}var color = new java.awt.Color (red, green, blue);
-return color;
-}, "java.awt.Color");
-c$.toTkCode = Clazz.defineMethod (c$, "toTkCode",
-function (colour) {
-var colstring = "#" + ((colour.getRed () < 16) ? "0" : "") + Integer.toHexString (colour.getRed ()) + ((colour.getGreen () < 16) ? "0" : "") + Integer.toHexString (colour.getGreen ()) + ((colour.getBlue () < 16) ? "0" : "") + Integer.toHexString (colour.getBlue ());
-return colstring;
-}, "java.awt.Color");
-c$.darkerThan = Clazz.defineMethod (c$, "darkerThan",
-function (col) {
-return col == null ? null : col.darker ().darker ().darker ();
-}, "java.awt.Color");
-c$.brighterThan = Clazz.defineMethod (c$, "brighterThan",
-function (col) {
-return col == null ? null : col.brighter ().brighter ().brighter ();
-}, "java.awt.Color");
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.ColorUtils", ["java.awt.Color", "java.util.Random"], function () {
+c$ = Clazz.declareType (jalview.util, "ColorUtils");
+c$.generateRandomColor = Clazz.defineMethod (c$, "generateRandomColor",
+function (mix) {
+var random = new java.util.Random ();
+var red = random.nextInt (256);
+var green = random.nextInt (256);
+var blue = random.nextInt (256);
+if (mix != null) {
+red = Clazz.doubleToInt ((red + mix.getRed ()) / 2);
+green = Clazz.doubleToInt ((green + mix.getGreen ()) / 2);
+blue = Clazz.doubleToInt ((blue + mix.getBlue ()) / 2);
+}var color = new java.awt.Color (red, green, blue);
+return color;
+}, "java.awt.Color");
+c$.toTkCode = Clazz.defineMethod (c$, "toTkCode",
+function (colour) {
+var colstring = "#" + ((colour.getRed () < 16) ? "0" : "") + Integer.toHexString (colour.getRed ()) + ((colour.getGreen () < 16) ? "0" : "") + Integer.toHexString (colour.getGreen ()) + ((colour.getBlue () < 16) ? "0" : "") + Integer.toHexString (colour.getBlue ());
+return colstring;
+}, "java.awt.Color");
+c$.darkerThan = Clazz.defineMethod (c$, "darkerThan",
+function (col) {
+return col == null ? null : col.darker ().darker ().darker ();
+}, "java.awt.Color");
+c$.brighterThan = Clazz.defineMethod (c$, "brighterThan",
+function (col) {
+return col == null ? null : col.brighter ().brighter ().brighter ();
+}, "java.awt.Color");
+});
diff --git a/bin/jalview/util/Comparison.class b/bin/jalview/util/Comparison.class
index 096f532..590a80c 100644
Binary files a/bin/jalview/util/Comparison.class and b/bin/jalview/util/Comparison.class differ
diff --git a/bin/jalview/util/Comparison.js b/bin/jalview/util/Comparison.js
index e46a616..29499bb 100644
--- a/bin/jalview/util/Comparison.js
+++ b/bin/jalview/util/Comparison.js
@@ -1,131 +1,131 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.Comparison", ["java.util.ArrayList"], function () {
-c$ = Clazz.declareType (jalview.util, "Comparison");
-c$.compare = Clazz.defineMethod (c$, "compare",
-function (ii, jj) {
-return jalview.util.Comparison.compare (ii, jj, 0, ii.getLength () - 1);
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
-c$.compare = Clazz.defineMethod (c$, "compare",
-function (ii, jj, start, end) {
-var si = ii.getSequenceAsString ();
-var sj = jj.getSequenceAsString ();
-var ilen = si.length - 1;
-var jlen = sj.length - 1;
-while (jalview.util.Comparison.isGap (si.charAt (start + ilen))) {
-ilen--;
-}
-while (jalview.util.Comparison.isGap (sj.charAt (start + jlen))) {
-jlen--;
-}
-var count = 0;
-var match = 0;
-var pid = -1;
-if (ilen > jlen) {
-for (var j = 0; j < jlen; j++) {
-if (si.substring (start + j, start + j + 1).equals (sj.substring (start + j, start + j + 1))) {
-match++;
-}count++;
-}
-pid = match / ilen * 100;
-} else {
-for (var j = 0; j < jlen; j++) {
-if (si.substring (start + j, start + j + 1).equals (sj.substring (start + j, start + j + 1))) {
-match++;
-}count++;
-}
-pid = match / jlen * 100;
-}return pid;
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~N,~N");
-c$.PID = Clazz.defineMethod (c$, "PID",
-function (seq1, seq2) {
-return jalview.util.Comparison.PID (seq1, seq2, 0, seq1.length);
-}, "~S,~S");
-c$.PID = Clazz.defineMethod (c$, "PID",
-function (seq1, seq2, start, end) {
-return jalview.util.Comparison.PID (seq1, seq2, start, end, true, false);
-}, "~S,~S,~N,~N");
-c$.PID = Clazz.defineMethod (c$, "PID",
-function (seq1, seq2, start, end, wcGaps, ungappedOnly) {
-var s1len = seq1.length;
-var s2len = seq2.length;
-var len = Math.min (s1len, s2len);
-if (end < len) {
-len = end;
-}if (len < start) {
-start = len - 1;
-}var elen = len - start;
-var bad = 0;
-var chr1;
-var chr2;
-var agap;
-for (var i = start; i < len; i++) {
-chr1 = seq1.charAt (i);
-chr2 = seq2.charAt (i);
-agap = jalview.util.Comparison.isGap (chr1) || jalview.util.Comparison.isGap (chr2);
-if ('a' <= chr1 && chr1 <= 'z') {
-chr1 = String.fromCharCode (chr1.charCodeAt (0) - 32);
-}if ('a' <= chr2 && chr2 <= 'z') {
-chr2 = String.fromCharCode (chr2.charCodeAt (0) - 32);
-}if (chr1 != chr2) {
-if (agap) {
-if (ungappedOnly) {
-elen--;
-} else if (!wcGaps) {
-bad++;
-}} else {
-bad++;
-}}}
-if (elen < 1) {
-return 0;
-}return (100 * (elen - bad)) / elen;
-}, "~S,~S,~N,~N,~B,~B");
-c$.isGap = Clazz.defineMethod (c$, "isGap",
-function (c) {
-return (c == '-' || c == '.' || c == ' ') ? true : false;
-}, "~S");
-c$.isNucleotide = Clazz.defineMethod (c$, "isNucleotide",
-function (seqs) {
-if (seqs == null) {
-return false;
-}var ntCount = 0;
-var aaCount = 0;
-for (var seq, $seq = 0, $$seq = seqs; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
-if (seq == null) {
-continue;
-}for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
-if ('a' <= c && c <= 'z') {
-c = String.fromCharCode (c.charCodeAt (0) - 32);
-}if (c == 'A' || c == 'G' || c == 'C' || c == 'T' || c == 'U') {
-ntCount++;
-} else if (!jalview.util.Comparison.isGap (c)) {
-aaCount++;
-}}
-}
-if (ntCount * 100 > 85 * (ntCount + aaCount)) {
-return true;
-} else {
-return false;
-}}, "~A");
-c$.isNucleotide2 = Clazz.defineMethod (c$, "isNucleotide2",
-function (seqs) {
-if (seqs == null) {
-return false;
-}var flattened = new java.util.ArrayList ();
-for (var ss, $ss = 0, $$ss = seqs; $ss < $$ss.length && ((ss = $$ss[$ss]) || true); $ss++) {
-for (var s, $s = 0, $$s = ss; $s < $$s.length && ((s = $$s[$s]) || true); $s++) {
-flattened.add (s);
-}
-}
-var oneDArray = flattened.toArray ( new Array (flattened.size ()));
-return jalview.util.Comparison.isNucleotide (oneDArray);
-}, "~A");
-Clazz.defineStatics (c$,
-"EIGHTY_FIVE", 85,
-"TO_UPPER_CASE", 32,
-"GAP_SPACE", ' ',
-"GAP_DOT", '.',
-"GAP_DASH", '-');
-c$.GapChars = c$.prototype.GapChars = String.instantialize ( Clazz.newCharArray (-1, [' ', '.', '-']));
-Clazz.defineStatics (c$,
-"caseShift", 32);
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.Comparison", ["java.util.ArrayList"], function () {
+c$ = Clazz.declareType (jalview.util, "Comparison");
+c$.compare = Clazz.defineMethod (c$, "compare",
+function (ii, jj) {
+return jalview.util.Comparison.compare (ii, jj, 0, ii.getLength () - 1);
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI");
+c$.compare = Clazz.defineMethod (c$, "compare",
+function (ii, jj, start, end) {
+var si = ii.getSequenceAsString ();
+var sj = jj.getSequenceAsString ();
+var ilen = si.length - 1;
+var jlen = sj.length - 1;
+while (jalview.util.Comparison.isGap (si.charAt (start + ilen))) {
+ilen--;
+}
+while (jalview.util.Comparison.isGap (sj.charAt (start + jlen))) {
+jlen--;
+}
+var count = 0;
+var match = 0;
+var pid = -1;
+if (ilen > jlen) {
+for (var j = 0; j < jlen; j++) {
+if (si.substring (start + j, start + j + 1).equals (sj.substring (start + j, start + j + 1))) {
+match++;
+}count++;
+}
+pid = match / ilen * 100;
+} else {
+for (var j = 0; j < jlen; j++) {
+if (si.substring (start + j, start + j + 1).equals (sj.substring (start + j, start + j + 1))) {
+match++;
+}count++;
+}
+pid = match / jlen * 100;
+}return pid;
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceI,~N,~N");
+c$.PID = Clazz.defineMethod (c$, "PID",
+function (seq1, seq2) {
+return jalview.util.Comparison.PID (seq1, seq2, 0, seq1.length);
+}, "~S,~S");
+c$.PID = Clazz.defineMethod (c$, "PID",
+function (seq1, seq2, start, end) {
+return jalview.util.Comparison.PID (seq1, seq2, start, end, true, false);
+}, "~S,~S,~N,~N");
+c$.PID = Clazz.defineMethod (c$, "PID",
+function (seq1, seq2, start, end, wcGaps, ungappedOnly) {
+var s1len = seq1.length;
+var s2len = seq2.length;
+var len = Math.min (s1len, s2len);
+if (end < len) {
+len = end;
+}if (len < start) {
+start = len - 1;
+}var elen = len - start;
+var bad = 0;
+var chr1;
+var chr2;
+var agap;
+for (var i = start; i < len; i++) {
+chr1 = seq1.charAt (i);
+chr2 = seq2.charAt (i);
+agap = jalview.util.Comparison.isGap (chr1) || jalview.util.Comparison.isGap (chr2);
+if ('a' <= chr1 && chr1 <= 'z') {
+chr1 = String.fromCharCode (chr1.charCodeAt (0) - 32);
+}if ('a' <= chr2 && chr2 <= 'z') {
+chr2 = String.fromCharCode (chr2.charCodeAt (0) - 32);
+}if (chr1 != chr2) {
+if (agap) {
+if (ungappedOnly) {
+elen--;
+} else if (!wcGaps) {
+bad++;
+}} else {
+bad++;
+}}}
+if (elen < 1) {
+return 0;
+}return (100 * (elen - bad)) / elen;
+}, "~S,~S,~N,~N,~B,~B");
+c$.isGap = Clazz.defineMethod (c$, "isGap",
+function (c) {
+return (c == '-' || c == '.' || c == ' ') ? true : false;
+}, "~S");
+c$.isNucleotide = Clazz.defineMethod (c$, "isNucleotide",
+function (seqs) {
+if (seqs == null) {
+return false;
+}var ntCount = 0;
+var aaCount = 0;
+for (var seq, $seq = 0, $$seq = seqs; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+if (seq == null) {
+continue;
+}for (var c, $c = 0, $$c = seq.getSequence (); $c < $$c.length && ((c = $$c[$c]) || true); $c++) {
+if ('a' <= c && c <= 'z') {
+c = String.fromCharCode (c.charCodeAt (0) - 32);
+}if (c == 'A' || c == 'G' || c == 'C' || c == 'T' || c == 'U') {
+ntCount++;
+} else if (!jalview.util.Comparison.isGap (c)) {
+aaCount++;
+}}
+}
+if (ntCount * 100 > 85 * (ntCount + aaCount)) {
+return true;
+} else {
+return false;
+}}, "~A");
+c$.isNucleotide2 = Clazz.defineMethod (c$, "isNucleotide2",
+function (seqs) {
+if (seqs == null) {
+return false;
+}var flattened = new java.util.ArrayList ();
+for (var ss, $ss = 0, $$ss = seqs; $ss < $$ss.length && ((ss = $$ss[$ss]) || true); $ss++) {
+for (var s, $s = 0, $$s = ss; $s < $$s.length && ((s = $$s[$s]) || true); $s++) {
+flattened.add (s);
+}
+}
+var oneDArray = flattened.toArray ( new Array (flattened.size ()));
+return jalview.util.Comparison.isNucleotide (oneDArray);
+}, "~A");
+Clazz.defineStatics (c$,
+"EIGHTY_FIVE", 85,
+"TO_UPPER_CASE", 32,
+"GAP_SPACE", ' ',
+"GAP_DOT", '.',
+"GAP_DASH", '-');
+c$.GapChars = c$.prototype.GapChars = String.instantialize ( Clazz.newCharArray (-1, [' ', '.', '-']));
+Clazz.defineStatics (c$,
+"caseShift", 32);
+});
diff --git a/bin/jalview/util/DBRefUtils.class b/bin/jalview/util/DBRefUtils.class
index fae2024..0686bf2 100644
Binary files a/bin/jalview/util/DBRefUtils.class and b/bin/jalview/util/DBRefUtils.class differ
diff --git a/bin/jalview/util/DBRefUtils.js b/bin/jalview/util/DBRefUtils.js
index 051cde7..b27f196 100644
--- a/bin/jalview/util/DBRefUtils.js
+++ b/bin/jalview/util/DBRefUtils.js
@@ -1,184 +1,184 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.util.HashMap"], "jalview.util.DBRefUtils", ["jalview.datamodel.DBRefEntry", "$.DBRefSource", "$.PDBEntry", "jalview.jsdev.RegExp", "java.util.ArrayList", "$.Hashtable"], function () {
-c$ = Clazz.declareType (jalview.util, "DBRefUtils");
-c$.selectRefs = Clazz.defineMethod (c$, "selectRefs",
-function (dbrefs, sources) {
-if (dbrefs == null) {
-return null;
-}if (sources == null) {
-return dbrefs;
-}var srcs = new java.util.HashMap ();
-var res = new java.util.ArrayList ();
-for (var i = 0; i < sources.length; i++) {
-srcs.put ( String.instantialize (sources[i]), new Integer (i));
-}
-for (var i = 0, j = dbrefs.length; i < j; i++) {
-if (srcs.containsKey (dbrefs[i].getSource ())) {
-res.add (dbrefs[i]);
-}}
-if (res.size () > 0) {
-var reply = new Array (res.size ());
-return res.toArray (reply);
-}res = null;
-return null;
-}, "~A,~A");
-c$.isDasCoordinateSystem = Clazz.defineMethod (c$, "isDasCoordinateSystem",
-function (string, dBRefEntry) {
-if (string == null || dBRefEntry == null) {
-return false;
-}var coordsys = jalview.util.DBRefUtils.dasCoordinateSystemsLookup.get (string.toLowerCase ());
-return coordsys == null ? false : coordsys.equals (dBRefEntry.getSource ());
-}, "~S,jalview.datamodel.DBRefEntry");
-c$.getCanonicalName = Clazz.defineMethod (c$, "getCanonicalName",
-function (source) {
-if (source == null) {
-return null;
-}var canonical = jalview.util.DBRefUtils.canonicalSourceNameLookup.get (source.toLowerCase ());
-return canonical == null ? source : canonical;
-}, "~S");
-c$.searchRefs = Clazz.defineMethod (c$, "searchRefs",
-function (ref, entry) {
-return jalview.util.DBRefUtils.searchRefs (ref, entry, jalview.util.DBRefUtils.matchDbAndIdAndEitherMapOrEquivalentMapList);
-}, "~A,jalview.datamodel.DBRefEntry");
-c$.searchRefs = Clazz.defineMethod (c$, "searchRefs",
-function (refs, entry, comparator) {
-if (refs == null || entry == null) {
-return null;
-}var rfs = new java.util.ArrayList ();
-for (var i = 0; i < refs.length; i++) {
-if (comparator.matches (entry, refs[i])) {
-rfs.add (refs[i]);
-}}
-return rfs.size () == 0 ? null : rfs.toArray ( new Array (rfs.size ()));
-}, "~A,jalview.datamodel.DBRefEntry,jalview.util.DBRefUtils.DbRefComp");
-c$.parseToDbRef = Clazz.defineMethod (c$, "parseToDbRef",
-function (seq, dbname, version, acn) {
-var ref = null;
-if (dbname != null) {
-var locsrc = jalview.util.DBRefUtils.getCanonicalName (dbname);
-if (locsrc.equals (jalview.datamodel.DBRefSource.PDB)) {
-var r = jalview.jsdev.RegExp.newRegex (["([0-9][0-9A-Za-z]{3})\\s*(.?)\\s*;\\s*([0-9]+)-([0-9]+)"]);
-if (r.search (acn.trim ())) {
-var pdbid = r.stringMatchedI (1);
-var chaincode = r.stringMatchedI (2);
-if (chaincode == null) {
-chaincode = " ";
-}if (chaincode.equals (" ")) {
-chaincode = "_";
-}ref = new jalview.datamodel.DBRefEntry (locsrc, version, pdbid + chaincode);
-var pdbr = new jalview.datamodel.PDBEntry ();
-pdbr.setId (pdbid);
-pdbr.setType (jalview.datamodel.PDBEntry.Type.PDB);
-pdbr.setProperty ( new java.util.Hashtable ());
-pdbr.setChainCode (chaincode);
-seq.addPDBId (pdbr);
-} else {
-System.err.println ("Malformed PDB DR line:" + acn);
-}} else {
-ref = new jalview.datamodel.DBRefEntry (locsrc, version, acn);
-}}if (ref != null) {
-seq.addDBRef (ref);
-}return ref;
-}, "jalview.datamodel.SequenceI,~S,~S,~S");
-c$.$DBRefUtils$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$1", null, jalview.util.DBRefUtils.DbRefComp);
-Clazz.defineMethod (c$, "matches",
-function (refa, refb) {
-if (refa.getSource () == null || refb.getSource ().equals (refa.getSource ())) {
-if (refa.getVersion () == null || refb.getVersion ().equals (refa.getVersion ())) {
-if (refa.getAccessionId () == null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
-if (refa.getMap () == null || (refb.getMap () != null && refb.getMap ().equals (refa.getMap ()))) {
-return true;
-}}}}return false;
-}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
-c$ = Clazz.p0p ();
-};
-c$.$DBRefUtils$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$2", null, jalview.util.DBRefUtils.DbRefComp);
-Clazz.defineMethod (c$, "matches",
-function (refa, refb) {
-if ((refa.getSource () == null || refb.getSource () == null) || refb.getSource ().equals (refa.getSource ())) {
-if ((refa.getVersion () == null || refb.getVersion () == null) || refb.getVersion ().equals (refa.getVersion ())) {
-if ((refa.getAccessionId () == null || refb.getAccessionId () == null) || refb.getAccessionId ().equals (refa.getAccessionId ())) {
-if ((refa.getMap () == null || refb.getMap () == null) || (refb.getMap () != null && refb.getMap ().equals (refa.getMap ()))) {
-return true;
-}}}}return false;
-}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
-c$ = Clazz.p0p ();
-};
-c$.$DBRefUtils$3$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$3", null, jalview.util.DBRefUtils.DbRefComp);
-Clazz.defineMethod (c$, "matches",
-function (refa, refb) {
-if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
-if (refa.getAccessionId () != null && refb.getAccessionId () != null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
-if ((refa.getMap () == null || refb.getMap () == null) || (refa.getMap () != null && refb.getMap () != null && refb.getMap ().equals (refa.getMap ()))) {
-return true;
-}}}return false;
-}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
-c$ = Clazz.p0p ();
-};
-c$.$DBRefUtils$4$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$4", null, jalview.util.DBRefUtils.DbRefComp);
-Clazz.defineMethod (c$, "matches",
-function (refa, refb) {
-if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
-if (refa.getAccessionId () != null && refb.getAccessionId () != null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
-if ((refa.getMap () == null && refb.getMap () == null) || (refa.getMap () != null && refb.getMap () != null)) {
-if ((refb.getMap ().getMap () == null && refa.getMap ().getMap () == null) || (refb.getMap ().getMap () != null && refa.getMap ().getMap () != null && refb.getMap ().getMap ().getInverse ().equals (refa.getMap ().getMap ()))) {
-return true;
-}}}}return false;
-}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
-c$ = Clazz.p0p ();
-};
-c$.$DBRefUtils$5$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$5", null, jalview.util.DBRefUtils.DbRefComp);
-Clazz.defineMethod (c$, "matches",
-function (refa, refb) {
-if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
-if (refa.getAccessionId () != null && refb.getAccessionId () != null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
-if (refa.getMap () == null && refb.getMap () == null) {
-return true;
-}if (refa.getMap () != null && refb.getMap () != null && ((refb.getMap ().getMap () == null && refa.getMap ().getMap () == null) || (refb.getMap ().getMap () != null && refa.getMap ().getMap () != null && refb.getMap ().getMap ().equals (refa.getMap ().getMap ())))) {
-return true;
-}}}return false;
-}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
-c$ = Clazz.p0p ();
-};
-c$.$DBRefUtils$6$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$6", null, jalview.util.DBRefUtils.DbRefComp);
-Clazz.defineMethod (c$, "matches",
-function (refa, refb) {
-if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
-if (refa.getAccessionId () != null && refb.getAccessionId () != null && refb.getAccessionId ().equals (refa.getAccessionId ())) {
-if (refa.getMap () == null || refb.getMap () == null) {
-return true;
-}if ((refa.getMap () != null && refb.getMap () != null) && (refb.getMap ().getMap () == null && refa.getMap ().getMap () == null) || (refb.getMap ().getMap () != null && refa.getMap ().getMap () != null && (refb.getMap ().getMap ().equals (refa.getMap ().getMap ())))) {
-return true;
-}}}return false;
-}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
-c$ = Clazz.p0p ();
-};
-Clazz.declareInterface (jalview.util.DBRefUtils, "DbRefComp");
-c$.canonicalSourceNameLookup = c$.prototype.canonicalSourceNameLookup = new java.util.HashMap ();
-c$.dasCoordinateSystemsLookup = c$.prototype.dasCoordinateSystemsLookup = new java.util.HashMap ();
-{
-jalview.util.DBRefUtils.canonicalSourceNameLookup.put ("uniprotkb/swiss-prot", jalview.datamodel.DBRefSource.UNIPROT);
-jalview.util.DBRefUtils.canonicalSourceNameLookup.put ("uniprotkb/trembl", jalview.datamodel.DBRefSource.UNIPROT);
-jalview.util.DBRefUtils.canonicalSourceNameLookup.put ("pdb", jalview.datamodel.DBRefSource.PDB);
-jalview.util.DBRefUtils.dasCoordinateSystemsLookup.put ("pdbresnum", jalview.datamodel.DBRefSource.PDB);
-jalview.util.DBRefUtils.dasCoordinateSystemsLookup.put ("uniprot", jalview.datamodel.DBRefSource.UNIPROT);
-jalview.util.DBRefUtils.dasCoordinateSystemsLookup.put ("embl", jalview.datamodel.DBRefSource.EMBL);
-}c$.matchNonNullonA = c$.prototype.matchNonNullonA = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$1") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$1$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$1, this, null));
-c$.matchEitherNonNull = c$.prototype.matchEitherNonNull = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$2") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$2$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$2, this, null));
-c$.matchDbAndIdAndEitherMap = c$.prototype.matchDbAndIdAndEitherMap = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$3") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$3$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$3, this, null));
-c$.matchDbAndIdAndComplementaryMapList = c$.prototype.matchDbAndIdAndComplementaryMapList = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$4") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$4$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$4, this, null));
-c$.matchDbAndIdAndEquivalentMapList = c$.prototype.matchDbAndIdAndEquivalentMapList = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$5") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$5$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$5, this, null));
-c$.matchDbAndIdAndEitherMapOrEquivalentMapList = c$.prototype.matchDbAndIdAndEitherMapOrEquivalentMapList = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$6") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$6$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$6, this, null));
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.util.HashMap"], "jalview.util.DBRefUtils", ["jalview.datamodel.DBRefEntry", "$.DBRefSource", "$.PDBEntry", "jalview.jsdev.RegExp", "java.util.ArrayList", "$.Hashtable"], function () {
+c$ = Clazz.declareType (jalview.util, "DBRefUtils");
+c$.selectRefs = Clazz.defineMethod (c$, "selectRefs",
+function (dbrefs, sources) {
+if (dbrefs == null) {
+return null;
+}if (sources == null) {
+return dbrefs;
+}var srcs = new java.util.HashMap ();
+var res = new java.util.ArrayList ();
+for (var i = 0; i < sources.length; i++) {
+srcs.put ( String.instantialize (sources[i]), new Integer (i));
+}
+for (var i = 0, j = dbrefs.length; i < j; i++) {
+if (srcs.containsKey (dbrefs[i].getSource ())) {
+res.add (dbrefs[i]);
+}}
+if (res.size () > 0) {
+var reply = new Array (res.size ());
+return res.toArray (reply);
+}res = null;
+return null;
+}, "~A,~A");
+c$.isDasCoordinateSystem = Clazz.defineMethod (c$, "isDasCoordinateSystem",
+function (string, dBRefEntry) {
+if (string == null || dBRefEntry == null) {
+return false;
+}var coordsys = jalview.util.DBRefUtils.dasCoordinateSystemsLookup.get (string.toLowerCase ());
+return coordsys == null ? false : coordsys.equals (dBRefEntry.getSource ());
+}, "~S,jalview.datamodel.DBRefEntry");
+c$.getCanonicalName = Clazz.defineMethod (c$, "getCanonicalName",
+function (source) {
+if (source == null) {
+return null;
+}var canonical = jalview.util.DBRefUtils.canonicalSourceNameLookup.get (source.toLowerCase ());
+return canonical == null ? source : canonical;
+}, "~S");
+c$.searchRefs = Clazz.defineMethod (c$, "searchRefs",
+function (ref, entry) {
+return jalview.util.DBRefUtils.searchRefs (ref, entry, jalview.util.DBRefUtils.matchDbAndIdAndEitherMapOrEquivalentMapList);
+}, "~A,jalview.datamodel.DBRefEntry");
+c$.searchRefs = Clazz.defineMethod (c$, "searchRefs",
+function (refs, entry, comparator) {
+if (refs == null || entry == null) {
+return null;
+}var rfs = new java.util.ArrayList ();
+for (var i = 0; i < refs.length; i++) {
+if (comparator.matches (entry, refs[i])) {
+rfs.add (refs[i]);
+}}
+return rfs.size () == 0 ? null : rfs.toArray ( new Array (rfs.size ()));
+}, "~A,jalview.datamodel.DBRefEntry,jalview.util.DBRefUtils.DbRefComp");
+c$.parseToDbRef = Clazz.defineMethod (c$, "parseToDbRef",
+function (seq, dbname, version, acn) {
+var ref = null;
+if (dbname != null) {
+var locsrc = jalview.util.DBRefUtils.getCanonicalName (dbname);
+if (locsrc.equals (jalview.datamodel.DBRefSource.PDB)) {
+var r = jalview.jsdev.RegExp.newRegex (["([0-9][0-9A-Za-z]{3})\\s*(.?)\\s*;\\s*([0-9]+)-([0-9]+)"]);
+if (r.search (acn.trim ())) {
+var pdbid = r.stringMatchedI (1);
+var chaincode = r.stringMatchedI (2);
+if (chaincode == null) {
+chaincode = " ";
+}if (chaincode.equals (" ")) {
+chaincode = "_";
+}ref = new jalview.datamodel.DBRefEntry (locsrc, version, pdbid + chaincode);
+var pdbr = new jalview.datamodel.PDBEntry ();
+pdbr.setId (pdbid);
+pdbr.setType (jalview.datamodel.PDBEntry.Type.PDB);
+pdbr.setProperty ( new java.util.Hashtable ());
+pdbr.setChainCode (chaincode);
+seq.addPDBId (pdbr);
+} else {
+System.err.println ("Malformed PDB DR line:" + acn);
+}} else {
+ref = new jalview.datamodel.DBRefEntry (locsrc, version, acn);
+}}if (ref != null) {
+seq.addDBRef (ref);
+}return ref;
+}, "jalview.datamodel.SequenceI,~S,~S,~S");
+c$.$DBRefUtils$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$1", null, jalview.util.DBRefUtils.DbRefComp);
+Clazz.defineMethod (c$, "matches",
+function (refa, refb) {
+if (refa.getSource () == null || refb.getSource ().equals (refa.getSource ())) {
+if (refa.getVersion () == null || refb.getVersion ().equals (refa.getVersion ())) {
+if (refa.getAccessionId () == null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
+if (refa.getMap () == null || (refb.getMap () != null && refb.getMap ().equals (refa.getMap ()))) {
+return true;
+}}}}return false;
+}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
+c$ = Clazz.p0p ();
+};
+c$.$DBRefUtils$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$2", null, jalview.util.DBRefUtils.DbRefComp);
+Clazz.defineMethod (c$, "matches",
+function (refa, refb) {
+if ((refa.getSource () == null || refb.getSource () == null) || refb.getSource ().equals (refa.getSource ())) {
+if ((refa.getVersion () == null || refb.getVersion () == null) || refb.getVersion ().equals (refa.getVersion ())) {
+if ((refa.getAccessionId () == null || refb.getAccessionId () == null) || refb.getAccessionId ().equals (refa.getAccessionId ())) {
+if ((refa.getMap () == null || refb.getMap () == null) || (refb.getMap () != null && refb.getMap ().equals (refa.getMap ()))) {
+return true;
+}}}}return false;
+}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
+c$ = Clazz.p0p ();
+};
+c$.$DBRefUtils$3$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$3", null, jalview.util.DBRefUtils.DbRefComp);
+Clazz.defineMethod (c$, "matches",
+function (refa, refb) {
+if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
+if (refa.getAccessionId () != null && refb.getAccessionId () != null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
+if ((refa.getMap () == null || refb.getMap () == null) || (refa.getMap () != null && refb.getMap () != null && refb.getMap ().equals (refa.getMap ()))) {
+return true;
+}}}return false;
+}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
+c$ = Clazz.p0p ();
+};
+c$.$DBRefUtils$4$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$4", null, jalview.util.DBRefUtils.DbRefComp);
+Clazz.defineMethod (c$, "matches",
+function (refa, refb) {
+if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
+if (refa.getAccessionId () != null && refb.getAccessionId () != null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
+if ((refa.getMap () == null && refb.getMap () == null) || (refa.getMap () != null && refb.getMap () != null)) {
+if ((refb.getMap ().getMap () == null && refa.getMap ().getMap () == null) || (refb.getMap ().getMap () != null && refa.getMap ().getMap () != null && refb.getMap ().getMap ().getInverse ().equals (refa.getMap ().getMap ()))) {
+return true;
+}}}}return false;
+}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
+c$ = Clazz.p0p ();
+};
+c$.$DBRefUtils$5$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$5", null, jalview.util.DBRefUtils.DbRefComp);
+Clazz.defineMethod (c$, "matches",
+function (refa, refb) {
+if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
+if (refa.getAccessionId () != null && refb.getAccessionId () != null || refb.getAccessionId ().equals (refa.getAccessionId ())) {
+if (refa.getMap () == null && refb.getMap () == null) {
+return true;
+}if (refa.getMap () != null && refb.getMap () != null && ((refb.getMap ().getMap () == null && refa.getMap ().getMap () == null) || (refb.getMap ().getMap () != null && refa.getMap ().getMap () != null && refb.getMap ().getMap ().equals (refa.getMap ().getMap ())))) {
+return true;
+}}}return false;
+}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
+c$ = Clazz.p0p ();
+};
+c$.$DBRefUtils$6$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "DBRefUtils$6", null, jalview.util.DBRefUtils.DbRefComp);
+Clazz.defineMethod (c$, "matches",
+function (refa, refb) {
+if (refa.getSource () != null && refb.getSource () != null && refb.getSource ().equals (refa.getSource ())) {
+if (refa.getAccessionId () != null && refb.getAccessionId () != null && refb.getAccessionId ().equals (refa.getAccessionId ())) {
+if (refa.getMap () == null || refb.getMap () == null) {
+return true;
+}if ((refa.getMap () != null && refb.getMap () != null) && (refb.getMap ().getMap () == null && refa.getMap ().getMap () == null) || (refb.getMap ().getMap () != null && refa.getMap ().getMap () != null && (refb.getMap ().getMap ().equals (refa.getMap ().getMap ())))) {
+return true;
+}}}return false;
+}, "jalview.datamodel.DBRefEntry,jalview.datamodel.DBRefEntry");
+c$ = Clazz.p0p ();
+};
+Clazz.declareInterface (jalview.util.DBRefUtils, "DbRefComp");
+c$.canonicalSourceNameLookup = c$.prototype.canonicalSourceNameLookup = new java.util.HashMap ();
+c$.dasCoordinateSystemsLookup = c$.prototype.dasCoordinateSystemsLookup = new java.util.HashMap ();
+{
+jalview.util.DBRefUtils.canonicalSourceNameLookup.put ("uniprotkb/swiss-prot", jalview.datamodel.DBRefSource.UNIPROT);
+jalview.util.DBRefUtils.canonicalSourceNameLookup.put ("uniprotkb/trembl", jalview.datamodel.DBRefSource.UNIPROT);
+jalview.util.DBRefUtils.canonicalSourceNameLookup.put ("pdb", jalview.datamodel.DBRefSource.PDB);
+jalview.util.DBRefUtils.dasCoordinateSystemsLookup.put ("pdbresnum", jalview.datamodel.DBRefSource.PDB);
+jalview.util.DBRefUtils.dasCoordinateSystemsLookup.put ("uniprot", jalview.datamodel.DBRefSource.UNIPROT);
+jalview.util.DBRefUtils.dasCoordinateSystemsLookup.put ("embl", jalview.datamodel.DBRefSource.EMBL);
+}c$.matchNonNullonA = c$.prototype.matchNonNullonA = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$1") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$1$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$1, this, null));
+c$.matchEitherNonNull = c$.prototype.matchEitherNonNull = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$2") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$2$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$2, this, null));
+c$.matchDbAndIdAndEitherMap = c$.prototype.matchDbAndIdAndEitherMap = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$3") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$3$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$3, this, null));
+c$.matchDbAndIdAndComplementaryMapList = c$.prototype.matchDbAndIdAndComplementaryMapList = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$4") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$4$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$4, this, null));
+c$.matchDbAndIdAndEquivalentMapList = c$.prototype.matchDbAndIdAndEquivalentMapList = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$5") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$5$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$5, this, null));
+c$.matchDbAndIdAndEitherMapOrEquivalentMapList = c$.prototype.matchDbAndIdAndEitherMapOrEquivalentMapList = ((Clazz.isClassDefined ("jalview.util.DBRefUtils$6") ? 0 : jalview.util.DBRefUtils.$DBRefUtils$6$ ()), Clazz.innerTypeInstance (jalview.util.DBRefUtils$6, this, null));
+});
diff --git a/bin/jalview/util/Format.class b/bin/jalview/util/Format.class
index 43f3a99..c8b23d7 100644
Binary files a/bin/jalview/util/Format.class and b/bin/jalview/util/Format.class differ
diff --git a/bin/jalview/util/Format.js b/bin/jalview/util/Format.js
index 739add8..95a3560 100644
--- a/bin/jalview/util/Format.js
+++ b/bin/jalview/util/Format.js
@@ -1,389 +1,389 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.Format", ["java.lang.Character", "$.IllegalArgumentException", "$.StringBuffer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.width = 0;
-this.precision = 0;
-this.pre = null;
-this.post = null;
-this.leading_zeroes = false;
-this.show_plus = false;
-this.alternate = false;
-this.show_space = false;
-this.left_align = false;
-this.fmt = '\0';
-this.formatString = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "Format");
-Clazz.makeConstructor (c$,
-function (s) {
-this.formatString = s;
-this.width = 0;
-this.precision = -1;
-this.pre = "";
-this.post = "";
-this.leading_zeroes = false;
-this.show_plus = false;
-this.alternate = false;
-this.show_space = false;
-this.left_align = false;
-this.fmt = ' ';
-var length = s.length;
-var parse_state = 0;
-var i = 0;
-while (parse_state == 0) {
-if (i >= length) {
-parse_state = 5;
-} else if (s.charAt (i) == '%') {
-if (i < (length - 1)) {
-if (s.charAt (i + 1) == '%') {
-this.pre = this.pre + '%';
-i++;
-} else {
-parse_state = 1;
-}} else {
-throw new IllegalArgumentException ();
-}} else {
-this.pre = this.pre + s.charAt (i);
-}i++;
-}
-while (parse_state == 1) {
-if (i >= length) {
-parse_state = 5;
-} else if (s.charAt (i) == ' ') {
-this.show_space = true;
-} else if (s.charAt (i) == '-') {
-this.left_align = true;
-} else if (s.charAt (i) == '+') {
-this.show_plus = true;
-} else if (s.charAt (i) == '0') {
-this.leading_zeroes = true;
-} else if (s.charAt (i) == '#') {
-this.alternate = true;
-} else {
-parse_state = 2;
-i--;
-}i++;
-}
-while (parse_state == 2) {
-if (i >= length) {
-parse_state = 5;
-} else if (('0' <= s.charAt (i)) && (s.charAt (i) <= '9')) {
-this.width = ((this.width * 10) + s.charCodeAt (i)) - 48;
-i++;
-} else if (s.charAt (i) == '.') {
-parse_state = 3;
-this.precision = 0;
-i++;
-} else {
-parse_state = 4;
-}}
-while (parse_state == 3) {
-if (i >= length) {
-parse_state = 5;
-} else if (('0' <= s.charAt (i)) && (s.charAt (i) <= '9')) {
-this.precision = ((this.precision * 10) + s.charCodeAt (i)) - 48;
-i++;
-} else {
-parse_state = 4;
-}}
-if (parse_state == 4) {
-if (i >= length) {
-parse_state = 5;
-} else {
-this.fmt = s.charAt (i);
-}i++;
-}if (i < length) {
-this.post = s.substring (i, length);
-}}, "~S");
-c$.getHexString = Clazz.defineMethod (c$, "getHexString",
-function (color) {
-var r;
-var g;
-var b;
-r = Integer.toHexString (color.getRed ());
-if (r.length < 2) {
-r = "0" + r;
-}g = Integer.toHexString (color.getGreen ());
-if (g.length < 2) {
-g = "0" + g;
-}b = Integer.toHexString (color.getBlue ());
-if (b.length < 2) {
-b = "0" + b;
-}return r + g + b;
-}, "java.awt.Color");
-c$.printDouble = Clazz.defineMethod (c$, "printDouble",
-function (s, fmt, x) {
-s.print ( new jalview.util.Format (fmt).formDouble (x));
-}, "java.io.PrintStream,~S,~N");
-c$.printLong = Clazz.defineMethod (c$, "printLong",
-function (s, fmt, x) {
-s.print ( new jalview.util.Format (fmt).formLong (x));
-}, "java.io.PrintStream,~S,~N");
-c$.printChar = Clazz.defineMethod (c$, "printChar",
-function (s, fmt, x) {
-s.print ( new jalview.util.Format (fmt).formChar (x));
-}, "java.io.PrintStream,~S,~S");
-c$.print = Clazz.defineMethod (c$, "print",
-function (s, fmt, x) {
-s.print ( new jalview.util.Format (fmt).form (x));
-}, "java.io.PrintStream,~S,~S");
-c$.atoi = Clazz.defineMethod (c$, "atoi",
-function (s) {
-return jalview.util.Format.atol (s);
-}, "~S");
-c$.atol = Clazz.defineMethod (c$, "atol",
-function (s) {
-var i = 0;
-while ((i < s.length) && Character.isWhitespace (s.charAt (i))) {
-i++;
-}
-if ((i < s.length) && (s.charAt (i) == '0')) {
-if (((i + 1) < s.length) && ((s.charAt (i + 1) == 'x') || (s.charAt (i + 1) == 'X'))) {
-return jalview.util.Format.parseLong (s.substring (i + 2), 16);
-} else {
-return jalview.util.Format.parseLong (s, 8);
-}} else {
-return jalview.util.Format.parseLong (s, 10);
-}}, "~S");
-c$.parseLong = Clazz.defineMethod (c$, "parseLong",
-($fz = function (s, base) {
-var i = 0;
-var sign = 1;
-var r = 0;
-while ((i < s.length) && Character.isWhitespace (s.charAt (i))) {
-i++;
-}
-if ((i < s.length) && (s.charAt (i) == '-')) {
-sign = -1;
-i++;
-} else if ((i < s.length) && (s.charAt (i) == '+')) {
-i++;
-}while (i < s.length) {
-var ch = s.charAt (i);
-if (('0' <= ch) && (ch.charCodeAt (0) < (48 + base))) {
-r = ((r * base) + ch.charCodeAt (0)) - 48;
-} else if (('A' <= ch) && (ch.charCodeAt (0) < ((65 + base) - 10))) {
-r = ((r * base) + ch.charCodeAt (0)) - 65 + 10;
-} else if (('a' <= ch) && (ch.charCodeAt (0) < ((97 + base) - 10))) {
-r = ((r * base) + ch.charCodeAt (0)) - 97 + 10;
-} else {
-return r * sign;
-}i++;
-}
-return r * sign;
-}, $fz.isPrivate = true, $fz), "~S,~N");
-c$.atof = Clazz.defineMethod (c$, "atof",
-function (s) {
-var i = 0;
-var sign = 1;
-var r = 0;
-var p = 1;
-var state = 0;
-while ((i < s.length) && Character.isWhitespace (s.charAt (i))) {
-i++;
-}
-if ((i < s.length) && (s.charAt (i) == '-')) {
-sign = -1;
-i++;
-} else if ((i < s.length) && (s.charAt (i) == '+')) {
-i++;
-}while (i < s.length) {
-var ch = s.charAt (i);
-if (('0' <= ch) && (ch <= '9')) {
-if (state == 0) {
-r = ((r * 10) + ch.charCodeAt (0)) - 48;
-} else if (state == 1) {
-p = p / 10;
-r = r + (p * (ch.charCodeAt (0) - 48));
-}} else if (ch == '.') {
-if (state == 0) {
-state = 1;
-} else {
-return sign * r;
-}} else if ((ch == 'e') || (ch == 'E')) {
-var e = jalview.util.Format.parseLong (s.substring (i + 1), 10);
-return sign * r * Math.pow (10, e);
-} else {
-return sign * r;
-}i++;
-}
-return sign * r;
-}, "~S");
-Clazz.defineMethod (c$, "formDouble",
-function (x) {
-var r;
-if (this.precision < 0) {
-this.precision = 6;
-}var s = 1;
-if (x < 0) {
-x = -x;
-s = -1;
-}if (this.fmt == 'f') {
-r = this.fixed_format (x);
-} else if ((this.fmt == 'e') || (this.fmt == 'E') || (this.fmt == 'g') || (this.fmt == 'G')) {
-r = this.exp_format (x);
-} else {
-throw new IllegalArgumentException ();
-}return this.pad (this.sign (s, r));
-}, "~N");
-Clazz.defineMethod (c$, "formLong",
-function (x) {
-var r;
-var s = 0;
-if ((this.fmt == 'd') || (this.fmt == 'i')) {
-if (x < 0) {
-r = ("" + x).substring (1);
-s = -1;
-} else {
-r = "" + x;
-s = 1;
-}} else if (this.fmt == 'o') {
-r = jalview.util.Format.convert (x, 3, 7, "01234567");
-} else if (this.fmt == 'x') {
-r = jalview.util.Format.convert (x, 4, 15, "0123456789abcdef");
-} else if (this.fmt == 'X') {
-r = jalview.util.Format.convert (x, 4, 15, "0123456789ABCDEF");
-} else {
-throw new IllegalArgumentException ();
-}return this.pad (this.sign (s, r));
-}, "~N");
-Clazz.defineMethod (c$, "formChar",
-function (c) {
-if (this.fmt != 'c') {
-throw new IllegalArgumentException ();
-}var r = "" + c;
-return this.pad (r);
-}, "~S");
-Clazz.defineMethod (c$, "form",
-function (s) {
-if (this.fmt != 's') {
-throw new IllegalArgumentException ();
-}if (this.precision >= 0) {
-s = s.substring (0, this.precision);
-}return this.pad (s);
-}, "~S");
-c$.repeat = Clazz.defineMethod (c$, "repeat",
-($fz = function (c, n) {
-if (n <= 0) {
-return "";
-}var s = new StringBuffer (n);
-for (var i = 0; i < n; i++) {
-s.append (c);
-}
-return s.toString ();
-}, $fz.isPrivate = true, $fz), "~S,~N");
-c$.convert = Clazz.defineMethod (c$, "convert",
-($fz = function (x, n, m, d) {
-if (x == 0) {
-return "0";
-}var r = "";
-while (x != 0) {
-r = d.charAt ((x & m)) + r;
-x = x >>> n;
-}
-return r;
-}, $fz.isPrivate = true, $fz), "~N,~N,~N,~S");
-Clazz.defineMethod (c$, "pad",
-($fz = function (r) {
-var p = jalview.util.Format.repeat (' ', this.width - r.length);
-if (this.left_align) {
-return this.pre + r + p + this.post;
-} else {
-return this.pre + p + r + this.post;
-}}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "sign",
-($fz = function (s, r) {
-var p = "";
-if (s < 0) {
-p = "-";
-} else if (s > 0) {
-if (this.show_plus) {
-p = "+";
-} else if (this.show_space) {
-p = " ";
-}} else {
-if ((this.fmt == 'o') && this.alternate && (r.length > 0) && (r.charAt (0) != '0')) {
-p = "0";
-} else if ((this.fmt == 'x') && this.alternate) {
-p = "0x";
-} else if ((this.fmt == 'X') && this.alternate) {
-p = "0X";
-}}var w = 0;
-if (this.leading_zeroes) {
-w = this.width;
-} else if (((this.fmt == 'd') || (this.fmt == 'i') || (this.fmt == 'x') || (this.fmt == 'X') || (this.fmt == 'o')) && (this.precision > 0)) {
-w = this.precision;
-}return p + jalview.util.Format.repeat ('0', w - p.length - r.length) + r;
-}, $fz.isPrivate = true, $fz), "~N,~S");
-Clazz.defineMethod (c$, "fixed_format",
-($fz = function (d) {
-var removeTrailing = ((this.fmt == 'G') || (this.fmt == 'g')) && !this.alternate;
-if (d > 0x7FFFFFFFFFFFFFFF) {
-return this.exp_format (d);
-}if (this.precision == 0) {
-return Clazz.doubleToLong (d + 0.5) + (removeTrailing ? "" : ".");
-}var whole = Clazz.doubleToLong (d);
-var fr = d - whole;
-if ((fr >= 1) || (fr < 0)) {
-return this.exp_format (d);
-}var factor = 1;
-var leading_zeroes = "";
-for (var i = 1; (i <= this.precision) && (factor <= 0x7FFFFFFFFFFFFFFF); i++) {
-factor *= 10;
-leading_zeroes = leading_zeroes + "0";
-}
-var l = Clazz.doubleToLong ((factor * fr) + 0.5);
-if (l >= factor) {
-l = 0;
-whole++;
-}var z = leading_zeroes + l;
-z = "." + z.substring (z.length - this.precision, z.length);
-if (removeTrailing) {
-var t = z.length - 1;
-while ((t >= 0) && (z.charAt (t) == '0')) {
-t--;
-}
-if ((t >= 0) && (z.charAt (t) == '.')) {
-t--;
-}z = z.substring (0, t + 1);
-}return whole + z;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "exp_format",
-($fz = function (d) {
-var f = "";
-var e = 0;
-var dd = d;
-var factor = 1;
-if (d != 0) {
-while (dd > 10) {
-e++;
-factor /= 10;
-dd = dd / 10;
-}
-while (dd < 1) {
-e--;
-factor *= 10;
-dd = dd * 10;
-}
-}if (((this.fmt == 'g') || (this.fmt == 'G')) && (e >= -4) && (e < this.precision)) {
-return this.fixed_format (d);
-}d = d * factor;
-f = f + this.fixed_format (d);
-if ((this.fmt == 'e') || (this.fmt == 'g')) {
-f = f + "e";
-} else {
-f = f + "E";
-}var p = "000";
-if (e >= 0) {
-f = f + "+";
-p = p + e;
-} else {
-f = f + "-";
-p = p + (-e);
-}return f + p.substring (p.length - 3, p.length);
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.formatString;
-});
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.Format", ["java.lang.Character", "$.IllegalArgumentException", "$.StringBuffer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.width = 0;
+this.precision = 0;
+this.pre = null;
+this.post = null;
+this.leading_zeroes = false;
+this.show_plus = false;
+this.alternate = false;
+this.show_space = false;
+this.left_align = false;
+this.fmt = '\0';
+this.formatString = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util, "Format");
+Clazz.makeConstructor (c$,
+function (s) {
+this.formatString = s;
+this.width = 0;
+this.precision = -1;
+this.pre = "";
+this.post = "";
+this.leading_zeroes = false;
+this.show_plus = false;
+this.alternate = false;
+this.show_space = false;
+this.left_align = false;
+this.fmt = ' ';
+var length = s.length;
+var parse_state = 0;
+var i = 0;
+while (parse_state == 0) {
+if (i >= length) {
+parse_state = 5;
+} else if (s.charAt (i) == '%') {
+if (i < (length - 1)) {
+if (s.charAt (i + 1) == '%') {
+this.pre = this.pre + '%';
+i++;
+} else {
+parse_state = 1;
+}} else {
+throw new IllegalArgumentException ();
+}} else {
+this.pre = this.pre + s.charAt (i);
+}i++;
+}
+while (parse_state == 1) {
+if (i >= length) {
+parse_state = 5;
+} else if (s.charAt (i) == ' ') {
+this.show_space = true;
+} else if (s.charAt (i) == '-') {
+this.left_align = true;
+} else if (s.charAt (i) == '+') {
+this.show_plus = true;
+} else if (s.charAt (i) == '0') {
+this.leading_zeroes = true;
+} else if (s.charAt (i) == '#') {
+this.alternate = true;
+} else {
+parse_state = 2;
+i--;
+}i++;
+}
+while (parse_state == 2) {
+if (i >= length) {
+parse_state = 5;
+} else if (('0' <= s.charAt (i)) && (s.charAt (i) <= '9')) {
+this.width = ((this.width * 10) + s.charCodeAt (i)) - 48;
+i++;
+} else if (s.charAt (i) == '.') {
+parse_state = 3;
+this.precision = 0;
+i++;
+} else {
+parse_state = 4;
+}}
+while (parse_state == 3) {
+if (i >= length) {
+parse_state = 5;
+} else if (('0' <= s.charAt (i)) && (s.charAt (i) <= '9')) {
+this.precision = ((this.precision * 10) + s.charCodeAt (i)) - 48;
+i++;
+} else {
+parse_state = 4;
+}}
+if (parse_state == 4) {
+if (i >= length) {
+parse_state = 5;
+} else {
+this.fmt = s.charAt (i);
+}i++;
+}if (i < length) {
+this.post = s.substring (i, length);
+}}, "~S");
+c$.getHexString = Clazz.defineMethod (c$, "getHexString",
+function (color) {
+var r;
+var g;
+var b;
+r = Integer.toHexString (color.getRed ());
+if (r.length < 2) {
+r = "0" + r;
+}g = Integer.toHexString (color.getGreen ());
+if (g.length < 2) {
+g = "0" + g;
+}b = Integer.toHexString (color.getBlue ());
+if (b.length < 2) {
+b = "0" + b;
+}return r + g + b;
+}, "java.awt.Color");
+c$.printDouble = Clazz.defineMethod (c$, "printDouble",
+function (s, fmt, x) {
+s.print ( new jalview.util.Format (fmt).formDouble (x));
+}, "java.io.PrintStream,~S,~N");
+c$.printLong = Clazz.defineMethod (c$, "printLong",
+function (s, fmt, x) {
+s.print ( new jalview.util.Format (fmt).formLong (x));
+}, "java.io.PrintStream,~S,~N");
+c$.printChar = Clazz.defineMethod (c$, "printChar",
+function (s, fmt, x) {
+s.print ( new jalview.util.Format (fmt).formChar (x));
+}, "java.io.PrintStream,~S,~S");
+c$.print = Clazz.defineMethod (c$, "print",
+function (s, fmt, x) {
+s.print ( new jalview.util.Format (fmt).form (x));
+}, "java.io.PrintStream,~S,~S");
+c$.atoi = Clazz.defineMethod (c$, "atoi",
+function (s) {
+return jalview.util.Format.atol (s);
+}, "~S");
+c$.atol = Clazz.defineMethod (c$, "atol",
+function (s) {
+var i = 0;
+while ((i < s.length) && Character.isWhitespace (s.charAt (i))) {
+i++;
+}
+if ((i < s.length) && (s.charAt (i) == '0')) {
+if (((i + 1) < s.length) && ((s.charAt (i + 1) == 'x') || (s.charAt (i + 1) == 'X'))) {
+return jalview.util.Format.parseLong (s.substring (i + 2), 16);
+} else {
+return jalview.util.Format.parseLong (s, 8);
+}} else {
+return jalview.util.Format.parseLong (s, 10);
+}}, "~S");
+c$.parseLong = Clazz.defineMethod (c$, "parseLong",
+($fz = function (s, base) {
+var i = 0;
+var sign = 1;
+var r = 0;
+while ((i < s.length) && Character.isWhitespace (s.charAt (i))) {
+i++;
+}
+if ((i < s.length) && (s.charAt (i) == '-')) {
+sign = -1;
+i++;
+} else if ((i < s.length) && (s.charAt (i) == '+')) {
+i++;
+}while (i < s.length) {
+var ch = s.charAt (i);
+if (('0' <= ch) && (ch.charCodeAt (0) < (48 + base))) {
+r = ((r * base) + ch.charCodeAt (0)) - 48;
+} else if (('A' <= ch) && (ch.charCodeAt (0) < ((65 + base) - 10))) {
+r = ((r * base) + ch.charCodeAt (0)) - 65 + 10;
+} else if (('a' <= ch) && (ch.charCodeAt (0) < ((97 + base) - 10))) {
+r = ((r * base) + ch.charCodeAt (0)) - 97 + 10;
+} else {
+return r * sign;
+}i++;
+}
+return r * sign;
+}, $fz.isPrivate = true, $fz), "~S,~N");
+c$.atof = Clazz.defineMethod (c$, "atof",
+function (s) {
+var i = 0;
+var sign = 1;
+var r = 0;
+var p = 1;
+var state = 0;
+while ((i < s.length) && Character.isWhitespace (s.charAt (i))) {
+i++;
+}
+if ((i < s.length) && (s.charAt (i) == '-')) {
+sign = -1;
+i++;
+} else if ((i < s.length) && (s.charAt (i) == '+')) {
+i++;
+}while (i < s.length) {
+var ch = s.charAt (i);
+if (('0' <= ch) && (ch <= '9')) {
+if (state == 0) {
+r = ((r * 10) + ch.charCodeAt (0)) - 48;
+} else if (state == 1) {
+p = p / 10;
+r = r + (p * (ch.charCodeAt (0) - 48));
+}} else if (ch == '.') {
+if (state == 0) {
+state = 1;
+} else {
+return sign * r;
+}} else if ((ch == 'e') || (ch == 'E')) {
+var e = jalview.util.Format.parseLong (s.substring (i + 1), 10);
+return sign * r * Math.pow (10, e);
+} else {
+return sign * r;
+}i++;
+}
+return sign * r;
+}, "~S");
+Clazz.defineMethod (c$, "formDouble",
+function (x) {
+var r;
+if (this.precision < 0) {
+this.precision = 6;
+}var s = 1;
+if (x < 0) {
+x = -x;
+s = -1;
+}if (this.fmt == 'f') {
+r = this.fixed_format (x);
+} else if ((this.fmt == 'e') || (this.fmt == 'E') || (this.fmt == 'g') || (this.fmt == 'G')) {
+r = this.exp_format (x);
+} else {
+throw new IllegalArgumentException ();
+}return this.pad (this.sign (s, r));
+}, "~N");
+Clazz.defineMethod (c$, "formLong",
+function (x) {
+var r;
+var s = 0;
+if ((this.fmt == 'd') || (this.fmt == 'i')) {
+if (x < 0) {
+r = ("" + x).substring (1);
+s = -1;
+} else {
+r = "" + x;
+s = 1;
+}} else if (this.fmt == 'o') {
+r = jalview.util.Format.convert (x, 3, 7, "01234567");
+} else if (this.fmt == 'x') {
+r = jalview.util.Format.convert (x, 4, 15, "0123456789abcdef");
+} else if (this.fmt == 'X') {
+r = jalview.util.Format.convert (x, 4, 15, "0123456789ABCDEF");
+} else {
+throw new IllegalArgumentException ();
+}return this.pad (this.sign (s, r));
+}, "~N");
+Clazz.defineMethod (c$, "formChar",
+function (c) {
+if (this.fmt != 'c') {
+throw new IllegalArgumentException ();
+}var r = "" + c;
+return this.pad (r);
+}, "~S");
+Clazz.defineMethod (c$, "form",
+function (s) {
+if (this.fmt != 's') {
+throw new IllegalArgumentException ();
+}if (this.precision >= 0) {
+s = s.substring (0, this.precision);
+}return this.pad (s);
+}, "~S");
+c$.repeat = Clazz.defineMethod (c$, "repeat",
+($fz = function (c, n) {
+if (n <= 0) {
+return "";
+}var s = new StringBuffer (n);
+for (var i = 0; i < n; i++) {
+s.append (c);
+}
+return s.toString ();
+}, $fz.isPrivate = true, $fz), "~S,~N");
+c$.convert = Clazz.defineMethod (c$, "convert",
+($fz = function (x, n, m, d) {
+if (x == 0) {
+return "0";
+}var r = "";
+while (x != 0) {
+r = d.charAt ((x & m)) + r;
+x = x >>> n;
+}
+return r;
+}, $fz.isPrivate = true, $fz), "~N,~N,~N,~S");
+Clazz.defineMethod (c$, "pad",
+($fz = function (r) {
+var p = jalview.util.Format.repeat (' ', this.width - r.length);
+if (this.left_align) {
+return this.pre + r + p + this.post;
+} else {
+return this.pre + p + r + this.post;
+}}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "sign",
+($fz = function (s, r) {
+var p = "";
+if (s < 0) {
+p = "-";
+} else if (s > 0) {
+if (this.show_plus) {
+p = "+";
+} else if (this.show_space) {
+p = " ";
+}} else {
+if ((this.fmt == 'o') && this.alternate && (r.length > 0) && (r.charAt (0) != '0')) {
+p = "0";
+} else if ((this.fmt == 'x') && this.alternate) {
+p = "0x";
+} else if ((this.fmt == 'X') && this.alternate) {
+p = "0X";
+}}var w = 0;
+if (this.leading_zeroes) {
+w = this.width;
+} else if (((this.fmt == 'd') || (this.fmt == 'i') || (this.fmt == 'x') || (this.fmt == 'X') || (this.fmt == 'o')) && (this.precision > 0)) {
+w = this.precision;
+}return p + jalview.util.Format.repeat ('0', w - p.length - r.length) + r;
+}, $fz.isPrivate = true, $fz), "~N,~S");
+Clazz.defineMethod (c$, "fixed_format",
+($fz = function (d) {
+var removeTrailing = ((this.fmt == 'G') || (this.fmt == 'g')) && !this.alternate;
+if (d > 0x7FFFFFFFFFFFFFFF) {
+return this.exp_format (d);
+}if (this.precision == 0) {
+return Clazz.doubleToLong (d + 0.5) + (removeTrailing ? "" : ".");
+}var whole = Clazz.doubleToLong (d);
+var fr = d - whole;
+if ((fr >= 1) || (fr < 0)) {
+return this.exp_format (d);
+}var factor = 1;
+var leading_zeroes = "";
+for (var i = 1; (i <= this.precision) && (factor <= 0x7FFFFFFFFFFFFFFF); i++) {
+factor *= 10;
+leading_zeroes = leading_zeroes + "0";
+}
+var l = Clazz.doubleToLong ((factor * fr) + 0.5);
+if (l >= factor) {
+l = 0;
+whole++;
+}var z = leading_zeroes + l;
+z = "." + z.substring (z.length - this.precision, z.length);
+if (removeTrailing) {
+var t = z.length - 1;
+while ((t >= 0) && (z.charAt (t) == '0')) {
+t--;
+}
+if ((t >= 0) && (z.charAt (t) == '.')) {
+t--;
+}z = z.substring (0, t + 1);
+}return whole + z;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "exp_format",
+($fz = function (d) {
+var f = "";
+var e = 0;
+var dd = d;
+var factor = 1;
+if (d != 0) {
+while (dd > 10) {
+e++;
+factor /= 10;
+dd = dd / 10;
+}
+while (dd < 1) {
+e--;
+factor *= 10;
+dd = dd * 10;
+}
+}if (((this.fmt == 'g') || (this.fmt == 'G')) && (e >= -4) && (e < this.precision)) {
+return this.fixed_format (d);
+}d = d * factor;
+f = f + this.fixed_format (d);
+if ((this.fmt == 'e') || (this.fmt == 'g')) {
+f = f + "e";
+} else {
+f = f + "E";
+}var p = "000";
+if (e >= 0) {
+f = f + "+";
+p = p + e;
+} else {
+f = f + "-";
+p = p + (-e);
+}return f + p.substring (p.length - 3, p.length);
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.formatString;
+});
+});
diff --git a/bin/jalview/util/GroupUrlLink.class b/bin/jalview/util/GroupUrlLink.class
index 8eab61a..c9f543d 100644
Binary files a/bin/jalview/util/GroupUrlLink.class and b/bin/jalview/util/GroupUrlLink.class differ
diff --git a/bin/jalview/util/GroupUrlLink.js b/bin/jalview/util/GroupUrlLink.js
index c6f0e7e..5535c1f 100644
--- a/bin/jalview/util/GroupUrlLink.js
+++ b/bin/jalview/util/GroupUrlLink.js
@@ -1,363 +1,363 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.lang.Exception"], "jalview.util.GroupUrlLink", ["jalview.jsdev.RegExp", "jalview.util.MessageManager", "$.Platform", "$.QuickSort", "java.lang.Error", "$.StringBuffer", "java.util.Hashtable"], function () {
-c$ = Clazz.decorateAsClass (function () {
-if (!Clazz.isClassDefined ("jalview.util.GroupUrlLink.UrlStringTooLongException")) {
-jalview.util.GroupUrlLink.$GroupUrlLink$UrlStringTooLongException$ ();
-}
-this.url_prefix = null;
-this.target = null;
-this.label = null;
-this.url_suffix = null;
-this.separators = null;
-this.regexReplace = null;
-this.invalidMessage = null;
-this.segs = null;
-this.mtch = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "GroupUrlLink");
-Clazz.makeConstructor (c$,
-function (link) {
-var sep = link.indexOf ("|");
-this.segs = Clazz.newIntArray (jalview.util.GroupUrlLink.tokens.length, 0);
-var ntoks = 0;
-for (var i = 0; i < this.segs.length; i++) {
-if ((this.segs[i] = link.indexOf ("$" + jalview.util.GroupUrlLink.tokens[i])) > -1) {
-ntoks++;
-}}
-if (ntoks == 0) {
-this.invalidMessage = "Group URL string must contain at least one of ";
-for (var i = 0; i < this.segs.length; i++) {
-this.invalidMessage += " '$" + jalview.util.GroupUrlLink.tokens[i] + "[=/regex=/]$'";
-}
-return;
-}var ptok = Clazz.newIntArray (ntoks + 1, 0);
-var tmtch = new Array (ntoks + 1);
-this.mtch = new Array (ntoks);
-for (var i = 0, t = 0; i < this.segs.length; i++) {
-if (this.segs[i] > -1) {
-ptok[t] = this.segs[i];
-tmtch[t++] = jalview.util.GroupUrlLink.tokens[i];
-}}
-ptok[ntoks] = link.length;
-tmtch[ntoks] = "$$$$$$$$$";
-jalview.util.QuickSort.sortInt (ptok, tmtch);
-for (var i = 0; i < ntoks; i++) {
-this.mtch[i] = tmtch[i];
-}
-var p = sep;
-do {
-sep = p;
-p = link.indexOf ("|", sep + 1);
-} while (p > sep && p < ptok[0]);
-this.label = link.substring (0, sep);
-if (this.label.indexOf ("|") > -1) {
-this.target = this.label.substring (0, this.label.indexOf ("|"));
-} else if (this.label.indexOf (" ") > 2) {
-this.target = this.label.substring (0, this.label.indexOf (" "));
-} else {
-this.target = this.label;
-}this.url_prefix = link.substring (sep + 1, ptok[0]);
-this.url_suffix = new Array (this.mtch.length);
-this.regexReplace = new Array (this.mtch.length);
-for (var pass = 0; pass < this.mtch.length; pass++) {
-var mlength = 3 + this.mtch[pass].length;
-if (link.indexOf ("$" + this.mtch[pass] + "=/") == ptok[pass] && (p = link.indexOf ("/=$", ptok[pass] + mlength)) > ptok[pass] + mlength) {
-if (ptok[pass + 1] < p + 3) {
-this.invalidMessage = "Token regexes cannot contain other regexes (did you terminate the $" + this.mtch[pass] + " regex with a '/=$' ?";
-return;
-}this.url_suffix[pass] = link.substring (p + 3, ptok[pass + 1]);
-this.regexReplace[pass] = link.substring (ptok[pass] + mlength, p);
-try {
-var rg = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace[pass] + "/");
-if (rg == null) {
-this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace[pass] + "'\n";
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace[pass] + "'\n";
-} else {
-throw e;
-}
-}
-} else {
-this.regexReplace[pass] = null;
-if ((p = link.indexOf ("$" + this.mtch[pass] + "$")) == ptok[pass]) {
-this.url_suffix[pass] = link.substring (p + this.mtch[pass].length + 2, ptok[pass + 1]);
-} else {
-this.invalidMessage = "Warning: invalid regex structure (after '" + this.mtch[0] + "') for URL link : " + link;
-}}}
-var pass = 0;
-this.separators = new Array (this.url_suffix.length);
-var suffices = this.url_suffix[this.url_suffix.length - 1];
-var lastsep = ",";
-while ((p = suffices.indexOf ('|')) > -1) {
-this.separators[pass] = suffices.substring (p + 1);
-if (pass == 0) {
-this.url_suffix[this.url_suffix.length - 1] = suffices.substring (0, p);
-} else {
-lastsep = (this.separators[pass - 1] = this.separators[pass - 1].substring (0, p));
-}suffices = this.separators[pass];
-pass++;
-}
-if (pass > 0) {
-lastsep = this.separators[pass - 1];
-}while (pass < this.separators.length) {
-this.separators[pass++] = lastsep;
-}
-}, "~S");
-Clazz.defineMethod (c$, "getUrl_suffix",
-function () {
-return this.url_suffix[this.url_suffix.length - 1];
-});
-Clazz.defineMethod (c$, "getUrl_prefix",
-function () {
-return this.url_prefix;
-});
-Clazz.defineMethod (c$, "getTarget",
-function () {
-return this.target;
-});
-Clazz.defineMethod (c$, "getLabel",
-function () {
-return this.label;
-});
-Clazz.defineMethod (c$, "getIDRegexReplace",
-function () {
-return this._replaceFor (jalview.util.GroupUrlLink.tokens[0]);
-});
-Clazz.defineMethod (c$, "_replaceFor",
-($fz = function (token) {
-for (var i = 0; i < this.mtch.length; i++) {
-if (this.segs[i] > -1 && this.mtch[i].equals (token)) {
-return this.regexReplace[i];
-}}
-return null;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "getSeqRegexReplace",
-function () {
-return this._replaceFor (jalview.util.GroupUrlLink.tokens[1]);
-});
-Clazz.defineMethod (c$, "getInvalidMessage",
-function () {
-return this.invalidMessage;
-});
-Clazz.defineMethod (c$, "isValid",
-function () {
-return this.invalidMessage == null;
-});
-Clazz.defineMethod (c$, "makeUrls",
-function (idstrings, seqstrings, dsstring, onlyIfMatches) {
-var rstrings = this.replacementArgs (idstrings, seqstrings, dsstring);
-return this.makeUrls (rstrings, onlyIfMatches);
-}, "~A,~A,~S,~B");
-Clazz.defineMethod (c$, "replacementArgs",
-($fz = function (idstrings, seqstrings, dsstring) {
-var rstrings = new java.util.Hashtable ();
-rstrings.put (jalview.util.GroupUrlLink.tokens[0], idstrings);
-rstrings.put (jalview.util.GroupUrlLink.tokens[1], seqstrings);
-rstrings.put (jalview.util.GroupUrlLink.tokens[2], Clazz.newArray (-1, [dsstring]));
-if (idstrings.length != seqstrings.length) {
-throw new Error (jalview.util.MessageManager.getString ("error.idstring_seqstrings_only_one_per_sequence"));
-}return rstrings;
-}, $fz.isPrivate = true, $fz), "~A,~A,~S");
-Clazz.defineMethod (c$, "makeUrls",
-function (repstrings, onlyIfMatches) {
-return this.makeUrlsIf (true, repstrings, onlyIfMatches);
-}, "java.util.Hashtable,~B");
-Clazz.defineMethod (c$, "makeUrlStubs",
-function (ids, seqstr, string, b) {
-var rstrings = this.replacementArgs (ids, seqstr, string);
-var stubs = this.makeUrlsIf (false, rstrings, b);
-if (stubs != null) {
-return Clazz.newArray (-1, [stubs[0], stubs[1], rstrings, Clazz.newBooleanArray (-1, [b])]);
-}return null;
-}, "~A,~A,~S,~B");
-Clazz.defineMethod (c$, "constructFrom",
-function (stubs) {
-var results = this.makeUrlsIf (true, stubs[2], (stubs[3])[0]);
-return (results[3])[0];
-}, "~A");
-Clazz.defineMethod (c$, "makeUrlsIf",
-function (createFullUrl, repstrings, onlyIfMatches) {
-var pass = 0;
-var idseq = new Array (this.mtch.length);
-var mins = 0;
-var maxs = 0;
-for (var i = 0; i < this.mtch.length; i++) {
-idseq[i] = repstrings.get (this.mtch[i]);
-if (idseq[i].length >= 1) {
-if (mins == 0 && idseq[i].length == 1) {
-mins = 1;
-}if (maxs < 2) {
-maxs = idseq[i].length;
-} else {
-if (maxs != idseq[i].length) {
-throw new Error (jalview.util.MessageManager.formatMessage ("error.cannot_have_mixed_length_replacement_vectors", Clazz.newArray (-1, [(this.mtch[i]), Integer.$valueOf (idseq[i].length).toString (), Integer.$valueOf (maxs).toString ()])));
-}}} else {
-throw new Error (jalview.util.MessageManager.getString ("error.cannot_have_zero_length_vector_replacement_strings"));
-}}
-var matched = new Array (idseq.length);
-var rgxs = new Array (matched.length);
-for (pass = 0; pass < matched.length; pass++) {
-matched[pass] = new StringBuffer ();
-if (this.regexReplace[pass] != null) {
-rgxs[pass] = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace[pass] + "/");
-} else {
-rgxs[pass] = null;
-}}
-var urllength = this.url_prefix.length;
-for (pass = 0; pass < matched.length; pass++) {
-urllength += this.url_suffix[pass].length;
-}
-var thismatched = Clazz.newBooleanArray (maxs, false);
-var seqsmatched = 0;
-for (var sq = 0; sq < maxs; sq++) {
-thismatched[sq] = false;
-var thematches = new Array (rgxs.length);
-for (pass = 0; pass < rgxs.length; pass++) {
-thematches[pass] = new StringBuffer ();
-if (idseq[pass].length <= sq) {
-continue;
-}if (rgxs[pass] != null) {
-var rg = rgxs[pass];
-var rematchat = 0;
-while (rg.searchFrom (idseq[pass][sq], rematchat)) {
-rematchat = rg.matchedTo ();
-thismatched[sq] = new Boolean (thismatched[sq] | true).valueOf ();
-urllength += rg.charsMatched ();
-if ((urllength + 32) > jalview.util.Platform.getMaxCommandLineLength ()) {
-throw Clazz.innerTypeInstance (jalview.util.GroupUrlLink.UrlStringTooLongException, this, null, urllength);
-}if (!createFullUrl) {
-continue;
-}var ns = rg.numSubs ();
-if (ns == 0) {
-thematches[pass].append (rg.stringMatched ());
-} else {
-var subs = new StringBuffer ();
-var s = 0;
-while (s <= ns) {
-if (s + 1 <= ns && rg.matchedToI (s) > -1 && rg.matchedToI (s + 1) > -1 && rg.matchedToI (s + 1) < rg.matchedToI (s)) {
-var r = s + 1;
-var rmtch = new StringBuffer ();
-while (r <= ns && rg.matchedToI (r) <= rg.matchedToI (s)) {
-if (rg.matchedFromI (r) > -1) {
-rmtch.append (rg.stringMatchedI (r));
-}r++;
-}
-if (rmtch.length () > 0) {
-subs.append (rmtch);
-}s = r;
-} else {
-if (rg.matchedFromI (s) > -1) {
-subs.append (rg.stringMatchedI (s));
-}s++;
-}}
-thematches[pass].append (subs);
-}}
-} else {
-if (!onlyIfMatches) {
-thismatched[sq] = new Boolean (thismatched[sq] | true).valueOf ();
-urllength += idseq[pass][sq].length;
-if (createFullUrl) {
-thematches[pass] = new StringBuffer (idseq[pass][sq]);
-}}}}
-if (thismatched[sq]) {
-if (createFullUrl) {
-for (pass = 0; pass < matched.length; pass++) {
-if (idseq[pass].length > 1 && matched[pass].length () > 0) {
-matched[pass].append (this.separators[pass]);
-}matched[pass].append (thematches[pass]);
-}
-}seqsmatched++;
-}}
-if (seqsmatched == 0 || (createFullUrl && matched[0].length () == 0)) {
-return null;
-}if ((urllength + 32) > jalview.util.Platform.getMaxCommandLineLength ()) {
-throw Clazz.innerTypeInstance (jalview.util.GroupUrlLink.UrlStringTooLongException, this, null, urllength);
-}if (!createFullUrl) {
-return Clazz.newArray (-1, [ Clazz.newIntArray (-1, [seqsmatched]), thismatched]);
-}var submiturl = new StringBuffer ();
-submiturl.append (this.url_prefix);
-for (pass = 0; pass < matched.length; pass++) {
-submiturl.append (matched[pass]);
-if (this.url_suffix[pass] != null) {
-submiturl.append (this.url_suffix[pass]);
-}}
-return Clazz.newArray (-1, [ Clazz.newIntArray (-1, [seqsmatched]), thismatched, matched, Clazz.newArray (-1, [submiturl.toString ()])]);
-}, "~B,java.util.Hashtable,~B");
-Clazz.defineMethod (c$, "getNumberInvolved",
-function (urlstub) {
-return (urlstub[0])[0];
-}, "~A");
-Clazz.defineMethod (c$, "getGroupURLType",
-function () {
-var r = 0;
-for (var pass = 0; pass < jalview.util.GroupUrlLink.tokens.length; pass++) {
-for (var i = 0; i < this.mtch.length; i++) {
-if (this.mtch[i].equals (jalview.util.GroupUrlLink.tokens[pass])) {
-r += 1 << pass;
-}}
-}
-return r;
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-var result = new StringBuffer ();
-result.append (this.label + "|" + this.url_prefix);
-var r;
-for (r = 0; r < this.url_suffix.length; r++) {
-result.append ("$");
-result.append (this.mtch[r]);
-if (this.regexReplace[r] != null) {
-result.append ("=/");
-result.append (this.regexReplace[r]);
-result.append ("/=");
-}result.append ("$");
-result.append (this.url_suffix[r]);
-}
-for (r = 0; r < this.separators.length; r++) {
-result.append ("|");
-result.append (this.separators[r]);
-}
-return result.toString ();
-});
-c$.formStrings = Clazz.defineMethod (c$, "formStrings",
-function (seqs) {
-var idset = Clazz.newArray (2, seqs.length, null);
-for (var i = 0; i < seqs.length; i++) {
-idset[0][i] = seqs[i].getName ();
-idset[1][i] = seqs[i].getSequenceAsString ();
-}
-return idset;
-}, "~A");
-Clazz.defineMethod (c$, "setLabel",
-function (newlabel) {
-this.label = newlabel;
-}, "~S");
-c$.$GroupUrlLink$UrlStringTooLongException$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.urlLength = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.util.GroupUrlLink, "UrlStringTooLongException", Exception);
-Clazz.makeConstructor (c$,
-function (a) {
-Clazz.superConstructor (this, jalview.util.GroupUrlLink.UrlStringTooLongException, []);
-this.urlLength = a;
-}, "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "Generated url is estimated to be too long (" + this.urlLength + ")";
-});
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"tokens", null);
-{
-if (jalview.util.GroupUrlLink.tokens == null) {
-jalview.util.GroupUrlLink.tokens = Clazz.newArray (-1, ["SEQUENCEIDS", "SEQUENCES", "DATASETID"]);
-}}Clazz.defineStatics (c$,
-"SEQUENCEIDS", 1,
-"SEQUENCES", 2,
-"DATASETID", 4);
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.lang.Exception"], "jalview.util.GroupUrlLink", ["jalview.jsdev.RegExp", "jalview.util.MessageManager", "$.Platform", "$.QuickSort", "java.lang.Error", "$.StringBuffer", "java.util.Hashtable"], function () {
+c$ = Clazz.decorateAsClass (function () {
+if (!Clazz.isClassDefined ("jalview.util.GroupUrlLink.UrlStringTooLongException")) {
+jalview.util.GroupUrlLink.$GroupUrlLink$UrlStringTooLongException$ ();
+}
+this.url_prefix = null;
+this.target = null;
+this.label = null;
+this.url_suffix = null;
+this.separators = null;
+this.regexReplace = null;
+this.invalidMessage = null;
+this.segs = null;
+this.mtch = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util, "GroupUrlLink");
+Clazz.makeConstructor (c$,
+function (link) {
+var sep = link.indexOf ("|");
+this.segs = Clazz.newIntArray (jalview.util.GroupUrlLink.tokens.length, 0);
+var ntoks = 0;
+for (var i = 0; i < this.segs.length; i++) {
+if ((this.segs[i] = link.indexOf ("$" + jalview.util.GroupUrlLink.tokens[i])) > -1) {
+ntoks++;
+}}
+if (ntoks == 0) {
+this.invalidMessage = "Group URL string must contain at least one of ";
+for (var i = 0; i < this.segs.length; i++) {
+this.invalidMessage += " '$" + jalview.util.GroupUrlLink.tokens[i] + "[=/regex=/]$'";
+}
+return;
+}var ptok = Clazz.newIntArray (ntoks + 1, 0);
+var tmtch = new Array (ntoks + 1);
+this.mtch = new Array (ntoks);
+for (var i = 0, t = 0; i < this.segs.length; i++) {
+if (this.segs[i] > -1) {
+ptok[t] = this.segs[i];
+tmtch[t++] = jalview.util.GroupUrlLink.tokens[i];
+}}
+ptok[ntoks] = link.length;
+tmtch[ntoks] = "$$$$$$$$$";
+jalview.util.QuickSort.sortInt (ptok, tmtch);
+for (var i = 0; i < ntoks; i++) {
+this.mtch[i] = tmtch[i];
+}
+var p = sep;
+do {
+sep = p;
+p = link.indexOf ("|", sep + 1);
+} while (p > sep && p < ptok[0]);
+this.label = link.substring (0, sep);
+if (this.label.indexOf ("|") > -1) {
+this.target = this.label.substring (0, this.label.indexOf ("|"));
+} else if (this.label.indexOf (" ") > 2) {
+this.target = this.label.substring (0, this.label.indexOf (" "));
+} else {
+this.target = this.label;
+}this.url_prefix = link.substring (sep + 1, ptok[0]);
+this.url_suffix = new Array (this.mtch.length);
+this.regexReplace = new Array (this.mtch.length);
+for (var pass = 0; pass < this.mtch.length; pass++) {
+var mlength = 3 + this.mtch[pass].length;
+if (link.indexOf ("$" + this.mtch[pass] + "=/") == ptok[pass] && (p = link.indexOf ("/=$", ptok[pass] + mlength)) > ptok[pass] + mlength) {
+if (ptok[pass + 1] < p + 3) {
+this.invalidMessage = "Token regexes cannot contain other regexes (did you terminate the $" + this.mtch[pass] + " regex with a '/=$' ?";
+return;
+}this.url_suffix[pass] = link.substring (p + 3, ptok[pass + 1]);
+this.regexReplace[pass] = link.substring (ptok[pass] + mlength, p);
+try {
+var rg = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace[pass] + "/");
+if (rg == null) {
+this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace[pass] + "'\n";
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace[pass] + "'\n";
+} else {
+throw e;
+}
+}
+} else {
+this.regexReplace[pass] = null;
+if ((p = link.indexOf ("$" + this.mtch[pass] + "$")) == ptok[pass]) {
+this.url_suffix[pass] = link.substring (p + this.mtch[pass].length + 2, ptok[pass + 1]);
+} else {
+this.invalidMessage = "Warning: invalid regex structure (after '" + this.mtch[0] + "') for URL link : " + link;
+}}}
+var pass = 0;
+this.separators = new Array (this.url_suffix.length);
+var suffices = this.url_suffix[this.url_suffix.length - 1];
+var lastsep = ",";
+while ((p = suffices.indexOf ('|')) > -1) {
+this.separators[pass] = suffices.substring (p + 1);
+if (pass == 0) {
+this.url_suffix[this.url_suffix.length - 1] = suffices.substring (0, p);
+} else {
+lastsep = (this.separators[pass - 1] = this.separators[pass - 1].substring (0, p));
+}suffices = this.separators[pass];
+pass++;
+}
+if (pass > 0) {
+lastsep = this.separators[pass - 1];
+}while (pass < this.separators.length) {
+this.separators[pass++] = lastsep;
+}
+}, "~S");
+Clazz.defineMethod (c$, "getUrl_suffix",
+function () {
+return this.url_suffix[this.url_suffix.length - 1];
+});
+Clazz.defineMethod (c$, "getUrl_prefix",
+function () {
+return this.url_prefix;
+});
+Clazz.defineMethod (c$, "getTarget",
+function () {
+return this.target;
+});
+Clazz.defineMethod (c$, "getLabel",
+function () {
+return this.label;
+});
+Clazz.defineMethod (c$, "getIDRegexReplace",
+function () {
+return this._replaceFor (jalview.util.GroupUrlLink.tokens[0]);
+});
+Clazz.defineMethod (c$, "_replaceFor",
+($fz = function (token) {
+for (var i = 0; i < this.mtch.length; i++) {
+if (this.segs[i] > -1 && this.mtch[i].equals (token)) {
+return this.regexReplace[i];
+}}
+return null;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "getSeqRegexReplace",
+function () {
+return this._replaceFor (jalview.util.GroupUrlLink.tokens[1]);
+});
+Clazz.defineMethod (c$, "getInvalidMessage",
+function () {
+return this.invalidMessage;
+});
+Clazz.defineMethod (c$, "isValid",
+function () {
+return this.invalidMessage == null;
+});
+Clazz.defineMethod (c$, "makeUrls",
+function (idstrings, seqstrings, dsstring, onlyIfMatches) {
+var rstrings = this.replacementArgs (idstrings, seqstrings, dsstring);
+return this.makeUrls (rstrings, onlyIfMatches);
+}, "~A,~A,~S,~B");
+Clazz.defineMethod (c$, "replacementArgs",
+($fz = function (idstrings, seqstrings, dsstring) {
+var rstrings = new java.util.Hashtable ();
+rstrings.put (jalview.util.GroupUrlLink.tokens[0], idstrings);
+rstrings.put (jalview.util.GroupUrlLink.tokens[1], seqstrings);
+rstrings.put (jalview.util.GroupUrlLink.tokens[2], Clazz.newArray (-1, [dsstring]));
+if (idstrings.length != seqstrings.length) {
+throw new Error (jalview.util.MessageManager.getString ("error.idstring_seqstrings_only_one_per_sequence"));
+}return rstrings;
+}, $fz.isPrivate = true, $fz), "~A,~A,~S");
+Clazz.defineMethod (c$, "makeUrls",
+function (repstrings, onlyIfMatches) {
+return this.makeUrlsIf (true, repstrings, onlyIfMatches);
+}, "java.util.Hashtable,~B");
+Clazz.defineMethod (c$, "makeUrlStubs",
+function (ids, seqstr, string, b) {
+var rstrings = this.replacementArgs (ids, seqstr, string);
+var stubs = this.makeUrlsIf (false, rstrings, b);
+if (stubs != null) {
+return Clazz.newArray (-1, [stubs[0], stubs[1], rstrings, Clazz.newBooleanArray (-1, [b])]);
+}return null;
+}, "~A,~A,~S,~B");
+Clazz.defineMethod (c$, "constructFrom",
+function (stubs) {
+var results = this.makeUrlsIf (true, stubs[2], (stubs[3])[0]);
+return (results[3])[0];
+}, "~A");
+Clazz.defineMethod (c$, "makeUrlsIf",
+function (createFullUrl, repstrings, onlyIfMatches) {
+var pass = 0;
+var idseq = new Array (this.mtch.length);
+var mins = 0;
+var maxs = 0;
+for (var i = 0; i < this.mtch.length; i++) {
+idseq[i] = repstrings.get (this.mtch[i]);
+if (idseq[i].length >= 1) {
+if (mins == 0 && idseq[i].length == 1) {
+mins = 1;
+}if (maxs < 2) {
+maxs = idseq[i].length;
+} else {
+if (maxs != idseq[i].length) {
+throw new Error (jalview.util.MessageManager.formatMessage ("error.cannot_have_mixed_length_replacement_vectors", Clazz.newArray (-1, [(this.mtch[i]), Integer.$valueOf (idseq[i].length).toString (), Integer.$valueOf (maxs).toString ()])));
+}}} else {
+throw new Error (jalview.util.MessageManager.getString ("error.cannot_have_zero_length_vector_replacement_strings"));
+}}
+var matched = new Array (idseq.length);
+var rgxs = new Array (matched.length);
+for (pass = 0; pass < matched.length; pass++) {
+matched[pass] = new StringBuffer ();
+if (this.regexReplace[pass] != null) {
+rgxs[pass] = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace[pass] + "/");
+} else {
+rgxs[pass] = null;
+}}
+var urllength = this.url_prefix.length;
+for (pass = 0; pass < matched.length; pass++) {
+urllength += this.url_suffix[pass].length;
+}
+var thismatched = Clazz.newBooleanArray (maxs, false);
+var seqsmatched = 0;
+for (var sq = 0; sq < maxs; sq++) {
+thismatched[sq] = false;
+var thematches = new Array (rgxs.length);
+for (pass = 0; pass < rgxs.length; pass++) {
+thematches[pass] = new StringBuffer ();
+if (idseq[pass].length <= sq) {
+continue;
+}if (rgxs[pass] != null) {
+var rg = rgxs[pass];
+var rematchat = 0;
+while (rg.searchFrom (idseq[pass][sq], rematchat)) {
+rematchat = rg.matchedTo ();
+thismatched[sq] = new Boolean (thismatched[sq] | true).valueOf ();
+urllength += rg.charsMatched ();
+if ((urllength + 32) > jalview.util.Platform.getMaxCommandLineLength ()) {
+throw Clazz.innerTypeInstance (jalview.util.GroupUrlLink.UrlStringTooLongException, this, null, urllength);
+}if (!createFullUrl) {
+continue;
+}var ns = rg.numSubs ();
+if (ns == 0) {
+thematches[pass].append (rg.stringMatched ());
+} else {
+var subs = new StringBuffer ();
+var s = 0;
+while (s <= ns) {
+if (s + 1 <= ns && rg.matchedToI (s) > -1 && rg.matchedToI (s + 1) > -1 && rg.matchedToI (s + 1) < rg.matchedToI (s)) {
+var r = s + 1;
+var rmtch = new StringBuffer ();
+while (r <= ns && rg.matchedToI (r) <= rg.matchedToI (s)) {
+if (rg.matchedFromI (r) > -1) {
+rmtch.append (rg.stringMatchedI (r));
+}r++;
+}
+if (rmtch.length () > 0) {
+subs.append (rmtch);
+}s = r;
+} else {
+if (rg.matchedFromI (s) > -1) {
+subs.append (rg.stringMatchedI (s));
+}s++;
+}}
+thematches[pass].append (subs);
+}}
+} else {
+if (!onlyIfMatches) {
+thismatched[sq] = new Boolean (thismatched[sq] | true).valueOf ();
+urllength += idseq[pass][sq].length;
+if (createFullUrl) {
+thematches[pass] = new StringBuffer (idseq[pass][sq]);
+}}}}
+if (thismatched[sq]) {
+if (createFullUrl) {
+for (pass = 0; pass < matched.length; pass++) {
+if (idseq[pass].length > 1 && matched[pass].length () > 0) {
+matched[pass].append (this.separators[pass]);
+}matched[pass].append (thematches[pass]);
+}
+}seqsmatched++;
+}}
+if (seqsmatched == 0 || (createFullUrl && matched[0].length () == 0)) {
+return null;
+}if ((urllength + 32) > jalview.util.Platform.getMaxCommandLineLength ()) {
+throw Clazz.innerTypeInstance (jalview.util.GroupUrlLink.UrlStringTooLongException, this, null, urllength);
+}if (!createFullUrl) {
+return Clazz.newArray (-1, [ Clazz.newIntArray (-1, [seqsmatched]), thismatched]);
+}var submiturl = new StringBuffer ();
+submiturl.append (this.url_prefix);
+for (pass = 0; pass < matched.length; pass++) {
+submiturl.append (matched[pass]);
+if (this.url_suffix[pass] != null) {
+submiturl.append (this.url_suffix[pass]);
+}}
+return Clazz.newArray (-1, [ Clazz.newIntArray (-1, [seqsmatched]), thismatched, matched, Clazz.newArray (-1, [submiturl.toString ()])]);
+}, "~B,java.util.Hashtable,~B");
+Clazz.defineMethod (c$, "getNumberInvolved",
+function (urlstub) {
+return (urlstub[0])[0];
+}, "~A");
+Clazz.defineMethod (c$, "getGroupURLType",
+function () {
+var r = 0;
+for (var pass = 0; pass < jalview.util.GroupUrlLink.tokens.length; pass++) {
+for (var i = 0; i < this.mtch.length; i++) {
+if (this.mtch[i].equals (jalview.util.GroupUrlLink.tokens[pass])) {
+r += 1 << pass;
+}}
+}
+return r;
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+var result = new StringBuffer ();
+result.append (this.label + "|" + this.url_prefix);
+var r;
+for (r = 0; r < this.url_suffix.length; r++) {
+result.append ("$");
+result.append (this.mtch[r]);
+if (this.regexReplace[r] != null) {
+result.append ("=/");
+result.append (this.regexReplace[r]);
+result.append ("/=");
+}result.append ("$");
+result.append (this.url_suffix[r]);
+}
+for (r = 0; r < this.separators.length; r++) {
+result.append ("|");
+result.append (this.separators[r]);
+}
+return result.toString ();
+});
+c$.formStrings = Clazz.defineMethod (c$, "formStrings",
+function (seqs) {
+var idset = Clazz.newArray (2, seqs.length, null);
+for (var i = 0; i < seqs.length; i++) {
+idset[0][i] = seqs[i].getName ();
+idset[1][i] = seqs[i].getSequenceAsString ();
+}
+return idset;
+}, "~A");
+Clazz.defineMethod (c$, "setLabel",
+function (newlabel) {
+this.label = newlabel;
+}, "~S");
+c$.$GroupUrlLink$UrlStringTooLongException$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.urlLength = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.util.GroupUrlLink, "UrlStringTooLongException", Exception);
+Clazz.makeConstructor (c$,
+function (a) {
+Clazz.superConstructor (this, jalview.util.GroupUrlLink.UrlStringTooLongException, []);
+this.urlLength = a;
+}, "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "Generated url is estimated to be too long (" + this.urlLength + ")";
+});
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"tokens", null);
+{
+if (jalview.util.GroupUrlLink.tokens == null) {
+jalview.util.GroupUrlLink.tokens = Clazz.newArray (-1, ["SEQUENCEIDS", "SEQUENCES", "DATASETID"]);
+}}Clazz.defineStatics (c$,
+"SEQUENCEIDS", 1,
+"SEQUENCES", 2,
+"DATASETID", 4);
+});
diff --git a/bin/jalview/util/MapList.class b/bin/jalview/util/MapList.class
index 8c02e1a..d5fddbf 100644
Binary files a/bin/jalview/util/MapList.class and b/bin/jalview/util/MapList.class differ
diff --git a/bin/jalview/util/MapList.js b/bin/jalview/util/MapList.js
index ff777cc..e7281ac 100644
--- a/bin/jalview/util/MapList.js
+++ b/bin/jalview/util/MapList.js
@@ -1,409 +1,409 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.util.ArrayList"], "jalview.util.MapList", ["java.lang.StringBuilder", "java.util.Arrays"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fromShifts = null;
-this.toShifts = null;
-this.fromRatio = 0;
-this.toRatio = 0;
-this.fromLowest = 0;
-this.fromHighest = 0;
-this.toLowest = 0;
-this.toHighest = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "MapList");
-Clazz.prepareFields (c$, function () {
-this.fromShifts = new java.util.ArrayList ();
-this.toShifts = new java.util.ArrayList ();
-});
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (o == null || !(Clazz.instanceOf (o, jalview.util.MapList))) {
-return false;
-}var obj = o;
-if (obj === this) {
-return true;
-}if (obj.fromRatio != this.fromRatio || obj.toRatio != this.toRatio || obj.fromShifts == null || obj.toShifts == null) {
-return false;
-}return java.util.Arrays.deepEquals (this.fromShifts.toArray (), obj.fromShifts.toArray ()) && java.util.Arrays.deepEquals (this.toShifts.toArray (), obj.toShifts.toArray ());
-}, "~O");
-Clazz.defineMethod (c$, "getFromRanges",
-function () {
-return this.fromShifts;
-});
-Clazz.defineMethod (c$, "getToRanges",
-function () {
-return this.toShifts;
-});
-c$.getRanges = Clazz.defineMethod (c$, "getRanges",
-function (shifts) {
-var rnges = Clazz.newIntArray (2 * shifts.size (), 0);
-var i = 0;
-for (var r, $r = shifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
-rnges[i++] = r[0];
-rnges[i++] = r[1];
-}
-return rnges;
-}, "java.util.List");
-Clazz.defineMethod (c$, "getFromRatio",
-function () {
-return this.fromRatio;
-});
-Clazz.defineMethod (c$, "getToRatio",
-function () {
-return this.toRatio;
-});
-Clazz.defineMethod (c$, "getFromLowest",
-function () {
-return this.fromLowest;
-});
-Clazz.defineMethod (c$, "getFromHighest",
-function () {
-return this.fromHighest;
-});
-Clazz.defineMethod (c$, "getToLowest",
-function () {
-return this.toLowest;
-});
-Clazz.defineMethod (c$, "getToHighest",
-function () {
-return this.toHighest;
-});
-Clazz.makeConstructor (c$,
-function (from, to, fromRatio, toRatio) {
-this.fromRatio = fromRatio;
-this.toRatio = toRatio;
-this.fromLowest = from[0];
-this.fromHighest = from[1];
-for (var i = 0; i < from.length; i += 2) {
-this.fromLowest = Math.min (this.fromLowest, from[i]);
-this.fromHighest = Math.max (this.fromHighest, from[i + 1]);
-this.fromShifts.add ( Clazz.newIntArray (-1, [from[i], from[i + 1]]));
-}
-this.toLowest = to[0];
-this.toHighest = to[1];
-for (var i = 0; i < to.length; i += 2) {
-this.toLowest = Math.min (this.toLowest, to[i]);
-this.toHighest = Math.max (this.toHighest, to[i + 1]);
-this.toShifts.add ( Clazz.newIntArray (-1, [to[i], to[i + 1]]));
-}
-}, "~A,~A,~N,~N");
-Clazz.makeConstructor (c$,
-function (map) {
-this.fromLowest = map.fromLowest;
-this.fromHighest = map.fromHighest;
-this.toLowest = map.toLowest;
-this.toHighest = map.toHighest;
-this.fromRatio = map.fromRatio;
-this.toRatio = map.toRatio;
-if (map.fromShifts != null) {
-for (var r, $r = map.fromShifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
-this.fromShifts.add ( Clazz.newIntArray (-1, [r[0], r[1]]));
-}
-}if (map.toShifts != null) {
-for (var r, $r = map.toShifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
-this.toShifts.add ( Clazz.newIntArray (-1, [r[0], r[1]]));
-}
-}}, "jalview.util.MapList");
-Clazz.makeConstructor (c$,
-function (fromRange, toRange, fromRatio, toRatio) {
-this.fromShifts = fromRange;
-this.toShifts = toRange;
-this.fromRatio = fromRatio;
-this.toRatio = toRatio;
-this.fromLowest = 2147483647;
-this.fromHighest = 0;
-for (var range, $range = fromRange.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
-this.fromLowest = Math.min (this.fromLowest, range[0]);
-this.fromHighest = Math.max (this.fromHighest, range[1]);
-}
-this.toLowest = 2147483647;
-this.toHighest = 0;
-for (var range, $range = toRange.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
-this.toLowest = Math.min (this.toLowest, range[0]);
-this.toHighest = Math.max (this.toHighest, range[1]);
-}
-}, "java.util.List,java.util.List,~N,~N");
-Clazz.defineMethod (c$, "makeFromMap",
-function () {
-return this.posMap (this.fromShifts, this.fromRatio, this.toShifts, this.toRatio);
-});
-Clazz.defineMethod (c$, "makeToMap",
-function () {
-return this.posMap (this.toShifts, this.toRatio, this.fromShifts, this.fromRatio);
-});
-Clazz.defineMethod (c$, "posMap",
-($fz = function (shiftTo, ratio, shiftFrom, toRatio) {
-var iv = 0;
-var ivSize = shiftTo.size ();
-if (iv >= ivSize) {
-return null;
-}var intv = shiftTo.get (iv++);
-var from = intv[0];
-var to = intv[1];
-if (from > to) {
-from = intv[1];
-to = intv[0];
-}while (iv < ivSize) {
-intv = shiftTo.get (iv++);
-if (intv[0] < from) {
-from = intv[0];
-}if (intv[1] < from) {
-from = intv[1];
-}if (intv[0] > to) {
-to = intv[0];
-}if (intv[1] > to) {
-to = intv[1];
-}}
-var tF = 0;
-var tT = 0;
-var mp = Clazz.newIntArray (to - from + 2, 0);
-for (var i = 0; i < mp.length; i++) {
-var m = jalview.util.MapList.shift (i + from, shiftTo, ratio, shiftFrom, toRatio);
-if (m != null) {
-if (i == 0) {
-tF = tT = m[0];
-} else {
-if (m[0] < tF) {
-tF = m[0];
-}if (m[0] > tT) {
-tT = m[0];
-}}}mp[i] = m;
-}
-var map = Clazz.newArray (-1, [ Clazz.newIntArray (-1, [from, to, tF, tT]), Clazz.newIntArray (to - from + 2, 0)]);
-map[0][2] = tF;
-map[0][3] = tT;
-for (var i = 0; i < mp.length; i++) {
-if (mp[i] != null) {
-map[1][i] = mp[i][0] - tF;
-} else {
-map[1][i] = -1;
-}}
-return map;
-}, $fz.isPrivate = true, $fz), "java.util.List,~N,java.util.List,~N");
-Clazz.defineMethod (c$, "shiftFrom",
-function (pos) {
-return jalview.util.MapList.shift (pos, this.fromShifts, this.fromRatio, this.toShifts, this.toRatio);
-}, "~N");
-Clazz.defineMethod (c$, "shiftTo",
-function (pos) {
-return jalview.util.MapList.shift (pos, this.toShifts, this.toRatio, this.fromShifts, this.fromRatio);
-}, "~N");
-c$.shift = Clazz.defineMethod (c$, "shift",
-function (pos, shiftTo, fromRatio, shiftFrom, toRatio) {
-var fromCount = jalview.util.MapList.countPos (shiftTo, pos);
-if (fromCount == null) {
-return null;
-}var fromRemainder = (fromCount[0] - 1) % fromRatio;
-var toCount = 1 + ((Clazz.doubleToInt ((fromCount[0] - 1) / fromRatio)) * toRatio);
-var toPos = jalview.util.MapList.countToPos (shiftFrom, toCount);
-if (toPos == null) {
-return null;
-}return Clazz.newIntArray (-1, [toPos[0], fromRemainder, toPos[1]]);
-}, "~N,java.util.List,~N,java.util.List,~N");
-c$.countPos = Clazz.defineMethod (c$, "countPos",
-function (shiftTo, pos) {
-var count = 0;
-var intv;
-var iv = 0;
-var ivSize = shiftTo.size ();
-while (iv < ivSize) {
-intv = shiftTo.get (iv++);
-if (intv[0] <= intv[1]) {
-if (pos >= intv[0] && pos <= intv[1]) {
-return Clazz.newIntArray (-1, [count + pos - intv[0] + 1, 1]);
-} else {
-count += intv[1] - intv[0] + 1;
-}} else {
-if (pos >= intv[1] && pos <= intv[0]) {
-return Clazz.newIntArray (-1, [count + intv[0] - pos + 1, -1]);
-} else {
-count += intv[0] - intv[1] + 1;
-}}}
-return null;
-}, "java.util.List,~N");
-c$.countToPos = Clazz.defineMethod (c$, "countToPos",
-function (shiftFrom, pos) {
-var count = 0;
-var diff = 0;
-var iv = 0;
-var ivSize = shiftFrom.size ();
-var intv = Clazz.newIntArray (-1, [0, 0]);
-while (iv < ivSize) {
-intv = shiftFrom.get (iv++);
-diff = intv[1] - intv[0];
-if (diff >= 0) {
-if (pos <= count + 1 + diff) {
-return Clazz.newIntArray (-1, [pos - count - 1 + intv[0], 1]);
-} else {
-count += 1 + diff;
-}} else {
-if (pos <= count + 1 - diff) {
-return Clazz.newIntArray (-1, [intv[0] - (pos - count - 1), -1]);
-} else {
-count += 1 - diff;
-}}}
-return null;
-}, "java.util.List,~N");
-Clazz.defineMethod (c$, "locateInFrom",
-function (start, end) {
-var fromStart = this.shiftTo (start);
-var fromEnd = this.shiftTo (end);
-return jalview.util.MapList.getIntervals (this.fromShifts, fromStart, fromEnd, this.fromRatio);
-}, "~N,~N");
-Clazz.defineMethod (c$, "locateInTo",
-function (start, end) {
-var toStart = this.shiftFrom (start);
-var toEnd = this.shiftFrom (end);
-return jalview.util.MapList.getIntervals (this.toShifts, toStart, toEnd, this.toRatio);
-}, "~N,~N");
-c$.getIntervals = Clazz.defineMethod (c$, "getIntervals",
-function (shiftFrom, fromStart, fromEnd, fromRatio2) {
-if (fromStart == null || fromEnd == null) {
-return null;
-}var startpos;
-var endpos;
-startpos = fromStart[0];
-endpos = fromEnd[0];
-var endindx = (fromRatio2 - 1);
-var intv = 0;
-var intvSize = shiftFrom.size ();
-var iv;
-var i = 0;
-var fs = -1;
-var fe_s = -1;
-var fe = -1;
-while (intv < intvSize && (fs == -1 || fe == -1)) {
-iv = shiftFrom.get (intv++);
-if (fe_s > -1) {
-endpos = iv[0];
-endindx--;
-}if (iv[0] <= iv[1]) {
-if (fs == -1 && startpos >= iv[0] && startpos <= iv[1]) {
-fs = i;
-}if (endpos >= iv[0] && endpos <= iv[1]) {
-if (fe_s == -1) {
-fe_s = i;
-}if (fe_s != -1) {
-if (endpos + endindx <= iv[1]) {
-fe = i;
-endpos = endpos + endindx;
-} else {
-endindx -= iv[1] - endpos;
-}}}} else {
-if (fs == -1 && startpos <= iv[0] && startpos >= iv[1]) {
-fs = i;
-}if (endpos <= iv[0] && endpos >= iv[1]) {
-if (fe_s == -1) {
-fe_s = i;
-}if (fe_s != -1) {
-if (endpos - endindx >= iv[1]) {
-fe = i;
-endpos = endpos - endindx;
-} else {
-endindx -= endpos - iv[1];
-}}}}i++;
-}
-if (fs == fe && fe == -1) {
-return null;
-}var ranges = new java.util.ArrayList ();
-if (fs <= fe) {
-intv = fs;
-i = fs;
-iv = shiftFrom.get (intv++);
-iv = Clazz.newIntArray (-1, [iv[0], iv[1]]);
-if (i == fs) {
-iv[0] = startpos;
-}while (i != fe) {
-ranges.add (iv);
-iv = shiftFrom.get (intv++);
-iv = Clazz.newIntArray (-1, [iv[0], iv[1]]);
-i++;
-}
-if (i == fe) {
-iv[1] = endpos;
-}ranges.add (iv);
-} else {
-i = shiftFrom.size () - 1;
-while (i > fs) {
-i--;
-}
-iv = shiftFrom.get (i);
-iv = Clazz.newIntArray (-1, [iv[1], iv[0]]);
-if (i == fs) {
-iv[0] = startpos;
-}while (--i != fe) {
-ranges.add (iv);
-iv = shiftFrom.get (i);
-iv = Clazz.newIntArray (-1, [iv[1], iv[0]]);
-}
-if (i == fe) {
-iv[1] = endpos;
-}ranges.add (iv);
-}var range = null;
-if (ranges != null && ranges.size () > 0) {
-range = Clazz.newIntArray (ranges.size () * 2, 0);
-intv = 0;
-intvSize = ranges.size ();
-i = 0;
-while (intv < intvSize) {
-iv = ranges.get (intv);
-range[i++] = iv[0];
-range[i++] = iv[1];
-ranges.set (intv++, null);
-}
-}return range;
-}, "java.util.List,~A,~A,~N");
-Clazz.defineMethod (c$, "getToPosition",
-function (mpos) {
-var mp = this.shiftTo (mpos);
-if (mp != null) {
-return mp[0];
-}return mpos;
-}, "~N");
-Clazz.defineMethod (c$, "getToWord",
-function (mpos) {
-var mp = this.shiftTo (mpos);
-if (mp != null) {
-return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.getFromRatio () - 1)]);
-}return null;
-}, "~N");
-Clazz.defineMethod (c$, "getMappedPosition",
-function (pos) {
-var mp = this.shiftFrom (pos);
-if (mp != null) {
-return mp[0];
-}return pos;
-}, "~N");
-Clazz.defineMethod (c$, "getMappedWord",
-function (pos) {
-var mp = this.shiftFrom (pos);
-if (mp != null) {
-return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.getToRatio () - 1)]);
-}return null;
-}, "~N");
-Clazz.defineMethod (c$, "getInverse",
-function () {
-return new jalview.util.MapList (this.getToRanges (), this.getFromRanges (), this.getToRatio (), this.getFromRatio ());
-});
-Clazz.defineMethod (c$, "containsEither",
-function (local, map) {
-if (local) {
-return ((this.getFromLowest () >= map.getFromLowest () && this.getFromHighest () <= map.getFromHighest ()) || (this.getFromLowest () <= map.getFromLowest () && this.getFromHighest () >= map.getFromHighest ()));
-} else {
-return ((this.getToLowest () >= map.getToLowest () && this.getToHighest () <= map.getToHighest ()) || (this.getToLowest () <= map.getToLowest () && this.getToHighest () >= map.getToHighest ()));
-}}, "~B,jalview.util.MapList");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var sb = new StringBuilder (64);
-sb.append ("From (").append (this.fromRatio).append (":").append (this.toRatio).append (") [");
-for (var shift, $shift = this.fromShifts.iterator (); $shift.hasNext () && ((shift = $shift.next ()) || true);) {
-sb.append (" ").append (java.util.Arrays.toString (shift));
-}
-sb.append (" ] To [");
-for (var shift, $shift = this.toShifts.iterator (); $shift.hasNext () && ((shift = $shift.next ()) || true);) {
-sb.append (" ").append (java.util.Arrays.toString (shift));
-}
-sb.append (" ]");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.util.ArrayList"], "jalview.util.MapList", ["java.lang.StringBuilder", "java.util.Arrays"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fromShifts = null;
+this.toShifts = null;
+this.fromRatio = 0;
+this.toRatio = 0;
+this.fromLowest = 0;
+this.fromHighest = 0;
+this.toLowest = 0;
+this.toHighest = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.util, "MapList");
+Clazz.prepareFields (c$, function () {
+this.fromShifts = new java.util.ArrayList ();
+this.toShifts = new java.util.ArrayList ();
+});
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (o == null || !(Clazz.instanceOf (o, jalview.util.MapList))) {
+return false;
+}var obj = o;
+if (obj === this) {
+return true;
+}if (obj.fromRatio != this.fromRatio || obj.toRatio != this.toRatio || obj.fromShifts == null || obj.toShifts == null) {
+return false;
+}return java.util.Arrays.deepEquals (this.fromShifts.toArray (), obj.fromShifts.toArray ()) && java.util.Arrays.deepEquals (this.toShifts.toArray (), obj.toShifts.toArray ());
+}, "~O");
+Clazz.defineMethod (c$, "getFromRanges",
+function () {
+return this.fromShifts;
+});
+Clazz.defineMethod (c$, "getToRanges",
+function () {
+return this.toShifts;
+});
+c$.getRanges = Clazz.defineMethod (c$, "getRanges",
+function (shifts) {
+var rnges = Clazz.newIntArray (2 * shifts.size (), 0);
+var i = 0;
+for (var r, $r = shifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
+rnges[i++] = r[0];
+rnges[i++] = r[1];
+}
+return rnges;
+}, "java.util.List");
+Clazz.defineMethod (c$, "getFromRatio",
+function () {
+return this.fromRatio;
+});
+Clazz.defineMethod (c$, "getToRatio",
+function () {
+return this.toRatio;
+});
+Clazz.defineMethod (c$, "getFromLowest",
+function () {
+return this.fromLowest;
+});
+Clazz.defineMethod (c$, "getFromHighest",
+function () {
+return this.fromHighest;
+});
+Clazz.defineMethod (c$, "getToLowest",
+function () {
+return this.toLowest;
+});
+Clazz.defineMethod (c$, "getToHighest",
+function () {
+return this.toHighest;
+});
+Clazz.makeConstructor (c$,
+function (from, to, fromRatio, toRatio) {
+this.fromRatio = fromRatio;
+this.toRatio = toRatio;
+this.fromLowest = from[0];
+this.fromHighest = from[1];
+for (var i = 0; i < from.length; i += 2) {
+this.fromLowest = Math.min (this.fromLowest, from[i]);
+this.fromHighest = Math.max (this.fromHighest, from[i + 1]);
+this.fromShifts.add ( Clazz.newIntArray (-1, [from[i], from[i + 1]]));
+}
+this.toLowest = to[0];
+this.toHighest = to[1];
+for (var i = 0; i < to.length; i += 2) {
+this.toLowest = Math.min (this.toLowest, to[i]);
+this.toHighest = Math.max (this.toHighest, to[i + 1]);
+this.toShifts.add ( Clazz.newIntArray (-1, [to[i], to[i + 1]]));
+}
+}, "~A,~A,~N,~N");
+Clazz.makeConstructor (c$,
+function (map) {
+this.fromLowest = map.fromLowest;
+this.fromHighest = map.fromHighest;
+this.toLowest = map.toLowest;
+this.toHighest = map.toHighest;
+this.fromRatio = map.fromRatio;
+this.toRatio = map.toRatio;
+if (map.fromShifts != null) {
+for (var r, $r = map.fromShifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
+this.fromShifts.add ( Clazz.newIntArray (-1, [r[0], r[1]]));
+}
+}if (map.toShifts != null) {
+for (var r, $r = map.toShifts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
+this.toShifts.add ( Clazz.newIntArray (-1, [r[0], r[1]]));
+}
+}}, "jalview.util.MapList");
+Clazz.makeConstructor (c$,
+function (fromRange, toRange, fromRatio, toRatio) {
+this.fromShifts = fromRange;
+this.toShifts = toRange;
+this.fromRatio = fromRatio;
+this.toRatio = toRatio;
+this.fromLowest = 2147483647;
+this.fromHighest = 0;
+for (var range, $range = fromRange.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
+this.fromLowest = Math.min (this.fromLowest, range[0]);
+this.fromHighest = Math.max (this.fromHighest, range[1]);
+}
+this.toLowest = 2147483647;
+this.toHighest = 0;
+for (var range, $range = toRange.iterator (); $range.hasNext () && ((range = $range.next ()) || true);) {
+this.toLowest = Math.min (this.toLowest, range[0]);
+this.toHighest = Math.max (this.toHighest, range[1]);
+}
+}, "java.util.List,java.util.List,~N,~N");
+Clazz.defineMethod (c$, "makeFromMap",
+function () {
+return this.posMap (this.fromShifts, this.fromRatio, this.toShifts, this.toRatio);
+});
+Clazz.defineMethod (c$, "makeToMap",
+function () {
+return this.posMap (this.toShifts, this.toRatio, this.fromShifts, this.fromRatio);
+});
+Clazz.defineMethod (c$, "posMap",
+($fz = function (shiftTo, ratio, shiftFrom, toRatio) {
+var iv = 0;
+var ivSize = shiftTo.size ();
+if (iv >= ivSize) {
+return null;
+}var intv = shiftTo.get (iv++);
+var from = intv[0];
+var to = intv[1];
+if (from > to) {
+from = intv[1];
+to = intv[0];
+}while (iv < ivSize) {
+intv = shiftTo.get (iv++);
+if (intv[0] < from) {
+from = intv[0];
+}if (intv[1] < from) {
+from = intv[1];
+}if (intv[0] > to) {
+to = intv[0];
+}if (intv[1] > to) {
+to = intv[1];
+}}
+var tF = 0;
+var tT = 0;
+var mp = Clazz.newIntArray (to - from + 2, 0);
+for (var i = 0; i < mp.length; i++) {
+var m = jalview.util.MapList.shift (i + from, shiftTo, ratio, shiftFrom, toRatio);
+if (m != null) {
+if (i == 0) {
+tF = tT = m[0];
+} else {
+if (m[0] < tF) {
+tF = m[0];
+}if (m[0] > tT) {
+tT = m[0];
+}}}mp[i] = m;
+}
+var map = Clazz.newArray (-1, [ Clazz.newIntArray (-1, [from, to, tF, tT]), Clazz.newIntArray (to - from + 2, 0)]);
+map[0][2] = tF;
+map[0][3] = tT;
+for (var i = 0; i < mp.length; i++) {
+if (mp[i] != null) {
+map[1][i] = mp[i][0] - tF;
+} else {
+map[1][i] = -1;
+}}
+return map;
+}, $fz.isPrivate = true, $fz), "java.util.List,~N,java.util.List,~N");
+Clazz.defineMethod (c$, "shiftFrom",
+function (pos) {
+return jalview.util.MapList.shift (pos, this.fromShifts, this.fromRatio, this.toShifts, this.toRatio);
+}, "~N");
+Clazz.defineMethod (c$, "shiftTo",
+function (pos) {
+return jalview.util.MapList.shift (pos, this.toShifts, this.toRatio, this.fromShifts, this.fromRatio);
+}, "~N");
+c$.shift = Clazz.defineMethod (c$, "shift",
+function (pos, shiftTo, fromRatio, shiftFrom, toRatio) {
+var fromCount = jalview.util.MapList.countPos (shiftTo, pos);
+if (fromCount == null) {
+return null;
+}var fromRemainder = (fromCount[0] - 1) % fromRatio;
+var toCount = 1 + ((Clazz.doubleToInt ((fromCount[0] - 1) / fromRatio)) * toRatio);
+var toPos = jalview.util.MapList.countToPos (shiftFrom, toCount);
+if (toPos == null) {
+return null;
+}return Clazz.newIntArray (-1, [toPos[0], fromRemainder, toPos[1]]);
+}, "~N,java.util.List,~N,java.util.List,~N");
+c$.countPos = Clazz.defineMethod (c$, "countPos",
+function (shiftTo, pos) {
+var count = 0;
+var intv;
+var iv = 0;
+var ivSize = shiftTo.size ();
+while (iv < ivSize) {
+intv = shiftTo.get (iv++);
+if (intv[0] <= intv[1]) {
+if (pos >= intv[0] && pos <= intv[1]) {
+return Clazz.newIntArray (-1, [count + pos - intv[0] + 1, 1]);
+} else {
+count += intv[1] - intv[0] + 1;
+}} else {
+if (pos >= intv[1] && pos <= intv[0]) {
+return Clazz.newIntArray (-1, [count + intv[0] - pos + 1, -1]);
+} else {
+count += intv[0] - intv[1] + 1;
+}}}
+return null;
+}, "java.util.List,~N");
+c$.countToPos = Clazz.defineMethod (c$, "countToPos",
+function (shiftFrom, pos) {
+var count = 0;
+var diff = 0;
+var iv = 0;
+var ivSize = shiftFrom.size ();
+var intv = Clazz.newIntArray (-1, [0, 0]);
+while (iv < ivSize) {
+intv = shiftFrom.get (iv++);
+diff = intv[1] - intv[0];
+if (diff >= 0) {
+if (pos <= count + 1 + diff) {
+return Clazz.newIntArray (-1, [pos - count - 1 + intv[0], 1]);
+} else {
+count += 1 + diff;
+}} else {
+if (pos <= count + 1 - diff) {
+return Clazz.newIntArray (-1, [intv[0] - (pos - count - 1), -1]);
+} else {
+count += 1 - diff;
+}}}
+return null;
+}, "java.util.List,~N");
+Clazz.defineMethod (c$, "locateInFrom",
+function (start, end) {
+var fromStart = this.shiftTo (start);
+var fromEnd = this.shiftTo (end);
+return jalview.util.MapList.getIntervals (this.fromShifts, fromStart, fromEnd, this.fromRatio);
+}, "~N,~N");
+Clazz.defineMethod (c$, "locateInTo",
+function (start, end) {
+var toStart = this.shiftFrom (start);
+var toEnd = this.shiftFrom (end);
+return jalview.util.MapList.getIntervals (this.toShifts, toStart, toEnd, this.toRatio);
+}, "~N,~N");
+c$.getIntervals = Clazz.defineMethod (c$, "getIntervals",
+function (shiftFrom, fromStart, fromEnd, fromRatio2) {
+if (fromStart == null || fromEnd == null) {
+return null;
+}var startpos;
+var endpos;
+startpos = fromStart[0];
+endpos = fromEnd[0];
+var endindx = (fromRatio2 - 1);
+var intv = 0;
+var intvSize = shiftFrom.size ();
+var iv;
+var i = 0;
+var fs = -1;
+var fe_s = -1;
+var fe = -1;
+while (intv < intvSize && (fs == -1 || fe == -1)) {
+iv = shiftFrom.get (intv++);
+if (fe_s > -1) {
+endpos = iv[0];
+endindx--;
+}if (iv[0] <= iv[1]) {
+if (fs == -1 && startpos >= iv[0] && startpos <= iv[1]) {
+fs = i;
+}if (endpos >= iv[0] && endpos <= iv[1]) {
+if (fe_s == -1) {
+fe_s = i;
+}if (fe_s != -1) {
+if (endpos + endindx <= iv[1]) {
+fe = i;
+endpos = endpos + endindx;
+} else {
+endindx -= iv[1] - endpos;
+}}}} else {
+if (fs == -1 && startpos <= iv[0] && startpos >= iv[1]) {
+fs = i;
+}if (endpos <= iv[0] && endpos >= iv[1]) {
+if (fe_s == -1) {
+fe_s = i;
+}if (fe_s != -1) {
+if (endpos - endindx >= iv[1]) {
+fe = i;
+endpos = endpos - endindx;
+} else {
+endindx -= endpos - iv[1];
+}}}}i++;
+}
+if (fs == fe && fe == -1) {
+return null;
+}var ranges = new java.util.ArrayList ();
+if (fs <= fe) {
+intv = fs;
+i = fs;
+iv = shiftFrom.get (intv++);
+iv = Clazz.newIntArray (-1, [iv[0], iv[1]]);
+if (i == fs) {
+iv[0] = startpos;
+}while (i != fe) {
+ranges.add (iv);
+iv = shiftFrom.get (intv++);
+iv = Clazz.newIntArray (-1, [iv[0], iv[1]]);
+i++;
+}
+if (i == fe) {
+iv[1] = endpos;
+}ranges.add (iv);
+} else {
+i = shiftFrom.size () - 1;
+while (i > fs) {
+i--;
+}
+iv = shiftFrom.get (i);
+iv = Clazz.newIntArray (-1, [iv[1], iv[0]]);
+if (i == fs) {
+iv[0] = startpos;
+}while (--i != fe) {
+ranges.add (iv);
+iv = shiftFrom.get (i);
+iv = Clazz.newIntArray (-1, [iv[1], iv[0]]);
+}
+if (i == fe) {
+iv[1] = endpos;
+}ranges.add (iv);
+}var range = null;
+if (ranges != null && ranges.size () > 0) {
+range = Clazz.newIntArray (ranges.size () * 2, 0);
+intv = 0;
+intvSize = ranges.size ();
+i = 0;
+while (intv < intvSize) {
+iv = ranges.get (intv);
+range[i++] = iv[0];
+range[i++] = iv[1];
+ranges.set (intv++, null);
+}
+}return range;
+}, "java.util.List,~A,~A,~N");
+Clazz.defineMethod (c$, "getToPosition",
+function (mpos) {
+var mp = this.shiftTo (mpos);
+if (mp != null) {
+return mp[0];
+}return mpos;
+}, "~N");
+Clazz.defineMethod (c$, "getToWord",
+function (mpos) {
+var mp = this.shiftTo (mpos);
+if (mp != null) {
+return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.getFromRatio () - 1)]);
+}return null;
+}, "~N");
+Clazz.defineMethod (c$, "getMappedPosition",
+function (pos) {
+var mp = this.shiftFrom (pos);
+if (mp != null) {
+return mp[0];
+}return pos;
+}, "~N");
+Clazz.defineMethod (c$, "getMappedWord",
+function (pos) {
+var mp = this.shiftFrom (pos);
+if (mp != null) {
+return Clazz.newIntArray (-1, [mp[0], mp[0] + mp[2] * (this.getToRatio () - 1)]);
+}return null;
+}, "~N");
+Clazz.defineMethod (c$, "getInverse",
+function () {
+return new jalview.util.MapList (this.getToRanges (), this.getFromRanges (), this.getToRatio (), this.getFromRatio ());
+});
+Clazz.defineMethod (c$, "containsEither",
+function (local, map) {
+if (local) {
+return ((this.getFromLowest () >= map.getFromLowest () && this.getFromHighest () <= map.getFromHighest ()) || (this.getFromLowest () <= map.getFromLowest () && this.getFromHighest () >= map.getFromHighest ()));
+} else {
+return ((this.getToLowest () >= map.getToLowest () && this.getToHighest () <= map.getToHighest ()) || (this.getToLowest () <= map.getToLowest () && this.getToHighest () >= map.getToHighest ()));
+}}, "~B,jalview.util.MapList");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var sb = new StringBuilder (64);
+sb.append ("From (").append (this.fromRatio).append (":").append (this.toRatio).append (") [");
+for (var shift, $shift = this.fromShifts.iterator (); $shift.hasNext () && ((shift = $shift.next ()) || true);) {
+sb.append (" ").append (java.util.Arrays.toString (shift));
+}
+sb.append (" ] To [");
+for (var shift, $shift = this.toShifts.iterator (); $shift.hasNext () && ((shift = $shift.next ()) || true);) {
+sb.append (" ").append (java.util.Arrays.toString (shift));
+}
+sb.append (" ]");
+return sb.toString ();
+});
+});
diff --git a/bin/jalview/util/MappingUtils.js b/bin/jalview/util/MappingUtils.js
index e5f76b9..487e30d 100644
--- a/bin/jalview/util/MappingUtils.js
+++ b/bin/jalview/util/MappingUtils.js
@@ -1,245 +1,245 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.MappingUtils", ["jalview.analysis.AlignmentSorter", "jalview.commands.EditCommand", "$.OrderCommand", "jalview.datamodel.AlignmentOrder", "$.ColumnSelection", "$.SearchResults", "$.Sequence", "$.SequenceGroup", "jalview.util.Comparison", "$.StringUtils", "java.util.ArrayList", "$.Collections", "$.HashMap"], function () {
-c$ = Clazz.declareType (jalview.util, "MappingUtils");
-c$.mapCutOrPaste = Clazz.defineMethod (c$, "mapCutOrPaste",
-function (edit, undo, targetSeqs, result, mappings) {
-var action = edit.getAction ();
-if (undo) {
-action = action.getUndoAction ();
-}System.err.println ("MappingUtils.mapCutOrPaste not yet implemented");
-}, "jalview.commands.EditCommand.Edit,~B,java.util.List,jalview.commands.EditCommand,java.util.Set");
-c$.mapEditCommand = Clazz.defineMethod (c$, "mapEditCommand",
-function (command, undo, mapTo, gapChar, mappings) {
-if (!mapTo.isNucleotide ()) {
-return null;
-}var targetCopies = new java.util.HashMap ();
-for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-var ds = seq.getDatasetSequence ();
-if (ds != null) {
-var copy = new jalview.datamodel.Sequence (seq);
-copy.setDatasetSequence (ds);
-targetCopies.put (ds, copy);
-}}
-var originalSequences = command.priorState (undo);
-var result = new jalview.commands.EditCommand ();
-var edits = command.getEditIterator (!undo);
-while (edits.hasNext ()) {
-var edit = edits.next ();
-if (edit.getAction () === jalview.commands.EditCommand.Action.CUT || edit.getAction () === jalview.commands.EditCommand.Action.PASTE) {
-jalview.util.MappingUtils.mapCutOrPaste (edit, undo, mapTo.getSequences (), result, mappings);
-} else if (edit.getAction () === jalview.commands.EditCommand.Action.INSERT_GAP || edit.getAction () === jalview.commands.EditCommand.Action.DELETE_GAP) {
-jalview.util.MappingUtils.mapInsertOrDelete (edit, undo, originalSequences, mapTo.getSequences (), targetCopies, gapChar, result, mappings);
-}}
-return result.getSize () > 0 ? result : null;
-}, "jalview.commands.EditCommand,~B,jalview.datamodel.AlignmentI,~S,java.util.Set");
-c$.mapInsertOrDelete = Clazz.defineMethod (c$, "mapInsertOrDelete",
-function (edit, undo, originalSequences, targetSeqs, targetCopies, gapChar, result, mappings) {
-var action = edit.getAction ();
-if (undo) {
-action = action.getUndoAction ();
-}var count = edit.getNumber ();
-var editPos = edit.getPosition ();
-for (var seq, $seq = 0, $$seq = edit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
-var ds = seq.getDatasetSequence ();
-if (ds == null) {
-continue;
-}var actedOn = originalSequences.get (ds);
-var seqpos = actedOn.findPosition (editPos);
-var sr = jalview.util.MappingUtils.buildSearchResults (seq, seqpos, mappings);
-if (!sr.isEmpty ()) {
-for (var targetSeq, $targetSeq = targetSeqs.iterator (); $targetSeq.hasNext () && ((targetSeq = $targetSeq.next ()) || true);) {
-ds = targetSeq.getDatasetSequence ();
-if (ds == null) {
-continue;
-}var copyTarget = targetCopies.get (ds);
-var match = sr.getResults (copyTarget, 0, copyTarget.getLength ());
-if (match != null) {
-var ratio = 3;
-var mappedCount = count * 3;
-var mappedEditPos = action === jalview.commands.EditCommand.Action.DELETE_GAP ? match[0] - mappedCount : match[0];
-var e = resultClazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, action, Clazz.newArray (-1, [targetSeq]), mappedEditPos, mappedCount, gapChar);
-result.addEdit (e);
-if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
-copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (copyTarget.getSequence (), mappedEditPos, mappedCount, gapChar)));
-} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
-copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (copyTarget.getSequence (), mappedEditPos, mappedEditPos + mappedCount)));
-}}}
-}if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
-actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (actedOn.getSequence (), editPos, count, gapChar)));
-} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
-actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (actedOn.getSequence (), editPos, editPos + count)));
-}}
-}, "jalview.commands.EditCommand.Edit,~B,java.util.Map,java.util.List,java.util.Map,~S,jalview.commands.EditCommand,java.util.Set");
-c$.buildSearchResults = Clazz.defineMethod (c$, "buildSearchResults",
-function (seq, index, seqmappings) {
-var results = new jalview.datamodel.SearchResults ();
-jalview.util.MappingUtils.addSearchResults (results, seq, index, seqmappings);
-return results;
-}, "jalview.datamodel.SequenceI,~N,java.util.Set");
-c$.addSearchResults = Clazz.defineMethod (c$, "addSearchResults",
-function (results, seq, index, seqmappings) {
-if (index >= seq.getStart () && index <= seq.getEnd ()) {
-for (var acf, $acf = seqmappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-acf.markMappedRegion (seq, index, results);
-}
-}}, "jalview.datamodel.SearchResults,jalview.datamodel.SequenceI,~N,java.util.Set");
-c$.mapSequenceGroup = Clazz.defineMethod (c$, "mapSequenceGroup",
-function (sg, mapFrom, mapTo) {
-var targetIsNucleotide = mapTo.isNucleotide ();
-var protein = targetIsNucleotide ? mapFrom : mapTo;
-var codonFrames = protein.getAlignment ().getCodonFrames ();
-var mappedGroup = new jalview.datamodel.SequenceGroup (sg);
-mappedGroup.cs = mapTo.getGlobalColourScheme ();
-mappedGroup.clear ();
-var minStartCol = -1;
-var maxEndCol = -1;
-var selectionStartRes = sg.getStartRes ();
-var selectionEndRes = sg.getEndRes ();
-for (var selected, $selected = sg.getSequences ().iterator (); $selected.hasNext () && ((selected = $selected.next ()) || true);) {
-var firstUngappedPos = selectionStartRes;
-while (firstUngappedPos <= selectionEndRes && jalview.util.Comparison.isGap (selected.getCharAt (firstUngappedPos))) {
-firstUngappedPos++;
-}
-if (firstUngappedPos > selectionEndRes) {
-continue;
-}var lastUngappedPos = selectionEndRes;
-while (lastUngappedPos >= selectionStartRes && jalview.util.Comparison.isGap (selected.getCharAt (lastUngappedPos))) {
-lastUngappedPos--;
-}
-var startResiduePos = selected.findPosition (firstUngappedPos);
-var endResiduePos = selected.findPosition (lastUngappedPos);
-for (var acf, $acf = codonFrames.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-var mappedSequence = targetIsNucleotide ? acf.getDnaForAaSeq (selected) : acf.getAaForDnaSeq (selected);
-if (mappedSequence != null) {
-for (var seq, $seq = mapTo.getAlignment ().getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-var mappedStartResidue = 0;
-var mappedEndResidue = 0;
-if (seq.getDatasetSequence () === mappedSequence) {
-var sr = jalview.util.MappingUtils.buildSearchResults (selected, startResiduePos, java.util.Collections.singleton (acf));
-for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
-mappedStartResidue = m.getStart ();
-mappedEndResidue = m.getEnd ();
-}
-sr = jalview.util.MappingUtils.buildSearchResults (selected, endResiduePos, java.util.Collections.singleton (acf));
-for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
-mappedStartResidue = Math.min (mappedStartResidue, m.getStart ());
-mappedEndResidue = Math.max (mappedEndResidue, m.getEnd ());
-}
-var mappedStartCol = seq.findIndex (mappedStartResidue) - 1;
-minStartCol = minStartCol == -1 ? mappedStartCol : Math.min (minStartCol, mappedStartCol);
-var mappedEndCol = seq.findIndex (mappedEndResidue) - 1;
-maxEndCol = maxEndCol == -1 ? mappedEndCol : Math.max (maxEndCol, mappedEndCol);
-mappedGroup.addSequence (seq, false);
-break;
-}}
-}}
-}
-mappedGroup.setStartRes (minStartCol < 0 ? 0 : minStartCol);
-mappedGroup.setEndRes (maxEndCol < 0 ? 0 : maxEndCol);
-return mappedGroup;
-}, "jalview.datamodel.SequenceGroup,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
-c$.mapOrderCommand = Clazz.defineMethod (c$, "mapOrderCommand",
-function (command, undo, mapTo, mappings) {
-var sortOrder = command.getSequenceOrder (undo);
-var mappedOrder = new java.util.ArrayList ();
-var j = 0;
-var mappingToNucleotide = mapTo.isNucleotide ();
-for (var seq, $seq = 0, $$seq = sortOrder; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
-for (var acf, $acf = mappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
-var mappedSeq = mappingToNucleotide ? acf.getDnaForAaSeq (seq) : acf.getAaForDnaSeq (seq);
-if (mappedSeq != null) {
-for (var seq2, $seq2 = mapTo.getSequences ().iterator (); $seq2.hasNext () && ((seq2 = $seq2.next ()) || true);) {
-if (seq2.getDatasetSequence () === mappedSeq) {
-mappedOrder.add (seq2);
-j++;
-break;
-}}
-}}
-}
-if (j == 0) {
-return null;
-}if (j < mapTo.getHeight ()) {
-for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-if (!mappedOrder.contains (seq)) {
-mappedOrder.add (seq);
-}}
-}var mappedOrderArray = mappedOrder.toArray ( new Array (mappedOrder.size ()));
-var oldOrder = mapTo.getSequencesArray ();
-jalview.analysis.AlignmentSorter.sortBy (mapTo, new jalview.datamodel.AlignmentOrder (mappedOrderArray));
-var result = new jalview.commands.OrderCommand (command.getDescription (), oldOrder, mapTo);
-return result;
-}, "jalview.commands.OrderCommand,~B,jalview.datamodel.AlignmentI,java.util.Set");
-c$.mapColumnSelection = Clazz.defineMethod (c$, "mapColumnSelection",
-function (colsel, mapFrom, mapTo) {
-var targetIsNucleotide = mapTo.isNucleotide ();
-var protein = targetIsNucleotide ? mapFrom : mapTo;
-var codonFrames = protein.getAlignment ().getCodonFrames ();
-var mappedColumns = new jalview.datamodel.ColumnSelection ();
-if (colsel == null) {
-return mappedColumns;
-}var fromGapChar = mapFrom.getAlignment ().getGapCharacter ();
-for (var obj, $obj = colsel.getSelected ().iterator (); $obj.hasNext () && ((obj = $obj.next ()) || true);) {
-var col = (obj).intValue ();
-var mappedToMin = 2147483647;
-var mappedToMax = -2147483648;
-for (var fromSeq, $fromSeq = mapFrom.getAlignment ().getSequences ().iterator (); $fromSeq.hasNext () && ((fromSeq = $fromSeq.next ()) || true);) {
-if (fromSeq.getCharAt (col) == fromGapChar) {
-continue;
-}var residuePos = fromSeq.findPosition (col);
-var sr = jalview.util.MappingUtils.buildSearchResults (fromSeq, residuePos, codonFrames);
-for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
-var mappedStartResidue = m.getStart ();
-var mappedEndResidue = m.getEnd ();
-var mappedSeq = m.getSequence ();
-for (var toSeq, $toSeq = mapTo.getAlignment ().getSequences ().iterator (); $toSeq.hasNext () && ((toSeq = $toSeq.next ()) || true);) {
-if (toSeq.getDatasetSequence () === mappedSeq) {
-var mappedStartCol = toSeq.findIndex (mappedStartResidue);
-var mappedEndCol = toSeq.findIndex (mappedEndResidue);
-mappedToMin = Math.min (mappedToMin, mappedStartCol);
-mappedToMax = Math.max (mappedToMax, mappedEndCol);
-break;
-}}
-}
-}
-for (var i = mappedToMin; i <= mappedToMax; i++) {
-mappedColumns.addElement (i - 1);
-}
-}
-return mappedColumns;
-}, "jalview.datamodel.ColumnSelection,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
-c$.findCodonFor = Clazz.defineMethod (c$, "findCodonFor",
-function (seq, col, mappings) {
-var dsPos = seq.findPosition (col);
-for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
-if (mapping.involvesSequence (seq)) {
-return mapping.getMappedCodon (seq.getDatasetSequence (), dsPos);
-}}
-return null;
-}, "jalview.datamodel.SequenceI,~N,java.util.Set");
-c$.flattenRanges = Clazz.defineMethod (c$, "flattenRanges",
-function (ranges) {
-var count = 0;
-for (var i = 0; i < ranges.length - 1; i += 2) {
-count += ranges[i + 1] - ranges[i] + 1;
-}
-var result = Clazz.newIntArray (count, 0);
-var k = 0;
-for (var i = 0; i < ranges.length - 1; i += 2) {
-for (var j = ranges[i]; j <= ranges[i + 1]; j++) {
-result[k++] = j;
-}
-}
-return result;
-}, "~A");
-c$.findMappingsForSequence = Clazz.defineMethod (c$, "findMappingsForSequence",
-function (sequence, mappings) {
-var result = new java.util.ArrayList ();
-if (sequence == null || mappings == null) {
-return result;
-}for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
-if (mapping.involvesSequence (sequence)) {
-result.add (mapping);
-}}
-return result;
-}, "jalview.datamodel.SequenceI,java.util.Set");
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.MappingUtils", ["jalview.analysis.AlignmentSorter", "jalview.commands.EditCommand", "$.OrderCommand", "jalview.datamodel.AlignmentOrder", "$.ColumnSelection", "$.SearchResults", "$.Sequence", "$.SequenceGroup", "jalview.util.Comparison", "$.StringUtils", "java.util.ArrayList", "$.Collections", "$.HashMap"], function () {
+c$ = Clazz.declareType (jalview.util, "MappingUtils");
+c$.mapCutOrPaste = Clazz.defineMethod (c$, "mapCutOrPaste",
+function (edit, undo, targetSeqs, result, mappings) {
+var action = edit.getAction ();
+if (undo) {
+action = action.getUndoAction ();
+}System.err.println ("MappingUtils.mapCutOrPaste not yet implemented");
+}, "jalview.commands.EditCommand.Edit,~B,java.util.List,jalview.commands.EditCommand,java.util.Set");
+c$.mapEditCommand = Clazz.defineMethod (c$, "mapEditCommand",
+function (command, undo, mapTo, gapChar, mappings) {
+if (!mapTo.isNucleotide ()) {
+return null;
+}var targetCopies = new java.util.HashMap ();
+for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var ds = seq.getDatasetSequence ();
+if (ds != null) {
+var copy = new jalview.datamodel.Sequence (seq);
+copy.setDatasetSequence (ds);
+targetCopies.put (ds, copy);
+}}
+var originalSequences = command.priorState (undo);
+var result = new jalview.commands.EditCommand ();
+var edits = command.getEditIterator (!undo);
+while (edits.hasNext ()) {
+var edit = edits.next ();
+if (edit.getAction () === jalview.commands.EditCommand.Action.CUT || edit.getAction () === jalview.commands.EditCommand.Action.PASTE) {
+jalview.util.MappingUtils.mapCutOrPaste (edit, undo, mapTo.getSequences (), result, mappings);
+} else if (edit.getAction () === jalview.commands.EditCommand.Action.INSERT_GAP || edit.getAction () === jalview.commands.EditCommand.Action.DELETE_GAP) {
+jalview.util.MappingUtils.mapInsertOrDelete (edit, undo, originalSequences, mapTo.getSequences (), targetCopies, gapChar, result, mappings);
+}}
+return result.getSize () > 0 ? result : null;
+}, "jalview.commands.EditCommand,~B,jalview.datamodel.AlignmentI,~S,java.util.Set");
+c$.mapInsertOrDelete = Clazz.defineMethod (c$, "mapInsertOrDelete",
+function (edit, undo, originalSequences, targetSeqs, targetCopies, gapChar, result, mappings) {
+var action = edit.getAction ();
+if (undo) {
+action = action.getUndoAction ();
+}var count = edit.getNumber ();
+var editPos = edit.getPosition ();
+for (var seq, $seq = 0, $$seq = edit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+var ds = seq.getDatasetSequence ();
+if (ds == null) {
+continue;
+}var actedOn = originalSequences.get (ds);
+var seqpos = actedOn.findPosition (editPos);
+var sr = jalview.util.MappingUtils.buildSearchResults (seq, seqpos, mappings);
+if (!sr.isEmpty ()) {
+for (var targetSeq, $targetSeq = targetSeqs.iterator (); $targetSeq.hasNext () && ((targetSeq = $targetSeq.next ()) || true);) {
+ds = targetSeq.getDatasetSequence ();
+if (ds == null) {
+continue;
+}var copyTarget = targetCopies.get (ds);
+var match = sr.getResults (copyTarget, 0, copyTarget.getLength ());
+if (match != null) {
+var ratio = 3;
+var mappedCount = count * 3;
+var mappedEditPos = action === jalview.commands.EditCommand.Action.DELETE_GAP ? match[0] - mappedCount : match[0];
+var e = resultClazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, action, Clazz.newArray (-1, [targetSeq]), mappedEditPos, mappedCount, gapChar);
+result.addEdit (e);
+if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
+copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (copyTarget.getSequence (), mappedEditPos, mappedCount, gapChar)));
+} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+copyTarget.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (copyTarget.getSequence (), mappedEditPos, mappedEditPos + mappedCount)));
+}}}
+}if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
+actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (actedOn.getSequence (), editPos, count, gapChar)));
+} else if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+actedOn.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (actedOn.getSequence (), editPos, editPos + count)));
+}}
+}, "jalview.commands.EditCommand.Edit,~B,java.util.Map,java.util.List,java.util.Map,~S,jalview.commands.EditCommand,java.util.Set");
+c$.buildSearchResults = Clazz.defineMethod (c$, "buildSearchResults",
+function (seq, index, seqmappings) {
+var results = new jalview.datamodel.SearchResults ();
+jalview.util.MappingUtils.addSearchResults (results, seq, index, seqmappings);
+return results;
+}, "jalview.datamodel.SequenceI,~N,java.util.Set");
+c$.addSearchResults = Clazz.defineMethod (c$, "addSearchResults",
+function (results, seq, index, seqmappings) {
+if (index >= seq.getStart () && index <= seq.getEnd ()) {
+for (var acf, $acf = seqmappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+acf.markMappedRegion (seq, index, results);
+}
+}}, "jalview.datamodel.SearchResults,jalview.datamodel.SequenceI,~N,java.util.Set");
+c$.mapSequenceGroup = Clazz.defineMethod (c$, "mapSequenceGroup",
+function (sg, mapFrom, mapTo) {
+var targetIsNucleotide = mapTo.isNucleotide ();
+var protein = targetIsNucleotide ? mapFrom : mapTo;
+var codonFrames = protein.getAlignment ().getCodonFrames ();
+var mappedGroup = new jalview.datamodel.SequenceGroup (sg);
+mappedGroup.cs = mapTo.getGlobalColourScheme ();
+mappedGroup.clear ();
+var minStartCol = -1;
+var maxEndCol = -1;
+var selectionStartRes = sg.getStartRes ();
+var selectionEndRes = sg.getEndRes ();
+for (var selected, $selected = sg.getSequences ().iterator (); $selected.hasNext () && ((selected = $selected.next ()) || true);) {
+var firstUngappedPos = selectionStartRes;
+while (firstUngappedPos <= selectionEndRes && jalview.util.Comparison.isGap (selected.getCharAt (firstUngappedPos))) {
+firstUngappedPos++;
+}
+if (firstUngappedPos > selectionEndRes) {
+continue;
+}var lastUngappedPos = selectionEndRes;
+while (lastUngappedPos >= selectionStartRes && jalview.util.Comparison.isGap (selected.getCharAt (lastUngappedPos))) {
+lastUngappedPos--;
+}
+var startResiduePos = selected.findPosition (firstUngappedPos);
+var endResiduePos = selected.findPosition (lastUngappedPos);
+for (var acf, $acf = codonFrames.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+var mappedSequence = targetIsNucleotide ? acf.getDnaForAaSeq (selected) : acf.getAaForDnaSeq (selected);
+if (mappedSequence != null) {
+for (var seq, $seq = mapTo.getAlignment ().getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+var mappedStartResidue = 0;
+var mappedEndResidue = 0;
+if (seq.getDatasetSequence () === mappedSequence) {
+var sr = jalview.util.MappingUtils.buildSearchResults (selected, startResiduePos, java.util.Collections.singleton (acf));
+for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+mappedStartResidue = m.getStart ();
+mappedEndResidue = m.getEnd ();
+}
+sr = jalview.util.MappingUtils.buildSearchResults (selected, endResiduePos, java.util.Collections.singleton (acf));
+for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+mappedStartResidue = Math.min (mappedStartResidue, m.getStart ());
+mappedEndResidue = Math.max (mappedEndResidue, m.getEnd ());
+}
+var mappedStartCol = seq.findIndex (mappedStartResidue) - 1;
+minStartCol = minStartCol == -1 ? mappedStartCol : Math.min (minStartCol, mappedStartCol);
+var mappedEndCol = seq.findIndex (mappedEndResidue) - 1;
+maxEndCol = maxEndCol == -1 ? mappedEndCol : Math.max (maxEndCol, mappedEndCol);
+mappedGroup.addSequence (seq, false);
+break;
+}}
+}}
+}
+mappedGroup.setStartRes (minStartCol < 0 ? 0 : minStartCol);
+mappedGroup.setEndRes (maxEndCol < 0 ? 0 : maxEndCol);
+return mappedGroup;
+}, "jalview.datamodel.SequenceGroup,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
+c$.mapOrderCommand = Clazz.defineMethod (c$, "mapOrderCommand",
+function (command, undo, mapTo, mappings) {
+var sortOrder = command.getSequenceOrder (undo);
+var mappedOrder = new java.util.ArrayList ();
+var j = 0;
+var mappingToNucleotide = mapTo.isNucleotide ();
+for (var seq, $seq = 0, $$seq = sortOrder; $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+for (var acf, $acf = mappings.iterator (); $acf.hasNext () && ((acf = $acf.next ()) || true);) {
+var mappedSeq = mappingToNucleotide ? acf.getDnaForAaSeq (seq) : acf.getAaForDnaSeq (seq);
+if (mappedSeq != null) {
+for (var seq2, $seq2 = mapTo.getSequences ().iterator (); $seq2.hasNext () && ((seq2 = $seq2.next ()) || true);) {
+if (seq2.getDatasetSequence () === mappedSeq) {
+mappedOrder.add (seq2);
+j++;
+break;
+}}
+}}
+}
+if (j == 0) {
+return null;
+}if (j < mapTo.getHeight ()) {
+for (var seq, $seq = mapTo.getSequences ().iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+if (!mappedOrder.contains (seq)) {
+mappedOrder.add (seq);
+}}
+}var mappedOrderArray = mappedOrder.toArray ( new Array (mappedOrder.size ()));
+var oldOrder = mapTo.getSequencesArray ();
+jalview.analysis.AlignmentSorter.sortBy (mapTo, new jalview.datamodel.AlignmentOrder (mappedOrderArray));
+var result = new jalview.commands.OrderCommand (command.getDescription (), oldOrder, mapTo);
+return result;
+}, "jalview.commands.OrderCommand,~B,jalview.datamodel.AlignmentI,java.util.Set");
+c$.mapColumnSelection = Clazz.defineMethod (c$, "mapColumnSelection",
+function (colsel, mapFrom, mapTo) {
+var targetIsNucleotide = mapTo.isNucleotide ();
+var protein = targetIsNucleotide ? mapFrom : mapTo;
+var codonFrames = protein.getAlignment ().getCodonFrames ();
+var mappedColumns = new jalview.datamodel.ColumnSelection ();
+if (colsel == null) {
+return mappedColumns;
+}var fromGapChar = mapFrom.getAlignment ().getGapCharacter ();
+for (var obj, $obj = colsel.getSelected ().iterator (); $obj.hasNext () && ((obj = $obj.next ()) || true);) {
+var col = (obj).intValue ();
+var mappedToMin = 2147483647;
+var mappedToMax = -2147483648;
+for (var fromSeq, $fromSeq = mapFrom.getAlignment ().getSequences ().iterator (); $fromSeq.hasNext () && ((fromSeq = $fromSeq.next ()) || true);) {
+if (fromSeq.getCharAt (col) == fromGapChar) {
+continue;
+}var residuePos = fromSeq.findPosition (col);
+var sr = jalview.util.MappingUtils.buildSearchResults (fromSeq, residuePos, codonFrames);
+for (var m, $m = sr.getResults ().iterator (); $m.hasNext () && ((m = $m.next ()) || true);) {
+var mappedStartResidue = m.getStart ();
+var mappedEndResidue = m.getEnd ();
+var mappedSeq = m.getSequence ();
+for (var toSeq, $toSeq = mapTo.getAlignment ().getSequences ().iterator (); $toSeq.hasNext () && ((toSeq = $toSeq.next ()) || true);) {
+if (toSeq.getDatasetSequence () === mappedSeq) {
+var mappedStartCol = toSeq.findIndex (mappedStartResidue);
+var mappedEndCol = toSeq.findIndex (mappedEndResidue);
+mappedToMin = Math.min (mappedToMin, mappedStartCol);
+mappedToMax = Math.max (mappedToMax, mappedEndCol);
+break;
+}}
+}
+}
+for (var i = mappedToMin; i <= mappedToMax; i++) {
+mappedColumns.addElement (i - 1);
+}
+}
+return mappedColumns;
+}, "jalview.datamodel.ColumnSelection,jalview.api.AlignViewportI,jalview.api.AlignViewportI");
+c$.findCodonFor = Clazz.defineMethod (c$, "findCodonFor",
+function (seq, col, mappings) {
+var dsPos = seq.findPosition (col);
+for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (mapping.involvesSequence (seq)) {
+return mapping.getMappedCodon (seq.getDatasetSequence (), dsPos);
+}}
+return null;
+}, "jalview.datamodel.SequenceI,~N,java.util.Set");
+c$.flattenRanges = Clazz.defineMethod (c$, "flattenRanges",
+function (ranges) {
+var count = 0;
+for (var i = 0; i < ranges.length - 1; i += 2) {
+count += ranges[i + 1] - ranges[i] + 1;
+}
+var result = Clazz.newIntArray (count, 0);
+var k = 0;
+for (var i = 0; i < ranges.length - 1; i += 2) {
+for (var j = ranges[i]; j <= ranges[i + 1]; j++) {
+result[k++] = j;
+}
+}
+return result;
+}, "~A");
+c$.findMappingsForSequence = Clazz.defineMethod (c$, "findMappingsForSequence",
+function (sequence, mappings) {
+var result = new java.util.ArrayList ();
+if (sequence == null || mappings == null) {
+return result;
+}for (var mapping, $mapping = mappings.iterator (); $mapping.hasNext () && ((mapping = $mapping.next ()) || true);) {
+if (mapping.involvesSequence (sequence)) {
+result.add (mapping);
+}}
+return result;
+}, "jalview.datamodel.SequenceI,java.util.Set");
+});
diff --git a/bin/jalview/util/MessageManager.class b/bin/jalview/util/MessageManager.class
index be41395..c37487c 100644
Binary files a/bin/jalview/util/MessageManager.class and b/bin/jalview/util/MessageManager.class differ
diff --git a/bin/jalview/util/MessageManager.js b/bin/jalview/util/MessageManager.js
index 44350e0..4283582 100644
--- a/bin/jalview/util/MessageManager.js
+++ b/bin/jalview/util/MessageManager.js
@@ -1,73 +1,73 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.text.MessageFormat", "java.util.logging.Logger"], "jalview.util.MessageManager", ["java.util.Locale", "$.ResourceBundle", "java.util.logging.Level"], function () {
-c$ = Clazz.declareType (jalview.util, "MessageManager");
-c$.getString = Clazz.defineMethod (c$, "getString",
-function (key) {
-var value = "[missing key] " + key;
-try {
-value = jalview.util.MessageManager.rb.getString (key);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-jalview.util.MessageManager.log.warning ("I18N missing: " + jalview.util.MessageManager.loc + "\t" + key);
-} else {
-throw e;
-}
-}
-return value;
-}, "~S");
-c$.getLocale = Clazz.defineMethod (c$, "getLocale",
-function () {
-return jalview.util.MessageManager.loc;
-});
-c$.formatMessage = Clazz.defineMethod (c$, "formatMessage",
-function (key, params) {
-return java.text.MessageFormat.format (jalview.util.MessageManager.getString (key), params);
-}, "~S,~A");
-c$.formatMessage = Clazz.defineMethod (c$, "formatMessage",
-function (key, params) {
-return java.text.MessageFormat.format (jalview.util.MessageManager.getString (key), params);
-}, "~S,~A");
-c$.getStringOrReturn = Clazz.defineMethod (c$, "getStringOrReturn",
-function (keyroot, name) {
-var smkey = keyroot + name.toLowerCase ().replaceAll (" ", "");
-try {
-name = jalview.util.MessageManager.rb.getString (smkey);
-} catch (x) {
-if (Clazz.exceptionOf (x, Exception)) {
-jalview.util.MessageManager.log.finest ("I18N missing key with root " + keyroot + ": " + jalview.util.MessageManager.loc + "\t" + smkey);
-} else {
-throw x;
-}
-}
-return name;
-}, "~S,~S");
-Clazz.defineStatics (c$,
-"rb", null);
-c$.log = c$.prototype.log = java.util.logging.Logger.getLogger (jalview.util.MessageManager.getCanonicalName ());
-Clazz.defineStatics (c$,
-"loc", null);
-{
-try {
-jalview.util.MessageManager.loc = java.util.Locale.getDefault ();
-jalview.util.MessageManager.log.info ("Getting messages for lang: " + jalview.util.MessageManager.loc);
-jalview.util.MessageManager.rb = java.util.ResourceBundle.getBundle ("lang.Messages", jalview.util.MessageManager.loc);
-if (jalview.util.MessageManager.rb == null || jalview.util.MessageManager.log.isLoggable (java.util.logging.Level.FINEST)) {
-jalview.util.MessageManager.log.finest ("Language keys: " + jalview.util.MessageManager.rb.keySet ());
-}} catch (e$$) {
-if (Clazz.exceptionOf (e$$, Exception)) {
-var q = e$$;
-{
-jalview.util.MessageManager.log.warning ("Exception when initting Locale for i18n messages\n" + q.getMessage ());
-q.printStackTrace ();
-}
-} else if (Clazz.exceptionOf (e$$, Error)) {
-var v = e$$;
-{
-jalview.util.MessageManager.log.warning ("Error when initting Locale for i18n messages\n" + v.getMessage ());
-v.printStackTrace ();
-}
-} else {
-throw e$$;
-}
-}
-}});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.text.MessageFormat", "java.util.logging.Logger"], "jalview.util.MessageManager", ["java.util.Locale", "$.ResourceBundle", "java.util.logging.Level"], function () {
+c$ = Clazz.declareType (jalview.util, "MessageManager");
+c$.getString = Clazz.defineMethod (c$, "getString",
+function (key) {
+var value = "[missing key] " + key;
+try {
+value = jalview.util.MessageManager.rb.getString (key);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+jalview.util.MessageManager.log.warning ("I18N missing: " + jalview.util.MessageManager.loc + "\t" + key);
+} else {
+throw e;
+}
+}
+return value;
+}, "~S");
+c$.getLocale = Clazz.defineMethod (c$, "getLocale",
+function () {
+return jalview.util.MessageManager.loc;
+});
+c$.formatMessage = Clazz.defineMethod (c$, "formatMessage",
+function (key, params) {
+return java.text.MessageFormat.format (jalview.util.MessageManager.getString (key), params);
+}, "~S,~A");
+c$.formatMessage = Clazz.defineMethod (c$, "formatMessage",
+function (key, params) {
+return java.text.MessageFormat.format (jalview.util.MessageManager.getString (key), params);
+}, "~S,~A");
+c$.getStringOrReturn = Clazz.defineMethod (c$, "getStringOrReturn",
+function (keyroot, name) {
+var smkey = keyroot + name.toLowerCase ().replaceAll (" ", "");
+try {
+name = jalview.util.MessageManager.rb.getString (smkey);
+} catch (x) {
+if (Clazz.exceptionOf (x, Exception)) {
+jalview.util.MessageManager.log.finest ("I18N missing key with root " + keyroot + ": " + jalview.util.MessageManager.loc + "\t" + smkey);
+} else {
+throw x;
+}
+}
+return name;
+}, "~S,~S");
+Clazz.defineStatics (c$,
+"rb", null);
+c$.log = c$.prototype.log = java.util.logging.Logger.getLogger (jalview.util.MessageManager.getCanonicalName ());
+Clazz.defineStatics (c$,
+"loc", null);
+{
+try {
+jalview.util.MessageManager.loc = java.util.Locale.getDefault ();
+jalview.util.MessageManager.log.info ("Getting messages for lang: " + jalview.util.MessageManager.loc);
+jalview.util.MessageManager.rb = java.util.ResourceBundle.getBundle ("lang.Messages", jalview.util.MessageManager.loc);
+if (jalview.util.MessageManager.rb == null || jalview.util.MessageManager.log.isLoggable (java.util.logging.Level.FINEST)) {
+jalview.util.MessageManager.log.finest ("Language keys: " + jalview.util.MessageManager.rb.keySet ());
+}} catch (e$$) {
+if (Clazz.exceptionOf (e$$, Exception)) {
+var q = e$$;
+{
+jalview.util.MessageManager.log.warning ("Exception when initting Locale for i18n messages\n" + q.getMessage ());
+q.printStackTrace ();
+}
+} else if (Clazz.exceptionOf (e$$, Error)) {
+var v = e$$;
+{
+jalview.util.MessageManager.log.warning ("Error when initting Locale for i18n messages\n" + v.getMessage ());
+v.printStackTrace ();
+}
+} else {
+throw e$$;
+}
+}
+}});
diff --git a/bin/jalview/util/ParseHtmlBodyAndLinks.class b/bin/jalview/util/ParseHtmlBodyAndLinks.class
index 4160bc9..3c62b7d 100644
Binary files a/bin/jalview/util/ParseHtmlBodyAndLinks.class and b/bin/jalview/util/ParseHtmlBodyAndLinks.class differ
diff --git a/bin/jalview/util/ParseHtmlBodyAndLinks.js b/bin/jalview/util/ParseHtmlBodyAndLinks.js
index bf67f6a..8e41548 100644
--- a/bin/jalview/util/ParseHtmlBodyAndLinks.js
+++ b/bin/jalview/util/ParseHtmlBodyAndLinks.js
@@ -1,78 +1,78 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.lang.StringBuffer", "java.util.ArrayList", "java.util.regex.Pattern"], "jalview.util.ParseHtmlBodyAndLinks", ["java.util.StringTokenizer"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.orig = null;
-this.htmlContent = true;
-this.links = null;
-this.sb = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "ParseHtmlBodyAndLinks");
-Clazz.prepareFields (c$, function () {
-this.links = new java.util.ArrayList ();
-this.sb = new StringBuffer ();
-});
-Clazz.defineMethod (c$, "getOrig",
-function () {
-return this.orig;
-});
-Clazz.defineMethod (c$, "isHtmlContent",
-function () {
-return this.htmlContent;
-});
-Clazz.defineMethod (c$, "getContent",
-function () {
-return this.sb.toString ();
-});
-Clazz.defineMethod (c$, "getLinks",
-function () {
-return this.links;
-});
-Clazz.makeConstructor (c$,
-function (description, removeHTML, newline) {
-if (description == null || description.length == 0) {
-this.htmlContent = false;
-return;
-}if (description.toUpperCase ().indexOf ("") == -1) {
-this.htmlContent = false;
-}this.orig = description;
-var st = new java.util.StringTokenizer (description, "<");
-var token;
-var link;
-var startTag;
-var tag = null;
-while (st.hasMoreElements ()) {
-token = st.nextToken ("&>");
-if (token.equalsIgnoreCase ("html") || token.startsWith ("/")) {
-continue;
-}tag = null;
-startTag = token.indexOf ("<");
-if (startTag > -1) {
-tag = token.substring (startTag + 1);
-token = token.substring (0, startTag);
-}if (tag != null && tag.toUpperCase ().startsWith ("A HREF=")) {
-if (token.length > 0) {
-this.sb.append (token);
-}link = tag.substring (tag.indexOf ("\"") + 1, tag.length - 1);
-var label = st.nextToken ("<>");
-this.links.add (label + "|" + link);
-this.sb.append (label + "%LINK%");
-} else if (tag != null && tag.equalsIgnoreCase ("br")) {
-this.sb.append (newline);
-} else if (token.startsWith ("lt;")) {
-this.sb.append ("<" + token.substring (3));
-} else if (token.startsWith ("gt;")) {
-this.sb.append (">" + token.substring (3));
-} else if (token.startsWith ("amp;")) {
-this.sb.append ("&" + token.substring (4));
-} else {
-this.sb.append (token);
-}}
-if (removeHTML && !this.htmlContent) {
-this.sb = new StringBuffer (jalview.util.ParseHtmlBodyAndLinks.LEFT_ANGLE_BRACKET_PATTERN.matcher (description).replaceAll ("<"));
-}}, "~S,~B,~S");
-Clazz.defineMethod (c$, "getNonHtmlContent",
-function () {
-return this.isHtmlContent () ? this.sb.toString () : this.orig;
-});
-c$.LEFT_ANGLE_BRACKET_PATTERN = c$.prototype.LEFT_ANGLE_BRACKET_PATTERN = java.util.regex.Pattern.compile ("<");
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.lang.StringBuffer", "java.util.ArrayList", "java.util.regex.Pattern"], "jalview.util.ParseHtmlBodyAndLinks", ["java.util.StringTokenizer"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.orig = null;
+this.htmlContent = true;
+this.links = null;
+this.sb = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util, "ParseHtmlBodyAndLinks");
+Clazz.prepareFields (c$, function () {
+this.links = new java.util.ArrayList ();
+this.sb = new StringBuffer ();
+});
+Clazz.defineMethod (c$, "getOrig",
+function () {
+return this.orig;
+});
+Clazz.defineMethod (c$, "isHtmlContent",
+function () {
+return this.htmlContent;
+});
+Clazz.defineMethod (c$, "getContent",
+function () {
+return this.sb.toString ();
+});
+Clazz.defineMethod (c$, "getLinks",
+function () {
+return this.links;
+});
+Clazz.makeConstructor (c$,
+function (description, removeHTML, newline) {
+if (description == null || description.length == 0) {
+this.htmlContent = false;
+return;
+}if (description.toUpperCase ().indexOf ("") == -1) {
+this.htmlContent = false;
+}this.orig = description;
+var st = new java.util.StringTokenizer (description, "<");
+var token;
+var link;
+var startTag;
+var tag = null;
+while (st.hasMoreElements ()) {
+token = st.nextToken ("&>");
+if (token.equalsIgnoreCase ("html") || token.startsWith ("/")) {
+continue;
+}tag = null;
+startTag = token.indexOf ("<");
+if (startTag > -1) {
+tag = token.substring (startTag + 1);
+token = token.substring (0, startTag);
+}if (tag != null && tag.toUpperCase ().startsWith ("A HREF=")) {
+if (token.length > 0) {
+this.sb.append (token);
+}link = tag.substring (tag.indexOf ("\"") + 1, tag.length - 1);
+var label = st.nextToken ("<>");
+this.links.add (label + "|" + link);
+this.sb.append (label + "%LINK%");
+} else if (tag != null && tag.equalsIgnoreCase ("br")) {
+this.sb.append (newline);
+} else if (token.startsWith ("lt;")) {
+this.sb.append ("<" + token.substring (3));
+} else if (token.startsWith ("gt;")) {
+this.sb.append (">" + token.substring (3));
+} else if (token.startsWith ("amp;")) {
+this.sb.append ("&" + token.substring (4));
+} else {
+this.sb.append (token);
+}}
+if (removeHTML && !this.htmlContent) {
+this.sb = new StringBuffer (jalview.util.ParseHtmlBodyAndLinks.LEFT_ANGLE_BRACKET_PATTERN.matcher (description).replaceAll ("<"));
+}}, "~S,~B,~S");
+Clazz.defineMethod (c$, "getNonHtmlContent",
+function () {
+return this.isHtmlContent () ? this.sb.toString () : this.orig;
+});
+c$.LEFT_ANGLE_BRACKET_PATTERN = c$.prototype.LEFT_ANGLE_BRACKET_PATTERN = java.util.regex.Pattern.compile ("<");
+});
diff --git a/bin/jalview/util/Platform.js b/bin/jalview/util/Platform.js
index d349bdb..e599669 100644
--- a/bin/jalview/util/Platform.js
+++ b/bin/jalview/util/Platform.js
@@ -1,30 +1,30 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.Platform", ["java.lang.StringBuffer"], function () {
-c$ = Clazz.declareType (jalview.util, "Platform");
-c$.isAMac = Clazz.defineMethod (c$, "isAMac",
-function () {
-return java.lang.System.getProperty ("os.name").indexOf ("Mac") > -1;
-});
-c$.isHeadless = Clazz.defineMethod (c$, "isHeadless",
-function () {
-var hdls = java.lang.System.getProperty ("java.awt.headless");
-return hdls != null && hdls.equals ("true");
-});
-c$.getMaxCommandLineLength = Clazz.defineMethod (c$, "getMaxCommandLineLength",
-function () {
-return 2046;
-});
-c$.escapeString = Clazz.defineMethod (c$, "escapeString",
-function (file) {
-var f = new StringBuffer ();
-var p = 0;
-var lastp = 0;
-while ((p = file.indexOf ('\\', lastp)) > -1) {
-f.append (file.subSequence (lastp, p));
-f.append ("\\\\");
-lastp = p + 1;
-}
-f.append (file.substring (lastp));
-return f.toString ();
-}, "~S");
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.Platform", ["java.lang.StringBuffer"], function () {
+c$ = Clazz.declareType (jalview.util, "Platform");
+c$.isAMac = Clazz.defineMethod (c$, "isAMac",
+function () {
+return java.lang.System.getProperty ("os.name").indexOf ("Mac") > -1;
+});
+c$.isHeadless = Clazz.defineMethod (c$, "isHeadless",
+function () {
+var hdls = java.lang.System.getProperty ("java.awt.headless");
+return hdls != null && hdls.equals ("true");
+});
+c$.getMaxCommandLineLength = Clazz.defineMethod (c$, "getMaxCommandLineLength",
+function () {
+return 2046;
+});
+c$.escapeString = Clazz.defineMethod (c$, "escapeString",
+function (file) {
+var f = new StringBuffer ();
+var p = 0;
+var lastp = 0;
+while ((p = file.indexOf ('\\', lastp)) > -1) {
+f.append (file.subSequence (lastp, p));
+f.append ("\\\\");
+lastp = p + 1;
+}
+f.append (file.substring (lastp));
+return f.toString ();
+}, "~S");
+});
diff --git a/bin/jalview/util/QuickSort.js b/bin/jalview/util/QuickSort.js
index a0960b5..f8fb52f 100644
--- a/bin/jalview/util/QuickSort.js
+++ b/bin/jalview/util/QuickSort.js
@@ -1,231 +1,231 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.QuickSort", ["java.lang.Float", "java.util.Arrays"], function () {
-c$ = Clazz.declareType (jalview.util, "QuickSort");
-c$.sortInt = Clazz.defineMethod (c$, "sortInt",
-function (arr, s) {
-jalview.util.QuickSort.sortInt (arr, 0, arr.length - 1, s);
-}, "~A,~A");
-c$.sortFloatObject = Clazz.defineMethod (c$, "sortFloatObject",
-function (arr, s) {
-jalview.util.QuickSort.sortFloat (arr, 0, arr.length - 1, s);
-}, "~A,~A");
-c$.sortDouble = Clazz.defineMethod (c$, "sortDouble",
-function (arr, s) {
-jalview.util.QuickSort.sortDouble (arr, 0, arr.length - 1, s);
-}, "~A,~A");
-c$.sort = Clazz.defineMethod (c$, "sort",
-function (arr, s) {
-jalview.util.QuickSort.stringSort (arr, 0, arr.length - 1, s);
-}, "~A,~A");
-c$.stringSort = Clazz.defineMethod (c$, "stringSort",
-($fz = function (arr, p, r, s) {
-var q;
-if (p < r) {
-q = jalview.util.QuickSort.stringPartition (arr, p, r, s);
-jalview.util.QuickSort.stringSort (arr, p, q, s);
-jalview.util.QuickSort.stringSort (arr, q + 1, r, s);
-}}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
-c$.sortFloat = Clazz.defineMethod (c$, "sortFloat",
-($fz = function (arr, p, r, s) {
-var q;
-if (p < r) {
-q = jalview.util.QuickSort.partitionFloat (arr, p, r, s);
-jalview.util.QuickSort.sortFloat (arr, p, q, s);
-jalview.util.QuickSort.sortFloat (arr, q + 1, r, s);
-}}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
-c$.sortInt = Clazz.defineMethod (c$, "sortInt",
-($fz = function (arr, p, r, s) {
-var q;
-if (p < r) {
-q = jalview.util.QuickSort.partitionInt (arr, p, r, s);
-jalview.util.QuickSort.sortInt (arr, p, q, s);
-jalview.util.QuickSort.sortInt (arr, q + 1, r, s);
-}}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
-c$.partitionFloat = Clazz.defineMethod (c$, "partitionFloat",
-($fz = function (arr, p, r, s) {
-var x = arr[p];
-var i = p - 1;
-var j = r + 1;
-while (true) {
-do {
-j = j - 1;
-} while (arr[j] > x);
-do {
-i = i + 1;
-} while (arr[i] < x);
-if (i < j) {
-var tmp = arr[i];
-arr[i] = arr[j];
-arr[j] = tmp;
-var tmp2 = s[i];
-s[i] = s[j];
-s[j] = tmp2;
-} else {
-return j;
-}}
-}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
-c$.partitionInt = Clazz.defineMethod (c$, "partitionInt",
-($fz = function (arr, p, r, s) {
-var x = arr[p];
-var i = p - 1;
-var j = r + 1;
-while (true) {
-do {
-j = j - 1;
-} while (arr[j] > x);
-do {
-i = i + 1;
-} while (arr[i] < x);
-if (i < j) {
-var tmp = arr[i];
-arr[i] = arr[j];
-arr[j] = tmp;
-var tmp2 = s[i];
-s[i] = s[j];
-s[j] = tmp2;
-} else {
-return j;
-}}
-}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
-c$.stringPartition = Clazz.defineMethod (c$, "stringPartition",
-($fz = function (arr, p, r, s) {
-var x = arr[p];
-var i = p - 1;
-var j = r + 1;
-while (true) {
-do {
-j = j - 1;
-} while (arr[j].compareTo (x) < 0);
-do {
-i = i + 1;
-} while (arr[i].compareTo (x) > 0);
-if (i < j) {
-var tmp = arr[i];
-arr[i] = arr[j];
-arr[j] = tmp;
-var tmp2 = s[i];
-s[i] = s[j];
-s[j] = tmp2;
-} else {
-return j;
-}}
-}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
-c$.sortFloatChar = Clazz.defineMethod (c$, "sortFloatChar",
-function (arr, s) {
-var f1 = Clazz.newFloatArray (arr.length, 0);
-var s1 = Clazz.newCharArray (s.length, '\0');
-var nextZeroValue = 0;
-var nextNonZeroValue = arr.length - 1;
-for (var i = 0; i < arr.length; i++) {
-var val = arr[i];
-if (val > 0) {
-f1[nextNonZeroValue] = val;
-s1[nextNonZeroValue] = s[i];
-nextNonZeroValue--;
-} else {
-f1[nextZeroValue] = val;
-s1[nextZeroValue] = s[i];
-nextZeroValue++;
-}}
-System.arraycopy (f1, 0, arr, 0, nextZeroValue);
-System.arraycopy (s1, 0, s, 0, nextZeroValue);
-if (nextZeroValue == arr.length) {
-return;
-}var nonZeroFloats = java.util.Arrays.copyOfRange (f1, nextZeroValue, f1.length);
-var nonZeroChars = java.util.Arrays.copyOfRange (s1, nextZeroValue, s1.length);
-jalview.util.QuickSort.externalSortFloat (nonZeroFloats, nonZeroChars);
-System.arraycopy (nonZeroFloats, 0, arr, nextZeroValue, nonZeroFloats.length);
-System.arraycopy (nonZeroChars, 0, s, nextZeroValue, nonZeroChars.length);
-}, "~A,~A");
-c$.externalSortFloat = Clazz.defineMethod (c$, "externalSortFloat",
-($fz = function (arr, s) {
-var length = arr.length;
-var indices = jalview.util.QuickSort.makeIndexArray (length);
-java.util.Arrays.sort (indices, new jalview.util.QuickSort.FloatComparator (arr));
-var sortedFloats = Clazz.newFloatArray (length, 0);
-var sortedChars = Clazz.newCharArray (s.length, '\0');
-for (var i = 0; i < length; i++) {
-sortedFloats[i] = arr[indices[i]];
-sortedChars[i] = s[indices[i]];
-}
-System.arraycopy (sortedFloats, 0, arr, 0, length);
-System.arraycopy (sortedChars, 0, s, 0, s.length);
-}, $fz.isPrivate = true, $fz), "~A,~A");
-c$.makeIndexArray = Clazz.defineMethod (c$, "makeIndexArray",
-($fz = function (length) {
-var indices = new Array (length);
-for (var i = 0; i < length; i++) {
-indices[i] = new Integer (i);
-}
-return indices;
-}, $fz.isPrivate = true, $fz), "~N");
-c$.sortIntChar = Clazz.defineMethod (c$, "sortIntChar",
-function (arr, s) {
-var f1 = Clazz.newIntArray (arr.length, 0);
-var s1 = Clazz.newCharArray (s.length, '\0');
-var nextZeroValue = 0;
-var nextNonZeroValue = arr.length - 1;
-for (var i = 0; i < arr.length; i++) {
-var val = arr[i];
-if (val > 0) {
-f1[nextNonZeroValue] = val;
-s1[nextNonZeroValue] = s[i];
-nextNonZeroValue--;
-} else {
-f1[nextZeroValue] = val;
-s1[nextZeroValue] = s[i];
-nextZeroValue++;
-}}
-System.arraycopy (f1, 0, arr, 0, nextZeroValue);
-System.arraycopy (s1, 0, s, 0, nextZeroValue);
-if (nextZeroValue == arr.length) {
-return;
-}var nonZeroInts = java.util.Arrays.copyOfRange (f1, nextZeroValue, f1.length);
-var nonZeroChars = java.util.Arrays.copyOfRange (s1, nextZeroValue, s1.length);
-jalview.util.QuickSort.externalSortInt (nonZeroInts, nonZeroChars);
-System.arraycopy (nonZeroInts, 0, arr, nextZeroValue, nonZeroInts.length);
-System.arraycopy (nonZeroChars, 0, s, nextZeroValue, nonZeroChars.length);
-}, "~A,~A");
-c$.externalSortInt = Clazz.defineMethod (c$, "externalSortInt",
-($fz = function (arr, s) {
-var length = arr.length;
-var indices = jalview.util.QuickSort.makeIndexArray (length);
-java.util.Arrays.sort (indices, new jalview.util.QuickSort.IntComparator (arr));
-var sortedInts = Clazz.newIntArray (length, 0);
-var sortedChars = Clazz.newCharArray (s.length, '\0');
-for (var i = 0; i < length; i++) {
-sortedInts[i] = arr[indices[i]];
-sortedChars[i] = s[indices[i]];
-}
-System.arraycopy (sortedInts, 0, arr, 0, length);
-System.arraycopy (sortedChars, 0, s, 0, s.length);
-}, $fz.isPrivate = true, $fz), "~A,~A");
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.values = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util.QuickSort, "FloatComparator", null, java.util.Comparator);
-Clazz.makeConstructor (c$,
-function (a) {
-this.values = a;
-}, "~A");
-Clazz.overrideMethod (c$, "compare",
-function (a, b) {
-return Float.compare (this.values[a.intValue ()], this.values[b]);
-}, "Integer,Integer");
-c$ = Clazz.p0p ();
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.values = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util.QuickSort, "IntComparator", null, java.util.Comparator);
-Clazz.makeConstructor (c$,
-function (a) {
-this.values = a;
-}, "~A");
-Clazz.overrideMethod (c$, "compare",
-function (a, b) {
-return Integer.compare (this.values[a], this.values[b]);
-}, "Integer,Integer");
-c$ = Clazz.p0p ();
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.QuickSort", ["java.lang.Float", "java.util.Arrays"], function () {
+c$ = Clazz.declareType (jalview.util, "QuickSort");
+c$.sortInt = Clazz.defineMethod (c$, "sortInt",
+function (arr, s) {
+jalview.util.QuickSort.sortInt (arr, 0, arr.length - 1, s);
+}, "~A,~A");
+c$.sortFloatObject = Clazz.defineMethod (c$, "sortFloatObject",
+function (arr, s) {
+jalview.util.QuickSort.sortFloat (arr, 0, arr.length - 1, s);
+}, "~A,~A");
+c$.sortDouble = Clazz.defineMethod (c$, "sortDouble",
+function (arr, s) {
+jalview.util.QuickSort.sortDouble (arr, 0, arr.length - 1, s);
+}, "~A,~A");
+c$.sort = Clazz.defineMethod (c$, "sort",
+function (arr, s) {
+jalview.util.QuickSort.stringSort (arr, 0, arr.length - 1, s);
+}, "~A,~A");
+c$.stringSort = Clazz.defineMethod (c$, "stringSort",
+($fz = function (arr, p, r, s) {
+var q;
+if (p < r) {
+q = jalview.util.QuickSort.stringPartition (arr, p, r, s);
+jalview.util.QuickSort.stringSort (arr, p, q, s);
+jalview.util.QuickSort.stringSort (arr, q + 1, r, s);
+}}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
+c$.sortFloat = Clazz.defineMethod (c$, "sortFloat",
+($fz = function (arr, p, r, s) {
+var q;
+if (p < r) {
+q = jalview.util.QuickSort.partitionFloat (arr, p, r, s);
+jalview.util.QuickSort.sortFloat (arr, p, q, s);
+jalview.util.QuickSort.sortFloat (arr, q + 1, r, s);
+}}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
+c$.sortInt = Clazz.defineMethod (c$, "sortInt",
+($fz = function (arr, p, r, s) {
+var q;
+if (p < r) {
+q = jalview.util.QuickSort.partitionInt (arr, p, r, s);
+jalview.util.QuickSort.sortInt (arr, p, q, s);
+jalview.util.QuickSort.sortInt (arr, q + 1, r, s);
+}}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
+c$.partitionFloat = Clazz.defineMethod (c$, "partitionFloat",
+($fz = function (arr, p, r, s) {
+var x = arr[p];
+var i = p - 1;
+var j = r + 1;
+while (true) {
+do {
+j = j - 1;
+} while (arr[j] > x);
+do {
+i = i + 1;
+} while (arr[i] < x);
+if (i < j) {
+var tmp = arr[i];
+arr[i] = arr[j];
+arr[j] = tmp;
+var tmp2 = s[i];
+s[i] = s[j];
+s[j] = tmp2;
+} else {
+return j;
+}}
+}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
+c$.partitionInt = Clazz.defineMethod (c$, "partitionInt",
+($fz = function (arr, p, r, s) {
+var x = arr[p];
+var i = p - 1;
+var j = r + 1;
+while (true) {
+do {
+j = j - 1;
+} while (arr[j] > x);
+do {
+i = i + 1;
+} while (arr[i] < x);
+if (i < j) {
+var tmp = arr[i];
+arr[i] = arr[j];
+arr[j] = tmp;
+var tmp2 = s[i];
+s[i] = s[j];
+s[j] = tmp2;
+} else {
+return j;
+}}
+}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
+c$.stringPartition = Clazz.defineMethod (c$, "stringPartition",
+($fz = function (arr, p, r, s) {
+var x = arr[p];
+var i = p - 1;
+var j = r + 1;
+while (true) {
+do {
+j = j - 1;
+} while (arr[j].compareTo (x) < 0);
+do {
+i = i + 1;
+} while (arr[i].compareTo (x) > 0);
+if (i < j) {
+var tmp = arr[i];
+arr[i] = arr[j];
+arr[j] = tmp;
+var tmp2 = s[i];
+s[i] = s[j];
+s[j] = tmp2;
+} else {
+return j;
+}}
+}, $fz.isPrivate = true, $fz), "~A,~N,~N,~A");
+c$.sortFloatChar = Clazz.defineMethod (c$, "sortFloatChar",
+function (arr, s) {
+var f1 = Clazz.newFloatArray (arr.length, 0);
+var s1 = Clazz.newCharArray (s.length, '\0');
+var nextZeroValue = 0;
+var nextNonZeroValue = arr.length - 1;
+for (var i = 0; i < arr.length; i++) {
+var val = arr[i];
+if (val > 0) {
+f1[nextNonZeroValue] = val;
+s1[nextNonZeroValue] = s[i];
+nextNonZeroValue--;
+} else {
+f1[nextZeroValue] = val;
+s1[nextZeroValue] = s[i];
+nextZeroValue++;
+}}
+System.arraycopy (f1, 0, arr, 0, nextZeroValue);
+System.arraycopy (s1, 0, s, 0, nextZeroValue);
+if (nextZeroValue == arr.length) {
+return;
+}var nonZeroFloats = java.util.Arrays.copyOfRange (f1, nextZeroValue, f1.length);
+var nonZeroChars = java.util.Arrays.copyOfRange (s1, nextZeroValue, s1.length);
+jalview.util.QuickSort.externalSortFloat (nonZeroFloats, nonZeroChars);
+System.arraycopy (nonZeroFloats, 0, arr, nextZeroValue, nonZeroFloats.length);
+System.arraycopy (nonZeroChars, 0, s, nextZeroValue, nonZeroChars.length);
+}, "~A,~A");
+c$.externalSortFloat = Clazz.defineMethod (c$, "externalSortFloat",
+($fz = function (arr, s) {
+var length = arr.length;
+var indices = jalview.util.QuickSort.makeIndexArray (length);
+java.util.Arrays.sort (indices, new jalview.util.QuickSort.FloatComparator (arr));
+var sortedFloats = Clazz.newFloatArray (length, 0);
+var sortedChars = Clazz.newCharArray (s.length, '\0');
+for (var i = 0; i < length; i++) {
+sortedFloats[i] = arr[indices[i]];
+sortedChars[i] = s[indices[i]];
+}
+System.arraycopy (sortedFloats, 0, arr, 0, length);
+System.arraycopy (sortedChars, 0, s, 0, s.length);
+}, $fz.isPrivate = true, $fz), "~A,~A");
+c$.makeIndexArray = Clazz.defineMethod (c$, "makeIndexArray",
+($fz = function (length) {
+var indices = new Array (length);
+for (var i = 0; i < length; i++) {
+indices[i] = new Integer (i);
+}
+return indices;
+}, $fz.isPrivate = true, $fz), "~N");
+c$.sortIntChar = Clazz.defineMethod (c$, "sortIntChar",
+function (arr, s) {
+var f1 = Clazz.newIntArray (arr.length, 0);
+var s1 = Clazz.newCharArray (s.length, '\0');
+var nextZeroValue = 0;
+var nextNonZeroValue = arr.length - 1;
+for (var i = 0; i < arr.length; i++) {
+var val = arr[i];
+if (val > 0) {
+f1[nextNonZeroValue] = val;
+s1[nextNonZeroValue] = s[i];
+nextNonZeroValue--;
+} else {
+f1[nextZeroValue] = val;
+s1[nextZeroValue] = s[i];
+nextZeroValue++;
+}}
+System.arraycopy (f1, 0, arr, 0, nextZeroValue);
+System.arraycopy (s1, 0, s, 0, nextZeroValue);
+if (nextZeroValue == arr.length) {
+return;
+}var nonZeroInts = java.util.Arrays.copyOfRange (f1, nextZeroValue, f1.length);
+var nonZeroChars = java.util.Arrays.copyOfRange (s1, nextZeroValue, s1.length);
+jalview.util.QuickSort.externalSortInt (nonZeroInts, nonZeroChars);
+System.arraycopy (nonZeroInts, 0, arr, nextZeroValue, nonZeroInts.length);
+System.arraycopy (nonZeroChars, 0, s, nextZeroValue, nonZeroChars.length);
+}, "~A,~A");
+c$.externalSortInt = Clazz.defineMethod (c$, "externalSortInt",
+($fz = function (arr, s) {
+var length = arr.length;
+var indices = jalview.util.QuickSort.makeIndexArray (length);
+java.util.Arrays.sort (indices, new jalview.util.QuickSort.IntComparator (arr));
+var sortedInts = Clazz.newIntArray (length, 0);
+var sortedChars = Clazz.newCharArray (s.length, '\0');
+for (var i = 0; i < length; i++) {
+sortedInts[i] = arr[indices[i]];
+sortedChars[i] = s[indices[i]];
+}
+System.arraycopy (sortedInts, 0, arr, 0, length);
+System.arraycopy (sortedChars, 0, s, 0, s.length);
+}, $fz.isPrivate = true, $fz), "~A,~A");
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.values = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util.QuickSort, "FloatComparator", null, java.util.Comparator);
+Clazz.makeConstructor (c$,
+function (a) {
+this.values = a;
+}, "~A");
+Clazz.overrideMethod (c$, "compare",
+function (a, b) {
+return Float.compare (this.values[a.intValue ()], this.values[b]);
+}, "Integer,Integer");
+c$ = Clazz.p0p ();
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.values = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util.QuickSort, "IntComparator", null, java.util.Comparator);
+Clazz.makeConstructor (c$,
+function (a) {
+this.values = a;
+}, "~A");
+Clazz.overrideMethod (c$, "compare",
+function (a, b) {
+return Integer.compare (this.values[a], this.values[b]);
+}, "Integer,Integer");
+c$ = Clazz.p0p ();
+});
diff --git a/bin/jalview/util/ReverseListIterator.js b/bin/jalview/util/ReverseListIterator.js
index f9edbc8..66e861f 100644
--- a/bin/jalview/util/ReverseListIterator.js
+++ b/bin/jalview/util/ReverseListIterator.js
@@ -1,23 +1,23 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.util.Iterator"], "jalview.util.ReverseListIterator", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.iterator = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "ReverseListIterator", null, java.util.Iterator);
-Clazz.makeConstructor (c$,
-function (stuff) {
-this.iterator = stuff.listIterator (stuff.size ());
-}, "java.util.List");
-Clazz.overrideMethod (c$, "hasNext",
-function () {
-return this.iterator.hasPrevious ();
-});
-Clazz.overrideMethod (c$, "next",
-function () {
-return this.iterator.previous ();
-});
-Clazz.overrideMethod (c$, "remove",
-function () {
-this.iterator.remove ();
-});
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.util.Iterator"], "jalview.util.ReverseListIterator", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.iterator = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util, "ReverseListIterator", null, java.util.Iterator);
+Clazz.makeConstructor (c$,
+function (stuff) {
+this.iterator = stuff.listIterator (stuff.size ());
+}, "java.util.List");
+Clazz.overrideMethod (c$, "hasNext",
+function () {
+return this.iterator.hasPrevious ();
+});
+Clazz.overrideMethod (c$, "next",
+function () {
+return this.iterator.previous ();
+});
+Clazz.overrideMethod (c$, "remove",
+function () {
+this.iterator.remove ();
+});
+});
diff --git a/bin/jalview/util/ShiftList.js b/bin/jalview/util/ShiftList.js
index 29a9645..258fe14 100644
--- a/bin/jalview/util/ShiftList.js
+++ b/bin/jalview/util/ShiftList.js
@@ -1,67 +1,67 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.ShiftList", ["java.util.ArrayList"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.shifts = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "ShiftList");
-Clazz.makeConstructor (c$,
-function () {
-this.shifts = new java.util.ArrayList ();
-});
-Clazz.defineMethod (c$, "addShift",
-function (pos, shift) {
-{
-var sidx = 0;
-var rshift = null;
-while (sidx < this.shifts.size () && (rshift = this.shifts.get (sidx))[0] < pos) {
-sidx++;
-}
-if (sidx == this.shifts.size ()) {
-this.shifts.add (sidx, Clazz.newIntArray (-1, [pos, shift]));
-} else {
-rshift[1] += shift;
-}}}, "~N,~N");
-Clazz.defineMethod (c$, "shift",
-function (pos) {
-if (this.shifts.size () == 0) {
-return pos;
-}var shifted = pos;
-var sidx = 0;
-var rshift;
-while (sidx < this.shifts.size () && (rshift = (this.shifts.get (sidx++)))[0] <= pos) {
-shifted += rshift[1];
-}
-return shifted;
-}, "~N");
-Clazz.defineMethod (c$, "clear",
-function () {
-this.shifts.clear ();
-});
-Clazz.defineMethod (c$, "getInverse",
-function () {
-var inverse = new jalview.util.ShiftList ();
-{
-if (this.shifts != null) {
-for (var sh, $sh = this.shifts.iterator (); $sh.hasNext () && ((sh = $sh.next ()) || true);) {
-if (sh != null) {
-inverse.shifts.add ( Clazz.newIntArray (-1, [sh[0], -sh[1]]));
-}}
-}}return inverse;
-});
-c$.parseMap = Clazz.defineMethod (c$, "parseMap",
-function (gapMap) {
-var shiftList = null;
-if (gapMap != null && gapMap.length > 0) {
-shiftList = new jalview.util.ShiftList ();
-for (var i = 0, p = 0; i < gapMap.length; p++, i++) {
-if (p != gapMap[i]) {
-shiftList.addShift (p, gapMap[i] - p);
-p = gapMap[i];
-}}
-}return shiftList;
-}, "~A");
-Clazz.defineMethod (c$, "getShifts",
-function () {
-return this.shifts;
-});
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.ShiftList", ["java.util.ArrayList"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.shifts = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util, "ShiftList");
+Clazz.makeConstructor (c$,
+function () {
+this.shifts = new java.util.ArrayList ();
+});
+Clazz.defineMethod (c$, "addShift",
+function (pos, shift) {
+{
+var sidx = 0;
+var rshift = null;
+while (sidx < this.shifts.size () && (rshift = this.shifts.get (sidx))[0] < pos) {
+sidx++;
+}
+if (sidx == this.shifts.size ()) {
+this.shifts.add (sidx, Clazz.newIntArray (-1, [pos, shift]));
+} else {
+rshift[1] += shift;
+}}}, "~N,~N");
+Clazz.defineMethod (c$, "shift",
+function (pos) {
+if (this.shifts.size () == 0) {
+return pos;
+}var shifted = pos;
+var sidx = 0;
+var rshift;
+while (sidx < this.shifts.size () && (rshift = (this.shifts.get (sidx++)))[0] <= pos) {
+shifted += rshift[1];
+}
+return shifted;
+}, "~N");
+Clazz.defineMethod (c$, "clear",
+function () {
+this.shifts.clear ();
+});
+Clazz.defineMethod (c$, "getInverse",
+function () {
+var inverse = new jalview.util.ShiftList ();
+{
+if (this.shifts != null) {
+for (var sh, $sh = this.shifts.iterator (); $sh.hasNext () && ((sh = $sh.next ()) || true);) {
+if (sh != null) {
+inverse.shifts.add ( Clazz.newIntArray (-1, [sh[0], -sh[1]]));
+}}
+}}return inverse;
+});
+c$.parseMap = Clazz.defineMethod (c$, "parseMap",
+function (gapMap) {
+var shiftList = null;
+if (gapMap != null && gapMap.length > 0) {
+shiftList = new jalview.util.ShiftList ();
+for (var i = 0, p = 0; i < gapMap.length; p++, i++) {
+if (p != gapMap[i]) {
+shiftList.addShift (p, gapMap[i] - p);
+p = gapMap[i];
+}}
+}return shiftList;
+}, "~A");
+Clazz.defineMethod (c$, "getShifts",
+function () {
+return this.shifts;
+});
+});
diff --git a/bin/jalview/util/StringUtils.js b/bin/jalview/util/StringUtils.js
index fd878bf..0b21437 100644
--- a/bin/jalview/util/StringUtils.js
+++ b/bin/jalview/util/StringUtils.js
@@ -1,108 +1,108 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.util.regex.Pattern"], "jalview.util.StringUtils", ["java.lang.StringBuffer", "java.util.ArrayList"], function () {
-c$ = Clazz.declareType (jalview.util, "StringUtils");
-c$.insertCharAt = Clazz.defineMethod (c$, "insertCharAt",
-function ($in, position, count, ch) {
-var tmp = Clazz.newCharArray ($in.length + count, '\0');
-if (position >= $in.length) {
-System.arraycopy ($in, 0, tmp, 0, $in.length);
-position = $in.length;
-} else {
-System.arraycopy ($in, 0, tmp, 0, position);
-}var index = position;
-while (count > 0) {
-tmp[index++] = ch;
-count--;
-}
-if (position < $in.length) {
-System.arraycopy ($in, position, tmp, index, $in.length - position);
-}return tmp;
-}, "~A,~N,~N,~S");
-c$.deleteChars = Clazz.defineMethod (c$, "deleteChars",
-function ($in, from, to) {
-if (from >= $in.length || from < 0) {
-return $in;
-}var tmp;
-if (to >= $in.length) {
-tmp = Clazz.newCharArray (from, '\0');
-System.arraycopy ($in, 0, tmp, 0, from);
-to = $in.length;
-} else {
-tmp = Clazz.newCharArray ($in.length - to + from, '\0');
-System.arraycopy ($in, 0, tmp, 0, from);
-System.arraycopy ($in, to, tmp, from, $in.length - to);
-}return tmp;
-}, "~A,~N,~N");
-c$.getLastToken = Clazz.defineMethod (c$, "getLastToken",
-function (input, token) {
-if (input == null) {
-return null;
-}if (token == null) {
-return input;
-}var st = input.$plit (token);
-return st[st.length - 1];
-}, "~S,~S");
-c$.separatorListToArray = Clazz.defineMethod (c$, "separatorListToArray",
-function (input, delimiter) {
-var seplen = delimiter.length;
-if (input == null || input.equals ("") || input.equals (delimiter)) {
-return null;
-}var jv = new java.util.ArrayList ();
-var cp = 0;
-var pos;
-var escape;
-var wasescaped = false;
-var wasquoted = false;
-var lstitem = null;
-while ((pos = input.indexOf (delimiter, cp)) >= cp) {
-escape = (pos > 0 && input.charAt (pos - 1) == '\\') ? -1 : 0;
-if (wasescaped || wasquoted) {
-jv.set (jv.size () - 1, lstitem = lstitem + delimiter + input.substring (cp, pos + escape));
-} else {
-jv.add (lstitem = input.substring (cp, pos + escape));
-}cp = pos + seplen;
-wasescaped = escape == -1;
-wasquoted = jalview.util.StringUtils.DELIMITERS_PATTERN.matcher (lstitem).matches ();
-}
-if (cp < input.length) {
-var c = input.substring (cp);
-if (wasescaped || wasquoted) {
-jv.set (jv.size () - 1, lstitem + delimiter + c);
-} else {
-if (!c.equals (delimiter)) {
-jv.add (c);
-}}}if (jv.size () > 0) {
-var v = jv.toArray ( new Array (jv.size ()));
-jv.clear ();
-if (false) {
-System.err.println ("Array from '" + delimiter + "' separated List:\n" + v.length);
-for (var i = 0; i < v.length; i++) {
-System.err.println ("item " + i + " '" + v[i] + "'");
-}
-}return v;
-}if (false) {
-System.err.println ("Empty Array from '" + delimiter + "' separated List");
-}return null;
-}, "~S,~S");
-c$.arrayToSeparatorList = Clazz.defineMethod (c$, "arrayToSeparatorList",
-function (list, separator) {
-var v = new StringBuffer ();
-if (list != null && list.length > 0) {
-for (var i = 0, iSize = list.length; i < iSize; i++) {
-if (list[i] != null) {
-if (v.length () > 0) {
-v.append (separator);
-}v.append (list[i]);
-}}
-if (false) {
-System.err.println ("Returning '" + separator + "' separated List:\n");
-System.err.println (v);
-}return v.toString ();
-}if (false) {
-System.err.println ("Returning empty '" + separator + "' separated List\n");
-}return "" + separator;
-}, "~A,~S");
-c$.DELIMITERS_PATTERN = c$.prototype.DELIMITERS_PATTERN = java.util.regex.Pattern.compile (".*='[^']*(?!')");
-Clazz.defineStatics (c$,
-"DEBUG", false);
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.util.regex.Pattern"], "jalview.util.StringUtils", ["java.lang.StringBuffer", "java.util.ArrayList"], function () {
+c$ = Clazz.declareType (jalview.util, "StringUtils");
+c$.insertCharAt = Clazz.defineMethod (c$, "insertCharAt",
+function ($in, position, count, ch) {
+var tmp = Clazz.newCharArray ($in.length + count, '\0');
+if (position >= $in.length) {
+System.arraycopy ($in, 0, tmp, 0, $in.length);
+position = $in.length;
+} else {
+System.arraycopy ($in, 0, tmp, 0, position);
+}var index = position;
+while (count > 0) {
+tmp[index++] = ch;
+count--;
+}
+if (position < $in.length) {
+System.arraycopy ($in, position, tmp, index, $in.length - position);
+}return tmp;
+}, "~A,~N,~N,~S");
+c$.deleteChars = Clazz.defineMethod (c$, "deleteChars",
+function ($in, from, to) {
+if (from >= $in.length || from < 0) {
+return $in;
+}var tmp;
+if (to >= $in.length) {
+tmp = Clazz.newCharArray (from, '\0');
+System.arraycopy ($in, 0, tmp, 0, from);
+to = $in.length;
+} else {
+tmp = Clazz.newCharArray ($in.length - to + from, '\0');
+System.arraycopy ($in, 0, tmp, 0, from);
+System.arraycopy ($in, to, tmp, from, $in.length - to);
+}return tmp;
+}, "~A,~N,~N");
+c$.getLastToken = Clazz.defineMethod (c$, "getLastToken",
+function (input, token) {
+if (input == null) {
+return null;
+}if (token == null) {
+return input;
+}var st = input.$plit (token);
+return st[st.length - 1];
+}, "~S,~S");
+c$.separatorListToArray = Clazz.defineMethod (c$, "separatorListToArray",
+function (input, delimiter) {
+var seplen = delimiter.length;
+if (input == null || input.equals ("") || input.equals (delimiter)) {
+return null;
+}var jv = new java.util.ArrayList ();
+var cp = 0;
+var pos;
+var escape;
+var wasescaped = false;
+var wasquoted = false;
+var lstitem = null;
+while ((pos = input.indexOf (delimiter, cp)) >= cp) {
+escape = (pos > 0 && input.charAt (pos - 1) == '\\') ? -1 : 0;
+if (wasescaped || wasquoted) {
+jv.set (jv.size () - 1, lstitem = lstitem + delimiter + input.substring (cp, pos + escape));
+} else {
+jv.add (lstitem = input.substring (cp, pos + escape));
+}cp = pos + seplen;
+wasescaped = escape == -1;
+wasquoted = jalview.util.StringUtils.DELIMITERS_PATTERN.matcher (lstitem).matches ();
+}
+if (cp < input.length) {
+var c = input.substring (cp);
+if (wasescaped || wasquoted) {
+jv.set (jv.size () - 1, lstitem + delimiter + c);
+} else {
+if (!c.equals (delimiter)) {
+jv.add (c);
+}}}if (jv.size () > 0) {
+var v = jv.toArray ( new Array (jv.size ()));
+jv.clear ();
+if (false) {
+System.err.println ("Array from '" + delimiter + "' separated List:\n" + v.length);
+for (var i = 0; i < v.length; i++) {
+System.err.println ("item " + i + " '" + v[i] + "'");
+}
+}return v;
+}if (false) {
+System.err.println ("Empty Array from '" + delimiter + "' separated List");
+}return null;
+}, "~S,~S");
+c$.arrayToSeparatorList = Clazz.defineMethod (c$, "arrayToSeparatorList",
+function (list, separator) {
+var v = new StringBuffer ();
+if (list != null && list.length > 0) {
+for (var i = 0, iSize = list.length; i < iSize; i++) {
+if (list[i] != null) {
+if (v.length () > 0) {
+v.append (separator);
+}v.append (list[i]);
+}}
+if (false) {
+System.err.println ("Returning '" + separator + "' separated List:\n");
+System.err.println (v);
+}return v.toString ();
+}if (false) {
+System.err.println ("Returning empty '" + separator + "' separated List\n");
+}return "" + separator;
+}, "~A,~S");
+c$.DELIMITERS_PATTERN = c$.prototype.DELIMITERS_PATTERN = java.util.regex.Pattern.compile (".*='[^']*(?!')");
+Clazz.defineStatics (c$,
+"DEBUG", false);
+});
diff --git a/bin/jalview/util/TableSorter.js b/bin/jalview/util/TableSorter.js
index 44ff978..dcc7fea 100644
--- a/bin/jalview/util/TableSorter.js
+++ b/bin/jalview/util/TableSorter.js
@@ -1,387 +1,387 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (["java.awt.event.MouseAdapter", "javax.swing.Icon", "javax.swing.event.TableModelListener", "javax.swing.table.AbstractTableModel", "$.TableCellRenderer", "java.util.ArrayList", "$.HashMap"], "jalview.util.TableSorter", ["java.awt.Color", "java.util.Arrays", "javax.swing.JLabel", "javax.swing.event.TableModelEvent"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.tableModel = null;
-this.viewToModel = null;
-this.modelToView = null;
-this.tableHeader = null;
-this.mouseListener = null;
-this.tableModelListener = null;
-this.columnComparators = null;
-this.sortingColumns = null;
-if (!Clazz.isClassDefined ("jalview.util.TableSorter.Row")) {
-jalview.util.TableSorter.$TableSorter$Row$ ();
-}
-if (!Clazz.isClassDefined ("jalview.util.TableSorter.TableModelHandler")) {
-jalview.util.TableSorter.$TableSorter$TableModelHandler$ ();
-}
-if (!Clazz.isClassDefined ("jalview.util.TableSorter.MouseHandler")) {
-jalview.util.TableSorter.$TableSorter$MouseHandler$ ();
-}
-if (!Clazz.isClassDefined ("jalview.util.TableSorter.SortableHeaderRenderer")) {
-jalview.util.TableSorter.$TableSorter$SortableHeaderRenderer$ ();
-}
-Clazz.instantialize (this, arguments);
-}, jalview.util, "TableSorter", javax.swing.table.AbstractTableModel);
-Clazz.prepareFields (c$, function () {
-this.columnComparators = new java.util.HashMap ();
-this.sortingColumns = new java.util.ArrayList ();
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, jalview.util.TableSorter, []);
-this.mouseListener = Clazz.innerTypeInstance (jalview.util.TableSorter.MouseHandler, this, null);
-this.tableModelListener = Clazz.innerTypeInstance (jalview.util.TableSorter.TableModelHandler, this, null);
-});
-Clazz.makeConstructor (c$,
-function (tableModel) {
-this.construct ();
-this.setTableModel (tableModel);
-}, "javax.swing.table.TableModel");
-Clazz.makeConstructor (c$,
-function (tableModel, tableHeader) {
-this.construct ();
-this.setTableHeader (tableHeader);
-this.setTableModel (tableModel);
-}, "javax.swing.table.TableModel,javax.swing.table.JTableHeader");
-Clazz.defineMethod (c$, "clearSortingState",
-($fz = function () {
-this.viewToModel = null;
-this.modelToView = null;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getTableModel",
-function () {
-return this.tableModel;
-});
-Clazz.defineMethod (c$, "setTableModel",
-function (tableModel) {
-if (this.tableModel != null) {
-this.tableModel.removeTableModelListener (this.tableModelListener);
-}this.tableModel = tableModel;
-if (this.tableModel != null) {
-this.tableModel.addTableModelListener (this.tableModelListener);
-}this.clearSortingState ();
-this.fireTableStructureChanged ();
-}, "javax.swing.table.TableModel");
-Clazz.defineMethod (c$, "getTableHeader",
-function () {
-return this.tableHeader;
-});
-Clazz.defineMethod (c$, "setTableHeader",
-function (tableHeader) {
-if (this.tableHeader != null) {
-this.tableHeader.removeMouseListener (this.mouseListener);
-var defaultRenderer = this.tableHeader.getDefaultRenderer ();
-if (Clazz.instanceOf (defaultRenderer, jalview.util.TableSorter.SortableHeaderRenderer)) {
-this.tableHeader.setDefaultRenderer ((defaultRenderer).tableCellRenderer);
-}}this.tableHeader = tableHeader;
-if (this.tableHeader != null) {
-this.tableHeader.addMouseListener (this.mouseListener);
-this.tableHeader.setDefaultRenderer (Clazz.innerTypeInstance (jalview.util.TableSorter.SortableHeaderRenderer, this, null, this.tableHeader.getDefaultRenderer ()));
-}}, "javax.swing.table.JTableHeader");
-Clazz.defineMethod (c$, "isSorting",
-function () {
-return this.sortingColumns.size () != 0;
-});
-Clazz.defineMethod (c$, "getDirective",
-($fz = function (column) {
-for (var i = 0; i < this.sortingColumns.size (); i++) {
-var directive = this.sortingColumns.get (i);
-if (directive.column == column) {
-return directive;
-}}
-return jalview.util.TableSorter.EMPTY_DIRECTIVE;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "getSortingStatus",
-function (column) {
-return this.getDirective (column).direction;
-}, "~N");
-Clazz.defineMethod (c$, "sortingStatusChanged",
-($fz = function () {
-this.clearSortingState ();
-this.fireTableDataChanged ();
-if (this.tableHeader != null) {
-this.tableHeader.repaint ();
-}}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "setSortingStatus",
-function (column, status) {
-var directive = this.getDirective (column);
-if (directive !== jalview.util.TableSorter.EMPTY_DIRECTIVE) {
-this.sortingColumns.remove (directive);
-}if (status != 0) {
-this.sortingColumns.add ( new jalview.util.TableSorter.Directive (column, status));
-}this.sortingStatusChanged ();
-}, "~N,~N");
-Clazz.defineMethod (c$, "getHeaderRendererIcon",
-function (column, size) {
-var directive = this.getDirective (column);
-if (directive === jalview.util.TableSorter.EMPTY_DIRECTIVE) {
-return null;
-}return new jalview.util.TableSorter.Arrow (directive.direction == -1, size, this.sortingColumns.indexOf (directive));
-}, "~N,~N");
-Clazz.defineMethod (c$, "cancelSorting",
-($fz = function () {
-this.sortingColumns.clear ();
-this.sortingStatusChanged ();
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "setColumnComparator",
-function (type, comparator) {
-if (comparator == null) {
-this.columnComparators.remove (type);
-} else {
-this.columnComparators.put (type, comparator);
-}}, "Class,java.util.Comparator");
-Clazz.defineMethod (c$, "getComparator",
-function (column) {
-var columnType = this.tableModel.getColumnClass (column);
-var comparator = this.columnComparators.get (columnType);
-if (comparator != null) {
-return comparator;
-}if (Comparable.isAssignableFrom (columnType)) {
-return jalview.util.TableSorter.COMPARABLE_COMAPRATOR;
-}return jalview.util.TableSorter.LEXICAL_COMPARATOR;
-}, "~N");
-Clazz.defineMethod (c$, "getViewToModel",
-($fz = function () {
-if (this.viewToModel == null) {
-var tableModelRowCount = this.tableModel.getRowCount ();
-this.viewToModel = new Array (tableModelRowCount);
-for (var row = 0; row < tableModelRowCount; row++) {
-this.viewToModel[row] = Clazz.innerTypeInstance (jalview.util.TableSorter.Row, this, null, row);
-}
-if (this.isSorting ()) {
-java.util.Arrays.sort (this.viewToModel);
-}}return this.viewToModel;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "modelIndex",
-function (viewIndex) {
-return this.getViewToModel ()[viewIndex].modelIndex;
-}, "~N");
-Clazz.defineMethod (c$, "getModelToView",
-($fz = function () {
-if (this.modelToView == null) {
-var n = this.getViewToModel ().length;
-this.modelToView = Clazz.newIntArray (n, 0);
-for (var i = 0; i < n; i++) {
-this.modelToView[this.modelIndex (i)] = i;
-}
-}return this.modelToView;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getRowCount",
-function () {
-return (this.tableModel == null) ? 0 : this.tableModel.getRowCount ();
-});
-Clazz.defineMethod (c$, "getColumnCount",
-function () {
-return (this.tableModel == null) ? 0 : this.tableModel.getColumnCount ();
-});
-Clazz.overrideMethod (c$, "getColumnName",
-function (column) {
-return this.tableModel.getColumnName (column);
-}, "~N");
-Clazz.overrideMethod (c$, "getColumnClass",
-function (column) {
-return this.tableModel.getColumnClass (column);
-}, "~N");
-Clazz.overrideMethod (c$, "isCellEditable",
-function (row, column) {
-return this.tableModel.isCellEditable (this.modelIndex (row), column);
-}, "~N,~N");
-Clazz.defineMethod (c$, "getValueAt",
-function (row, column) {
-return this.tableModel.getValueAt (this.modelIndex (row), column);
-}, "~N,~N");
-Clazz.overrideMethod (c$, "setValueAt",
-function (aValue, row, column) {
-this.tableModel.setValueAt (aValue, this.modelIndex (row), column);
-}, "~O,~N,~N");
-c$.$TableSorter$Row$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.modelIndex = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.util.TableSorter, "Row", null, Comparable);
-Clazz.makeConstructor (c$,
-function (a) {
-this.modelIndex = a;
-}, "~N");
-Clazz.overrideMethod (c$, "compareTo",
-function (a) {
-var b = this.modelIndex;
-var c = (a).modelIndex;
-for (var d = this.b$["jalview.util.TableSorter"].sortingColumns.iterator (); d.hasNext (); ) {
-var e = d.next ();
-var f = e.column;
-var g = this.b$["jalview.util.TableSorter"].tableModel.getValueAt (b, f);
-var h = this.b$["jalview.util.TableSorter"].tableModel.getValueAt (c, f);
-var i = 0;
-if (g == null && h == null) {
-i = 0;
-} else if (g == null) {
-i = -1;
-} else if (h == null) {
-i = 1;
-} else {
-i = this.b$["jalview.util.TableSorter"].getComparator (f).compare (g, h);
-}if (i != 0) {
-return e.direction == -1 ? -i : i;
-}}
-return 0;
-}, "~O");
-c$ = Clazz.p0p ();
-};
-c$.$TableSorter$TableModelHandler$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-Clazz.instantialize (this, arguments);
-}, jalview.util.TableSorter, "TableModelHandler", null, javax.swing.event.TableModelListener);
-Clazz.overrideMethod (c$, "tableChanged",
-function (a) {
-if (!this.b$["jalview.util.TableSorter"].isSorting ()) {
-this.b$["jalview.util.TableSorter"].clearSortingState ();
-this.b$["jalview.util.TableSorter"].fireTableChanged (a);
-return;
-}if (a.getFirstRow () == -1) {
-this.b$["jalview.util.TableSorter"].cancelSorting ();
-this.b$["jalview.util.TableSorter"].fireTableChanged (a);
-return;
-}var b = a.getColumn ();
-if (a.getFirstRow () == a.getLastRow () && b != -1 && this.b$["jalview.util.TableSorter"].getSortingStatus (b) == 0 && this.b$["jalview.util.TableSorter"].modelToView != null) {
-var c = this.b$["jalview.util.TableSorter"].getModelToView ()[a.getFirstRow ()];
-this.b$["jalview.util.TableSorter"].fireTableChanged ( new javax.swing.event.TableModelEvent (this.b$["jalview.util.TableSorter"], c, c, b, a.getType ()));
-return;
-}this.b$["jalview.util.TableSorter"].clearSortingState ();
-this.b$["jalview.util.TableSorter"].fireTableDataChanged ();
-return;
-}, "javax.swing.event.TableModelEvent");
-c$ = Clazz.p0p ();
-};
-c$.$TableSorter$MouseHandler$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-Clazz.instantialize (this, arguments);
-}, jalview.util.TableSorter, "MouseHandler", java.awt.event.MouseAdapter);
-Clazz.overrideMethod (c$, "mouseClicked",
-function (a) {
-var b = a.getSource ();
-var c = b.getColumnModel ();
-var d = c.getColumnIndexAtX (a.getX ());
-var e = c.getColumn (d).getModelIndex ();
-if (e != -1) {
-var f = this.b$["jalview.util.TableSorter"].getSortingStatus (e);
-if (!a.isControlDown ()) {
-this.b$["jalview.util.TableSorter"].cancelSorting ();
-}f = f + (a.isShiftDown () ? -1 : 1);
-f = (f + 4) % 3 - 1;
-this.b$["jalview.util.TableSorter"].setSortingStatus (e, f);
-}}, "java.awt.event.MouseEvent");
-c$ = Clazz.p0p ();
-};
-c$.$TableSorter$SortableHeaderRenderer$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.tableCellRenderer = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util.TableSorter, "SortableHeaderRenderer", null, javax.swing.table.TableCellRenderer);
-Clazz.makeConstructor (c$,
-function (a) {
-this.tableCellRenderer = a;
-}, "javax.swing.table.TableCellRenderer");
-Clazz.defineMethod (c$, "getTableCellRendererComponent",
-function (a, b, c, d, e, f) {
-var g = this.tableCellRenderer.getTableCellRendererComponent (a, b, c, d, e, f);
-if (Clazz.instanceOf (g, javax.swing.JLabel)) {
-var h = g;
-h.setHorizontalTextPosition (2);
-var i = a.convertColumnIndexToModel (f);
-h.setIcon (this.b$["jalview.util.TableSorter"].getHeaderRendererIcon (i, h.getFont ().getSize ()));
-}return g;
-}, "javax.swing.JTable,~O,~B,~B,~N,~N");
-c$ = Clazz.p0p ();
-};
-c$.$TableSorter$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "TableSorter$1", null, java.util.Comparator);
-Clazz.defineMethod (c$, "compare",
-function (o1, o2) {
-return (o1).compareTo (o2);
-}, "~O,~O");
-c$ = Clazz.p0p ();
-};
-c$.$TableSorter$2$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (jalview.util, "TableSorter$2", null, java.util.Comparator);
-Clazz.defineMethod (c$, "compare",
-function (o1, o2) {
-return o1.toString ().compareTo (o2.toString ());
-}, "~O,~O");
-c$ = Clazz.p0p ();
-};
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.descending = false;
-this.size = 0;
-this.priority = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.util.TableSorter, "Arrow", null, javax.swing.Icon);
-Clazz.makeConstructor (c$,
-function (a, b, c) {
-this.descending = a;
-this.size = b;
-this.priority = c;
-}, "~B,~N,~N");
-Clazz.overrideMethod (c$, "paintIcon",
-function (a, b, c, d) {
-var e = a == null ? java.awt.Color.GRAY : a.getBackground ();
-var f = Clazz.doubleToInt (Clazz.doubleToInt (this.size / 2) * Math.pow (0.8, this.priority));
-var g = this.descending ? f : -f;
-d = d + Clazz.doubleToInt (5 * this.size / 6) + (this.descending ? -g : 0);
-var h = this.descending ? 1 : -1;
-b.translate (c, d);
-b.setColor (e.darker ());
-b.drawLine (Clazz.doubleToInt (f / 2), g, 0, 0);
-b.drawLine (Clazz.doubleToInt (f / 2), g + h, 0, h);
-b.setColor (e.brighter ());
-b.drawLine (Clazz.doubleToInt (f / 2), g, f, 0);
-b.drawLine (Clazz.doubleToInt (f / 2), g + h, f, h);
-if (this.descending) {
-b.setColor (e.darker ().darker ());
-} else {
-b.setColor (e.brighter ().brighter ());
-}b.drawLine (f, 0, 0, 0);
-b.setColor (e);
-b.translate (-c, -d);
-}, "java.awt.Component,java.awt.Graphics,~N,~N");
-Clazz.overrideMethod (c$, "getIconWidth",
-function () {
-return this.size;
-});
-Clazz.overrideMethod (c$, "getIconHeight",
-function () {
-return this.size;
-});
-c$ = Clazz.p0p ();
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-this.column = 0;
-this.direction = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.util.TableSorter, "Directive");
-Clazz.makeConstructor (c$,
-function (a, b) {
-this.column = a;
-this.direction = b;
-}, "~N,~N");
-c$ = Clazz.p0p ();
-Clazz.defineStatics (c$,
-"DESCENDING", -1,
-"NOT_SORTED", 0,
-"ASCENDING", 1);
-c$.EMPTY_DIRECTIVE = c$.prototype.EMPTY_DIRECTIVE = new jalview.util.TableSorter.Directive (-1, 0);
-c$.COMPARABLE_COMAPRATOR = c$.prototype.COMPARABLE_COMAPRATOR = ((Clazz.isClassDefined ("jalview.util.TableSorter$1") ? 0 : jalview.util.TableSorter.$TableSorter$1$ ()), Clazz.innerTypeInstance (jalview.util.TableSorter$1, this, null));
-c$.LEXICAL_COMPARATOR = c$.prototype.LEXICAL_COMPARATOR = ((Clazz.isClassDefined ("jalview.util.TableSorter$2") ? 0 : jalview.util.TableSorter.$TableSorter$2$ ()), Clazz.innerTypeInstance (jalview.util.TableSorter$2, this, null));
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (["java.awt.event.MouseAdapter", "javax.swing.Icon", "javax.swing.event.TableModelListener", "javax.swing.table.AbstractTableModel", "$.TableCellRenderer", "java.util.ArrayList", "$.HashMap"], "jalview.util.TableSorter", ["java.awt.Color", "java.util.Arrays", "javax.swing.JLabel", "javax.swing.event.TableModelEvent"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.tableModel = null;
+this.viewToModel = null;
+this.modelToView = null;
+this.tableHeader = null;
+this.mouseListener = null;
+this.tableModelListener = null;
+this.columnComparators = null;
+this.sortingColumns = null;
+if (!Clazz.isClassDefined ("jalview.util.TableSorter.Row")) {
+jalview.util.TableSorter.$TableSorter$Row$ ();
+}
+if (!Clazz.isClassDefined ("jalview.util.TableSorter.TableModelHandler")) {
+jalview.util.TableSorter.$TableSorter$TableModelHandler$ ();
+}
+if (!Clazz.isClassDefined ("jalview.util.TableSorter.MouseHandler")) {
+jalview.util.TableSorter.$TableSorter$MouseHandler$ ();
+}
+if (!Clazz.isClassDefined ("jalview.util.TableSorter.SortableHeaderRenderer")) {
+jalview.util.TableSorter.$TableSorter$SortableHeaderRenderer$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.util, "TableSorter", javax.swing.table.AbstractTableModel);
+Clazz.prepareFields (c$, function () {
+this.columnComparators = new java.util.HashMap ();
+this.sortingColumns = new java.util.ArrayList ();
+});
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, jalview.util.TableSorter, []);
+this.mouseListener = Clazz.innerTypeInstance (jalview.util.TableSorter.MouseHandler, this, null);
+this.tableModelListener = Clazz.innerTypeInstance (jalview.util.TableSorter.TableModelHandler, this, null);
+});
+Clazz.makeConstructor (c$,
+function (tableModel) {
+this.construct ();
+this.setTableModel (tableModel);
+}, "javax.swing.table.TableModel");
+Clazz.makeConstructor (c$,
+function (tableModel, tableHeader) {
+this.construct ();
+this.setTableHeader (tableHeader);
+this.setTableModel (tableModel);
+}, "javax.swing.table.TableModel,javax.swing.table.JTableHeader");
+Clazz.defineMethod (c$, "clearSortingState",
+($fz = function () {
+this.viewToModel = null;
+this.modelToView = null;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getTableModel",
+function () {
+return this.tableModel;
+});
+Clazz.defineMethod (c$, "setTableModel",
+function (tableModel) {
+if (this.tableModel != null) {
+this.tableModel.removeTableModelListener (this.tableModelListener);
+}this.tableModel = tableModel;
+if (this.tableModel != null) {
+this.tableModel.addTableModelListener (this.tableModelListener);
+}this.clearSortingState ();
+this.fireTableStructureChanged ();
+}, "javax.swing.table.TableModel");
+Clazz.defineMethod (c$, "getTableHeader",
+function () {
+return this.tableHeader;
+});
+Clazz.defineMethod (c$, "setTableHeader",
+function (tableHeader) {
+if (this.tableHeader != null) {
+this.tableHeader.removeMouseListener (this.mouseListener);
+var defaultRenderer = this.tableHeader.getDefaultRenderer ();
+if (Clazz.instanceOf (defaultRenderer, jalview.util.TableSorter.SortableHeaderRenderer)) {
+this.tableHeader.setDefaultRenderer ((defaultRenderer).tableCellRenderer);
+}}this.tableHeader = tableHeader;
+if (this.tableHeader != null) {
+this.tableHeader.addMouseListener (this.mouseListener);
+this.tableHeader.setDefaultRenderer (Clazz.innerTypeInstance (jalview.util.TableSorter.SortableHeaderRenderer, this, null, this.tableHeader.getDefaultRenderer ()));
+}}, "javax.swing.table.JTableHeader");
+Clazz.defineMethod (c$, "isSorting",
+function () {
+return this.sortingColumns.size () != 0;
+});
+Clazz.defineMethod (c$, "getDirective",
+($fz = function (column) {
+for (var i = 0; i < this.sortingColumns.size (); i++) {
+var directive = this.sortingColumns.get (i);
+if (directive.column == column) {
+return directive;
+}}
+return jalview.util.TableSorter.EMPTY_DIRECTIVE;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "getSortingStatus",
+function (column) {
+return this.getDirective (column).direction;
+}, "~N");
+Clazz.defineMethod (c$, "sortingStatusChanged",
+($fz = function () {
+this.clearSortingState ();
+this.fireTableDataChanged ();
+if (this.tableHeader != null) {
+this.tableHeader.repaint ();
+}}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "setSortingStatus",
+function (column, status) {
+var directive = this.getDirective (column);
+if (directive !== jalview.util.TableSorter.EMPTY_DIRECTIVE) {
+this.sortingColumns.remove (directive);
+}if (status != 0) {
+this.sortingColumns.add ( new jalview.util.TableSorter.Directive (column, status));
+}this.sortingStatusChanged ();
+}, "~N,~N");
+Clazz.defineMethod (c$, "getHeaderRendererIcon",
+function (column, size) {
+var directive = this.getDirective (column);
+if (directive === jalview.util.TableSorter.EMPTY_DIRECTIVE) {
+return null;
+}return new jalview.util.TableSorter.Arrow (directive.direction == -1, size, this.sortingColumns.indexOf (directive));
+}, "~N,~N");
+Clazz.defineMethod (c$, "cancelSorting",
+($fz = function () {
+this.sortingColumns.clear ();
+this.sortingStatusChanged ();
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "setColumnComparator",
+function (type, comparator) {
+if (comparator == null) {
+this.columnComparators.remove (type);
+} else {
+this.columnComparators.put (type, comparator);
+}}, "Class,java.util.Comparator");
+Clazz.defineMethod (c$, "getComparator",
+function (column) {
+var columnType = this.tableModel.getColumnClass (column);
+var comparator = this.columnComparators.get (columnType);
+if (comparator != null) {
+return comparator;
+}if (Comparable.isAssignableFrom (columnType)) {
+return jalview.util.TableSorter.COMPARABLE_COMAPRATOR;
+}return jalview.util.TableSorter.LEXICAL_COMPARATOR;
+}, "~N");
+Clazz.defineMethod (c$, "getViewToModel",
+($fz = function () {
+if (this.viewToModel == null) {
+var tableModelRowCount = this.tableModel.getRowCount ();
+this.viewToModel = new Array (tableModelRowCount);
+for (var row = 0; row < tableModelRowCount; row++) {
+this.viewToModel[row] = Clazz.innerTypeInstance (jalview.util.TableSorter.Row, this, null, row);
+}
+if (this.isSorting ()) {
+java.util.Arrays.sort (this.viewToModel);
+}}return this.viewToModel;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "modelIndex",
+function (viewIndex) {
+return this.getViewToModel ()[viewIndex].modelIndex;
+}, "~N");
+Clazz.defineMethod (c$, "getModelToView",
+($fz = function () {
+if (this.modelToView == null) {
+var n = this.getViewToModel ().length;
+this.modelToView = Clazz.newIntArray (n, 0);
+for (var i = 0; i < n; i++) {
+this.modelToView[this.modelIndex (i)] = i;
+}
+}return this.modelToView;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getRowCount",
+function () {
+return (this.tableModel == null) ? 0 : this.tableModel.getRowCount ();
+});
+Clazz.defineMethod (c$, "getColumnCount",
+function () {
+return (this.tableModel == null) ? 0 : this.tableModel.getColumnCount ();
+});
+Clazz.overrideMethod (c$, "getColumnName",
+function (column) {
+return this.tableModel.getColumnName (column);
+}, "~N");
+Clazz.overrideMethod (c$, "getColumnClass",
+function (column) {
+return this.tableModel.getColumnClass (column);
+}, "~N");
+Clazz.overrideMethod (c$, "isCellEditable",
+function (row, column) {
+return this.tableModel.isCellEditable (this.modelIndex (row), column);
+}, "~N,~N");
+Clazz.defineMethod (c$, "getValueAt",
+function (row, column) {
+return this.tableModel.getValueAt (this.modelIndex (row), column);
+}, "~N,~N");
+Clazz.overrideMethod (c$, "setValueAt",
+function (aValue, row, column) {
+this.tableModel.setValueAt (aValue, this.modelIndex (row), column);
+}, "~O,~N,~N");
+c$.$TableSorter$Row$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.modelIndex = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.util.TableSorter, "Row", null, Comparable);
+Clazz.makeConstructor (c$,
+function (a) {
+this.modelIndex = a;
+}, "~N");
+Clazz.overrideMethod (c$, "compareTo",
+function (a) {
+var b = this.modelIndex;
+var c = (a).modelIndex;
+for (var d = this.b$["jalview.util.TableSorter"].sortingColumns.iterator (); d.hasNext (); ) {
+var e = d.next ();
+var f = e.column;
+var g = this.b$["jalview.util.TableSorter"].tableModel.getValueAt (b, f);
+var h = this.b$["jalview.util.TableSorter"].tableModel.getValueAt (c, f);
+var i = 0;
+if (g == null && h == null) {
+i = 0;
+} else if (g == null) {
+i = -1;
+} else if (h == null) {
+i = 1;
+} else {
+i = this.b$["jalview.util.TableSorter"].getComparator (f).compare (g, h);
+}if (i != 0) {
+return e.direction == -1 ? -i : i;
+}}
+return 0;
+}, "~O");
+c$ = Clazz.p0p ();
+};
+c$.$TableSorter$TableModelHandler$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+Clazz.instantialize (this, arguments);
+}, jalview.util.TableSorter, "TableModelHandler", null, javax.swing.event.TableModelListener);
+Clazz.overrideMethod (c$, "tableChanged",
+function (a) {
+if (!this.b$["jalview.util.TableSorter"].isSorting ()) {
+this.b$["jalview.util.TableSorter"].clearSortingState ();
+this.b$["jalview.util.TableSorter"].fireTableChanged (a);
+return;
+}if (a.getFirstRow () == -1) {
+this.b$["jalview.util.TableSorter"].cancelSorting ();
+this.b$["jalview.util.TableSorter"].fireTableChanged (a);
+return;
+}var b = a.getColumn ();
+if (a.getFirstRow () == a.getLastRow () && b != -1 && this.b$["jalview.util.TableSorter"].getSortingStatus (b) == 0 && this.b$["jalview.util.TableSorter"].modelToView != null) {
+var c = this.b$["jalview.util.TableSorter"].getModelToView ()[a.getFirstRow ()];
+this.b$["jalview.util.TableSorter"].fireTableChanged ( new javax.swing.event.TableModelEvent (this.b$["jalview.util.TableSorter"], c, c, b, a.getType ()));
+return;
+}this.b$["jalview.util.TableSorter"].clearSortingState ();
+this.b$["jalview.util.TableSorter"].fireTableDataChanged ();
+return;
+}, "javax.swing.event.TableModelEvent");
+c$ = Clazz.p0p ();
+};
+c$.$TableSorter$MouseHandler$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+Clazz.instantialize (this, arguments);
+}, jalview.util.TableSorter, "MouseHandler", java.awt.event.MouseAdapter);
+Clazz.overrideMethod (c$, "mouseClicked",
+function (a) {
+var b = a.getSource ();
+var c = b.getColumnModel ();
+var d = c.getColumnIndexAtX (a.getX ());
+var e = c.getColumn (d).getModelIndex ();
+if (e != -1) {
+var f = this.b$["jalview.util.TableSorter"].getSortingStatus (e);
+if (!a.isControlDown ()) {
+this.b$["jalview.util.TableSorter"].cancelSorting ();
+}f = f + (a.isShiftDown () ? -1 : 1);
+f = (f + 4) % 3 - 1;
+this.b$["jalview.util.TableSorter"].setSortingStatus (e, f);
+}}, "java.awt.event.MouseEvent");
+c$ = Clazz.p0p ();
+};
+c$.$TableSorter$SortableHeaderRenderer$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.tableCellRenderer = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util.TableSorter, "SortableHeaderRenderer", null, javax.swing.table.TableCellRenderer);
+Clazz.makeConstructor (c$,
+function (a) {
+this.tableCellRenderer = a;
+}, "javax.swing.table.TableCellRenderer");
+Clazz.defineMethod (c$, "getTableCellRendererComponent",
+function (a, b, c, d, e, f) {
+var g = this.tableCellRenderer.getTableCellRendererComponent (a, b, c, d, e, f);
+if (Clazz.instanceOf (g, javax.swing.JLabel)) {
+var h = g;
+h.setHorizontalTextPosition (2);
+var i = a.convertColumnIndexToModel (f);
+h.setIcon (this.b$["jalview.util.TableSorter"].getHeaderRendererIcon (i, h.getFont ().getSize ()));
+}return g;
+}, "javax.swing.JTable,~O,~B,~B,~N,~N");
+c$ = Clazz.p0p ();
+};
+c$.$TableSorter$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "TableSorter$1", null, java.util.Comparator);
+Clazz.defineMethod (c$, "compare",
+function (o1, o2) {
+return (o1).compareTo (o2);
+}, "~O,~O");
+c$ = Clazz.p0p ();
+};
+c$.$TableSorter$2$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (jalview.util, "TableSorter$2", null, java.util.Comparator);
+Clazz.defineMethod (c$, "compare",
+function (o1, o2) {
+return o1.toString ().compareTo (o2.toString ());
+}, "~O,~O");
+c$ = Clazz.p0p ();
+};
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.descending = false;
+this.size = 0;
+this.priority = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.util.TableSorter, "Arrow", null, javax.swing.Icon);
+Clazz.makeConstructor (c$,
+function (a, b, c) {
+this.descending = a;
+this.size = b;
+this.priority = c;
+}, "~B,~N,~N");
+Clazz.overrideMethod (c$, "paintIcon",
+function (a, b, c, d) {
+var e = a == null ? java.awt.Color.GRAY : a.getBackground ();
+var f = Clazz.doubleToInt (Clazz.doubleToInt (this.size / 2) * Math.pow (0.8, this.priority));
+var g = this.descending ? f : -f;
+d = d + Clazz.doubleToInt (5 * this.size / 6) + (this.descending ? -g : 0);
+var h = this.descending ? 1 : -1;
+b.translate (c, d);
+b.setColor (e.darker ());
+b.drawLine (Clazz.doubleToInt (f / 2), g, 0, 0);
+b.drawLine (Clazz.doubleToInt (f / 2), g + h, 0, h);
+b.setColor (e.brighter ());
+b.drawLine (Clazz.doubleToInt (f / 2), g, f, 0);
+b.drawLine (Clazz.doubleToInt (f / 2), g + h, f, h);
+if (this.descending) {
+b.setColor (e.darker ().darker ());
+} else {
+b.setColor (e.brighter ().brighter ());
+}b.drawLine (f, 0, 0, 0);
+b.setColor (e);
+b.translate (-c, -d);
+}, "java.awt.Component,java.awt.Graphics,~N,~N");
+Clazz.overrideMethod (c$, "getIconWidth",
+function () {
+return this.size;
+});
+Clazz.overrideMethod (c$, "getIconHeight",
+function () {
+return this.size;
+});
+c$ = Clazz.p0p ();
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+this.column = 0;
+this.direction = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.util.TableSorter, "Directive");
+Clazz.makeConstructor (c$,
+function (a, b) {
+this.column = a;
+this.direction = b;
+}, "~N,~N");
+c$ = Clazz.p0p ();
+Clazz.defineStatics (c$,
+"DESCENDING", -1,
+"NOT_SORTED", 0,
+"ASCENDING", 1);
+c$.EMPTY_DIRECTIVE = c$.prototype.EMPTY_DIRECTIVE = new jalview.util.TableSorter.Directive (-1, 0);
+c$.COMPARABLE_COMAPRATOR = c$.prototype.COMPARABLE_COMAPRATOR = ((Clazz.isClassDefined ("jalview.util.TableSorter$1") ? 0 : jalview.util.TableSorter.$TableSorter$1$ ()), Clazz.innerTypeInstance (jalview.util.TableSorter$1, this, null));
+c$.LEXICAL_COMPARATOR = c$.prototype.LEXICAL_COMPARATOR = ((Clazz.isClassDefined ("jalview.util.TableSorter$2") ? 0 : jalview.util.TableSorter.$TableSorter$2$ ()), Clazz.innerTypeInstance (jalview.util.TableSorter$2, this, null));
+});
diff --git a/bin/jalview/util/UrlLink.class b/bin/jalview/util/UrlLink.class
index da2ea87..0e8bcb6 100644
Binary files a/bin/jalview/util/UrlLink.class and b/bin/jalview/util/UrlLink.class differ
diff --git a/bin/jalview/util/UrlLink.js b/bin/jalview/util/UrlLink.js
index c50c6ae..a28894b 100644
--- a/bin/jalview/util/UrlLink.js
+++ b/bin/jalview/util/UrlLink.js
@@ -1,148 +1,148 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.load (null, "jalview.util.UrlLink", ["jalview.jsdev.RegExp", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.url_suffix = null;
-this.url_prefix = null;
-this.target = null;
-this.label = null;
-this.regexReplace = null;
-this.dynamic = false;
-this.invalidMessage = null;
-Clazz.instantialize (this, arguments);
-}, jalview.util, "UrlLink");
-Clazz.makeConstructor (c$,
-function (link) {
-var sep = link.indexOf ("|");
-var psqid = link.indexOf ("$SEQUENCE_ID");
-if (psqid > -1) {
-this.dynamic = true;
-var p = sep;
-do {
-sep = p;
-p = link.indexOf ("|", sep + 1);
-} while (p > sep && p < psqid);
-this.label = link.substring (0, sep);
-if (this.label.indexOf ("|") > -1) {
-this.target = this.label.substring (0, this.label.indexOf ("|"));
-} else if (this.label.indexOf (" ") > 2) {
-this.target = this.label.substring (0, this.label.indexOf (" "));
-} else {
-this.target = this.label;
-}this.url_prefix = link.substring (sep + 1, psqid);
-if (link.indexOf ("$SEQUENCE_ID=/") == psqid && (p = link.indexOf ("/=$", psqid + 14)) > psqid + 14) {
-this.url_suffix = link.substring (p + 3);
-this.regexReplace = link.substring (psqid + 14, p);
-try {
-var rg = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace + "/");
-if (rg == null) {
-this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace + "'\n";
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace + "'\n";
-} else {
-throw e;
-}
-}
-} else {
-this.regexReplace = null;
-if (link.indexOf ("$SEQUENCE_ID$") == psqid) {
-this.url_suffix = link.substring (psqid + 13);
-this.regexReplace = null;
-} else {
-this.invalidMessage = "Warning: invalid regex structure for URL link : " + link;
-}}} else {
-this.target = link.substring (0, sep);
-this.label = link.substring (0, sep = link.lastIndexOf ("|"));
-this.url_prefix = link.substring (sep + 1);
-this.regexReplace = null;
-this.url_suffix = null;
-}}, "~S");
-Clazz.defineMethod (c$, "getUrl_suffix",
-function () {
-return this.url_suffix;
-});
-Clazz.defineMethod (c$, "getUrl_prefix",
-function () {
-return this.url_prefix;
-});
-Clazz.defineMethod (c$, "getTarget",
-function () {
-return this.target;
-});
-Clazz.defineMethod (c$, "getLabel",
-function () {
-return this.label;
-});
-Clazz.defineMethod (c$, "getRegexReplace",
-function () {
-return this.regexReplace;
-});
-Clazz.defineMethod (c$, "getInvalidMessage",
-function () {
-return this.invalidMessage;
-});
-Clazz.defineMethod (c$, "isValid",
-function () {
-return this.invalidMessage == null;
-});
-Clazz.defineMethod (c$, "makeUrls",
-function (idstring, onlyIfMatches) {
-if (this.dynamic) {
-if (this.regexReplace != null) {
-var rg = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace + "/");
-if (rg.search (idstring)) {
-var ns = rg.numSubs ();
-if (ns == 0) {
-return Clazz.newArray (-1, [rg.stringMatchedI (ns), this.url_prefix + rg.stringMatched () + this.url_suffix]);
-} else {
-for (var s = 0; s <= rg.numSubs (); s++) {
-System.err.println ("Sub " + s + " : " + rg.matchedFromI (s) + " : " + rg.matchedToI (s) + " : '" + rg.stringMatchedI (s) + "'");
-}
-var subs = new java.util.Vector ();
-var s = 0;
-while (s <= ns) {
-if (s + 1 <= ns && rg.matchedToI (s) > -1 && rg.matchedToI (s + 1) > -1 && rg.matchedToI (s + 1) < rg.matchedToI (s)) {
-var r = s + 1;
-var mtch = "";
-while (r <= ns && rg.matchedToI (r) <= rg.matchedToI (s)) {
-if (rg.matchedFromI (r) > -1) {
-mtch += rg.stringMatchedI (r);
-}r++;
-}
-if (mtch.length > 0) {
-subs.addElement (mtch);
-subs.addElement (this.url_prefix + mtch + this.url_suffix);
-}s = r;
-} else {
-if (rg.matchedFromI (s) > -1) {
-subs.addElement (rg.stringMatchedI (s));
-subs.addElement (this.url_prefix + rg.stringMatchedI (s) + this.url_suffix);
-}s++;
-}}
-var res = new Array (subs.size ());
-for (var r = 0, rs = subs.size (); r < rs; r++) {
-res[r] = subs.elementAt (r);
-}
-subs.removeAllElements ();
-return res;
-}}if (onlyIfMatches) {
-return null;
-}}if (idstring.indexOf ("|") > -1) {
-idstring = idstring.substring (idstring.lastIndexOf ("|") + 1);
-}return Clazz.newArray (-1, [idstring, this.url_prefix + idstring + this.url_suffix]);
-} else {
-return Clazz.newArray (-1, ["", this.url_prefix]);
-}}, "~S,~B");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return this.label + "|" + this.url_prefix + (this.dynamic ? ("$SEQUENCE_ID" + ((this.regexReplace != null) ? "=" + this.regexReplace + "=$" : "$")) : "") + ((this.url_suffix == null) ? "" : this.url_suffix);
-});
-Clazz.defineMethod (c$, "isDynamic",
-function () {
-return this.dynamic;
-});
-Clazz.defineMethod (c$, "setLabel",
-function (newlabel) {
-this.label = newlabel;
-}, "~S");
-});
+Clazz.declarePackage ("jalview.util");
+Clazz.load (null, "jalview.util.UrlLink", ["jalview.jsdev.RegExp", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.url_suffix = null;
+this.url_prefix = null;
+this.target = null;
+this.label = null;
+this.regexReplace = null;
+this.dynamic = false;
+this.invalidMessage = null;
+Clazz.instantialize (this, arguments);
+}, jalview.util, "UrlLink");
+Clazz.makeConstructor (c$,
+function (link) {
+var sep = link.indexOf ("|");
+var psqid = link.indexOf ("$SEQUENCE_ID");
+if (psqid > -1) {
+this.dynamic = true;
+var p = sep;
+do {
+sep = p;
+p = link.indexOf ("|", sep + 1);
+} while (p > sep && p < psqid);
+this.label = link.substring (0, sep);
+if (this.label.indexOf ("|") > -1) {
+this.target = this.label.substring (0, this.label.indexOf ("|"));
+} else if (this.label.indexOf (" ") > 2) {
+this.target = this.label.substring (0, this.label.indexOf (" "));
+} else {
+this.target = this.label;
+}this.url_prefix = link.substring (sep + 1, psqid);
+if (link.indexOf ("$SEQUENCE_ID=/") == psqid && (p = link.indexOf ("/=$", psqid + 14)) > psqid + 14) {
+this.url_suffix = link.substring (p + 3);
+this.regexReplace = link.substring (psqid + 14, p);
+try {
+var rg = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace + "/");
+if (rg == null) {
+this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace + "'\n";
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+this.invalidMessage = "Invalid Regular Expression : '" + this.regexReplace + "'\n";
+} else {
+throw e;
+}
+}
+} else {
+this.regexReplace = null;
+if (link.indexOf ("$SEQUENCE_ID$") == psqid) {
+this.url_suffix = link.substring (psqid + 13);
+this.regexReplace = null;
+} else {
+this.invalidMessage = "Warning: invalid regex structure for URL link : " + link;
+}}} else {
+this.target = link.substring (0, sep);
+this.label = link.substring (0, sep = link.lastIndexOf ("|"));
+this.url_prefix = link.substring (sep + 1);
+this.regexReplace = null;
+this.url_suffix = null;
+}}, "~S");
+Clazz.defineMethod (c$, "getUrl_suffix",
+function () {
+return this.url_suffix;
+});
+Clazz.defineMethod (c$, "getUrl_prefix",
+function () {
+return this.url_prefix;
+});
+Clazz.defineMethod (c$, "getTarget",
+function () {
+return this.target;
+});
+Clazz.defineMethod (c$, "getLabel",
+function () {
+return this.label;
+});
+Clazz.defineMethod (c$, "getRegexReplace",
+function () {
+return this.regexReplace;
+});
+Clazz.defineMethod (c$, "getInvalidMessage",
+function () {
+return this.invalidMessage;
+});
+Clazz.defineMethod (c$, "isValid",
+function () {
+return this.invalidMessage == null;
+});
+Clazz.defineMethod (c$, "makeUrls",
+function (idstring, onlyIfMatches) {
+if (this.dynamic) {
+if (this.regexReplace != null) {
+var rg = jalview.jsdev.RegExp.perlCode ("/" + this.regexReplace + "/");
+if (rg.search (idstring)) {
+var ns = rg.numSubs ();
+if (ns == 0) {
+return Clazz.newArray (-1, [rg.stringMatchedI (ns), this.url_prefix + rg.stringMatched () + this.url_suffix]);
+} else {
+for (var s = 0; s <= rg.numSubs (); s++) {
+System.err.println ("Sub " + s + " : " + rg.matchedFromI (s) + " : " + rg.matchedToI (s) + " : '" + rg.stringMatchedI (s) + "'");
+}
+var subs = new java.util.Vector ();
+var s = 0;
+while (s <= ns) {
+if (s + 1 <= ns && rg.matchedToI (s) > -1 && rg.matchedToI (s + 1) > -1 && rg.matchedToI (s + 1) < rg.matchedToI (s)) {
+var r = s + 1;
+var mtch = "";
+while (r <= ns && rg.matchedToI (r) <= rg.matchedToI (s)) {
+if (rg.matchedFromI (r) > -1) {
+mtch += rg.stringMatchedI (r);
+}r++;
+}
+if (mtch.length > 0) {
+subs.addElement (mtch);
+subs.addElement (this.url_prefix + mtch + this.url_suffix);
+}s = r;
+} else {
+if (rg.matchedFromI (s) > -1) {
+subs.addElement (rg.stringMatchedI (s));
+subs.addElement (this.url_prefix + rg.stringMatchedI (s) + this.url_suffix);
+}s++;
+}}
+var res = new Array (subs.size ());
+for (var r = 0, rs = subs.size (); r < rs; r++) {
+res[r] = subs.elementAt (r);
+}
+subs.removeAllElements ();
+return res;
+}}if (onlyIfMatches) {
+return null;
+}}if (idstring.indexOf ("|") > -1) {
+idstring = idstring.substring (idstring.lastIndexOf ("|") + 1);
+}return Clazz.newArray (-1, [idstring, this.url_prefix + idstring + this.url_suffix]);
+} else {
+return Clazz.newArray (-1, ["", this.url_prefix]);
+}}, "~S,~B");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return this.label + "|" + this.url_prefix + (this.dynamic ? ("$SEQUENCE_ID" + ((this.regexReplace != null) ? "=" + this.regexReplace + "=$" : "$")) : "") + ((this.url_suffix == null) ? "" : this.url_suffix);
+});
+Clazz.defineMethod (c$, "isDynamic",
+function () {
+return this.dynamic;
+});
+Clazz.defineMethod (c$, "setLabel",
+function (newlabel) {
+this.label = newlabel;
+}, "~S");
+});
diff --git a/bin/jalview/util/jarInputStreamProvider.js b/bin/jalview/util/jarInputStreamProvider.js
deleted file mode 100644
index 536a4ea..0000000
--- a/bin/jalview/util/jarInputStreamProvider.js
+++ /dev/null
@@ -1,2 +0,0 @@
-Clazz.declarePackage ("jalview.util");
-Clazz.declareInterface (jalview.util, "jarInputStreamProvider");
diff --git a/bin/jalview/viewmodel/AlignmentViewport.js b/bin/jalview/viewmodel/AlignmentViewport.js
index 6f07731..cdbd489 100644
--- a/bin/jalview/viewmodel/AlignmentViewport.js
+++ b/bin/jalview/viewmodel/AlignmentViewport.js
@@ -1,1254 +1,1254 @@
-Clazz.declarePackage ("jalview.viewmodel");
-Clazz.load (["jalview.api.AlignViewportI", "jalview.structure.CommandListener", "$.VamsasSource", "jalview.datamodel.ColumnSelection", "jalview.viewmodel.styles.ViewStyle", "jalview.workers.AlignCalcManager", "java.beans.PropertyChangeSupport", "java.util.ArrayDeque", "$.HashMap"], "jalview.viewmodel.AlignmentViewport", ["jalview.analysis.Conservation", "jalview.datamodel.AlignmentAnnotation", "$.AlignmentView", "$.CigarArray", "$.Sequence", "$.SequenceGroup", "jalview.schemes.Blosum62ColourScheme", "$.PIDColourScheme", "$.ResidueProperties", "jalview.util.Comparison", "$.MappingUtils", "jalview.workers.ComplementConsensusThread", "$.ConsensusThread", "$.ConservationThread", "$.StrucConsensusThread", "java.awt.Color", "java.util.ArrayList", "$.BitSet", "$.Hashtable"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.viewStyle = null;
-this.codingComplement = null;
-this.featuresDisplayed = null;
-this.historyList = null;
-this.redoList = null;
-this.alignment = null;
-this.sequenceSetID = null;
-this.$isDataset = false;
-this.hiddenRepSequences = null;
-this.colSel = null;
-this.autoCalculateConsensus = true;
-this.autoCalculateStrucConsensus = true;
-this.ignoreGapsInConsensusCalculation = false;
-this.globalColourScheme = null;
-this.consensus = null;
-this.complementConsensus = null;
-this.strucConsensus = null;
-this.conservation = null;
-this.quality = null;
-this.groupConsensus = null;
-this.groupConservation = null;
-this.hconsensus = null;
-this.hcomplementConsensus = null;
-this.hStrucConsensus = null;
-this.hconservation = null;
-this.ConsPercGaps = 25;
-this.calculator = null;
-this.showGroupConservation = false;
-this.showGroupConsensus = false;
-this.showSequenceLogo = false;
-this.normaliseSequenceLogo = false;
-this.showConsensusHistogram = true;
-this.padGaps = false;
-this.sortByTree = false;
-this.selectionGroup = null;
-this.viewId = null;
-this.sgrouphash = -1;
-this.colselhash = -1;
-this.changeSupport = null;
-this.showConservation = true;
-this.showQuality = true;
-this.showConsensus = true;
-this.sequenceColours = null;
-this.sortAnnotationsBy = null;
-this.showAutocalculatedAbove = false;
-this.followHighlight = true;
-this.startRes = 0;
-this.endRes = 0;
-this.startSeq = 0;
-this.endSeq = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.viewmodel, "AlignmentViewport", null, [jalview.api.AlignViewportI, jalview.structure.CommandListener, jalview.structure.VamsasSource]);
-Clazz.prepareFields (c$, function () {
-this.viewStyle = new jalview.viewmodel.styles.ViewStyle ();
-this.historyList = new java.util.ArrayDeque ();
-this.redoList = new java.util.ArrayDeque ();
-this.colSel = new jalview.datamodel.ColumnSelection ();
-this.calculator = new jalview.workers.AlignCalcManager ();
-this.changeSupport = new java.beans.PropertyChangeSupport (this);
-this.sequenceColours = new java.util.HashMap ();
-});
-Clazz.defineMethod (c$, "setFontName",
-function (name) {
-this.viewStyle.setFontName (name);
-}, "~S");
-Clazz.defineMethod (c$, "setFontStyle",
-function (style) {
-this.viewStyle.setFontStyle (style);
-}, "~N");
-Clazz.defineMethod (c$, "setFontSize",
-function (size) {
-this.viewStyle.setFontSize (size);
-}, "~N");
-Clazz.defineMethod (c$, "getFontStyle",
-function () {
-return this.viewStyle.getFontStyle ();
-});
-Clazz.defineMethod (c$, "getFontName",
-function () {
-return this.viewStyle.getFontName ();
-});
-Clazz.defineMethod (c$, "getFontSize",
-function () {
-return this.viewStyle.getFontSize ();
-});
-Clazz.defineMethod (c$, "setUpperCasebold",
-function (upperCasebold) {
-this.viewStyle.setUpperCasebold (upperCasebold);
-}, "~B");
-Clazz.defineMethod (c$, "isUpperCasebold",
-function () {
-return this.viewStyle.isUpperCasebold ();
-});
-Clazz.defineMethod (c$, "isSeqNameItalics",
-function () {
-return this.viewStyle.isSeqNameItalics ();
-});
-Clazz.defineMethod (c$, "setColourByReferenceSeq",
-function (colourByReferenceSeq) {
-this.viewStyle.setColourByReferenceSeq (colourByReferenceSeq);
-}, "~B");
-Clazz.defineMethod (c$, "setColourAppliesToAllGroups",
-function (b) {
-this.viewStyle.setColourAppliesToAllGroups (b);
-}, "~B");
-Clazz.defineMethod (c$, "getColourAppliesToAllGroups",
-function () {
-return this.viewStyle.getColourAppliesToAllGroups ();
-});
-Clazz.defineMethod (c$, "getAbovePIDThreshold",
-function () {
-return this.viewStyle.getAbovePIDThreshold ();
-});
-Clazz.defineMethod (c$, "setIncrement",
-function (inc) {
-this.viewStyle.setIncrement (inc);
-}, "~N");
-Clazz.defineMethod (c$, "getIncrement",
-function () {
-return this.viewStyle.getIncrement ();
-});
-Clazz.defineMethod (c$, "setConservationSelected",
-function (b) {
-this.viewStyle.setConservationSelected (b);
-}, "~B");
-Clazz.defineMethod (c$, "setShowHiddenMarkers",
-function (show) {
-this.viewStyle.setShowHiddenMarkers (show);
-}, "~B");
-Clazz.defineMethod (c$, "getShowHiddenMarkers",
-function () {
-return this.viewStyle.getShowHiddenMarkers ();
-});
-Clazz.defineMethod (c$, "setScaleRightWrapped",
-function (b) {
-this.viewStyle.setScaleRightWrapped (b);
-}, "~B");
-Clazz.defineMethod (c$, "setScaleLeftWrapped",
-function (b) {
-this.viewStyle.setScaleLeftWrapped (b);
-}, "~B");
-Clazz.defineMethod (c$, "setScaleAboveWrapped",
-function (b) {
-this.viewStyle.setScaleAboveWrapped (b);
-}, "~B");
-Clazz.defineMethod (c$, "getScaleLeftWrapped",
-function () {
-return this.viewStyle.getScaleLeftWrapped ();
-});
-Clazz.defineMethod (c$, "getScaleAboveWrapped",
-function () {
-return this.viewStyle.getScaleAboveWrapped ();
-});
-Clazz.defineMethod (c$, "getScaleRightWrapped",
-function () {
-return this.viewStyle.getScaleRightWrapped ();
-});
-Clazz.defineMethod (c$, "setAbovePIDThreshold",
-function (b) {
-this.viewStyle.setAbovePIDThreshold (b);
-}, "~B");
-Clazz.defineMethod (c$, "setThreshold",
-function (thresh) {
-this.viewStyle.setThreshold (thresh);
-}, "~N");
-Clazz.defineMethod (c$, "getThreshold",
-function () {
-return this.viewStyle.getThreshold ();
-});
-Clazz.defineMethod (c$, "getShowJVSuffix",
-function () {
-return this.viewStyle.getShowJVSuffix ();
-});
-Clazz.defineMethod (c$, "setShowJVSuffix",
-function (b) {
-this.viewStyle.setShowJVSuffix (b);
-}, "~B");
-Clazz.defineMethod (c$, "setWrapAlignment",
-function (state) {
-this.viewStyle.setWrapAlignment (state);
-}, "~B");
-Clazz.defineMethod (c$, "setShowText",
-function (state) {
-this.viewStyle.setShowText (state);
-}, "~B");
-Clazz.defineMethod (c$, "setRenderGaps",
-function (state) {
-this.viewStyle.setRenderGaps (state);
-}, "~B");
-Clazz.defineMethod (c$, "getColourText",
-function () {
-return this.viewStyle.getColourText ();
-});
-Clazz.defineMethod (c$, "setColourText",
-function (state) {
-this.viewStyle.setColourText (state);
-}, "~B");
-Clazz.defineMethod (c$, "getWrapAlignment",
-function () {
-return this.viewStyle.getWrapAlignment ();
-});
-Clazz.defineMethod (c$, "getShowText",
-function () {
-return this.viewStyle.getShowText ();
-});
-Clazz.defineMethod (c$, "getWrappedWidth",
-function () {
-return this.viewStyle.getWrappedWidth ();
-});
-Clazz.defineMethod (c$, "setWrappedWidth",
-function (w) {
-this.viewStyle.setWrappedWidth (w);
-}, "~N");
-Clazz.defineMethod (c$, "getCharHeight",
-function () {
-return this.viewStyle.getCharHeight ();
-});
-Clazz.defineMethod (c$, "setCharHeight",
-function (h) {
-this.viewStyle.setCharHeight (h);
-}, "~N");
-Clazz.defineMethod (c$, "getCharWidth",
-function () {
-return this.viewStyle.getCharWidth ();
-});
-Clazz.defineMethod (c$, "setCharWidth",
-function (w) {
-this.viewStyle.setCharWidth (w);
-}, "~N");
-Clazz.defineMethod (c$, "getShowBoxes",
-function () {
-return this.viewStyle.getShowBoxes ();
-});
-Clazz.defineMethod (c$, "getShowUnconserved",
-function () {
-return this.viewStyle.getShowUnconserved ();
-});
-Clazz.defineMethod (c$, "setShowUnconserved",
-function (showunconserved) {
-this.viewStyle.setShowUnconserved (showunconserved);
-}, "~B");
-Clazz.defineMethod (c$, "setSeqNameItalics",
-function (default1) {
-this.viewStyle.setSeqNameItalics (default1);
-}, "~B");
-Clazz.defineMethod (c$, "getAlignment",
-function () {
-return this.alignment;
-});
-Clazz.overrideMethod (c$, "getGapCharacter",
-function () {
-return this.alignment.getGapCharacter ();
-});
-Clazz.defineMethod (c$, "setDataset",
-function (b) {
-this.$isDataset = b;
-}, "~B");
-Clazz.defineMethod (c$, "isDataset",
-function () {
-return this.$isDataset;
-});
-Clazz.overrideMethod (c$, "setGlobalColourScheme",
-function (cs) {
-this.globalColourScheme = cs;
-var recalc = false;
-if (cs != null) {
-cs.setConservationApplied (recalc = this.getConservationSelected ());
-if (this.getAbovePIDThreshold () || Clazz.instanceOf (cs, jalview.schemes.PIDColourScheme) || Clazz.instanceOf (cs, jalview.schemes.Blosum62ColourScheme)) {
-recalc = true;
-cs.setThreshold (this.viewStyle.getThreshold (), this.ignoreGapsInConsensusCalculation);
-} else {
-cs.setThreshold (0, this.ignoreGapsInConsensusCalculation);
-}if (recalc) {
-cs.setConsensus (this.hconsensus);
-cs.setConservation (this.hconservation);
-}cs.alignmentChanged (this.alignment, this.hiddenRepSequences);
-}if (this.getColourAppliesToAllGroups ()) {
-for (var sg, $sg = this.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (cs == null) {
-sg.cs = null;
-continue;
-}sg.cs = cs.applyTo (sg, this.getHiddenRepSequences ());
-sg.setConsPercGaps (this.ConsPercGaps);
-if (this.getAbovePIDThreshold () || Clazz.instanceOf (cs, jalview.schemes.PIDColourScheme) || Clazz.instanceOf (cs, jalview.schemes.Blosum62ColourScheme)) {
-sg.cs.setThreshold (this.viewStyle.getThreshold (), this.isIgnoreGapsConsensus ());
-recalc = true;
-} else {
-sg.cs.setThreshold (0, this.isIgnoreGapsConsensus ());
-}if (this.getConservationSelected ()) {
-sg.cs.setConservationApplied (true);
-recalc = true;
-} else {
-sg.cs.setConservation (null);
-}if (recalc) {
-sg.recalcConservation ();
-} else {
-sg.cs.alignmentChanged (sg, this.hiddenRepSequences);
-}}
-}}, "jalview.schemes.ColourSchemeI");
-Clazz.overrideMethod (c$, "getGlobalColourScheme",
-function () {
-return this.globalColourScheme;
-});
-Clazz.overrideMethod (c$, "setConservation",
-function (cons) {
-this.hconservation = cons;
-}, "jalview.analysis.Conservation");
-Clazz.overrideMethod (c$, "getConsPercGaps",
-function () {
-return this.ConsPercGaps;
-});
-Clazz.overrideMethod (c$, "setSequenceConsensusHash",
-function (hconsensus) {
-this.hconsensus = hconsensus;
-}, "~A");
-Clazz.overrideMethod (c$, "setComplementConsensusHash",
-function (hconsensus) {
-this.hcomplementConsensus = hconsensus;
-}, "~A");
-Clazz.overrideMethod (c$, "getSequenceConsensusHash",
-function () {
-return this.hconsensus;
-});
-Clazz.overrideMethod (c$, "getComplementConsensusHash",
-function () {
-return this.hcomplementConsensus;
-});
-Clazz.overrideMethod (c$, "getRnaStructureConsensusHash",
-function () {
-return this.hStrucConsensus;
-});
-Clazz.overrideMethod (c$, "setRnaStructureConsensusHash",
-function (hStrucConsensus) {
-this.hStrucConsensus = hStrucConsensus;
-}, "~A");
-Clazz.overrideMethod (c$, "getAlignmentQualityAnnot",
-function () {
-return this.quality;
-});
-Clazz.overrideMethod (c$, "getAlignmentConservationAnnotation",
-function () {
-return this.conservation;
-});
-Clazz.overrideMethod (c$, "getAlignmentConsensusAnnotation",
-function () {
-return this.consensus;
-});
-Clazz.overrideMethod (c$, "getComplementConsensusAnnotation",
-function () {
-return this.complementConsensus;
-});
-Clazz.overrideMethod (c$, "getAlignmentStrucConsensusAnnotation",
-function () {
-return this.strucConsensus;
-});
-Clazz.defineMethod (c$, "updateConservation",
-function (ap) {
-if (this.alignment.isNucleotide () || this.conservation == null || !this.autoCalculateConsensus) {
-return;
-}if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.ConservationThread) == null) {
-this.calculator.registerWorker ( new jalview.workers.ConservationThread (this, ap));
-}}, "jalview.api.AlignmentViewPanel");
-Clazz.defineMethod (c$, "updateConsensus",
-function (ap) {
-if (this.consensus == null || !this.autoCalculateConsensus) {
-return;
-}if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.ConsensusThread) == null) {
-this.calculator.registerWorker ( new jalview.workers.ConsensusThread (this, ap));
-}var al = this.getAlignment ();
-if (!al.isNucleotide () && al.getCodonFrames () != null && !al.getCodonFrames ().isEmpty ()) {
-if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.ComplementConsensusThread) == null) {
-this.calculator.registerWorker ( new jalview.workers.ComplementConsensusThread (this, ap));
-}}}, "jalview.api.AlignmentViewPanel");
-Clazz.defineMethod (c$, "updateStrucConsensus",
-function (ap) {
-if (this.autoCalculateStrucConsensus && this.strucConsensus == null && this.alignment.isNucleotide () && this.alignment.hasRNAStructure ()) {
-this.initRNAStructure ();
-}if (this.strucConsensus == null || !this.autoCalculateStrucConsensus) {
-return;
-}if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.StrucConsensusThread) == null) {
-this.calculator.registerWorker ( new jalview.workers.StrucConsensusThread (this, ap));
-}}, "jalview.api.AlignmentViewPanel");
-Clazz.defineMethod (c$, "isCalcInProgress",
-function () {
-return this.calculator.isWorking ();
-});
-Clazz.overrideMethod (c$, "isCalculationInProgress",
-function (alignmentAnnotation) {
-if (!alignmentAnnotation.autoCalculated) {
-return false;
-}if (this.calculator.workingInvolvedWith (alignmentAnnotation)) {
-return true;
-}return false;
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.overrideMethod (c$, "isClosed",
-function () {
-return this.alignment == null;
-});
-Clazz.overrideMethod (c$, "getCalcManager",
-function () {
-return this.calculator;
-});
-Clazz.overrideMethod (c$, "isShowSequenceLogo",
-function () {
-return this.showSequenceLogo;
-});
-Clazz.defineMethod (c$, "setShowSequenceLogo",
-function (showSequenceLogo) {
-if (showSequenceLogo != this.showSequenceLogo) {
-this.showSequenceLogo = showSequenceLogo;
-this.calculator.updateAnnotationFor (jalview.workers.ConsensusThread);
-this.calculator.updateAnnotationFor (jalview.workers.ComplementConsensusThread);
-this.calculator.updateAnnotationFor (jalview.workers.StrucConsensusThread);
-}this.showSequenceLogo = showSequenceLogo;
-}, "~B");
-Clazz.defineMethod (c$, "setShowConsensusHistogram",
-function (showConsensusHistogram) {
-this.showConsensusHistogram = showConsensusHistogram;
-}, "~B");
-Clazz.defineMethod (c$, "isShowGroupConservation",
-function () {
-return this.showGroupConservation;
-});
-Clazz.defineMethod (c$, "setShowGroupConservation",
-function (showGroupConservation) {
-this.showGroupConservation = showGroupConservation;
-}, "~B");
-Clazz.defineMethod (c$, "isShowGroupConsensus",
-function () {
-return this.showGroupConsensus;
-});
-Clazz.defineMethod (c$, "setShowGroupConsensus",
-function (showGroupConsensus) {
-this.showGroupConsensus = showGroupConsensus;
-}, "~B");
-Clazz.overrideMethod (c$, "isShowConsensusHistogram",
-function () {
-return this.showConsensusHistogram;
-});
-Clazz.overrideMethod (c$, "getSelectionGroup",
-function () {
-return this.selectionGroup;
-});
-Clazz.overrideMethod (c$, "setSelectionGroup",
-function (sg) {
-this.selectionGroup = sg;
-}, "jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "setHiddenColumns",
-function (colsel) {
-this.colSel = colsel;
-}, "jalview.datamodel.ColumnSelection");
-Clazz.overrideMethod (c$, "getColumnSelection",
-function () {
-return this.colSel;
-});
-Clazz.overrideMethod (c$, "setColumnSelection",
-function (colSel) {
-this.colSel = colSel;
-if (colSel != null) {
-this.updateHiddenColumns ();
-}}, "jalview.datamodel.ColumnSelection");
-Clazz.overrideMethod (c$, "getHiddenRepSequences",
-function () {
-return this.hiddenRepSequences;
-});
-Clazz.overrideMethod (c$, "setHiddenRepSequences",
-function (hiddenRepSequences) {
-this.hiddenRepSequences = hiddenRepSequences;
-}, "java.util.Map");
-Clazz.overrideMethod (c$, "hasHiddenColumns",
-function () {
-return this.colSel != null && this.colSel.hasHiddenColumns ();
-});
-Clazz.defineMethod (c$, "updateHiddenColumns",
-function () {
-});
-Clazz.overrideMethod (c$, "hasHiddenRows",
-function () {
-return this.alignment.getHiddenSequences ().getSize () > 0;
-});
-Clazz.defineMethod (c$, "setSequenceSetId",
-function (newid) {
-if (this.sequenceSetID != null) {
-System.err.println ("Warning - overwriting a sequenceSetId for a viewport!");
-}this.sequenceSetID = String.instantialize (newid);
-}, "~S");
-Clazz.overrideMethod (c$, "getSequenceSetId",
-function () {
-if (this.sequenceSetID == null) {
-this.sequenceSetID = this.alignment.hashCode () + "";
-}return this.sequenceSetID;
-});
-Clazz.overrideMethod (c$, "getViewId",
-function () {
-if (this.viewId == null) {
-this.viewId = this.getSequenceSetId () + "." + this.hashCode () + "";
-}return this.viewId;
-});
-Clazz.defineMethod (c$, "setIgnoreGapsConsensus",
-function (b, ap) {
-this.ignoreGapsInConsensusCalculation = b;
-if (ap != null) {
-this.updateConsensus (ap);
-if (this.globalColourScheme != null) {
-this.globalColourScheme.setThreshold (this.globalColourScheme.getThreshold (), this.ignoreGapsInConsensusCalculation);
-}}}, "~B,jalview.api.AlignmentViewPanel");
-Clazz.defineMethod (c$, "isSelectionGroupChanged",
-function (b) {
-var hc = (this.selectionGroup == null || this.selectionGroup.getSize () == 0) ? -1 : this.selectionGroup.hashCode ();
-if (hc != -1 && hc != this.sgrouphash) {
-if (b) {
-this.sgrouphash = hc;
-}return true;
-}return false;
-}, "~B");
-Clazz.defineMethod (c$, "isColSelChanged",
-function (b) {
-var hc = (this.colSel == null || this.colSel.size () == 0) ? -1 : this.colSel.hashCode ();
-if (hc != -1 && hc != this.colselhash) {
-if (b) {
-this.colselhash = hc;
-}return true;
-}return false;
-}, "~B");
-Clazz.overrideMethod (c$, "isIgnoreGapsConsensus",
-function () {
-return this.ignoreGapsInConsensusCalculation;
-});
-Clazz.defineMethod (c$, "addPropertyChangeListener",
-function (listener) {
-this.changeSupport.addPropertyChangeListener (listener);
-}, "java.beans.PropertyChangeListener");
-Clazz.defineMethod (c$, "removePropertyChangeListener",
-function (listener) {
-this.changeSupport.removePropertyChangeListener (listener);
-}, "java.beans.PropertyChangeListener");
-Clazz.defineMethod (c$, "firePropertyChange",
-function (prop, oldvalue, newvalue) {
-this.changeSupport.firePropertyChange (prop, oldvalue, newvalue);
-}, "~S,~O,~O");
-Clazz.defineMethod (c$, "hideSelectedColumns",
-function () {
-if (this.colSel.size () < 1) {
-return;
-}this.colSel.hideSelectedColumns ();
-this.setSelectionGroup (null);
-});
-Clazz.defineMethod (c$, "hideColumns",
-function (start, end) {
-if (start == end) {
-this.colSel.hideColumns (start);
-} else {
-this.colSel.hideColumns (start, end);
-}}, "~N,~N");
-Clazz.defineMethod (c$, "showColumn",
-function (col) {
-this.colSel.revealHiddenColumns (col);
-}, "~N");
-Clazz.defineMethod (c$, "showAllHiddenColumns",
-function () {
-this.colSel.revealAllHiddenColumns ();
-});
-Clazz.defineMethod (c$, "showAllHiddenSeqs",
-function () {
-if (this.alignment.getHiddenSequences ().getSize () > 0) {
-if (this.selectionGroup == null) {
-this.selectionGroup = new jalview.datamodel.SequenceGroup ();
-this.selectionGroup.setEndRes (this.alignment.getWidth () - 1);
-}var tmp = this.alignment.getHiddenSequences ().showAll (this.hiddenRepSequences);
-for (var seq, $seq = tmp.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-this.selectionGroup.addSequence (seq, false);
-this.setSequenceAnnotationsVisible (seq, true);
-}
-this.hiddenRepSequences = null;
-this.firePropertyChange ("alignment", null, this.alignment.getSequences ());
-this.sendSelection ();
-}});
-Clazz.defineMethod (c$, "showSequence",
-function (index) {
-var tmp = this.alignment.getHiddenSequences ().showSequence (index, this.hiddenRepSequences);
-if (tmp.size () > 0) {
-if (this.selectionGroup == null) {
-this.selectionGroup = new jalview.datamodel.SequenceGroup ();
-this.selectionGroup.setEndRes (this.alignment.getWidth () - 1);
-}for (var seq, $seq = tmp.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
-this.selectionGroup.addSequence (seq, false);
-this.setSequenceAnnotationsVisible (seq, true);
-}
-this.firePropertyChange ("alignment", null, this.alignment.getSequences ());
-this.sendSelection ();
-}}, "~N");
-Clazz.defineMethod (c$, "hideAllSelectedSeqs",
-function () {
-if (this.selectionGroup == null || this.selectionGroup.getSize () < 1) {
-return;
-}var seqs = this.selectionGroup.getSequencesInOrder (this.alignment);
-this.hideSequence (seqs);
-this.setSelectionGroup (null);
-});
-Clazz.defineMethod (c$, "hideSequence",
-function (seq) {
-if (seq != null) {
-for (var i = 0; i < seq.length; i++) {
-this.alignment.getHiddenSequences ().hideSequence (seq[i]);
-this.setSequenceAnnotationsVisible (seq[i], false);
-}
-this.firePropertyChange ("alignment", null, this.alignment.getSequences ());
-}}, "~A");
-Clazz.defineMethod (c$, "setSequenceAnnotationsVisible",
-function (sequenceI, visible) {
-for (var ann, $ann = 0, $$ann = this.alignment.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
-if (ann.sequenceRef === sequenceI) {
-ann.visible = visible;
-}}
-}, "jalview.datamodel.SequenceI,~B");
-Clazz.defineMethod (c$, "hideRepSequences",
-function (repSequence, sg) {
-var sSize = sg.getSize ();
-if (sSize < 2) {
-return;
-}if (this.hiddenRepSequences == null) {
-this.hiddenRepSequences = new java.util.Hashtable ();
-}this.hiddenRepSequences.put (repSequence, sg);
-var seqs = new Array (sSize - 1);
-var index = 0;
-for (var i = 0; i < sSize; i++) {
-if (sg.getSequenceAt (i) !== repSequence) {
-if (index == sSize - 1) {
-return;
-}seqs[index++] = sg.getSequenceAt (i);
-}}
-sg.setSeqrep (repSequence);
-sg.setHidereps (true);
-this.hideSequence (seqs);
-}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
-Clazz.defineMethod (c$, "isHiddenRepSequence",
-function (seq) {
-return this.alignment.getSeqrep () === seq || (this.hiddenRepSequences != null && this.hiddenRepSequences.containsKey (seq));
-}, "jalview.datamodel.SequenceI");
-Clazz.defineMethod (c$, "getRepresentedSequences",
-function (seq) {
-return (this.hiddenRepSequences == null ? null : this.hiddenRepSequences.get (seq));
-}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "adjustForHiddenSeqs",
-function (alignmentIndex) {
-return this.alignment.getHiddenSequences ().adjustForHiddenSeqs (alignmentIndex);
-}, "~N");
-Clazz.overrideMethod (c$, "invertColumnSelection",
-function () {
-this.colSel.invertColumnSelection (0, this.alignment.getWidth ());
-});
-Clazz.overrideMethod (c$, "getSelectionAsNewSequence",
-function () {
-var sequences;
-if (this.selectionGroup == null || this.selectionGroup.getSize () == 0) {
-sequences = this.alignment.getSequencesArray ();
-var annots = this.alignment.getAlignmentAnnotation ();
-for (var i = 0; i < sequences.length; i++) {
-sequences[i] = new jalview.datamodel.Sequence (sequences[i], annots);
-}
-} else {
-sequences = this.selectionGroup.getSelectionAsNewSequences (this.alignment);
-}return sequences;
-});
-Clazz.overrideMethod (c$, "getSequenceSelection",
-function () {
-var sequences = null;
-if (this.selectionGroup != null) {
-sequences = this.selectionGroup.getSequencesInOrder (this.alignment);
-}if (sequences == null) {
-sequences = this.alignment.getSequencesArray ();
-}return sequences;
-});
-Clazz.overrideMethod (c$, "getViewAsCigars",
-function (selectedRegionOnly) {
-return new jalview.datamodel.CigarArray (this.alignment, this.colSel, (selectedRegionOnly ? this.selectionGroup : null));
-}, "~B");
-Clazz.defineMethod (c$, "getAlignmentView",
-function (selectedOnly) {
-return this.getAlignmentView (selectedOnly, false);
-}, "~B");
-Clazz.defineMethod (c$, "getAlignmentView",
-function (selectedOnly, markGroups) {
-return new jalview.datamodel.AlignmentView (this.alignment, this.colSel, this.selectionGroup, this.colSel != null && this.colSel.hasHiddenColumns (), selectedOnly, markGroups);
-}, "~B,~B");
-Clazz.overrideMethod (c$, "getViewAsString",
-function (selectedRegionOnly) {
-var selection = null;
-var seqs = null;
-var i;
-var iSize;
-var start = 0;
-var end = 0;
-if (selectedRegionOnly && this.selectionGroup != null) {
-iSize = this.selectionGroup.getSize ();
-seqs = this.selectionGroup.getSequencesInOrder (this.alignment);
-start = this.selectionGroup.getStartRes ();
-end = this.selectionGroup.getEndRes () + 1;
-} else {
-iSize = this.alignment.getHeight ();
-seqs = this.alignment.getSequencesArray ();
-end = this.alignment.getWidth ();
-}selection = new Array (iSize);
-if (this.colSel != null && this.colSel.hasHiddenColumns ()) {
-selection = this.colSel.getVisibleSequenceStrings (start, end, seqs);
-} else {
-for (i = 0; i < iSize; i++) {
-selection[i] = seqs[i].getSequenceAsString (start, end);
-}
-}return selection;
-}, "~B");
-Clazz.overrideMethod (c$, "getVisibleRegionBoundaries",
-function (min, max) {
-var regions = new java.util.ArrayList ();
-var start = min;
-var end = max;
-do {
-if (this.colSel != null && this.colSel.hasHiddenColumns ()) {
-if (start == 0) {
-start = this.colSel.adjustForHiddenColumns (start);
-}end = this.colSel.getHiddenBoundaryRight (start);
-if (start == end) {
-end = max;
-}if (end > max) {
-end = max;
-}}regions.add ( Clazz.newIntArray (-1, [start, end]));
-if (this.colSel != null && this.colSel.hasHiddenColumns ()) {
-start = this.colSel.adjustForHiddenColumns (end);
-start = this.colSel.getHiddenBoundaryLeft (start) + 1;
-}} while (end < max);
-var startEnd = Clazz.newIntArray (regions.size (), 2, 0);
-return regions;
-}, "~N,~N");
-Clazz.overrideMethod (c$, "getVisibleAlignmentAnnotation",
-function (selectedOnly) {
-var ala = new java.util.ArrayList ();
-var aa;
-if ((aa = this.alignment.getAlignmentAnnotation ()) != null) {
-for (var annot, $annot = 0, $$annot = aa; $annot < $$annot.length && ((annot = $$annot[$annot]) || true); $annot++) {
-var clone = new jalview.datamodel.AlignmentAnnotation (annot);
-if (selectedOnly && this.selectionGroup != null) {
-this.colSel.makeVisibleAnnotation (this.selectionGroup.getStartRes (), this.selectionGroup.getEndRes (), clone);
-} else {
-this.colSel.makeVisibleAnnotation (clone);
-}ala.add (clone);
-}
-}return ala;
-}, "~B");
-Clazz.overrideMethod (c$, "isPadGaps",
-function () {
-return this.padGaps;
-});
-Clazz.overrideMethod (c$, "setPadGaps",
-function (padGaps) {
-this.padGaps = padGaps;
-}, "~B");
-Clazz.overrideMethod (c$, "alignmentChanged",
-function (ap) {
-if (this.isPadGaps ()) {
-this.alignment.padGaps ();
-}if (this.autoCalculateConsensus) {
-this.updateConsensus (ap);
-}if (this.hconsensus != null && this.autoCalculateConsensus) {
-this.updateConservation (ap);
-}if (this.autoCalculateStrucConsensus) {
-this.updateStrucConsensus (ap);
-}var alWidth = this.alignment.getWidth ();
-var groups = this.alignment.getGroups ();
-if (groups != null) {
-for (var sg, $sg = groups.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (sg.getEndRes () > alWidth) {
-sg.setEndRes (alWidth - 1);
-}}
-}if (this.selectionGroup != null && this.selectionGroup.getEndRes () > alWidth) {
-this.selectionGroup.setEndRes (alWidth - 1);
-}this.resetAllColourSchemes ();
-this.calculator.restartWorkers ();
-}, "jalview.api.AlignmentViewPanel");
-Clazz.defineMethod (c$, "resetAllColourSchemes",
-function () {
-var cs = this.globalColourScheme;
-if (cs != null) {
-cs.alignmentChanged (this.alignment, this.hiddenRepSequences);
-cs.setConsensus (this.hconsensus);
-if (cs.conservationApplied ()) {
-cs.setConservation (jalview.analysis.Conservation.calculateConservation ("All", jalview.schemes.ResidueProperties.propHash, 3, this.alignment.getSequences (), 0, this.alignment.getWidth (), false, this.getConsPercGaps (), false));
-}}for (var sg, $sg = this.alignment.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (sg.cs != null) {
-sg.cs.alignmentChanged (sg, this.hiddenRepSequences);
-}sg.recalcConservation ();
-}
-});
-Clazz.defineMethod (c$, "initAutoAnnotation",
-function () {
-if (this.hconsensus == null && !this.$isDataset) {
-if (!this.alignment.isNucleotide ()) {
-this.initConservation ();
-this.initQuality ();
-} else {
-this.initRNAStructure ();
-}this.consensus = new jalview.datamodel.AlignmentAnnotation ("Consensus", "PID", new Array (1), 0, 100, 1);
-this.initConsensus (this.consensus);
-this.initComplementConsensus ();
-}});
-Clazz.defineMethod (c$, "initComplementConsensus",
-function () {
-if (!this.alignment.isNucleotide ()) {
-var codonMappings = this.alignment.getCodonFrames ();
-if (codonMappings != null && !codonMappings.isEmpty ()) {
-this.complementConsensus = new jalview.datamodel.AlignmentAnnotation ("cDNA Consensus", "PID for cDNA", new Array (1), 0, 100, 1);
-this.initConsensus (this.complementConsensus);
-}}});
-Clazz.defineMethod (c$, "initConsensus",
-($fz = function (aa) {
-aa.hasText = true;
-aa.autoCalculated = true;
-if (this.showConsensus) {
-this.alignment.addAnnotation (aa);
-}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation");
-Clazz.defineMethod (c$, "initConservation",
-($fz = function () {
-if (this.showConservation) {
-if (this.conservation == null) {
-this.conservation = new jalview.datamodel.AlignmentAnnotation ("Conservation", "Conservation of total alignment less than " + this.getConsPercGaps () + "% gaps", new Array (1), 0, 11, 1);
-this.conservation.hasText = true;
-this.conservation.autoCalculated = true;
-this.alignment.addAnnotation (this.conservation);
-}}}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "initQuality",
-($fz = function () {
-if (this.showQuality) {
-if (this.quality == null) {
-this.quality = new jalview.datamodel.AlignmentAnnotation ("Quality", "Alignment Quality based on Blosum62 scores", new Array (1), 0, 11, 1);
-this.quality.hasText = true;
-this.quality.autoCalculated = true;
-this.alignment.addAnnotation (this.quality);
-}}}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "initRNAStructure",
-($fz = function () {
-if (this.alignment.hasRNAStructure () && this.strucConsensus == null) {
-this.strucConsensus = new jalview.datamodel.AlignmentAnnotation ("StrucConsensus", "PID", new Array (1), 0, 100, 1);
-this.strucConsensus.hasText = true;
-this.strucConsensus.autoCalculated = true;
-if (this.showConsensus) {
-this.alignment.addAnnotation (this.strucConsensus);
-}}}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "calcPanelHeight",
-function () {
-var anns = this.getAlignment ().getAlignmentAnnotation ();
-var height = 0;
-var charHeight = this.getCharHeight ();
-if (anns != null) {
-var graphgrp = new java.util.BitSet ();
-for (var aa, $aa = 0, $$aa = anns; $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
-if (aa == null) {
-System.err.println ("Null annotation row: ignoring.");
-continue;
-}if (!aa.visible) {
-continue;
-}if (aa.graphGroup > -1) {
-if (graphgrp.get (aa.graphGroup)) {
-continue;
-} else {
-graphgrp.set (aa.graphGroup);
-}}aa.height = 0;
-if (aa.hasText) {
-aa.height += charHeight;
-}if (aa.hasIcons) {
-aa.height += 16;
-}if (aa.graph > 0) {
-aa.height += aa.graphHeight;
-}if (aa.height == 0) {
-aa.height = 20;
-}height += aa.height;
-}
-}if (height == 0) {
-height = 20;
-}return height;
-});
-Clazz.overrideMethod (c$, "updateGroupAnnotationSettings",
-function (applyGlobalSettings, preserveNewGroupSettings) {
-var updateCalcs = false;
-var conv = this.isShowGroupConservation ();
-var cons = this.isShowGroupConsensus ();
-var showprf = this.isShowSequenceLogo ();
-var showConsHist = this.isShowConsensusHistogram ();
-var normLogo = this.isNormaliseSequenceLogo ();
-var sortg = true;
-var aan = this.alignment.getAlignmentAnnotation ();
-var oldrfs = new java.util.ArrayList ();
-if (aan != null) {
-for (var an = 0; an < aan.length; an++) {
-if (aan[an].autoCalculated && aan[an].groupRef != null) {
-oldrfs.add (aan[an].groupRef);
-this.alignment.deleteAnnotation (aan[an], false);
-}}
-}if (this.alignment.getGroups () != null) {
-for (var sg, $sg = this.alignment.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-updateCalcs = false;
-if (applyGlobalSettings || (!preserveNewGroupSettings && !oldrfs.contains (sg))) {
-sg.setshowSequenceLogo (showprf);
-sg.setShowConsensusHistogram (showConsHist);
-sg.setNormaliseSequenceLogo (normLogo);
-}if (conv) {
-updateCalcs = true;
-this.alignment.addAnnotation (sg.getConservationRow (), 0);
-}if (cons) {
-updateCalcs = true;
-this.alignment.addAnnotation (sg.getConsensus (), 0);
-}if (updateCalcs) {
-sg.recalcConservation ();
-}}
-}oldrfs.clear ();
-}, "~B,~B");
-Clazz.defineMethod (c$, "isDisplayReferenceSeq",
-function () {
-return this.alignment.hasSeqrep () && this.viewStyle.isDisplayReferenceSeq ();
-});
-Clazz.defineMethod (c$, "setDisplayReferenceSeq",
-function (displayReferenceSeq) {
-this.viewStyle.setDisplayReferenceSeq (displayReferenceSeq);
-}, "~B");
-Clazz.defineMethod (c$, "isColourByReferenceSeq",
-function () {
-return this.alignment.hasSeqrep () && this.viewStyle.isColourByReferenceSeq ();
-});
-Clazz.overrideMethod (c$, "getSequenceColour",
-function (seq) {
-var sqc = this.sequenceColours.get (seq);
-return (sqc == null ? java.awt.Color.white : sqc);
-}, "jalview.datamodel.SequenceI");
-Clazz.overrideMethod (c$, "setSequenceColour",
-function (seq, col) {
-if (col == null) {
-this.sequenceColours.remove (seq);
-} else {
-this.sequenceColours.put (seq, col);
-}}, "jalview.datamodel.SequenceI,java.awt.Color");
-Clazz.overrideMethod (c$, "updateSequenceIdColours",
-function () {
-for (var sg, $sg = this.alignment.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
-if (sg.idColour != null) {
-for (var s, $s = sg.getSequences (this.getHiddenRepSequences ()).iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
-this.sequenceColours.put (s, sg.idColour);
-}
-}}
-});
-Clazz.overrideMethod (c$, "clearSequenceColours",
-function () {
-this.sequenceColours.clear ();
-});
-Clazz.defineMethod (c$, "getCodingComplement",
-function () {
-return this.codingComplement;
-});
-Clazz.defineMethod (c$, "setCodingComplement",
-function (av) {
-if (this === av) {
-System.err.println ("Ignoring recursive setCodingComplement request");
-} else {
-this.codingComplement = av;
-if (av.getCodingComplement () !== this) {
-av.setCodingComplement (this);
-}}}, "jalview.api.AlignViewportI");
-Clazz.overrideMethod (c$, "isNucleotide",
-function () {
-return this.getAlignment () == null ? false : this.getAlignment ().isNucleotide ();
-});
-Clazz.overrideMethod (c$, "getFeaturesDisplayed",
-function () {
-return this.featuresDisplayed;
-});
-Clazz.overrideMethod (c$, "setFeaturesDisplayed",
-function (featuresDisplayedI) {
-this.featuresDisplayed = featuresDisplayedI;
-}, "jalview.api.FeaturesDisplayedI");
-Clazz.overrideMethod (c$, "areFeaturesDisplayed",
-function () {
-return this.featuresDisplayed != null && this.featuresDisplayed.getRegisterdFeaturesCount () > 0;
-});
-Clazz.defineMethod (c$, "setShowSequenceFeatures",
-function (b) {
-this.viewStyle.setShowSequenceFeatures (b);
-}, "~B");
-Clazz.defineMethod (c$, "isShowSequenceFeatures",
-function () {
-return this.viewStyle.isShowSequenceFeatures ();
-});
-Clazz.defineMethod (c$, "setShowSequenceFeaturesHeight",
-function (selected) {
-this.viewStyle.setShowSequenceFeaturesHeight (selected);
-}, "~B");
-Clazz.defineMethod (c$, "isShowSequenceFeaturesHeight",
-function () {
-return this.viewStyle.isShowSequenceFeaturesHeight ();
-});
-Clazz.defineMethod (c$, "setShowAnnotation",
-function (b) {
-this.viewStyle.setShowAnnotation (b);
-}, "~B");
-Clazz.defineMethod (c$, "isShowAnnotation",
-function () {
-return this.viewStyle.isShowAnnotation ();
-});
-Clazz.defineMethod (c$, "isRightAlignIds",
-function () {
-return this.viewStyle.isRightAlignIds ();
-});
-Clazz.defineMethod (c$, "setRightAlignIds",
-function (rightAlignIds) {
-this.viewStyle.setRightAlignIds (rightAlignIds);
-}, "~B");
-Clazz.defineMethod (c$, "getConservationSelected",
-function () {
-return this.viewStyle.getConservationSelected ();
-});
-Clazz.defineMethod (c$, "setShowBoxes",
-function (state) {
-this.viewStyle.setShowBoxes (state);
-}, "~B");
-Clazz.defineMethod (c$, "getTextColour",
-function () {
-return this.viewStyle.getTextColour ();
-});
-Clazz.defineMethod (c$, "getTextColour2",
-function () {
-return this.viewStyle.getTextColour2 ();
-});
-Clazz.defineMethod (c$, "getThresholdTextColour",
-function () {
-return this.viewStyle.getThresholdTextColour ();
-});
-Clazz.defineMethod (c$, "isConservationColourSelected",
-function () {
-return this.viewStyle.isConservationColourSelected ();
-});
-Clazz.defineMethod (c$, "isRenderGaps",
-function () {
-return this.viewStyle.isRenderGaps ();
-});
-Clazz.defineMethod (c$, "isShowColourText",
-function () {
-return this.viewStyle.isShowColourText ();
-});
-Clazz.defineMethod (c$, "setConservationColourSelected",
-function (conservationColourSelected) {
-this.viewStyle.setConservationColourSelected (conservationColourSelected);
-}, "~B");
-Clazz.defineMethod (c$, "setShowColourText",
-function (showColourText) {
-this.viewStyle.setShowColourText (showColourText);
-}, "~B");
-Clazz.defineMethod (c$, "setTextColour",
-function (textColour) {
-this.viewStyle.setTextColour (textColour);
-}, "java.awt.Color");
-Clazz.defineMethod (c$, "setThresholdTextColour",
-function (thresholdTextColour) {
-this.viewStyle.setThresholdTextColour (thresholdTextColour);
-}, "~N");
-Clazz.defineMethod (c$, "setTextColour2",
-function (textColour2) {
-this.viewStyle.setTextColour2 (textColour2);
-}, "java.awt.Color");
-Clazz.overrideMethod (c$, "getViewStyle",
-function () {
-return new jalview.viewmodel.styles.ViewStyle (this.viewStyle);
-});
-Clazz.overrideMethod (c$, "setViewStyle",
-function (settingsForView) {
-this.viewStyle = new jalview.viewmodel.styles.ViewStyle (settingsForView);
-}, "jalview.api.ViewStyleI");
-Clazz.defineMethod (c$, "sameStyle",
-function (them) {
-return this.viewStyle.sameStyle (them);
-}, "jalview.api.ViewStyleI");
-Clazz.defineMethod (c$, "getIdWidth",
-function () {
-return this.viewStyle.getIdWidth ();
-});
-Clazz.defineMethod (c$, "setIdWidth",
-function (i) {
-this.viewStyle.setIdWidth (i);
-}, "~N");
-Clazz.defineMethod (c$, "isCentreColumnLabels",
-function () {
-return this.viewStyle.isCentreColumnLabels ();
-});
-Clazz.defineMethod (c$, "setCentreColumnLabels",
-function (centreColumnLabels) {
-this.viewStyle.setCentreColumnLabels (centreColumnLabels);
-}, "~B");
-Clazz.defineMethod (c$, "setShowDBRefs",
-function (showdbrefs) {
-this.viewStyle.setShowDBRefs (showdbrefs);
-}, "~B");
-Clazz.defineMethod (c$, "isShowDBRefs",
-function () {
-return this.viewStyle.isShowDBRefs ();
-});
-Clazz.defineMethod (c$, "isShowNPFeats",
-function () {
-return this.viewStyle.isShowNPFeats ();
-});
-Clazz.defineMethod (c$, "setShowNPFeats",
-function (shownpfeats) {
-this.viewStyle.setShowNPFeats (shownpfeats);
-}, "~B");
-Clazz.defineMethod (c$, "addToHistoryList",
-function (command) {
-if (this.historyList != null) {
-this.historyList.push (command);
-this.broadcastCommand (command, false);
-}}, "jalview.commands.CommandI");
-Clazz.defineMethod (c$, "broadcastCommand",
-function (command, undo) {
-this.getStructureSelectionManager ().commandPerformed (command, undo, this.getVamsasSource ());
-}, "jalview.commands.CommandI,~B");
-Clazz.defineMethod (c$, "addToRedoList",
-function (command) {
-if (this.redoList != null) {
-this.redoList.push (command);
-}this.broadcastCommand (command, true);
-}, "jalview.commands.CommandI");
-Clazz.defineMethod (c$, "clearRedoList",
-function () {
-if (this.redoList != null) {
-this.redoList.clear ();
-}});
-Clazz.defineMethod (c$, "setHistoryList",
-function (list) {
-this.historyList = list;
-}, "java.util.Deque");
-Clazz.defineMethod (c$, "getHistoryList",
-function () {
-return this.historyList;
-});
-Clazz.defineMethod (c$, "setRedoList",
-function (list) {
-this.redoList = list;
-}, "java.util.Deque");
-Clazz.defineMethod (c$, "getRedoList",
-function () {
-return this.redoList;
-});
-Clazz.overrideMethod (c$, "getVamsasSource",
-function () {
-return this;
-});
-Clazz.defineMethod (c$, "getSortAnnotationsBy",
-function () {
-return this.sortAnnotationsBy;
-});
-Clazz.defineMethod (c$, "setSortAnnotationsBy",
-function (sortAnnotationsBy) {
-this.sortAnnotationsBy = sortAnnotationsBy;
-}, "jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
-Clazz.defineMethod (c$, "isShowAutocalculatedAbove",
-function () {
-return this.showAutocalculatedAbove;
-});
-Clazz.defineMethod (c$, "setShowAutocalculatedAbove",
-function (showAutocalculatedAbove) {
-this.showAutocalculatedAbove = showAutocalculatedAbove;
-}, "~B");
-Clazz.defineMethod (c$, "isScaleProteinAsCdna",
-function () {
-return this.viewStyle.isScaleProteinAsCdna ();
-});
-Clazz.defineMethod (c$, "setScaleProteinAsCdna",
-function (b) {
-this.viewStyle.setScaleProteinAsCdna (b);
-}, "~B");
-Clazz.defineMethod (c$, "isFollowHighlight",
-function () {
-return this.followHighlight;
-});
-Clazz.overrideMethod (c$, "setFollowHighlight",
-function (b) {
-this.followHighlight = b;
-}, "~B");
-Clazz.defineMethod (c$, "getStartRes",
-function () {
-return this.startRes;
-});
-Clazz.overrideMethod (c$, "getEndRes",
-function () {
-return this.endRes;
-});
-Clazz.defineMethod (c$, "getStartSeq",
-function () {
-return this.startSeq;
-});
-Clazz.defineMethod (c$, "setStartRes",
-function (res) {
-this.startRes = res;
-}, "~N");
-Clazz.defineMethod (c$, "setStartSeq",
-function (seq) {
-this.startSeq = seq;
-}, "~N");
-Clazz.defineMethod (c$, "setEndRes",
-function (res) {
-if (res > this.alignment.getWidth () - 1) {
-res = this.alignment.getWidth () - 1;
-}if (res < 0) {
-res = 0;
-}this.endRes = res;
-}, "~N");
-Clazz.defineMethod (c$, "setEndSeq",
-function (seq) {
-if (seq > this.alignment.getHeight ()) {
-seq = this.alignment.getHeight ();
-}if (seq < 0) {
-seq = 0;
-}this.endSeq = seq;
-}, "~N");
-Clazz.defineMethod (c$, "getEndSeq",
-function () {
-return this.endSeq;
-});
-Clazz.defineMethod (c$, "findComplementScrollTarget",
-function (sr) {
-var complement = this.getCodingComplement ();
-if (complement == null || !complement.isFollowHighlight ()) {
-return 0;
-}var iAmProtein = !this.getAlignment ().isNucleotide ();
-var proteinAlignment = iAmProtein ? this.getAlignment () : complement.getAlignment ();
-if (proteinAlignment == null) {
-return 0;
-}var mappings = proteinAlignment.getCodonFrames ();
-var seqOffset = 0;
-var sequence = null;
-var middleColumn = this.getStartRes () + Clazz.doubleToInt ((this.getEndRes () - this.getStartRes ()) / 2);
-var hiddenSequences = this.getAlignment ().getHiddenSequences ();
-for (var seqNo = this.getStartSeq (); seqNo < this.getEndSeq (); seqNo++, seqOffset++) {
-sequence = this.getAlignment ().getSequenceAt (seqNo);
-if (hiddenSequences != null && hiddenSequences.isHidden (sequence)) {
-continue;
-}if (jalview.util.Comparison.isGap (sequence.getCharAt (middleColumn))) {
-continue;
-}var seqMappings = jalview.util.MappingUtils.findMappingsForSequence (sequence, mappings);
-if (!seqMappings.isEmpty ()) {
-break;
-}}
-if (sequence == null) {
-return 0;
-}jalview.util.MappingUtils.addSearchResults (sr, sequence, sequence.findPosition (middleColumn), mappings);
-return seqOffset;
-}, "jalview.datamodel.SearchResults");
-});
+Clazz.declarePackage ("jalview.viewmodel");
+Clazz.load (["jalview.api.AlignViewportI", "jalview.structure.CommandListener", "$.VamsasSource", "jalview.datamodel.ColumnSelection", "jalview.viewmodel.styles.ViewStyle", "jalview.workers.AlignCalcManager", "java.beans.PropertyChangeSupport", "java.util.ArrayDeque", "$.HashMap"], "jalview.viewmodel.AlignmentViewport", ["jalview.analysis.Conservation", "jalview.datamodel.AlignmentAnnotation", "$.AlignmentView", "$.CigarArray", "$.Sequence", "$.SequenceGroup", "jalview.schemes.Blosum62ColourScheme", "$.PIDColourScheme", "$.ResidueProperties", "jalview.util.Comparison", "$.MappingUtils", "jalview.workers.ComplementConsensusThread", "$.ConsensusThread", "$.ConservationThread", "$.StrucConsensusThread", "java.awt.Color", "java.util.ArrayList", "$.BitSet", "$.Hashtable"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.viewStyle = null;
+this.codingComplement = null;
+this.featuresDisplayed = null;
+this.historyList = null;
+this.redoList = null;
+this.alignment = null;
+this.sequenceSetID = null;
+this.$isDataset = false;
+this.hiddenRepSequences = null;
+this.colSel = null;
+this.autoCalculateConsensus = true;
+this.autoCalculateStrucConsensus = true;
+this.ignoreGapsInConsensusCalculation = false;
+this.globalColourScheme = null;
+this.consensus = null;
+this.complementConsensus = null;
+this.strucConsensus = null;
+this.conservation = null;
+this.quality = null;
+this.groupConsensus = null;
+this.groupConservation = null;
+this.hconsensus = null;
+this.hcomplementConsensus = null;
+this.hStrucConsensus = null;
+this.hconservation = null;
+this.ConsPercGaps = 25;
+this.calculator = null;
+this.showGroupConservation = false;
+this.showGroupConsensus = false;
+this.showSequenceLogo = false;
+this.normaliseSequenceLogo = false;
+this.showConsensusHistogram = true;
+this.padGaps = false;
+this.sortByTree = false;
+this.selectionGroup = null;
+this.viewId = null;
+this.sgrouphash = -1;
+this.colselhash = -1;
+this.changeSupport = null;
+this.showConservation = true;
+this.showQuality = true;
+this.showConsensus = true;
+this.sequenceColours = null;
+this.sortAnnotationsBy = null;
+this.showAutocalculatedAbove = false;
+this.followHighlight = true;
+this.startRes = 0;
+this.endRes = 0;
+this.startSeq = 0;
+this.endSeq = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.viewmodel, "AlignmentViewport", null, [jalview.api.AlignViewportI, jalview.structure.CommandListener, jalview.structure.VamsasSource]);
+Clazz.prepareFields (c$, function () {
+this.viewStyle = new jalview.viewmodel.styles.ViewStyle ();
+this.historyList = new java.util.ArrayDeque ();
+this.redoList = new java.util.ArrayDeque ();
+this.colSel = new jalview.datamodel.ColumnSelection ();
+this.calculator = new jalview.workers.AlignCalcManager ();
+this.changeSupport = new java.beans.PropertyChangeSupport (this);
+this.sequenceColours = new java.util.HashMap ();
+});
+Clazz.defineMethod (c$, "setFontName",
+function (name) {
+this.viewStyle.setFontName (name);
+}, "~S");
+Clazz.defineMethod (c$, "setFontStyle",
+function (style) {
+this.viewStyle.setFontStyle (style);
+}, "~N");
+Clazz.defineMethod (c$, "setFontSize",
+function (size) {
+this.viewStyle.setFontSize (size);
+}, "~N");
+Clazz.defineMethod (c$, "getFontStyle",
+function () {
+return this.viewStyle.getFontStyle ();
+});
+Clazz.defineMethod (c$, "getFontName",
+function () {
+return this.viewStyle.getFontName ();
+});
+Clazz.defineMethod (c$, "getFontSize",
+function () {
+return this.viewStyle.getFontSize ();
+});
+Clazz.defineMethod (c$, "setUpperCasebold",
+function (upperCasebold) {
+this.viewStyle.setUpperCasebold (upperCasebold);
+}, "~B");
+Clazz.defineMethod (c$, "isUpperCasebold",
+function () {
+return this.viewStyle.isUpperCasebold ();
+});
+Clazz.defineMethod (c$, "isSeqNameItalics",
+function () {
+return this.viewStyle.isSeqNameItalics ();
+});
+Clazz.defineMethod (c$, "setColourByReferenceSeq",
+function (colourByReferenceSeq) {
+this.viewStyle.setColourByReferenceSeq (colourByReferenceSeq);
+}, "~B");
+Clazz.defineMethod (c$, "setColourAppliesToAllGroups",
+function (b) {
+this.viewStyle.setColourAppliesToAllGroups (b);
+}, "~B");
+Clazz.defineMethod (c$, "getColourAppliesToAllGroups",
+function () {
+return this.viewStyle.getColourAppliesToAllGroups ();
+});
+Clazz.defineMethod (c$, "getAbovePIDThreshold",
+function () {
+return this.viewStyle.getAbovePIDThreshold ();
+});
+Clazz.defineMethod (c$, "setIncrement",
+function (inc) {
+this.viewStyle.setIncrement (inc);
+}, "~N");
+Clazz.defineMethod (c$, "getIncrement",
+function () {
+return this.viewStyle.getIncrement ();
+});
+Clazz.defineMethod (c$, "setConservationSelected",
+function (b) {
+this.viewStyle.setConservationSelected (b);
+}, "~B");
+Clazz.defineMethod (c$, "setShowHiddenMarkers",
+function (show) {
+this.viewStyle.setShowHiddenMarkers (show);
+}, "~B");
+Clazz.defineMethod (c$, "getShowHiddenMarkers",
+function () {
+return this.viewStyle.getShowHiddenMarkers ();
+});
+Clazz.defineMethod (c$, "setScaleRightWrapped",
+function (b) {
+this.viewStyle.setScaleRightWrapped (b);
+}, "~B");
+Clazz.defineMethod (c$, "setScaleLeftWrapped",
+function (b) {
+this.viewStyle.setScaleLeftWrapped (b);
+}, "~B");
+Clazz.defineMethod (c$, "setScaleAboveWrapped",
+function (b) {
+this.viewStyle.setScaleAboveWrapped (b);
+}, "~B");
+Clazz.defineMethod (c$, "getScaleLeftWrapped",
+function () {
+return this.viewStyle.getScaleLeftWrapped ();
+});
+Clazz.defineMethod (c$, "getScaleAboveWrapped",
+function () {
+return this.viewStyle.getScaleAboveWrapped ();
+});
+Clazz.defineMethod (c$, "getScaleRightWrapped",
+function () {
+return this.viewStyle.getScaleRightWrapped ();
+});
+Clazz.defineMethod (c$, "setAbovePIDThreshold",
+function (b) {
+this.viewStyle.setAbovePIDThreshold (b);
+}, "~B");
+Clazz.defineMethod (c$, "setThreshold",
+function (thresh) {
+this.viewStyle.setThreshold (thresh);
+}, "~N");
+Clazz.defineMethod (c$, "getThreshold",
+function () {
+return this.viewStyle.getThreshold ();
+});
+Clazz.defineMethod (c$, "getShowJVSuffix",
+function () {
+return this.viewStyle.getShowJVSuffix ();
+});
+Clazz.defineMethod (c$, "setShowJVSuffix",
+function (b) {
+this.viewStyle.setShowJVSuffix (b);
+}, "~B");
+Clazz.defineMethod (c$, "setWrapAlignment",
+function (state) {
+this.viewStyle.setWrapAlignment (state);
+}, "~B");
+Clazz.defineMethod (c$, "setShowText",
+function (state) {
+this.viewStyle.setShowText (state);
+}, "~B");
+Clazz.defineMethod (c$, "setRenderGaps",
+function (state) {
+this.viewStyle.setRenderGaps (state);
+}, "~B");
+Clazz.defineMethod (c$, "getColourText",
+function () {
+return this.viewStyle.getColourText ();
+});
+Clazz.defineMethod (c$, "setColourText",
+function (state) {
+this.viewStyle.setColourText (state);
+}, "~B");
+Clazz.defineMethod (c$, "getWrapAlignment",
+function () {
+return this.viewStyle.getWrapAlignment ();
+});
+Clazz.defineMethod (c$, "getShowText",
+function () {
+return this.viewStyle.getShowText ();
+});
+Clazz.defineMethod (c$, "getWrappedWidth",
+function () {
+return this.viewStyle.getWrappedWidth ();
+});
+Clazz.defineMethod (c$, "setWrappedWidth",
+function (w) {
+this.viewStyle.setWrappedWidth (w);
+}, "~N");
+Clazz.defineMethod (c$, "getCharHeight",
+function () {
+return this.viewStyle.getCharHeight ();
+});
+Clazz.defineMethod (c$, "setCharHeight",
+function (h) {
+this.viewStyle.setCharHeight (h);
+}, "~N");
+Clazz.defineMethod (c$, "getCharWidth",
+function () {
+return this.viewStyle.getCharWidth ();
+});
+Clazz.defineMethod (c$, "setCharWidth",
+function (w) {
+this.viewStyle.setCharWidth (w);
+}, "~N");
+Clazz.defineMethod (c$, "getShowBoxes",
+function () {
+return this.viewStyle.getShowBoxes ();
+});
+Clazz.defineMethod (c$, "getShowUnconserved",
+function () {
+return this.viewStyle.getShowUnconserved ();
+});
+Clazz.defineMethod (c$, "setShowUnconserved",
+function (showunconserved) {
+this.viewStyle.setShowUnconserved (showunconserved);
+}, "~B");
+Clazz.defineMethod (c$, "setSeqNameItalics",
+function (default1) {
+this.viewStyle.setSeqNameItalics (default1);
+}, "~B");
+Clazz.defineMethod (c$, "getAlignment",
+function () {
+return this.alignment;
+});
+Clazz.overrideMethod (c$, "getGapCharacter",
+function () {
+return this.alignment.getGapCharacter ();
+});
+Clazz.defineMethod (c$, "setDataset",
+function (b) {
+this.$isDataset = b;
+}, "~B");
+Clazz.defineMethod (c$, "isDataset",
+function () {
+return this.$isDataset;
+});
+Clazz.overrideMethod (c$, "setGlobalColourScheme",
+function (cs) {
+this.globalColourScheme = cs;
+var recalc = false;
+if (cs != null) {
+cs.setConservationApplied (recalc = this.getConservationSelected ());
+if (this.getAbovePIDThreshold () || Clazz.instanceOf (cs, jalview.schemes.PIDColourScheme) || Clazz.instanceOf (cs, jalview.schemes.Blosum62ColourScheme)) {
+recalc = true;
+cs.setThreshold (this.viewStyle.getThreshold (), this.ignoreGapsInConsensusCalculation);
+} else {
+cs.setThreshold (0, this.ignoreGapsInConsensusCalculation);
+}if (recalc) {
+cs.setConsensus (this.hconsensus);
+cs.setConservation (this.hconservation);
+}cs.alignmentChanged (this.alignment, this.hiddenRepSequences);
+}if (this.getColourAppliesToAllGroups ()) {
+for (var sg, $sg = this.getAlignment ().getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (cs == null) {
+sg.cs = null;
+continue;
+}sg.cs = cs.applyTo (sg, this.getHiddenRepSequences ());
+sg.setConsPercGaps (this.ConsPercGaps);
+if (this.getAbovePIDThreshold () || Clazz.instanceOf (cs, jalview.schemes.PIDColourScheme) || Clazz.instanceOf (cs, jalview.schemes.Blosum62ColourScheme)) {
+sg.cs.setThreshold (this.viewStyle.getThreshold (), this.isIgnoreGapsConsensus ());
+recalc = true;
+} else {
+sg.cs.setThreshold (0, this.isIgnoreGapsConsensus ());
+}if (this.getConservationSelected ()) {
+sg.cs.setConservationApplied (true);
+recalc = true;
+} else {
+sg.cs.setConservation (null);
+}if (recalc) {
+sg.recalcConservation ();
+} else {
+sg.cs.alignmentChanged (sg, this.hiddenRepSequences);
+}}
+}}, "jalview.schemes.ColourSchemeI");
+Clazz.overrideMethod (c$, "getGlobalColourScheme",
+function () {
+return this.globalColourScheme;
+});
+Clazz.overrideMethod (c$, "setConservation",
+function (cons) {
+this.hconservation = cons;
+}, "jalview.analysis.Conservation");
+Clazz.overrideMethod (c$, "getConsPercGaps",
+function () {
+return this.ConsPercGaps;
+});
+Clazz.overrideMethod (c$, "setSequenceConsensusHash",
+function (hconsensus) {
+this.hconsensus = hconsensus;
+}, "~A");
+Clazz.overrideMethod (c$, "setComplementConsensusHash",
+function (hconsensus) {
+this.hcomplementConsensus = hconsensus;
+}, "~A");
+Clazz.overrideMethod (c$, "getSequenceConsensusHash",
+function () {
+return this.hconsensus;
+});
+Clazz.overrideMethod (c$, "getComplementConsensusHash",
+function () {
+return this.hcomplementConsensus;
+});
+Clazz.overrideMethod (c$, "getRnaStructureConsensusHash",
+function () {
+return this.hStrucConsensus;
+});
+Clazz.overrideMethod (c$, "setRnaStructureConsensusHash",
+function (hStrucConsensus) {
+this.hStrucConsensus = hStrucConsensus;
+}, "~A");
+Clazz.overrideMethod (c$, "getAlignmentQualityAnnot",
+function () {
+return this.quality;
+});
+Clazz.overrideMethod (c$, "getAlignmentConservationAnnotation",
+function () {
+return this.conservation;
+});
+Clazz.overrideMethod (c$, "getAlignmentConsensusAnnotation",
+function () {
+return this.consensus;
+});
+Clazz.overrideMethod (c$, "getComplementConsensusAnnotation",
+function () {
+return this.complementConsensus;
+});
+Clazz.overrideMethod (c$, "getAlignmentStrucConsensusAnnotation",
+function () {
+return this.strucConsensus;
+});
+Clazz.defineMethod (c$, "updateConservation",
+function (ap) {
+if (this.alignment.isNucleotide () || this.conservation == null || !this.autoCalculateConsensus) {
+return;
+}if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.ConservationThread) == null) {
+this.calculator.registerWorker ( new jalview.workers.ConservationThread (this, ap));
+}}, "jalview.api.AlignmentViewPanel");
+Clazz.defineMethod (c$, "updateConsensus",
+function (ap) {
+if (this.consensus == null || !this.autoCalculateConsensus) {
+return;
+}if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.ConsensusThread) == null) {
+this.calculator.registerWorker ( new jalview.workers.ConsensusThread (this, ap));
+}var al = this.getAlignment ();
+if (!al.isNucleotide () && al.getCodonFrames () != null && !al.getCodonFrames ().isEmpty ()) {
+if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.ComplementConsensusThread) == null) {
+this.calculator.registerWorker ( new jalview.workers.ComplementConsensusThread (this, ap));
+}}}, "jalview.api.AlignmentViewPanel");
+Clazz.defineMethod (c$, "updateStrucConsensus",
+function (ap) {
+if (this.autoCalculateStrucConsensus && this.strucConsensus == null && this.alignment.isNucleotide () && this.alignment.hasRNAStructure ()) {
+this.initRNAStructure ();
+}if (this.strucConsensus == null || !this.autoCalculateStrucConsensus) {
+return;
+}if (this.calculator.getRegisteredWorkersOfClass (jalview.workers.StrucConsensusThread) == null) {
+this.calculator.registerWorker ( new jalview.workers.StrucConsensusThread (this, ap));
+}}, "jalview.api.AlignmentViewPanel");
+Clazz.defineMethod (c$, "isCalcInProgress",
+function () {
+return this.calculator.isWorking ();
+});
+Clazz.overrideMethod (c$, "isCalculationInProgress",
+function (alignmentAnnotation) {
+if (!alignmentAnnotation.autoCalculated) {
+return false;
+}if (this.calculator.workingInvolvedWith (alignmentAnnotation)) {
+return true;
+}return false;
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "isClosed",
+function () {
+return this.alignment == null;
+});
+Clazz.overrideMethod (c$, "getCalcManager",
+function () {
+return this.calculator;
+});
+Clazz.overrideMethod (c$, "isShowSequenceLogo",
+function () {
+return this.showSequenceLogo;
+});
+Clazz.defineMethod (c$, "setShowSequenceLogo",
+function (showSequenceLogo) {
+if (showSequenceLogo != this.showSequenceLogo) {
+this.showSequenceLogo = showSequenceLogo;
+this.calculator.updateAnnotationFor (jalview.workers.ConsensusThread);
+this.calculator.updateAnnotationFor (jalview.workers.ComplementConsensusThread);
+this.calculator.updateAnnotationFor (jalview.workers.StrucConsensusThread);
+}this.showSequenceLogo = showSequenceLogo;
+}, "~B");
+Clazz.defineMethod (c$, "setShowConsensusHistogram",
+function (showConsensusHistogram) {
+this.showConsensusHistogram = showConsensusHistogram;
+}, "~B");
+Clazz.defineMethod (c$, "isShowGroupConservation",
+function () {
+return this.showGroupConservation;
+});
+Clazz.defineMethod (c$, "setShowGroupConservation",
+function (showGroupConservation) {
+this.showGroupConservation = showGroupConservation;
+}, "~B");
+Clazz.defineMethod (c$, "isShowGroupConsensus",
+function () {
+return this.showGroupConsensus;
+});
+Clazz.defineMethod (c$, "setShowGroupConsensus",
+function (showGroupConsensus) {
+this.showGroupConsensus = showGroupConsensus;
+}, "~B");
+Clazz.overrideMethod (c$, "isShowConsensusHistogram",
+function () {
+return this.showConsensusHistogram;
+});
+Clazz.overrideMethod (c$, "getSelectionGroup",
+function () {
+return this.selectionGroup;
+});
+Clazz.overrideMethod (c$, "setSelectionGroup",
+function (sg) {
+this.selectionGroup = sg;
+}, "jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "setHiddenColumns",
+function (colsel) {
+this.colSel = colsel;
+}, "jalview.datamodel.ColumnSelection");
+Clazz.overrideMethod (c$, "getColumnSelection",
+function () {
+return this.colSel;
+});
+Clazz.overrideMethod (c$, "setColumnSelection",
+function (colSel) {
+this.colSel = colSel;
+if (colSel != null) {
+this.updateHiddenColumns ();
+}}, "jalview.datamodel.ColumnSelection");
+Clazz.overrideMethod (c$, "getHiddenRepSequences",
+function () {
+return this.hiddenRepSequences;
+});
+Clazz.overrideMethod (c$, "setHiddenRepSequences",
+function (hiddenRepSequences) {
+this.hiddenRepSequences = hiddenRepSequences;
+}, "java.util.Map");
+Clazz.overrideMethod (c$, "hasHiddenColumns",
+function () {
+return this.colSel != null && this.colSel.hasHiddenColumns ();
+});
+Clazz.defineMethod (c$, "updateHiddenColumns",
+function () {
+});
+Clazz.overrideMethod (c$, "hasHiddenRows",
+function () {
+return this.alignment.getHiddenSequences ().getSize () > 0;
+});
+Clazz.defineMethod (c$, "setSequenceSetId",
+function (newid) {
+if (this.sequenceSetID != null) {
+System.err.println ("Warning - overwriting a sequenceSetId for a viewport!");
+}this.sequenceSetID = String.instantialize (newid);
+}, "~S");
+Clazz.overrideMethod (c$, "getSequenceSetId",
+function () {
+if (this.sequenceSetID == null) {
+this.sequenceSetID = this.alignment.hashCode () + "";
+}return this.sequenceSetID;
+});
+Clazz.overrideMethod (c$, "getViewId",
+function () {
+if (this.viewId == null) {
+this.viewId = this.getSequenceSetId () + "." + this.hashCode () + "";
+}return this.viewId;
+});
+Clazz.defineMethod (c$, "setIgnoreGapsConsensus",
+function (b, ap) {
+this.ignoreGapsInConsensusCalculation = b;
+if (ap != null) {
+this.updateConsensus (ap);
+if (this.globalColourScheme != null) {
+this.globalColourScheme.setThreshold (this.globalColourScheme.getThreshold (), this.ignoreGapsInConsensusCalculation);
+}}}, "~B,jalview.api.AlignmentViewPanel");
+Clazz.defineMethod (c$, "isSelectionGroupChanged",
+function (b) {
+var hc = (this.selectionGroup == null || this.selectionGroup.getSize () == 0) ? -1 : this.selectionGroup.hashCode ();
+if (hc != -1 && hc != this.sgrouphash) {
+if (b) {
+this.sgrouphash = hc;
+}return true;
+}return false;
+}, "~B");
+Clazz.defineMethod (c$, "isColSelChanged",
+function (b) {
+var hc = (this.colSel == null || this.colSel.size () == 0) ? -1 : this.colSel.hashCode ();
+if (hc != -1 && hc != this.colselhash) {
+if (b) {
+this.colselhash = hc;
+}return true;
+}return false;
+}, "~B");
+Clazz.overrideMethod (c$, "isIgnoreGapsConsensus",
+function () {
+return this.ignoreGapsInConsensusCalculation;
+});
+Clazz.defineMethod (c$, "addPropertyChangeListener",
+function (listener) {
+this.changeSupport.addPropertyChangeListener (listener);
+}, "java.beans.PropertyChangeListener");
+Clazz.defineMethod (c$, "removePropertyChangeListener",
+function (listener) {
+this.changeSupport.removePropertyChangeListener (listener);
+}, "java.beans.PropertyChangeListener");
+Clazz.defineMethod (c$, "firePropertyChange",
+function (prop, oldvalue, newvalue) {
+this.changeSupport.firePropertyChange (prop, oldvalue, newvalue);
+}, "~S,~O,~O");
+Clazz.defineMethod (c$, "hideSelectedColumns",
+function () {
+if (this.colSel.size () < 1) {
+return;
+}this.colSel.hideSelectedColumns ();
+this.setSelectionGroup (null);
+});
+Clazz.defineMethod (c$, "hideColumns",
+function (start, end) {
+if (start == end) {
+this.colSel.hideColumns (start);
+} else {
+this.colSel.hideColumns (start, end);
+}}, "~N,~N");
+Clazz.defineMethod (c$, "showColumn",
+function (col) {
+this.colSel.revealHiddenColumns (col);
+}, "~N");
+Clazz.defineMethod (c$, "showAllHiddenColumns",
+function () {
+this.colSel.revealAllHiddenColumns ();
+});
+Clazz.defineMethod (c$, "showAllHiddenSeqs",
+function () {
+if (this.alignment.getHiddenSequences ().getSize () > 0) {
+if (this.selectionGroup == null) {
+this.selectionGroup = new jalview.datamodel.SequenceGroup ();
+this.selectionGroup.setEndRes (this.alignment.getWidth () - 1);
+}var tmp = this.alignment.getHiddenSequences ().showAll (this.hiddenRepSequences);
+for (var seq, $seq = tmp.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+this.selectionGroup.addSequence (seq, false);
+this.setSequenceAnnotationsVisible (seq, true);
+}
+this.hiddenRepSequences = null;
+this.firePropertyChange ("alignment", null, this.alignment.getSequences ());
+this.sendSelection ();
+}});
+Clazz.defineMethod (c$, "showSequence",
+function (index) {
+var tmp = this.alignment.getHiddenSequences ().showSequence (index, this.hiddenRepSequences);
+if (tmp.size () > 0) {
+if (this.selectionGroup == null) {
+this.selectionGroup = new jalview.datamodel.SequenceGroup ();
+this.selectionGroup.setEndRes (this.alignment.getWidth () - 1);
+}for (var seq, $seq = tmp.iterator (); $seq.hasNext () && ((seq = $seq.next ()) || true);) {
+this.selectionGroup.addSequence (seq, false);
+this.setSequenceAnnotationsVisible (seq, true);
+}
+this.firePropertyChange ("alignment", null, this.alignment.getSequences ());
+this.sendSelection ();
+}}, "~N");
+Clazz.defineMethod (c$, "hideAllSelectedSeqs",
+function () {
+if (this.selectionGroup == null || this.selectionGroup.getSize () < 1) {
+return;
+}var seqs = this.selectionGroup.getSequencesInOrder (this.alignment);
+this.hideSequence (seqs);
+this.setSelectionGroup (null);
+});
+Clazz.defineMethod (c$, "hideSequence",
+function (seq) {
+if (seq != null) {
+for (var i = 0; i < seq.length; i++) {
+this.alignment.getHiddenSequences ().hideSequence (seq[i]);
+this.setSequenceAnnotationsVisible (seq[i], false);
+}
+this.firePropertyChange ("alignment", null, this.alignment.getSequences ());
+}}, "~A");
+Clazz.defineMethod (c$, "setSequenceAnnotationsVisible",
+function (sequenceI, visible) {
+for (var ann, $ann = 0, $$ann = this.alignment.getAlignmentAnnotation (); $ann < $$ann.length && ((ann = $$ann[$ann]) || true); $ann++) {
+if (ann.sequenceRef === sequenceI) {
+ann.visible = visible;
+}}
+}, "jalview.datamodel.SequenceI,~B");
+Clazz.defineMethod (c$, "hideRepSequences",
+function (repSequence, sg) {
+var sSize = sg.getSize ();
+if (sSize < 2) {
+return;
+}if (this.hiddenRepSequences == null) {
+this.hiddenRepSequences = new java.util.Hashtable ();
+}this.hiddenRepSequences.put (repSequence, sg);
+var seqs = new Array (sSize - 1);
+var index = 0;
+for (var i = 0; i < sSize; i++) {
+if (sg.getSequenceAt (i) !== repSequence) {
+if (index == sSize - 1) {
+return;
+}seqs[index++] = sg.getSequenceAt (i);
+}}
+sg.setSeqrep (repSequence);
+sg.setHidereps (true);
+this.hideSequence (seqs);
+}, "jalview.datamodel.SequenceI,jalview.datamodel.SequenceGroup");
+Clazz.defineMethod (c$, "isHiddenRepSequence",
+function (seq) {
+return this.alignment.getSeqrep () === seq || (this.hiddenRepSequences != null && this.hiddenRepSequences.containsKey (seq));
+}, "jalview.datamodel.SequenceI");
+Clazz.defineMethod (c$, "getRepresentedSequences",
+function (seq) {
+return (this.hiddenRepSequences == null ? null : this.hiddenRepSequences.get (seq));
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "adjustForHiddenSeqs",
+function (alignmentIndex) {
+return this.alignment.getHiddenSequences ().adjustForHiddenSeqs (alignmentIndex);
+}, "~N");
+Clazz.overrideMethod (c$, "invertColumnSelection",
+function () {
+this.colSel.invertColumnSelection (0, this.alignment.getWidth ());
+});
+Clazz.overrideMethod (c$, "getSelectionAsNewSequence",
+function () {
+var sequences;
+if (this.selectionGroup == null || this.selectionGroup.getSize () == 0) {
+sequences = this.alignment.getSequencesArray ();
+var annots = this.alignment.getAlignmentAnnotation ();
+for (var i = 0; i < sequences.length; i++) {
+sequences[i] = new jalview.datamodel.Sequence (sequences[i], annots);
+}
+} else {
+sequences = this.selectionGroup.getSelectionAsNewSequences (this.alignment);
+}return sequences;
+});
+Clazz.overrideMethod (c$, "getSequenceSelection",
+function () {
+var sequences = null;
+if (this.selectionGroup != null) {
+sequences = this.selectionGroup.getSequencesInOrder (this.alignment);
+}if (sequences == null) {
+sequences = this.alignment.getSequencesArray ();
+}return sequences;
+});
+Clazz.overrideMethod (c$, "getViewAsCigars",
+function (selectedRegionOnly) {
+return new jalview.datamodel.CigarArray (this.alignment, this.colSel, (selectedRegionOnly ? this.selectionGroup : null));
+}, "~B");
+Clazz.defineMethod (c$, "getAlignmentView",
+function (selectedOnly) {
+return this.getAlignmentView (selectedOnly, false);
+}, "~B");
+Clazz.defineMethod (c$, "getAlignmentView",
+function (selectedOnly, markGroups) {
+return new jalview.datamodel.AlignmentView (this.alignment, this.colSel, this.selectionGroup, this.colSel != null && this.colSel.hasHiddenColumns (), selectedOnly, markGroups);
+}, "~B,~B");
+Clazz.overrideMethod (c$, "getViewAsString",
+function (selectedRegionOnly) {
+var selection = null;
+var seqs = null;
+var i;
+var iSize;
+var start = 0;
+var end = 0;
+if (selectedRegionOnly && this.selectionGroup != null) {
+iSize = this.selectionGroup.getSize ();
+seqs = this.selectionGroup.getSequencesInOrder (this.alignment);
+start = this.selectionGroup.getStartRes ();
+end = this.selectionGroup.getEndRes () + 1;
+} else {
+iSize = this.alignment.getHeight ();
+seqs = this.alignment.getSequencesArray ();
+end = this.alignment.getWidth ();
+}selection = new Array (iSize);
+if (this.colSel != null && this.colSel.hasHiddenColumns ()) {
+selection = this.colSel.getVisibleSequenceStrings (start, end, seqs);
+} else {
+for (i = 0; i < iSize; i++) {
+selection[i] = seqs[i].getSequenceAsString (start, end);
+}
+}return selection;
+}, "~B");
+Clazz.overrideMethod (c$, "getVisibleRegionBoundaries",
+function (min, max) {
+var regions = new java.util.ArrayList ();
+var start = min;
+var end = max;
+do {
+if (this.colSel != null && this.colSel.hasHiddenColumns ()) {
+if (start == 0) {
+start = this.colSel.adjustForHiddenColumns (start);
+}end = this.colSel.getHiddenBoundaryRight (start);
+if (start == end) {
+end = max;
+}if (end > max) {
+end = max;
+}}regions.add ( Clazz.newIntArray (-1, [start, end]));
+if (this.colSel != null && this.colSel.hasHiddenColumns ()) {
+start = this.colSel.adjustForHiddenColumns (end);
+start = this.colSel.getHiddenBoundaryLeft (start) + 1;
+}} while (end < max);
+var startEnd = Clazz.newIntArray (regions.size (), 2, 0);
+return regions;
+}, "~N,~N");
+Clazz.overrideMethod (c$, "getVisibleAlignmentAnnotation",
+function (selectedOnly) {
+var ala = new java.util.ArrayList ();
+var aa;
+if ((aa = this.alignment.getAlignmentAnnotation ()) != null) {
+for (var annot, $annot = 0, $$annot = aa; $annot < $$annot.length && ((annot = $$annot[$annot]) || true); $annot++) {
+var clone = new jalview.datamodel.AlignmentAnnotation (annot);
+if (selectedOnly && this.selectionGroup != null) {
+this.colSel.makeVisibleAnnotation (this.selectionGroup.getStartRes (), this.selectionGroup.getEndRes (), clone);
+} else {
+this.colSel.makeVisibleAnnotation (clone);
+}ala.add (clone);
+}
+}return ala;
+}, "~B");
+Clazz.overrideMethod (c$, "isPadGaps",
+function () {
+return this.padGaps;
+});
+Clazz.overrideMethod (c$, "setPadGaps",
+function (padGaps) {
+this.padGaps = padGaps;
+}, "~B");
+Clazz.overrideMethod (c$, "alignmentChanged",
+function (ap) {
+if (this.isPadGaps ()) {
+this.alignment.padGaps ();
+}if (this.autoCalculateConsensus) {
+this.updateConsensus (ap);
+}if (this.hconsensus != null && this.autoCalculateConsensus) {
+this.updateConservation (ap);
+}if (this.autoCalculateStrucConsensus) {
+this.updateStrucConsensus (ap);
+}var alWidth = this.alignment.getWidth ();
+var groups = this.alignment.getGroups ();
+if (groups != null) {
+for (var sg, $sg = groups.iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (sg.getEndRes () > alWidth) {
+sg.setEndRes (alWidth - 1);
+}}
+}if (this.selectionGroup != null && this.selectionGroup.getEndRes () > alWidth) {
+this.selectionGroup.setEndRes (alWidth - 1);
+}this.resetAllColourSchemes ();
+this.calculator.restartWorkers ();
+}, "jalview.api.AlignmentViewPanel");
+Clazz.defineMethod (c$, "resetAllColourSchemes",
+function () {
+var cs = this.globalColourScheme;
+if (cs != null) {
+cs.alignmentChanged (this.alignment, this.hiddenRepSequences);
+cs.setConsensus (this.hconsensus);
+if (cs.conservationApplied ()) {
+cs.setConservation (jalview.analysis.Conservation.calculateConservation ("All", jalview.schemes.ResidueProperties.propHash, 3, this.alignment.getSequences (), 0, this.alignment.getWidth (), false, this.getConsPercGaps (), false));
+}}for (var sg, $sg = this.alignment.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (sg.cs != null) {
+sg.cs.alignmentChanged (sg, this.hiddenRepSequences);
+}sg.recalcConservation ();
+}
+});
+Clazz.defineMethod (c$, "initAutoAnnotation",
+function () {
+if (this.hconsensus == null && !this.$isDataset) {
+if (!this.alignment.isNucleotide ()) {
+this.initConservation ();
+this.initQuality ();
+} else {
+this.initRNAStructure ();
+}this.consensus = new jalview.datamodel.AlignmentAnnotation ("Consensus", "PID", new Array (1), 0, 100, 1);
+this.initConsensus (this.consensus);
+this.initComplementConsensus ();
+}});
+Clazz.defineMethod (c$, "initComplementConsensus",
+function () {
+if (!this.alignment.isNucleotide ()) {
+var codonMappings = this.alignment.getCodonFrames ();
+if (codonMappings != null && !codonMappings.isEmpty ()) {
+this.complementConsensus = new jalview.datamodel.AlignmentAnnotation ("cDNA Consensus", "PID for cDNA", new Array (1), 0, 100, 1);
+this.initConsensus (this.complementConsensus);
+}}});
+Clazz.defineMethod (c$, "initConsensus",
+($fz = function (aa) {
+aa.hasText = true;
+aa.autoCalculated = true;
+if (this.showConsensus) {
+this.alignment.addAnnotation (aa);
+}}, $fz.isPrivate = true, $fz), "jalview.datamodel.AlignmentAnnotation");
+Clazz.defineMethod (c$, "initConservation",
+($fz = function () {
+if (this.showConservation) {
+if (this.conservation == null) {
+this.conservation = new jalview.datamodel.AlignmentAnnotation ("Conservation", "Conservation of total alignment less than " + this.getConsPercGaps () + "% gaps", new Array (1), 0, 11, 1);
+this.conservation.hasText = true;
+this.conservation.autoCalculated = true;
+this.alignment.addAnnotation (this.conservation);
+}}}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "initQuality",
+($fz = function () {
+if (this.showQuality) {
+if (this.quality == null) {
+this.quality = new jalview.datamodel.AlignmentAnnotation ("Quality", "Alignment Quality based on Blosum62 scores", new Array (1), 0, 11, 1);
+this.quality.hasText = true;
+this.quality.autoCalculated = true;
+this.alignment.addAnnotation (this.quality);
+}}}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "initRNAStructure",
+($fz = function () {
+if (this.alignment.hasRNAStructure () && this.strucConsensus == null) {
+this.strucConsensus = new jalview.datamodel.AlignmentAnnotation ("StrucConsensus", "PID", new Array (1), 0, 100, 1);
+this.strucConsensus.hasText = true;
+this.strucConsensus.autoCalculated = true;
+if (this.showConsensus) {
+this.alignment.addAnnotation (this.strucConsensus);
+}}}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "calcPanelHeight",
+function () {
+var anns = this.getAlignment ().getAlignmentAnnotation ();
+var height = 0;
+var charHeight = this.getCharHeight ();
+if (anns != null) {
+var graphgrp = new java.util.BitSet ();
+for (var aa, $aa = 0, $$aa = anns; $aa < $$aa.length && ((aa = $$aa[$aa]) || true); $aa++) {
+if (aa == null) {
+System.err.println ("Null annotation row: ignoring.");
+continue;
+}if (!aa.visible) {
+continue;
+}if (aa.graphGroup > -1) {
+if (graphgrp.get (aa.graphGroup)) {
+continue;
+} else {
+graphgrp.set (aa.graphGroup);
+}}aa.height = 0;
+if (aa.hasText) {
+aa.height += charHeight;
+}if (aa.hasIcons) {
+aa.height += 16;
+}if (aa.graph > 0) {
+aa.height += aa.graphHeight;
+}if (aa.height == 0) {
+aa.height = 20;
+}height += aa.height;
+}
+}if (height == 0) {
+height = 20;
+}return height;
+});
+Clazz.overrideMethod (c$, "updateGroupAnnotationSettings",
+function (applyGlobalSettings, preserveNewGroupSettings) {
+var updateCalcs = false;
+var conv = this.isShowGroupConservation ();
+var cons = this.isShowGroupConsensus ();
+var showprf = this.isShowSequenceLogo ();
+var showConsHist = this.isShowConsensusHistogram ();
+var normLogo = this.isNormaliseSequenceLogo ();
+var sortg = true;
+var aan = this.alignment.getAlignmentAnnotation ();
+var oldrfs = new java.util.ArrayList ();
+if (aan != null) {
+for (var an = 0; an < aan.length; an++) {
+if (aan[an].autoCalculated && aan[an].groupRef != null) {
+oldrfs.add (aan[an].groupRef);
+this.alignment.deleteAnnotation (aan[an], false);
+}}
+}if (this.alignment.getGroups () != null) {
+for (var sg, $sg = this.alignment.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+updateCalcs = false;
+if (applyGlobalSettings || (!preserveNewGroupSettings && !oldrfs.contains (sg))) {
+sg.setshowSequenceLogo (showprf);
+sg.setShowConsensusHistogram (showConsHist);
+sg.setNormaliseSequenceLogo (normLogo);
+}if (conv) {
+updateCalcs = true;
+this.alignment.addAnnotation (sg.getConservationRow (), 0);
+}if (cons) {
+updateCalcs = true;
+this.alignment.addAnnotation (sg.getConsensus (), 0);
+}if (updateCalcs) {
+sg.recalcConservation ();
+}}
+}oldrfs.clear ();
+}, "~B,~B");
+Clazz.defineMethod (c$, "isDisplayReferenceSeq",
+function () {
+return this.alignment.hasSeqrep () && this.viewStyle.isDisplayReferenceSeq ();
+});
+Clazz.defineMethod (c$, "setDisplayReferenceSeq",
+function (displayReferenceSeq) {
+this.viewStyle.setDisplayReferenceSeq (displayReferenceSeq);
+}, "~B");
+Clazz.defineMethod (c$, "isColourByReferenceSeq",
+function () {
+return this.alignment.hasSeqrep () && this.viewStyle.isColourByReferenceSeq ();
+});
+Clazz.overrideMethod (c$, "getSequenceColour",
+function (seq) {
+var sqc = this.sequenceColours.get (seq);
+return (sqc == null ? java.awt.Color.white : sqc);
+}, "jalview.datamodel.SequenceI");
+Clazz.overrideMethod (c$, "setSequenceColour",
+function (seq, col) {
+if (col == null) {
+this.sequenceColours.remove (seq);
+} else {
+this.sequenceColours.put (seq, col);
+}}, "jalview.datamodel.SequenceI,java.awt.Color");
+Clazz.overrideMethod (c$, "updateSequenceIdColours",
+function () {
+for (var sg, $sg = this.alignment.getGroups ().iterator (); $sg.hasNext () && ((sg = $sg.next ()) || true);) {
+if (sg.idColour != null) {
+for (var s, $s = sg.getSequences (this.getHiddenRepSequences ()).iterator (); $s.hasNext () && ((s = $s.next ()) || true);) {
+this.sequenceColours.put (s, sg.idColour);
+}
+}}
+});
+Clazz.overrideMethod (c$, "clearSequenceColours",
+function () {
+this.sequenceColours.clear ();
+});
+Clazz.defineMethod (c$, "getCodingComplement",
+function () {
+return this.codingComplement;
+});
+Clazz.defineMethod (c$, "setCodingComplement",
+function (av) {
+if (this === av) {
+System.err.println ("Ignoring recursive setCodingComplement request");
+} else {
+this.codingComplement = av;
+if (av.getCodingComplement () !== this) {
+av.setCodingComplement (this);
+}}}, "jalview.api.AlignViewportI");
+Clazz.overrideMethod (c$, "isNucleotide",
+function () {
+return this.getAlignment () == null ? false : this.getAlignment ().isNucleotide ();
+});
+Clazz.overrideMethod (c$, "getFeaturesDisplayed",
+function () {
+return this.featuresDisplayed;
+});
+Clazz.overrideMethod (c$, "setFeaturesDisplayed",
+function (featuresDisplayedI) {
+this.featuresDisplayed = featuresDisplayedI;
+}, "jalview.api.FeaturesDisplayedI");
+Clazz.overrideMethod (c$, "areFeaturesDisplayed",
+function () {
+return this.featuresDisplayed != null && this.featuresDisplayed.getRegisterdFeaturesCount () > 0;
+});
+Clazz.defineMethod (c$, "setShowSequenceFeatures",
+function (b) {
+this.viewStyle.setShowSequenceFeatures (b);
+}, "~B");
+Clazz.defineMethod (c$, "isShowSequenceFeatures",
+function () {
+return this.viewStyle.isShowSequenceFeatures ();
+});
+Clazz.defineMethod (c$, "setShowSequenceFeaturesHeight",
+function (selected) {
+this.viewStyle.setShowSequenceFeaturesHeight (selected);
+}, "~B");
+Clazz.defineMethod (c$, "isShowSequenceFeaturesHeight",
+function () {
+return this.viewStyle.isShowSequenceFeaturesHeight ();
+});
+Clazz.defineMethod (c$, "setShowAnnotation",
+function (b) {
+this.viewStyle.setShowAnnotation (b);
+}, "~B");
+Clazz.defineMethod (c$, "isShowAnnotation",
+function () {
+return this.viewStyle.isShowAnnotation ();
+});
+Clazz.defineMethod (c$, "isRightAlignIds",
+function () {
+return this.viewStyle.isRightAlignIds ();
+});
+Clazz.defineMethod (c$, "setRightAlignIds",
+function (rightAlignIds) {
+this.viewStyle.setRightAlignIds (rightAlignIds);
+}, "~B");
+Clazz.defineMethod (c$, "getConservationSelected",
+function () {
+return this.viewStyle.getConservationSelected ();
+});
+Clazz.defineMethod (c$, "setShowBoxes",
+function (state) {
+this.viewStyle.setShowBoxes (state);
+}, "~B");
+Clazz.defineMethod (c$, "getTextColour",
+function () {
+return this.viewStyle.getTextColour ();
+});
+Clazz.defineMethod (c$, "getTextColour2",
+function () {
+return this.viewStyle.getTextColour2 ();
+});
+Clazz.defineMethod (c$, "getThresholdTextColour",
+function () {
+return this.viewStyle.getThresholdTextColour ();
+});
+Clazz.defineMethod (c$, "isConservationColourSelected",
+function () {
+return this.viewStyle.isConservationColourSelected ();
+});
+Clazz.defineMethod (c$, "isRenderGaps",
+function () {
+return this.viewStyle.isRenderGaps ();
+});
+Clazz.defineMethod (c$, "isShowColourText",
+function () {
+return this.viewStyle.isShowColourText ();
+});
+Clazz.defineMethod (c$, "setConservationColourSelected",
+function (conservationColourSelected) {
+this.viewStyle.setConservationColourSelected (conservationColourSelected);
+}, "~B");
+Clazz.defineMethod (c$, "setShowColourText",
+function (showColourText) {
+this.viewStyle.setShowColourText (showColourText);
+}, "~B");
+Clazz.defineMethod (c$, "setTextColour",
+function (textColour) {
+this.viewStyle.setTextColour (textColour);
+}, "java.awt.Color");
+Clazz.defineMethod (c$, "setThresholdTextColour",
+function (thresholdTextColour) {
+this.viewStyle.setThresholdTextColour (thresholdTextColour);
+}, "~N");
+Clazz.defineMethod (c$, "setTextColour2",
+function (textColour2) {
+this.viewStyle.setTextColour2 (textColour2);
+}, "java.awt.Color");
+Clazz.overrideMethod (c$, "getViewStyle",
+function () {
+return new jalview.viewmodel.styles.ViewStyle (this.viewStyle);
+});
+Clazz.overrideMethod (c$, "setViewStyle",
+function (settingsForView) {
+this.viewStyle = new jalview.viewmodel.styles.ViewStyle (settingsForView);
+}, "jalview.api.ViewStyleI");
+Clazz.defineMethod (c$, "sameStyle",
+function (them) {
+return this.viewStyle.sameStyle (them);
+}, "jalview.api.ViewStyleI");
+Clazz.defineMethod (c$, "getIdWidth",
+function () {
+return this.viewStyle.getIdWidth ();
+});
+Clazz.defineMethod (c$, "setIdWidth",
+function (i) {
+this.viewStyle.setIdWidth (i);
+}, "~N");
+Clazz.defineMethod (c$, "isCentreColumnLabels",
+function () {
+return this.viewStyle.isCentreColumnLabels ();
+});
+Clazz.defineMethod (c$, "setCentreColumnLabels",
+function (centreColumnLabels) {
+this.viewStyle.setCentreColumnLabels (centreColumnLabels);
+}, "~B");
+Clazz.defineMethod (c$, "setShowDBRefs",
+function (showdbrefs) {
+this.viewStyle.setShowDBRefs (showdbrefs);
+}, "~B");
+Clazz.defineMethod (c$, "isShowDBRefs",
+function () {
+return this.viewStyle.isShowDBRefs ();
+});
+Clazz.defineMethod (c$, "isShowNPFeats",
+function () {
+return this.viewStyle.isShowNPFeats ();
+});
+Clazz.defineMethod (c$, "setShowNPFeats",
+function (shownpfeats) {
+this.viewStyle.setShowNPFeats (shownpfeats);
+}, "~B");
+Clazz.defineMethod (c$, "addToHistoryList",
+function (command) {
+if (this.historyList != null) {
+this.historyList.push (command);
+this.broadcastCommand (command, false);
+}}, "jalview.commands.CommandI");
+Clazz.defineMethod (c$, "broadcastCommand",
+function (command, undo) {
+this.getStructureSelectionManager ().commandPerformed (command, undo, this.getVamsasSource ());
+}, "jalview.commands.CommandI,~B");
+Clazz.defineMethod (c$, "addToRedoList",
+function (command) {
+if (this.redoList != null) {
+this.redoList.push (command);
+}this.broadcastCommand (command, true);
+}, "jalview.commands.CommandI");
+Clazz.defineMethod (c$, "clearRedoList",
+function () {
+if (this.redoList != null) {
+this.redoList.clear ();
+}});
+Clazz.defineMethod (c$, "setHistoryList",
+function (list) {
+this.historyList = list;
+}, "java.util.Deque");
+Clazz.defineMethod (c$, "getHistoryList",
+function () {
+return this.historyList;
+});
+Clazz.defineMethod (c$, "setRedoList",
+function (list) {
+this.redoList = list;
+}, "java.util.Deque");
+Clazz.defineMethod (c$, "getRedoList",
+function () {
+return this.redoList;
+});
+Clazz.overrideMethod (c$, "getVamsasSource",
+function () {
+return this;
+});
+Clazz.defineMethod (c$, "getSortAnnotationsBy",
+function () {
+return this.sortAnnotationsBy;
+});
+Clazz.defineMethod (c$, "setSortAnnotationsBy",
+function (sortAnnotationsBy) {
+this.sortAnnotationsBy = sortAnnotationsBy;
+}, "jalview.analysis.AnnotationSorter.SequenceAnnotationOrder");
+Clazz.defineMethod (c$, "isShowAutocalculatedAbove",
+function () {
+return this.showAutocalculatedAbove;
+});
+Clazz.defineMethod (c$, "setShowAutocalculatedAbove",
+function (showAutocalculatedAbove) {
+this.showAutocalculatedAbove = showAutocalculatedAbove;
+}, "~B");
+Clazz.defineMethod (c$, "isScaleProteinAsCdna",
+function () {
+return this.viewStyle.isScaleProteinAsCdna ();
+});
+Clazz.defineMethod (c$, "setScaleProteinAsCdna",
+function (b) {
+this.viewStyle.setScaleProteinAsCdna (b);
+}, "~B");
+Clazz.defineMethod (c$, "isFollowHighlight",
+function () {
+return this.followHighlight;
+});
+Clazz.overrideMethod (c$, "setFollowHighlight",
+function (b) {
+this.followHighlight = b;
+}, "~B");
+Clazz.defineMethod (c$, "getStartRes",
+function () {
+return this.startRes;
+});
+Clazz.overrideMethod (c$, "getEndRes",
+function () {
+return this.endRes;
+});
+Clazz.defineMethod (c$, "getStartSeq",
+function () {
+return this.startSeq;
+});
+Clazz.defineMethod (c$, "setStartRes",
+function (res) {
+this.startRes = res;
+}, "~N");
+Clazz.defineMethod (c$, "setStartSeq",
+function (seq) {
+this.startSeq = seq;
+}, "~N");
+Clazz.defineMethod (c$, "setEndRes",
+function (res) {
+if (res > this.alignment.getWidth () - 1) {
+res = this.alignment.getWidth () - 1;
+}if (res < 0) {
+res = 0;
+}this.endRes = res;
+}, "~N");
+Clazz.defineMethod (c$, "setEndSeq",
+function (seq) {
+if (seq > this.alignment.getHeight ()) {
+seq = this.alignment.getHeight ();
+}if (seq < 0) {
+seq = 0;
+}this.endSeq = seq;
+}, "~N");
+Clazz.defineMethod (c$, "getEndSeq",
+function () {
+return this.endSeq;
+});
+Clazz.defineMethod (c$, "findComplementScrollTarget",
+function (sr) {
+var complement = this.getCodingComplement ();
+if (complement == null || !complement.isFollowHighlight ()) {
+return 0;
+}var iAmProtein = !this.getAlignment ().isNucleotide ();
+var proteinAlignment = iAmProtein ? this.getAlignment () : complement.getAlignment ();
+if (proteinAlignment == null) {
+return 0;
+}var mappings = proteinAlignment.getCodonFrames ();
+var seqOffset = 0;
+var sequence = null;
+var middleColumn = this.getStartRes () + Clazz.doubleToInt ((this.getEndRes () - this.getStartRes ()) / 2);
+var hiddenSequences = this.getAlignment ().getHiddenSequences ();
+for (var seqNo = this.getStartSeq (); seqNo < this.getEndSeq (); seqNo++, seqOffset++) {
+sequence = this.getAlignment ().getSequenceAt (seqNo);
+if (hiddenSequences != null && hiddenSequences.isHidden (sequence)) {
+continue;
+}if (jalview.util.Comparison.isGap (sequence.getCharAt (middleColumn))) {
+continue;
+}var seqMappings = jalview.util.MappingUtils.findMappingsForSequence (sequence, mappings);
+if (!seqMappings.isEmpty ()) {
+break;
+}}
+if (sequence == null) {
+return 0;
+}jalview.util.MappingUtils.addSearchResults (sr, sequence, sequence.findPosition (middleColumn), mappings);
+return seqOffset;
+}, "jalview.datamodel.SearchResults");
+});
diff --git a/bin/jalview/viewmodel/PCAModel.class b/bin/jalview/viewmodel/PCAModel.class
index 25ba04c..47bb240 100644
Binary files a/bin/jalview/viewmodel/PCAModel.class and b/bin/jalview/viewmodel/PCAModel.class differ
diff --git a/bin/jalview/viewmodel/PCAModel.js b/bin/jalview/viewmodel/PCAModel.js
index cdb9868..7527935 100644
--- a/bin/jalview/viewmodel/PCAModel.js
+++ b/bin/jalview/viewmodel/PCAModel.js
@@ -1,134 +1,134 @@
-Clazz.declarePackage ("jalview.viewmodel");
-Clazz.load (null, "jalview.viewmodel.PCAModel", ["jalview.analysis.PCA", "jalview.datamodel.SequencePoint", "java.lang.StringBuffer", "java.util.Vector"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.pca = null;
-this.top = 0;
-this.seqstrings = null;
-this.seqs = null;
-this.score_matrix = null;
-this.nucleotide = false;
-this.points = null;
-this.jvCalcMode = true;
-Clazz.instantialize (this, arguments);
-}, jalview.viewmodel, "PCAModel");
-Clazz.makeConstructor (c$,
-function (seqstrings2, seqs2, nucleotide2) {
-this.seqstrings = seqstrings2;
-this.seqs = seqs2;
-this.nucleotide = nucleotide2;
-this.score_matrix = nucleotide2 ? "PID" : "BLOSUM62";
-}, "jalview.datamodel.AlignmentView,~A,~B");
-Clazz.defineMethod (c$, "isJvCalcMode",
-function () {
-return this.jvCalcMode;
-});
-Clazz.defineMethod (c$, "run",
-function () {
-this.pca = new jalview.analysis.PCA (this.seqstrings.getSequenceStrings (' '), this.nucleotide, this.score_matrix);
-this.pca.setJvCalcMode (this.jvCalcMode);
-this.pca.run ();
-var ii = 0;
-while ((ii < this.seqs.length) && (this.seqs[ii] != null)) {
-ii++;
-}
-var comps = Clazz.newDoubleArray (ii, ii, 0);
-for (var i = 0; i < ii; i++) {
-if (this.pca.getEigenvalue (i) > 1e-4) {
-comps[i] = this.pca.component (i);
-}}
-this.top = this.pca.getM ().rows - 1;
-this.points = new java.util.Vector ();
-var scores = this.pca.getComponents (this.top - 1, this.top - 2, this.top - 3, 100);
-for (var i = 0; i < this.pca.getM ().rows; i++) {
-var sp = new jalview.datamodel.SequencePoint (this.seqs[i], scores[i]);
-this.points.addElement (sp);
-}
-});
-Clazz.defineMethod (c$, "updateRc",
-function (rc) {
-rc.setPoints (this.points, this.pca.getM ().rows);
-}, "jalview.api.RotatableCanvasI");
-Clazz.defineMethod (c$, "isNucleotide",
-function () {
-return this.nucleotide;
-});
-Clazz.defineMethod (c$, "setNucleotide",
-function (nucleotide) {
-this.nucleotide = nucleotide;
-}, "~B");
-Clazz.defineMethod (c$, "getTop",
-function () {
-return this.top;
-});
-Clazz.defineMethod (c$, "updateRcView",
-function (dim1, dim2, dim3) {
-var scores = this.pca.getComponents (dim1 - 1, dim2 - 1, dim3 - 1, 100);
-for (var i = 0; i < this.pca.getM ().rows; i++) {
-(this.points.elementAt (i)).coord = scores[i];
-}
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "getDetails",
-function () {
-return this.pca.getDetails ();
-});
-Clazz.defineMethod (c$, "getSeqtrings",
-function () {
-return this.seqstrings;
-});
-Clazz.defineMethod (c$, "getPointsasCsv",
-function (transformed, xdim, ydim, zdim) {
-var csv = new StringBuffer ();
-csv.append ("\"Sequence\"");
-if (transformed) {
-csv.append (",");
-csv.append (xdim);
-csv.append (",");
-csv.append (ydim);
-csv.append (",");
-csv.append (zdim);
-} else {
-for (var d = 1, dmax = this.pca.component (1).length; d <= dmax; d++) {
-csv.append ("," + d);
-}
-}csv.append ("\n");
-for (var s = 0; s < this.seqs.length; s++) {
-csv.append ("\"" + this.seqs[s].getName () + "\"");
-var fl;
-if (!transformed) {
-fl = this.pca.component (s);
-for (var d = fl.length - 1; d >= 0; d--) {
-csv.append (",");
-csv.append (fl[d]);
-}
-} else {
-fl = this.getPointPosition (s);
-for (var d = 0; d < fl.length; d++) {
-csv.append (",");
-csv.append (fl[d]);
-}
-}csv.append ("\n");
-}
-return csv.toString ();
-}, "~B,~N,~N,~N");
-Clazz.defineMethod (c$, "getPointPosition",
-function (s) {
-var pts = Clazz.newDoubleArray (3, 0);
-var p = this.points.elementAt (s).coord;
-pts[0] = p[0];
-pts[1] = p[1];
-pts[2] = p[2];
-return pts;
-}, "~N");
-Clazz.defineMethod (c$, "setJvCalcMode",
-function (state) {
-this.jvCalcMode = state;
-}, "~B");
-Clazz.defineMethod (c$, "getScore_matrix",
-function () {
-return this.score_matrix;
-});
-Clazz.defineMethod (c$, "setScore_matrix",
-function (score_matrix) {
-this.score_matrix = score_matrix;
-}, "~S");
-});
+Clazz.declarePackage ("jalview.viewmodel");
+Clazz.load (null, "jalview.viewmodel.PCAModel", ["jalview.analysis.PCA", "jalview.datamodel.SequencePoint", "java.lang.StringBuffer", "java.util.Vector"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.pca = null;
+this.top = 0;
+this.seqstrings = null;
+this.seqs = null;
+this.score_matrix = null;
+this.nucleotide = false;
+this.points = null;
+this.jvCalcMode = true;
+Clazz.instantialize (this, arguments);
+}, jalview.viewmodel, "PCAModel");
+Clazz.makeConstructor (c$,
+function (seqstrings2, seqs2, nucleotide2) {
+this.seqstrings = seqstrings2;
+this.seqs = seqs2;
+this.nucleotide = nucleotide2;
+this.score_matrix = nucleotide2 ? "PID" : "BLOSUM62";
+}, "jalview.datamodel.AlignmentView,~A,~B");
+Clazz.defineMethod (c$, "isJvCalcMode",
+function () {
+return this.jvCalcMode;
+});
+Clazz.defineMethod (c$, "run",
+function () {
+this.pca = new jalview.analysis.PCA (this.seqstrings.getSequenceStrings (' '), this.nucleotide, this.score_matrix);
+this.pca.setJvCalcMode (this.jvCalcMode);
+this.pca.run ();
+var ii = 0;
+while ((ii < this.seqs.length) && (this.seqs[ii] != null)) {
+ii++;
+}
+var comps = Clazz.newDoubleArray (ii, ii, 0);
+for (var i = 0; i < ii; i++) {
+if (this.pca.getEigenvalue (i) > 1e-4) {
+comps[i] = this.pca.component (i);
+}}
+this.top = this.pca.getM ().rows - 1;
+this.points = new java.util.Vector ();
+var scores = this.pca.getComponents (this.top - 1, this.top - 2, this.top - 3, 100);
+for (var i = 0; i < this.pca.getM ().rows; i++) {
+var sp = new jalview.datamodel.SequencePoint (this.seqs[i], scores[i]);
+this.points.addElement (sp);
+}
+});
+Clazz.defineMethod (c$, "updateRc",
+function (rc) {
+rc.setPoints (this.points, this.pca.getM ().rows);
+}, "jalview.api.RotatableCanvasI");
+Clazz.defineMethod (c$, "isNucleotide",
+function () {
+return this.nucleotide;
+});
+Clazz.defineMethod (c$, "setNucleotide",
+function (nucleotide) {
+this.nucleotide = nucleotide;
+}, "~B");
+Clazz.defineMethod (c$, "getTop",
+function () {
+return this.top;
+});
+Clazz.defineMethod (c$, "updateRcView",
+function (dim1, dim2, dim3) {
+var scores = this.pca.getComponents (dim1 - 1, dim2 - 1, dim3 - 1, 100);
+for (var i = 0; i < this.pca.getM ().rows; i++) {
+(this.points.elementAt (i)).coord = scores[i];
+}
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "getDetails",
+function () {
+return this.pca.getDetails ();
+});
+Clazz.defineMethod (c$, "getSeqtrings",
+function () {
+return this.seqstrings;
+});
+Clazz.defineMethod (c$, "getPointsasCsv",
+function (transformed, xdim, ydim, zdim) {
+var csv = new StringBuffer ();
+csv.append ("\"Sequence\"");
+if (transformed) {
+csv.append (",");
+csv.append ("" + xdim);
+csv.append (",");
+csv.append ("" + ydim);
+csv.append (",");
+csv.append ("" + zdim);
+} else {
+for (var d = 1, dmax = this.pca.component (1).length; d <= dmax; d++) {
+csv.append ("," + d);
+}
+}csv.append ("\n");
+for (var s = 0; s < this.seqs.length; s++) {
+csv.append ("\"" + this.seqs[s].getName () + "\"");
+var fl;
+if (!transformed) {
+fl = this.pca.component (s);
+for (var d = fl.length - 1; d >= 0; d--) {
+csv.append (",");
+csv.append (fl[d]);
+}
+} else {
+fl = this.getPointPosition (s);
+for (var d = 0; d < fl.length; d++) {
+csv.append (",");
+csv.append (fl[d]);
+}
+}csv.append ("\n");
+}
+return csv.toString ();
+}, "~B,~N,~N,~N");
+Clazz.defineMethod (c$, "getPointPosition",
+function (s) {
+var pts = Clazz.newDoubleArray (3, 0);
+var p = this.points.elementAt (s).coord;
+pts[0] = p[0];
+pts[1] = p[1];
+pts[2] = p[2];
+return pts;
+}, "~N");
+Clazz.defineMethod (c$, "setJvCalcMode",
+function (state) {
+this.jvCalcMode = state;
+}, "~B");
+Clazz.defineMethod (c$, "getScore_matrix",
+function () {
+return this.score_matrix;
+});
+Clazz.defineMethod (c$, "setScore_matrix",
+function (score_matrix) {
+this.score_matrix = score_matrix;
+}, "~S");
+});
diff --git a/bin/jalview/viewmodel/annotationfilter/AnnotationFilterParameter.js b/bin/jalview/viewmodel/annotationfilter/AnnotationFilterParameter.js
index 7daaad4..5fd34a4 100644
--- a/bin/jalview/viewmodel/annotationfilter/AnnotationFilterParameter.js
+++ b/bin/jalview/viewmodel/annotationfilter/AnnotationFilterParameter.js
@@ -1,83 +1,83 @@
-Clazz.declarePackage ("jalview.viewmodel.annotationfilter");
-Clazz.load (["java.lang.Enum", "java.util.ArrayList"], "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.thresholdType = null;
-this.thresholdValue = 0;
-this.filterAlphaHelix = false;
-this.filterBetaSheet = false;
-this.filterTurn = false;
-this.regexString = null;
-this.regexSearchFields = null;
-Clazz.instantialize (this, arguments);
-}, jalview.viewmodel.annotationfilter, "AnnotationFilterParameter");
-Clazz.prepareFields (c$, function () {
-this.regexSearchFields = new java.util.ArrayList ();
-});
-Clazz.defineMethod (c$, "getThresholdType",
-function () {
-return this.thresholdType;
-});
-Clazz.defineMethod (c$, "setThresholdType",
-function (thresholdType) {
-this.thresholdType = thresholdType;
-}, "jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType");
-Clazz.defineMethod (c$, "getThresholdValue",
-function () {
-return this.thresholdValue;
-});
-Clazz.defineMethod (c$, "setThresholdValue",
-function (thresholdValue) {
-this.thresholdValue = thresholdValue;
-}, "~N");
-Clazz.defineMethod (c$, "getRegexString",
-function () {
-return this.regexString;
-});
-Clazz.defineMethod (c$, "setRegexString",
-function (regexString) {
-this.regexString = regexString;
-}, "~S");
-Clazz.defineMethod (c$, "getRegexSearchFields",
-function () {
-return this.regexSearchFields;
-});
-Clazz.defineMethod (c$, "addRegexSearchField",
-function (regexSearchField) {
-this.regexSearchFields.add (regexSearchField);
-}, "jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField");
-Clazz.defineMethod (c$, "isFilterAlphaHelix",
-function () {
-return this.filterAlphaHelix;
-});
-Clazz.defineMethod (c$, "setFilterAlphaHelix",
-function (alphaHelix) {
-this.filterAlphaHelix = alphaHelix;
-}, "~B");
-Clazz.defineMethod (c$, "isFilterBetaSheet",
-function () {
-return this.filterBetaSheet;
-});
-Clazz.defineMethod (c$, "setFilterBetaSheet",
-function (betaSheet) {
-this.filterBetaSheet = betaSheet;
-}, "~B");
-Clazz.defineMethod (c$, "isFilterTurn",
-function () {
-return this.filterTurn;
-});
-Clazz.defineMethod (c$, "setFilterTurn",
-function (turn) {
-this.filterTurn = turn;
-}, "~B");
-Clazz.pu$h ();
-c$ = Clazz.declareType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter, "ThresholdType", Enum);
-Clazz.defineEnumConstant (c$, "NO_THRESHOLD", 0, []);
-Clazz.defineEnumConstant (c$, "BELOW_THRESHOLD", 1, []);
-Clazz.defineEnumConstant (c$, "ABOVE_THRESHOLD", 2, []);
-c$ = Clazz.p0p ();
-Clazz.pu$h ();
-c$ = Clazz.declareType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter, "SearchableAnnotationField", Enum);
-Clazz.defineEnumConstant (c$, "DISPLAY_STRING", 0, []);
-Clazz.defineEnumConstant (c$, "DESCRIPTION", 1, []);
-c$ = Clazz.p0p ();
-});
+Clazz.declarePackage ("jalview.viewmodel.annotationfilter");
+Clazz.load (["java.lang.Enum", "java.util.ArrayList"], "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.thresholdType = null;
+this.thresholdValue = 0;
+this.filterAlphaHelix = false;
+this.filterBetaSheet = false;
+this.filterTurn = false;
+this.regexString = null;
+this.regexSearchFields = null;
+Clazz.instantialize (this, arguments);
+}, jalview.viewmodel.annotationfilter, "AnnotationFilterParameter");
+Clazz.prepareFields (c$, function () {
+this.regexSearchFields = new java.util.ArrayList ();
+});
+Clazz.defineMethod (c$, "getThresholdType",
+function () {
+return this.thresholdType;
+});
+Clazz.defineMethod (c$, "setThresholdType",
+function (thresholdType) {
+this.thresholdType = thresholdType;
+}, "jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType");
+Clazz.defineMethod (c$, "getThresholdValue",
+function () {
+return this.thresholdValue;
+});
+Clazz.defineMethod (c$, "setThresholdValue",
+function (thresholdValue) {
+this.thresholdValue = thresholdValue;
+}, "~N");
+Clazz.defineMethod (c$, "getRegexString",
+function () {
+return this.regexString;
+});
+Clazz.defineMethod (c$, "setRegexString",
+function (regexString) {
+this.regexString = regexString;
+}, "~S");
+Clazz.defineMethod (c$, "getRegexSearchFields",
+function () {
+return this.regexSearchFields;
+});
+Clazz.defineMethod (c$, "addRegexSearchField",
+function (regexSearchField) {
+this.regexSearchFields.add (regexSearchField);
+}, "jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField");
+Clazz.defineMethod (c$, "isFilterAlphaHelix",
+function () {
+return this.filterAlphaHelix;
+});
+Clazz.defineMethod (c$, "setFilterAlphaHelix",
+function (alphaHelix) {
+this.filterAlphaHelix = alphaHelix;
+}, "~B");
+Clazz.defineMethod (c$, "isFilterBetaSheet",
+function () {
+return this.filterBetaSheet;
+});
+Clazz.defineMethod (c$, "setFilterBetaSheet",
+function (betaSheet) {
+this.filterBetaSheet = betaSheet;
+}, "~B");
+Clazz.defineMethod (c$, "isFilterTurn",
+function () {
+return this.filterTurn;
+});
+Clazz.defineMethod (c$, "setFilterTurn",
+function (turn) {
+this.filterTurn = turn;
+}, "~B");
+Clazz.pu$h ();
+c$ = Clazz.declareType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter, "ThresholdType", Enum);
+Clazz.defineEnumConstant (c$, "NO_THRESHOLD", 0, []);
+Clazz.defineEnumConstant (c$, "BELOW_THRESHOLD", 1, []);
+Clazz.defineEnumConstant (c$, "ABOVE_THRESHOLD", 2, []);
+c$ = Clazz.p0p ();
+Clazz.pu$h ();
+c$ = Clazz.declareType (jalview.viewmodel.annotationfilter.AnnotationFilterParameter, "SearchableAnnotationField", Enum);
+Clazz.defineEnumConstant (c$, "DISPLAY_STRING", 0, []);
+Clazz.defineEnumConstant (c$, "DESCRIPTION", 1, []);
+c$ = Clazz.p0p ();
+});
diff --git a/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.class b/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.class
index 5f33a88..cd148bd 100644
Binary files a/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.class and b/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.class differ
diff --git a/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.js b/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.js
index cd53bbe..985bdda 100644
--- a/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.js
+++ b/bin/jalview/viewmodel/seqfeatures/FeatureRendererModel.js
@@ -1,481 +1,481 @@
-Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
-Clazz.load (["jalview.api.FeatureRenderer", "java.beans.PropertyChangeSupport", "java.lang.Boolean", "java.util.Hashtable", "java.util.concurrent.ConcurrentHashMap"], "jalview.viewmodel.seqfeatures.FeatureRendererModel", ["jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.QuickSort", "jalview.viewmodel.seqfeatures.FeatureRendererSettings", "$.FeaturesDisplayed", "java.awt.Color", "java.lang.Error", "$.Float", "java.util.ArrayList", "$.Arrays"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.transparency = 1.0;
-this.featureColours = null;
-this.featureGroups = null;
-this.currentColour = null;
-this.renderOrder = null;
-this.changeSupport = null;
-this.av = null;
-this.minmax = null;
-this.newFeatureAdded = false;
-this.findingFeatures = false;
-this.firing = null;
-this.featureOrder = null;
-Clazz.instantialize (this, arguments);
-}, jalview.viewmodel.seqfeatures, "FeatureRendererModel", null, jalview.api.FeatureRenderer);
-Clazz.prepareFields (c$, function () {
-this.featureColours = new java.util.concurrent.ConcurrentHashMap ();
-this.featureGroups = new java.util.concurrent.ConcurrentHashMap ();
-this.changeSupport = new java.beans.PropertyChangeSupport (this);
-this.minmax = new java.util.Hashtable ();
-this.firing = Boolean.FALSE;
-});
-Clazz.overrideMethod (c$, "getViewport",
-function () {
-return this.av;
-});
-Clazz.defineMethod (c$, "getSettings",
-function () {
-return new jalview.viewmodel.seqfeatures.FeatureRendererSettings (this);
-});
-Clazz.defineMethod (c$, "transferSettings",
-function (fr) {
-this.renderOrder = fr.renderOrder;
-this.featureGroups = fr.featureGroups;
-this.featureColours = fr.featureColours;
-this.transparency = fr.transparency;
-this.featureOrder = fr.featureOrder;
-}, "jalview.viewmodel.seqfeatures.FeatureRendererSettings");
-Clazz.defineMethod (c$, "transferSettings",
-function (_fr) {
-var fr = _fr;
-var frs = new jalview.viewmodel.seqfeatures.FeatureRendererSettings (fr);
-this.renderOrder = frs.renderOrder;
-this.featureGroups = frs.featureGroups;
-this.featureColours = frs.featureColours;
-this.transparency = frs.transparency;
-this.featureOrder = frs.featureOrder;
-if (this.av != null && this.av !== fr.getViewport ()) {
-if (_fr.getFeaturesDisplayed () != null) {
-var fd = this.getFeaturesDisplayed ();
-if (fd == null) {
-this.setFeaturesDisplayedFrom (_fr.getFeaturesDisplayed ());
-} else {
-{
-fd.clear ();
-var fdisp = _fr.getFeaturesDisplayed ().getVisibleFeatures ();
-while (fdisp.hasNext ()) {
-fd.setVisible (fdisp.next ());
-}
-}}}}}, "jalview.api.FeatureRenderer");
-Clazz.defineMethod (c$, "setFeaturesDisplayedFrom",
-function (featuresDisplayed) {
-this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed (featuresDisplayed));
-}, "jalview.api.FeaturesDisplayedI");
-Clazz.overrideMethod (c$, "setVisible",
-function (featureType) {
-var fdi = this.av.getFeaturesDisplayed ();
-if (fdi == null) {
-this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
-}if (!fdi.isRegistered (featureType)) {
-this.pushFeatureType (java.util.Arrays.asList ( Clazz.newArray (-1, [featureType])));
-}fdi.setVisible (featureType);
-}, "~S");
-Clazz.overrideMethod (c$, "setAllVisible",
-function (featureTypes) {
-var fdi = this.av.getFeaturesDisplayed ();
-if (fdi == null) {
-this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
-}var nft = new java.util.ArrayList ();
-for (var featureType, $featureType = featureTypes.iterator (); $featureType.hasNext () && ((featureType = $featureType.next ()) || true);) {
-if (!fdi.isRegistered (featureType)) {
-nft.add (featureType);
-}}
-if (nft.size () > 0) {
-this.pushFeatureType (nft);
-}fdi.setAllVisible (featureTypes);
-}, "java.util.List");
-Clazz.defineMethod (c$, "pushFeatureType",
-($fz = function (types) {
-var ts = types.size ();
-var neworder = new Array ((this.renderOrder == null ? 0 : this.renderOrder.length) + ts);
-types.toArray (neworder);
-if (this.renderOrder != null) {
-System.arraycopy (neworder, 0, neworder, this.renderOrder.length, ts);
-System.arraycopy (this.renderOrder, 0, neworder, 0, this.renderOrder.length);
-}this.renderOrder = neworder;
-}, $fz.isPrivate = true, $fz), "java.util.List");
-Clazz.defineMethod (c$, "getMinMax",
-function () {
-return this.minmax;
-});
-Clazz.defineMethod (c$, "normaliseScore",
-function (sequenceFeature) {
-var mm = (this.minmax.get (sequenceFeature.type))[0];
-var r = Clazz.newByteArray (-1, [0, 255]);
-if (mm != null) {
-if (r[0] != 0 || mm[0] < 0.0) {
-r[0] = 1;
-r[1] = Clazz.doubleToByte (Clazz.doubleToInt (128.0) + 127.0 * (sequenceFeature.score / mm[1]));
-} else {
-r[1] = Clazz.floatToByte (Clazz.doubleToInt (255.0) * (sequenceFeature.score / mm[1]));
-}}return r;
-}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "updateFeatures",
-function () {
-if (this.av.getFeaturesDisplayed () == null || this.renderOrder == null || this.newFeatureAdded) {
-this.findAllFeatures ();
-if (this.av.getFeaturesDisplayed ().getVisibleFeatureCount () < 1) {
-return false;
-}}return true;
-});
-Clazz.defineMethod (c$, "findAllFeatures",
-function () {
-{
-if (this.firing.equals (Boolean.FALSE)) {
-this.firing = Boolean.TRUE;
-this.findAllFeatures (true);
-this.changeSupport.firePropertyChange ("changeSupport", null, null);
-this.firing = Boolean.FALSE;
-}}});
-Clazz.overrideMethod (c$, "findFeaturesAtRes",
-function (sequence, res) {
-var tmp = new java.util.ArrayList ();
-var features = sequence.getSequenceFeatures ();
-if (features != null) {
-for (var i = 0; i < features.length; i++) {
-if (!this.av.areFeaturesDisplayed () || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) {
-continue;
-}if (features[i].featureGroup != null && this.featureGroups != null && this.featureGroups.containsKey (features[i].featureGroup) && !this.featureGroups.get (features[i].featureGroup).booleanValue ()) {
-continue;
-}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) {
-tmp.add (features[i]);
-}}
-}return tmp;
-}, "jalview.datamodel.SequenceI,~N");
-Clazz.defineMethod (c$, "findAllFeatures",
-function (newMadeVisible) {
-this.newFeatureAdded = false;
-if (this.findingFeatures) {
-this.newFeatureAdded = true;
-return;
-}this.findingFeatures = true;
-if (this.av.getFeaturesDisplayed () == null) {
-this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
-}var featuresDisplayed = this.av.getFeaturesDisplayed ();
-var allfeatures = new java.util.ArrayList ();
-var oldfeatures = new java.util.ArrayList ();
-if (this.renderOrder != null) {
-for (var i = 0; i < this.renderOrder.length; i++) {
-if (this.renderOrder[i] != null) {
-oldfeatures.add (this.renderOrder[i]);
-}}
-}if (this.minmax == null) {
-this.minmax = new java.util.Hashtable ();
-}var alignment = this.av.getAlignment ();
-for (var i = 0; i < alignment.getHeight (); i++) {
-var asq = alignment.getSequenceAt (i);
-var features = asq.getSequenceFeatures ();
-if (features == null) {
-continue;
-}var index = 0;
-while (index < features.length) {
-if (!featuresDisplayed.isRegistered (features[index].getType ())) {
-var fgrp = features[index].getFeatureGroup ();
-if (fgrp != null) {
-var groupDisplayed = this.featureGroups.get (fgrp);
-if (groupDisplayed == null) {
-groupDisplayed = Boolean.$valueOf (newMadeVisible);
-this.featureGroups.put (fgrp, groupDisplayed);
-}if (!groupDisplayed.booleanValue ()) {
-index++;
-continue;
-}}if (!(features[index].begin == 0 && features[index].end == 0)) {
-if (newMadeVisible && !oldfeatures.contains (features[index].getType ())) {
-featuresDisplayed.setVisible (features[index].getType ());
-this.setOrder (features[index].getType (), 0);
-}}}if (!allfeatures.contains (features[index].getType ())) {
-allfeatures.add (features[index].getType ());
-}if (!Float.isNaN (features[index].score)) {
-var nonpos = features[index].getBegin () >= 1 ? 0 : 1;
-var mm = this.minmax.get (features[index].getType ());
-if (mm == null) {
-mm = Clazz.newArray (-1, [null, null]);
-this.minmax.put (features[index].getType (), mm);
-}if (mm[nonpos] == null) {
-mm[nonpos] = Clazz.newFloatArray (-1, [features[index].score, features[index].score]);
-} else {
-if (mm[nonpos][0] > features[index].score) {
-mm[nonpos][0] = features[index].score;
-}if (mm[nonpos][1] < features[index].score) {
-mm[nonpos][1] = features[index].score;
-}}}index++;
-}
-}
-this.updateRenderOrder (allfeatures);
-this.findingFeatures = false;
-}, "~B");
-Clazz.defineMethod (c$, "updateRenderOrder",
-($fz = function (allFeatures) {
-var allfeatures = new java.util.ArrayList (allFeatures);
-var oldRender = this.renderOrder;
-this.renderOrder = new Array (allfeatures.size ());
-var mmrange;
-var fc = null;
-var initOrders = (this.featureOrder == null);
-var opos = 0;
-if (oldRender != null && oldRender.length > 0) {
-for (var j = 0; j < oldRender.length; j++) {
-if (oldRender[j] != null) {
-if (initOrders) {
-this.setOrder (oldRender[j], (1 - (1 + j) / oldRender.length));
-}if (allfeatures.contains (oldRender[j])) {
-this.renderOrder[opos++] = oldRender[j];
-allfeatures.remove (oldRender[j]);
-if (this.minmax != null) {
-mmrange = this.minmax.get (oldRender[j]);
-if (mmrange != null) {
-fc = this.featureColours.get (oldRender[j]);
-if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) {
-(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]);
-}}}}}}
-}if (allfeatures.size () == 0) {
-return;
-}var i = allfeatures.size () - 1;
-var iSize = i;
-var sort = false;
-var newf = new Array (allfeatures.size ());
-var sortOrder = Clazz.newFloatArray (allfeatures.size (), 0);
-for (var newfeat, $newfeat = allfeatures.iterator (); $newfeat.hasNext () && ((newfeat = $newfeat.next ()) || true);) {
-newf[i] = newfeat;
-if (this.minmax != null) {
-mmrange = this.minmax.get (newf[i]);
-if (mmrange != null) {
-fc = this.featureColours.get (newf[i]);
-if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) {
-(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]);
-}}}if (initOrders || !this.featureOrder.containsKey (newf[i])) {
-var denom = initOrders ? allfeatures.size () : this.featureOrder.size ();
-this.setOrder (newf[i], i / denom);
-}sortOrder[i] = 2 - (this.featureOrder.get (newf[i])).floatValue ();
-if (i < iSize) {
-sort = sort || sortOrder[i] > sortOrder[i + 1];
-}i--;
-}
-if (iSize > 1 && sort) {
-jalview.util.QuickSort.sortFloatObject (sortOrder, newf);
-}sortOrder = null;
-System.arraycopy (newf, 0, this.renderOrder, opos, newf.length);
-}, $fz.isPrivate = true, $fz), "java.util.List");
-Clazz.overrideMethod (c$, "getFeatureStyle",
-function (featureType) {
-var fc = this.featureColours.get (featureType);
-if (fc == null) {
-var ucs = new jalview.schemes.UserColourScheme ();
-var col = ucs.createColourFromName (featureType);
-this.featureColours.put (featureType, fc = col);
-}return fc;
-}, "~S");
-Clazz.defineMethod (c$, "getColour",
-function (featureType) {
-var fc = this.getFeatureStyle (featureType);
-if (Clazz.instanceOf (fc, java.awt.Color)) {
-return fc;
-} else {
-if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) {
-return (fc).getMaxColor ();
-}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + featureType);
-}, "~S");
-Clazz.defineMethod (c$, "getColour",
-function (feature) {
-var fc = this.getFeatureStyle (feature.getType ());
-if (Clazz.instanceOf (fc, java.awt.Color)) {
-return fc;
-} else {
-if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) {
-return (fc).findColor (feature);
-}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + feature.getType ());
-}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "showFeature",
-function (sequenceFeature) {
-var fc = this.getFeatureStyle (sequenceFeature.type);
-if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) {
-return (fc).isColored (sequenceFeature);
-} else {
-return true;
-}}, "jalview.datamodel.SequenceFeature");
-Clazz.defineMethod (c$, "showFeatureOfType",
-function (type) {
-return this.av.getFeaturesDisplayed ().isVisible (type);
-}, "~S");
-Clazz.overrideMethod (c$, "setColour",
-function (featureType, col) {
-{
-this.featureColours.put (featureType, col);
-}}, "~S,~O");
-Clazz.defineMethod (c$, "setTransparency",
-function (value) {
-this.transparency = value;
-}, "~N");
-Clazz.defineMethod (c$, "getTransparency",
-function () {
-return this.transparency;
-});
-Clazz.defineMethod (c$, "setOrder",
-function (type, position) {
-if (this.featureOrder == null) {
-this.featureOrder = new java.util.Hashtable ();
-}this.featureOrder.put (type, new Float (position));
-return position;
-}, "~S,~N");
-Clazz.defineMethod (c$, "getOrder",
-function (type) {
-if (this.featureOrder != null) {
-if (this.featureOrder.containsKey (type)) {
-return (this.featureOrder.get (type)).floatValue ();
-}}return -1;
-}, "~S");
-Clazz.overrideMethod (c$, "getFeatureColours",
-function () {
-return new java.util.concurrent.ConcurrentHashMap (this.featureColours);
-});
-Clazz.defineMethod (c$, "setFeaturePriority",
-function (data) {
-this.setFeaturePriority (data, true);
-}, "~A");
-Clazz.defineMethod (c$, "setFeaturePriority",
-function (data, visibleNew) {
-var av_featuresdisplayed = null;
-if (visibleNew) {
-if ((av_featuresdisplayed = this.av.getFeaturesDisplayed ()) != null) {
-this.av.getFeaturesDisplayed ().clear ();
-} else {
-this.av.setFeaturesDisplayed (av_featuresdisplayed = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
-}} else {
-av_featuresdisplayed = this.av.getFeaturesDisplayed ();
-}if (data == null) {
-return;
-}this.renderOrder = new Array (data.length);
-if (data.length > 0) {
-for (var i = 0; i < data.length; i++) {
-var type = data[i][0].toString ();
-this.setColour (type, data[i][1]);
-if ((data[i][2]).booleanValue ()) {
-av_featuresdisplayed.setVisible (type);
-}this.renderOrder[data.length - i - 1] = type;
-}
-}}, "~A,~B");
-Clazz.defineMethod (c$, "addPropertyChangeListener",
-function (listener) {
-this.changeSupport.addPropertyChangeListener (listener);
-}, "java.beans.PropertyChangeListener");
-Clazz.defineMethod (c$, "removePropertyChangeListener",
-function (listener) {
-this.changeSupport.removePropertyChangeListener (listener);
-}, "java.beans.PropertyChangeListener");
-Clazz.defineMethod (c$, "getAllFeatureColours",
-function () {
-return this.featureColours.keySet ();
-});
-Clazz.defineMethod (c$, "clearRenderOrder",
-function () {
-this.renderOrder = null;
-});
-Clazz.defineMethod (c$, "hasRenderOrder",
-function () {
-return this.renderOrder != null;
-});
-Clazz.defineMethod (c$, "getRenderOrder",
-function () {
-if (this.renderOrder == null) {
-return java.util.Arrays.asList ( Clazz.newArray (-1, []));
-}return java.util.Arrays.asList (this.renderOrder);
-});
-Clazz.defineMethod (c$, "getFeatureGroupsSize",
-function () {
-return this.featureGroups != null ? 0 : this.featureGroups.size ();
-});
-Clazz.overrideMethod (c$, "getFeatureGroups",
-function () {
-return (this.featureGroups == null) ? java.util.Arrays.asList ( new Array (0)) : java.util.Arrays.asList (this.featureGroups.keySet ().toArray ( new Array (0)));
-});
-Clazz.defineMethod (c$, "checkGroupVisibility",
-function (group, newGroupsVisible) {
-if (this.featureGroups == null) {
-}if (this.featureGroups.containsKey (group)) {
-return this.featureGroups.get (group).booleanValue ();
-}if (newGroupsVisible) {
-this.featureGroups.put (group, new Boolean (true));
-return true;
-}return false;
-}, "~S,~B");
-Clazz.overrideMethod (c$, "getGroups",
-function (visible) {
-if (this.featureGroups != null) {
-var gp = new java.util.ArrayList ();
-for (var grp, $grp = this.featureGroups.keySet ().iterator (); $grp.hasNext () && ((grp = $grp.next ()) || true);) {
-var state = this.featureGroups.get (grp);
-if (state.booleanValue () == visible) {
-gp.add (grp);
-}}
-return gp;
-}return null;
-}, "~B");
-Clazz.defineMethod (c$, "setGroupVisibility",
-function (group, visible) {
-this.featureGroups.put (group, new Boolean (visible));
-}, "~S,~B");
-Clazz.defineMethod (c$, "setGroupVisibility",
-function (toset, visible) {
-if (toset != null && toset.size () > 0 && this.featureGroups != null) {
-var rdrw = false;
-for (var gst, $gst = toset.iterator (); $gst.hasNext () && ((gst = $gst.next ()) || true);) {
-var st = this.featureGroups.get (gst);
-this.featureGroups.put (gst, new Boolean (visible));
-if (st != null) {
-rdrw = rdrw || (visible != st.booleanValue ());
-}}
-if (rdrw) {
-}}}, "java.util.List,~B");
-Clazz.overrideMethod (c$, "getDisplayedFeatureCols",
-function () {
-var fcols = new java.util.Hashtable ();
-if (this.getViewport ().getFeaturesDisplayed () == null) {
-return fcols;
-}var en = this.getViewport ().getFeaturesDisplayed ().getVisibleFeatures ();
-while (en.hasNext ()) {
-var col = en.next ();
-fcols.put (col, this.getColour (col));
-}
-return fcols;
-});
-Clazz.defineMethod (c$, "getFeaturesDisplayed",
-function () {
-return this.av.getFeaturesDisplayed ();
-});
-Clazz.overrideMethod (c$, "getDisplayedFeatureTypes",
-function () {
-var typ = null;
-typ = this.getRenderOrder ().toArray ( new Array (0));
-var feature_disp = this.av.getFeaturesDisplayed ();
-if (feature_disp != null) {
-{
-for (var i = 0; i < typ.length; i++) {
-if (!feature_disp.isVisible (typ[i])) {
-typ[i] = null;
-}}
-}}return typ;
-});
-Clazz.overrideMethod (c$, "getDisplayedFeatureGroups",
-function () {
-var gps = null;
-var _gps = new java.util.ArrayList ();
-var en = this.getFeatureGroups ().iterator ();
-var g = 0;
-var valid = false;
-while (en.hasNext ()) {
-var gp = en.next ();
-if (this.checkGroupVisibility (gp, false)) {
-valid = true;
-_gps.add (gp);
-}if (!valid) {
-return null;
-} else {
-gps = new Array (_gps.size ());
-_gps.toArray (gps);
-}}
-return gps;
-});
-});
+Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
+Clazz.load (["jalview.api.FeatureRenderer", "java.beans.PropertyChangeSupport", "java.lang.Boolean", "java.util.Hashtable", "java.util.concurrent.ConcurrentHashMap"], "jalview.viewmodel.seqfeatures.FeatureRendererModel", ["jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.QuickSort", "jalview.viewmodel.seqfeatures.FeatureRendererSettings", "$.FeaturesDisplayed", "java.awt.Color", "java.lang.Error", "$.Float", "java.util.ArrayList", "$.Arrays"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.transparency = 1.0;
+this.featureColours = null;
+this.featureGroups = null;
+this.currentColour = null;
+this.renderOrder = null;
+this.changeSupport = null;
+this.av = null;
+this.minmax = null;
+this.newFeatureAdded = false;
+this.findingFeatures = false;
+this.firing = null;
+this.featureOrder = null;
+Clazz.instantialize (this, arguments);
+}, jalview.viewmodel.seqfeatures, "FeatureRendererModel", null, jalview.api.FeatureRenderer);
+Clazz.prepareFields (c$, function () {
+this.featureColours = new java.util.concurrent.ConcurrentHashMap ();
+this.featureGroups = new java.util.concurrent.ConcurrentHashMap ();
+this.changeSupport = new java.beans.PropertyChangeSupport (this);
+this.minmax = new java.util.Hashtable ();
+this.firing = Boolean.FALSE;
+});
+Clazz.overrideMethod (c$, "getViewport",
+function () {
+return this.av;
+});
+Clazz.defineMethod (c$, "getSettings",
+function () {
+return new jalview.viewmodel.seqfeatures.FeatureRendererSettings (this);
+});
+Clazz.defineMethod (c$, "transferSettings",
+function (fr) {
+this.renderOrder = fr.renderOrder;
+this.featureGroups = fr.featureGroups;
+this.featureColours = fr.featureColours;
+this.transparency = fr.transparency;
+this.featureOrder = fr.featureOrder;
+}, "jalview.viewmodel.seqfeatures.FeatureRendererSettings");
+Clazz.defineMethod (c$, "transferSettings",
+function (_fr) {
+var fr = _fr;
+var frs = new jalview.viewmodel.seqfeatures.FeatureRendererSettings (fr);
+this.renderOrder = frs.renderOrder;
+this.featureGroups = frs.featureGroups;
+this.featureColours = frs.featureColours;
+this.transparency = frs.transparency;
+this.featureOrder = frs.featureOrder;
+if (this.av != null && this.av !== fr.getViewport ()) {
+if (_fr.getFeaturesDisplayed () != null) {
+var fd = this.getFeaturesDisplayed ();
+if (fd == null) {
+this.setFeaturesDisplayedFrom (_fr.getFeaturesDisplayed ());
+} else {
+{
+fd.clear ();
+var fdisp = _fr.getFeaturesDisplayed ().getVisibleFeatures ();
+while (fdisp.hasNext ()) {
+fd.setVisible (fdisp.next ());
+}
+}}}}}, "jalview.api.FeatureRenderer");
+Clazz.defineMethod (c$, "setFeaturesDisplayedFrom",
+function (featuresDisplayed) {
+this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed (featuresDisplayed));
+}, "jalview.api.FeaturesDisplayedI");
+Clazz.overrideMethod (c$, "setVisible",
+function (featureType) {
+var fdi = this.av.getFeaturesDisplayed ();
+if (fdi == null) {
+this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
+}if (!fdi.isRegistered (featureType)) {
+this.pushFeatureType (java.util.Arrays.asList ( Clazz.newArray (-1, [featureType])));
+}fdi.setVisible (featureType);
+}, "~S");
+Clazz.overrideMethod (c$, "setAllVisible",
+function (featureTypes) {
+var fdi = this.av.getFeaturesDisplayed ();
+if (fdi == null) {
+this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
+}var nft = new java.util.ArrayList ();
+for (var featureType, $featureType = featureTypes.iterator (); $featureType.hasNext () && ((featureType = $featureType.next ()) || true);) {
+if (!fdi.isRegistered (featureType)) {
+nft.add (featureType);
+}}
+if (nft.size () > 0) {
+this.pushFeatureType (nft);
+}fdi.setAllVisible (featureTypes);
+}, "java.util.List");
+Clazz.defineMethod (c$, "pushFeatureType",
+($fz = function (types) {
+var ts = types.size ();
+var neworder = new Array ((this.renderOrder == null ? 0 : this.renderOrder.length) + ts);
+types.toArray (neworder);
+if (this.renderOrder != null) {
+System.arraycopy (neworder, 0, neworder, this.renderOrder.length, ts);
+System.arraycopy (this.renderOrder, 0, neworder, 0, this.renderOrder.length);
+}this.renderOrder = neworder;
+}, $fz.isPrivate = true, $fz), "java.util.List");
+Clazz.defineMethod (c$, "getMinMax",
+function () {
+return this.minmax;
+});
+Clazz.defineMethod (c$, "normaliseScore",
+function (sequenceFeature) {
+var mm = (this.minmax.get (sequenceFeature.type))[0];
+var r = Clazz.newByteArray (-1, [0, 255]);
+if (mm != null) {
+if (r[0] != 0 || mm[0] < 0.0) {
+r[0] = 1;
+r[1] = Clazz.doubleToByte (Clazz.doubleToInt (128.0) + 127.0 * (sequenceFeature.score / mm[1]));
+} else {
+r[1] = Clazz.floatToByte (Clazz.doubleToInt (255.0) * (sequenceFeature.score / mm[1]));
+}}return r;
+}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "updateFeatures",
+function () {
+if (this.av.getFeaturesDisplayed () == null || this.renderOrder == null || this.newFeatureAdded) {
+this.findAllFeatures ();
+if (this.av.getFeaturesDisplayed ().getVisibleFeatureCount () < 1) {
+return false;
+}}return true;
+});
+Clazz.defineMethod (c$, "findAllFeatures",
+function () {
+{
+if (this.firing.equals (Boolean.FALSE)) {
+this.firing = Boolean.TRUE;
+this.findAllFeatures (true);
+this.changeSupport.firePropertyChange ("changeSupport", null, null);
+this.firing = Boolean.FALSE;
+}}});
+Clazz.overrideMethod (c$, "findFeaturesAtRes",
+function (sequence, res) {
+var tmp = new java.util.ArrayList ();
+var features = sequence.getSequenceFeatures ();
+if (features != null) {
+for (var i = 0; i < features.length; i++) {
+if (!this.av.areFeaturesDisplayed () || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) {
+continue;
+}if (features[i].featureGroup != null && this.featureGroups != null && this.featureGroups.containsKey (features[i].featureGroup) && !this.featureGroups.get (features[i].featureGroup).booleanValue ()) {
+continue;
+}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) {
+tmp.add (features[i]);
+}}
+}return tmp;
+}, "jalview.datamodel.SequenceI,~N");
+Clazz.defineMethod (c$, "findAllFeatures",
+function (newMadeVisible) {
+this.newFeatureAdded = false;
+if (this.findingFeatures) {
+this.newFeatureAdded = true;
+return;
+}this.findingFeatures = true;
+if (this.av.getFeaturesDisplayed () == null) {
+this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
+}var featuresDisplayed = this.av.getFeaturesDisplayed ();
+var allfeatures = new java.util.ArrayList ();
+var oldfeatures = new java.util.ArrayList ();
+if (this.renderOrder != null) {
+for (var i = 0; i < this.renderOrder.length; i++) {
+if (this.renderOrder[i] != null) {
+oldfeatures.add (this.renderOrder[i]);
+}}
+}if (this.minmax == null) {
+this.minmax = new java.util.Hashtable ();
+}var alignment = this.av.getAlignment ();
+for (var i = 0; i < alignment.getHeight (); i++) {
+var asq = alignment.getSequenceAt (i);
+var features = asq.getSequenceFeatures ();
+if (features == null) {
+continue;
+}var index = 0;
+while (index < features.length) {
+if (!featuresDisplayed.isRegistered (features[index].getType ())) {
+var fgrp = features[index].getFeatureGroup ();
+if (fgrp != null) {
+var groupDisplayed = this.featureGroups.get (fgrp);
+if (groupDisplayed == null) {
+groupDisplayed = Boolean.$valueOf (newMadeVisible);
+this.featureGroups.put (fgrp, groupDisplayed);
+}if (!groupDisplayed.booleanValue ()) {
+index++;
+continue;
+}}if (!(features[index].begin == 0 && features[index].end == 0)) {
+if (newMadeVisible && !oldfeatures.contains (features[index].getType ())) {
+featuresDisplayed.setVisible (features[index].getType ());
+this.setOrder (features[index].getType (), 0);
+}}}if (!allfeatures.contains (features[index].getType ())) {
+allfeatures.add (features[index].getType ());
+}if (!Float.isNaN (features[index].score)) {
+var nonpos = features[index].getBegin () >= 1 ? 0 : 1;
+var mm = this.minmax.get (features[index].getType ());
+if (mm == null) {
+mm = Clazz.newArray (-1, [null, null]);
+this.minmax.put (features[index].getType (), mm);
+}if (mm[nonpos] == null) {
+mm[nonpos] = Clazz.newFloatArray (-1, [features[index].score, features[index].score]);
+} else {
+if (mm[nonpos][0] > features[index].score) {
+mm[nonpos][0] = features[index].score;
+}if (mm[nonpos][1] < features[index].score) {
+mm[nonpos][1] = features[index].score;
+}}}index++;
+}
+}
+this.updateRenderOrder (allfeatures);
+this.findingFeatures = false;
+}, "~B");
+Clazz.defineMethod (c$, "updateRenderOrder",
+($fz = function (allFeatures) {
+var allfeatures = new java.util.ArrayList (allFeatures);
+var oldRender = this.renderOrder;
+this.renderOrder = new Array (allfeatures.size ());
+var mmrange;
+var fc = null;
+var initOrders = (this.featureOrder == null);
+var opos = 0;
+if (oldRender != null && oldRender.length > 0) {
+for (var j = 0; j < oldRender.length; j++) {
+if (oldRender[j] != null) {
+if (initOrders) {
+this.setOrder (oldRender[j], (1 - (1 + j) / oldRender.length));
+}if (allfeatures.contains (oldRender[j])) {
+this.renderOrder[opos++] = oldRender[j];
+allfeatures.remove (oldRender[j]);
+if (this.minmax != null) {
+mmrange = this.minmax.get (oldRender[j]);
+if (mmrange != null) {
+fc = this.featureColours.get (oldRender[j]);
+if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) {
+(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]);
+}}}}}}
+}if (allfeatures.size () == 0) {
+return;
+}var i = allfeatures.size () - 1;
+var iSize = i;
+var sort = false;
+var newf = new Array (allfeatures.size ());
+var sortOrder = Clazz.newFloatArray (allfeatures.size (), 0);
+for (var newfeat, $newfeat = allfeatures.iterator (); $newfeat.hasNext () && ((newfeat = $newfeat.next ()) || true);) {
+newf[i] = newfeat;
+if (this.minmax != null) {
+mmrange = this.minmax.get (newf[i]);
+if (mmrange != null) {
+fc = this.featureColours.get (newf[i]);
+if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) {
+(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]);
+}}}if (initOrders || !this.featureOrder.containsKey (newf[i])) {
+var denom = initOrders ? allfeatures.size () : this.featureOrder.size ();
+this.setOrder (newf[i], i / denom);
+}sortOrder[i] = 2 - (this.featureOrder.get (newf[i])).floatValue ();
+if (i < iSize) {
+sort = sort || sortOrder[i] > sortOrder[i + 1];
+}i--;
+}
+if (iSize > 1 && sort) {
+jalview.util.QuickSort.sortFloatObject (sortOrder, newf);
+}sortOrder = null;
+System.arraycopy (newf, 0, this.renderOrder, opos, newf.length);
+}, $fz.isPrivate = true, $fz), "java.util.List");
+Clazz.overrideMethod (c$, "getFeatureStyle",
+function (featureType) {
+var fc = this.featureColours.get (featureType);
+if (fc == null) {
+var ucs = new jalview.schemes.UserColourScheme ();
+var col = ucs.createColourFromName (featureType);
+this.featureColours.put (featureType, fc = col);
+}return fc;
+}, "~S");
+Clazz.defineMethod (c$, "getColour",
+function (featureType) {
+var fc = this.getFeatureStyle (featureType);
+if (Clazz.instanceOf (fc, java.awt.Color)) {
+return fc;
+} else {
+if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) {
+return (fc).getMaxColor ();
+}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + featureType);
+}, "~S");
+Clazz.defineMethod (c$, "getColour",
+function (feature) {
+var fc = this.getFeatureStyle (feature.getType ());
+if (Clazz.instanceOf (fc, java.awt.Color)) {
+return fc;
+} else {
+if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) {
+return (fc).findColor (feature);
+}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + feature.getType ());
+}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "showFeature",
+function (sequenceFeature) {
+var fc = this.getFeatureStyle (sequenceFeature.type);
+if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) {
+return (fc).isColored (sequenceFeature);
+} else {
+return true;
+}}, "jalview.datamodel.SequenceFeature");
+Clazz.defineMethod (c$, "showFeatureOfType",
+function (type) {
+return this.av.getFeaturesDisplayed ().isVisible (type);
+}, "~S");
+Clazz.overrideMethod (c$, "setColour",
+function (featureType, col) {
+{
+this.featureColours.put (featureType, col);
+}}, "~S,~O");
+Clazz.defineMethod (c$, "setTransparency",
+function (value) {
+this.transparency = value;
+}, "~N");
+Clazz.defineMethod (c$, "getTransparency",
+function () {
+return this.transparency;
+});
+Clazz.defineMethod (c$, "setOrder",
+function (type, position) {
+if (this.featureOrder == null) {
+this.featureOrder = new java.util.Hashtable ();
+}this.featureOrder.put (type, new Float (position));
+return position;
+}, "~S,~N");
+Clazz.defineMethod (c$, "getOrder",
+function (type) {
+if (this.featureOrder != null) {
+if (this.featureOrder.containsKey (type)) {
+return (this.featureOrder.get (type)).floatValue ();
+}}return -1;
+}, "~S");
+Clazz.overrideMethod (c$, "getFeatureColours",
+function () {
+return new java.util.concurrent.ConcurrentHashMap (this.featureColours);
+});
+Clazz.defineMethod (c$, "setFeaturePriority",
+function (data) {
+this.setFeaturePriority (data, true);
+}, "~A");
+Clazz.defineMethod (c$, "setFeaturePriority",
+function (data, visibleNew) {
+var av_featuresdisplayed = null;
+if (visibleNew) {
+if ((av_featuresdisplayed = this.av.getFeaturesDisplayed ()) != null) {
+this.av.getFeaturesDisplayed ().clear ();
+} else {
+this.av.setFeaturesDisplayed (av_featuresdisplayed = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ());
+}} else {
+av_featuresdisplayed = this.av.getFeaturesDisplayed ();
+}if (data == null) {
+return;
+}this.renderOrder = new Array (data.length);
+if (data.length > 0) {
+for (var i = 0; i < data.length; i++) {
+var type = data[i][0].toString ();
+this.setColour (type, data[i][1]);
+if ((data[i][2]).booleanValue ()) {
+av_featuresdisplayed.setVisible (type);
+}this.renderOrder[data.length - i - 1] = type;
+}
+}}, "~A,~B");
+Clazz.defineMethod (c$, "addPropertyChangeListener",
+function (listener) {
+this.changeSupport.addPropertyChangeListener (listener);
+}, "java.beans.PropertyChangeListener");
+Clazz.defineMethod (c$, "removePropertyChangeListener",
+function (listener) {
+this.changeSupport.removePropertyChangeListener (listener);
+}, "java.beans.PropertyChangeListener");
+Clazz.defineMethod (c$, "getAllFeatureColours",
+function () {
+return this.featureColours.keySet ();
+});
+Clazz.defineMethod (c$, "clearRenderOrder",
+function () {
+this.renderOrder = null;
+});
+Clazz.defineMethod (c$, "hasRenderOrder",
+function () {
+return this.renderOrder != null;
+});
+Clazz.defineMethod (c$, "getRenderOrder",
+function () {
+if (this.renderOrder == null) {
+return java.util.Arrays.asList ( Clazz.newArray (-1, []));
+}return java.util.Arrays.asList (this.renderOrder);
+});
+Clazz.defineMethod (c$, "getFeatureGroupsSize",
+function () {
+return this.featureGroups != null ? 0 : this.featureGroups.size ();
+});
+Clazz.overrideMethod (c$, "getFeatureGroups",
+function () {
+return (this.featureGroups == null) ? java.util.Arrays.asList ( new Array (0)) : java.util.Arrays.asList (this.featureGroups.keySet ().toArray ( new Array (0)));
+});
+Clazz.defineMethod (c$, "checkGroupVisibility",
+function (group, newGroupsVisible) {
+if (this.featureGroups == null) {
+}if (this.featureGroups.containsKey (group)) {
+return this.featureGroups.get (group).booleanValue ();
+}if (newGroupsVisible) {
+this.featureGroups.put (group, new Boolean (true));
+return true;
+}return false;
+}, "~S,~B");
+Clazz.overrideMethod (c$, "getGroups",
+function (visible) {
+if (this.featureGroups != null) {
+var gp = new java.util.ArrayList ();
+for (var grp, $grp = this.featureGroups.keySet ().iterator (); $grp.hasNext () && ((grp = $grp.next ()) || true);) {
+var state = this.featureGroups.get (grp);
+if (state.booleanValue () == visible) {
+gp.add (grp);
+}}
+return gp;
+}return null;
+}, "~B");
+Clazz.defineMethod (c$, "setGroupVisibility",
+function (group, visible) {
+this.featureGroups.put (group, new Boolean (visible));
+}, "~S,~B");
+Clazz.defineMethod (c$, "setGroupVisibility",
+function (toset, visible) {
+if (toset != null && toset.size () > 0 && this.featureGroups != null) {
+var rdrw = false;
+for (var gst, $gst = toset.iterator (); $gst.hasNext () && ((gst = $gst.next ()) || true);) {
+var st = this.featureGroups.get (gst);
+this.featureGroups.put (gst, new Boolean (visible));
+if (st != null) {
+rdrw = rdrw || (visible != st.booleanValue ());
+}}
+if (rdrw) {
+}}}, "java.util.List,~B");
+Clazz.overrideMethod (c$, "getDisplayedFeatureCols",
+function () {
+var fcols = new java.util.Hashtable ();
+if (this.getViewport ().getFeaturesDisplayed () == null) {
+return fcols;
+}var en = this.getViewport ().getFeaturesDisplayed ().getVisibleFeatures ();
+while (en.hasNext ()) {
+var col = en.next ();
+fcols.put (col, this.getColour (col));
+}
+return fcols;
+});
+Clazz.defineMethod (c$, "getFeaturesDisplayed",
+function () {
+return this.av.getFeaturesDisplayed ();
+});
+Clazz.overrideMethod (c$, "getDisplayedFeatureTypes",
+function () {
+var typ = null;
+typ = this.getRenderOrder ().toArray ( new Array (0));
+var feature_disp = this.av.getFeaturesDisplayed ();
+if (feature_disp != null) {
+{
+for (var i = 0; i < typ.length; i++) {
+if (!feature_disp.isVisible (typ[i])) {
+typ[i] = null;
+}}
+}}return typ;
+});
+Clazz.overrideMethod (c$, "getDisplayedFeatureGroups",
+function () {
+var gps = null;
+var _gps = new java.util.ArrayList ();
+var en = this.getFeatureGroups ().iterator ();
+var g = 0;
+var valid = false;
+while (en.hasNext ()) {
+var gp = en.next ();
+if (this.checkGroupVisibility (gp, false)) {
+valid = true;
+_gps.add (gp);
+}if (!valid) {
+return null;
+} else {
+gps = new Array (_gps.size ());
+_gps.toArray (gps);
+}}
+return gps;
+});
+});
diff --git a/bin/jalview/viewmodel/seqfeatures/FeatureRendererSettings.js b/bin/jalview/viewmodel/seqfeatures/FeatureRendererSettings.js
index f166a1b..187a380 100644
--- a/bin/jalview/viewmodel/seqfeatures/FeatureRendererSettings.js
+++ b/bin/jalview/viewmodel/seqfeatures/FeatureRendererSettings.js
@@ -1,43 +1,43 @@
-Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
-Clazz.load (null, "jalview.viewmodel.seqfeatures.FeatureRendererSettings", ["jalview.schemes.GraduatedColor", "java.util.Arrays", "java.util.concurrent.ConcurrentHashMap"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.renderOrder = null;
-this.featureGroups = null;
-this.featureColours = null;
-this.transparency = 0;
-this.featureOrder = null;
-Clazz.instantialize (this, arguments);
-}, jalview.viewmodel.seqfeatures, "FeatureRendererSettings", null, Cloneable);
-Clazz.makeConstructor (c$,
-function (renderOrder, featureGroups, featureColours, transparency, featureOrder) {
-this.renderOrder = java.util.Arrays.copyOf (renderOrder, renderOrder.length);
-this.featureGroups = new java.util.concurrent.ConcurrentHashMap (featureGroups);
-this.featureColours = new java.util.concurrent.ConcurrentHashMap (featureColours);
-this.transparency = transparency;
-this.featureOrder = new java.util.concurrent.ConcurrentHashMap (featureOrder);
-}, "~A,java.util.Hashtable,java.util.Hashtable,~N,java.util.Hashtable");
-Clazz.makeConstructor (c$,
-function (fr) {
-this.renderOrder = null;
-this.featureGroups = new java.util.concurrent.ConcurrentHashMap ();
-this.featureColours = new java.util.concurrent.ConcurrentHashMap ();
-this.featureOrder = new java.util.concurrent.ConcurrentHashMap ();
-if (fr.renderOrder != null) {
-this.renderOrder = new Array (fr.renderOrder.length);
-System.arraycopy (fr.renderOrder, 0, this.renderOrder, 0, fr.renderOrder.length);
-}if (fr.featureGroups != null) {
-this.featureGroups = new java.util.concurrent.ConcurrentHashMap (fr.featureGroups);
-}if (fr.featureColours != null) {
-this.featureColours = new java.util.concurrent.ConcurrentHashMap (fr.featureColours);
-}var en = fr.featureColours.keySet ().iterator ();
-while (en.hasNext ()) {
-var next = en.next ();
-var val = this.featureColours.get (next);
-if (Clazz.instanceOf (val, jalview.schemes.GraduatedColor)) {
-this.featureColours.put (next, new jalview.schemes.GraduatedColor (val));
-}}
-this.transparency = fr.transparency;
-if (fr.featureOrder != null) {
-this.featureOrder = new java.util.concurrent.ConcurrentHashMap (fr.featureOrder);
-}}, "jalview.viewmodel.seqfeatures.FeatureRendererModel");
-});
+Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
+Clazz.load (null, "jalview.viewmodel.seqfeatures.FeatureRendererSettings", ["jalview.schemes.GraduatedColor", "java.util.Arrays", "java.util.concurrent.ConcurrentHashMap"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.renderOrder = null;
+this.featureGroups = null;
+this.featureColours = null;
+this.transparency = 0;
+this.featureOrder = null;
+Clazz.instantialize (this, arguments);
+}, jalview.viewmodel.seqfeatures, "FeatureRendererSettings", null, Cloneable);
+Clazz.makeConstructor (c$,
+function (renderOrder, featureGroups, featureColours, transparency, featureOrder) {
+this.renderOrder = java.util.Arrays.copyOf (renderOrder, renderOrder.length);
+this.featureGroups = new java.util.concurrent.ConcurrentHashMap (featureGroups);
+this.featureColours = new java.util.concurrent.ConcurrentHashMap (featureColours);
+this.transparency = transparency;
+this.featureOrder = new java.util.concurrent.ConcurrentHashMap (featureOrder);
+}, "~A,java.util.Hashtable,java.util.Hashtable,~N,java.util.Hashtable");
+Clazz.makeConstructor (c$,
+function (fr) {
+this.renderOrder = null;
+this.featureGroups = new java.util.concurrent.ConcurrentHashMap ();
+this.featureColours = new java.util.concurrent.ConcurrentHashMap ();
+this.featureOrder = new java.util.concurrent.ConcurrentHashMap ();
+if (fr.renderOrder != null) {
+this.renderOrder = new Array (fr.renderOrder.length);
+System.arraycopy (fr.renderOrder, 0, this.renderOrder, 0, fr.renderOrder.length);
+}if (fr.featureGroups != null) {
+this.featureGroups = new java.util.concurrent.ConcurrentHashMap (fr.featureGroups);
+}if (fr.featureColours != null) {
+this.featureColours = new java.util.concurrent.ConcurrentHashMap (fr.featureColours);
+}var en = fr.featureColours.keySet ().iterator ();
+while (en.hasNext ()) {
+var next = en.next ();
+var val = this.featureColours.get (next);
+if (Clazz.instanceOf (val, jalview.schemes.GraduatedColor)) {
+this.featureColours.put (next, new jalview.schemes.GraduatedColor (val));
+}}
+this.transparency = fr.transparency;
+if (fr.featureOrder != null) {
+this.featureOrder = new java.util.concurrent.ConcurrentHashMap (fr.featureOrder);
+}}, "jalview.viewmodel.seqfeatures.FeatureRendererModel");
+});
diff --git a/bin/jalview/viewmodel/seqfeatures/FeatureSettingsModel.js b/bin/jalview/viewmodel/seqfeatures/FeatureSettingsModel.js
index 72b72b5..6623fc4 100644
--- a/bin/jalview/viewmodel/seqfeatures/FeatureSettingsModel.js
+++ b/bin/jalview/viewmodel/seqfeatures/FeatureSettingsModel.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
-Clazz.load (["jalview.api.FeatureSettingsModelI"], "jalview.viewmodel.seqfeatures.FeatureSettingsModel", null, function () {
-c$ = Clazz.declareType (jalview.viewmodel.seqfeatures, "FeatureSettingsModel", null, jalview.api.FeatureSettingsModelI);
-});
+Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
+Clazz.load (["jalview.api.FeatureSettingsModelI"], "jalview.viewmodel.seqfeatures.FeatureSettingsModel", null, function () {
+c$ = Clazz.declareType (jalview.viewmodel.seqfeatures, "FeatureSettingsModel", null, jalview.api.FeatureSettingsModelI);
+});
diff --git a/bin/jalview/viewmodel/seqfeatures/FeaturesDisplayed.js b/bin/jalview/viewmodel/seqfeatures/FeaturesDisplayed.js
index 8f0de99..32ddafc 100644
--- a/bin/jalview/viewmodel/seqfeatures/FeaturesDisplayed.js
+++ b/bin/jalview/viewmodel/seqfeatures/FeaturesDisplayed.js
@@ -1,68 +1,68 @@
-Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
-Clazz.load (["jalview.api.FeaturesDisplayedI", "java.util.HashSet"], "jalview.viewmodel.seqfeatures.FeaturesDisplayed", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.featuresDisplayed = null;
-this.featuresRegistered = null;
-Clazz.instantialize (this, arguments);
-}, jalview.viewmodel.seqfeatures, "FeaturesDisplayed", null, jalview.api.FeaturesDisplayedI);
-Clazz.prepareFields (c$, function () {
-this.featuresDisplayed = new java.util.HashSet ();
-this.featuresRegistered = new java.util.HashSet ();
-});
-Clazz.makeConstructor (c$,
-function (featuresDisplayed2) {
-var fdisp = featuresDisplayed2.getVisibleFeatures ();
-var ftype;
-while (fdisp.hasNext ()) {
-ftype = fdisp.next ();
-this.featuresDisplayed.add (ftype);
-this.featuresRegistered.add (ftype);
-}
-}, "jalview.api.FeaturesDisplayedI");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "getVisibleFeatures",
-function () {
-return this.featuresDisplayed.iterator ();
-});
-Clazz.overrideMethod (c$, "isVisible",
-function (featureType) {
-return this.featuresDisplayed.contains (featureType);
-}, "~S");
-Clazz.overrideMethod (c$, "areVisible",
-function (featureTypes) {
-return this.featuresDisplayed.containsAll (featureTypes);
-}, "java.util.Collection");
-Clazz.overrideMethod (c$, "clear",
-function () {
-this.featuresDisplayed.clear ();
-this.featuresRegistered.clear ();
-});
-Clazz.overrideMethod (c$, "setAllVisible",
-function (makeVisible) {
-this.featuresDisplayed.addAll (makeVisible);
-this.featuresRegistered.addAll (makeVisible);
-}, "java.util.Collection");
-Clazz.overrideMethod (c$, "setAllRegisteredVisible",
-function () {
-this.featuresDisplayed.addAll (this.featuresRegistered);
-});
-Clazz.overrideMethod (c$, "setVisible",
-function (featureType) {
-this.featuresDisplayed.add (featureType);
-this.featuresRegistered.add (featureType);
-}, "~S");
-Clazz.overrideMethod (c$, "isRegistered",
-function (type) {
-return this.featuresRegistered.contains (type);
-}, "~S");
-Clazz.overrideMethod (c$, "getVisibleFeatureCount",
-function () {
-return this.featuresDisplayed.size ();
-});
-Clazz.overrideMethod (c$, "getRegisterdFeaturesCount",
-function () {
-return this.featuresRegistered.size ();
-});
-});
+Clazz.declarePackage ("jalview.viewmodel.seqfeatures");
+Clazz.load (["jalview.api.FeaturesDisplayedI", "java.util.HashSet"], "jalview.viewmodel.seqfeatures.FeaturesDisplayed", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.featuresDisplayed = null;
+this.featuresRegistered = null;
+Clazz.instantialize (this, arguments);
+}, jalview.viewmodel.seqfeatures, "FeaturesDisplayed", null, jalview.api.FeaturesDisplayedI);
+Clazz.prepareFields (c$, function () {
+this.featuresDisplayed = new java.util.HashSet ();
+this.featuresRegistered = new java.util.HashSet ();
+});
+Clazz.makeConstructor (c$,
+function (featuresDisplayed2) {
+var fdisp = featuresDisplayed2.getVisibleFeatures ();
+var ftype;
+while (fdisp.hasNext ()) {
+ftype = fdisp.next ();
+this.featuresDisplayed.add (ftype);
+this.featuresRegistered.add (ftype);
+}
+}, "jalview.api.FeaturesDisplayedI");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "getVisibleFeatures",
+function () {
+return this.featuresDisplayed.iterator ();
+});
+Clazz.overrideMethod (c$, "isVisible",
+function (featureType) {
+return this.featuresDisplayed.contains (featureType);
+}, "~S");
+Clazz.overrideMethod (c$, "areVisible",
+function (featureTypes) {
+return this.featuresDisplayed.containsAll (featureTypes);
+}, "java.util.Collection");
+Clazz.overrideMethod (c$, "clear",
+function () {
+this.featuresDisplayed.clear ();
+this.featuresRegistered.clear ();
+});
+Clazz.overrideMethod (c$, "setAllVisible",
+function (makeVisible) {
+this.featuresDisplayed.addAll (makeVisible);
+this.featuresRegistered.addAll (makeVisible);
+}, "java.util.Collection");
+Clazz.overrideMethod (c$, "setAllRegisteredVisible",
+function () {
+this.featuresDisplayed.addAll (this.featuresRegistered);
+});
+Clazz.overrideMethod (c$, "setVisible",
+function (featureType) {
+this.featuresDisplayed.add (featureType);
+this.featuresRegistered.add (featureType);
+}, "~S");
+Clazz.overrideMethod (c$, "isRegistered",
+function (type) {
+return this.featuresRegistered.contains (type);
+}, "~S");
+Clazz.overrideMethod (c$, "getVisibleFeatureCount",
+function () {
+return this.featuresDisplayed.size ();
+});
+Clazz.overrideMethod (c$, "getRegisterdFeaturesCount",
+function () {
+return this.featuresRegistered.size ();
+});
+});
diff --git a/bin/jalview/viewmodel/styles/ViewStyle.js b/bin/jalview/viewmodel/styles/ViewStyle.js
index f41fe5d..8ec10fa 100644
--- a/bin/jalview/viewmodel/styles/ViewStyle.js
+++ b/bin/jalview/viewmodel/styles/ViewStyle.js
@@ -1,457 +1,457 @@
-Clazz.declarePackage ("jalview.viewmodel.styles");
-Clazz.load (["jalview.api.ViewStyleI", "java.awt.Color"], "jalview.viewmodel.styles.ViewStyle", ["java.lang.Boolean"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.abovePIDThreshold = false;
-this.charHeight = 0;
-this.charWidth = 0;
-this.idWidth = -1;
-this.colourAppliesToAllGroups = false;
-this.centreColumnLabels = false;
-this.showdbrefs = false;
-this.shownpfeats = false;
-this.colourByReferenceSeq = false;
-this.conservationColourSelected = false;
-this.displayReferenceSeq = false;
-this.increment = 0;
-this.renderGaps = true;
-this.rightAlignIds = false;
-this.scaleAboveWrapped = false;
-this.scaleLeftWrapped = true;
-this.scaleRightWrapped = true;
-this.seqNameItalics = false;
-this.showAnnotation = true;
-this.showBoxes = true;
-this.showColourText = false;
-this.showHiddenMarkers = true;
-this.showJVSuffix = true;
-this.showSeqFeaturesHeight = false;
-this.showSequenceFeatures = false;
-this.showText = true;
-this.showUnconserved = false;
-this.textColour = null;
-this.textColour2 = null;
-this.threshold = 0;
-this.thresholdTextColour = 0;
-this.upperCasebold = false;
-this.fontName = null;
-this.fontSize = 0;
-this.scaleProteinAsCdna = true;
-this.wrapAlignment = false;
-this.wrappedWidth = 0;
-this.fontStyle = 0;
-Clazz.instantialize (this, arguments);
-}, jalview.viewmodel.styles, "ViewStyle", null, jalview.api.ViewStyleI);
-Clazz.prepareFields (c$, function () {
-this.textColour = java.awt.Color.black;
-this.textColour2 = java.awt.Color.white;
-});
-Clazz.makeConstructor (c$,
-function (vs) {
-this.setAbovePIDThreshold (vs.getAbovePIDThreshold ());
-this.setCentreColumnLabels (vs.isCentreColumnLabels ());
-this.setCharHeight (vs.getCharHeight ());
-this.setCharWidth (vs.getCharWidth ());
-this.setColourAppliesToAllGroups (vs.getColourAppliesToAllGroups ());
-this.setColourByReferenceSeq (vs.isColourByReferenceSeq ());
-this.setColourText (vs.getColourText ());
-this.setConservationColourSelected (vs.isConservationColourSelected ());
-this.setConservationSelected (vs.getConservationSelected ());
-this.setDisplayReferenceSeq (vs.isDisplayReferenceSeq ());
-this.setFontName (vs.getFontName ());
-this.setFontSize (vs.getFontSize ());
-this.setFontStyle (vs.getFontStyle ());
-this.setIdWidth (vs.getIdWidth ());
-this.setIncrement (vs.getIncrement ());
-this.setRenderGaps (vs.isRenderGaps ());
-this.setRightAlignIds (vs.isRightAlignIds ());
-this.setScaleAboveWrapped (vs.getScaleAboveWrapped ());
-this.setScaleLeftWrapped (vs.getScaleLeftWrapped ());
-this.setScaleProteinAsCdna (vs.isScaleProteinAsCdna ());
-this.setScaleRightWrapped (vs.getScaleRightWrapped ());
-this.setSeqNameItalics (vs.isSeqNameItalics ());
-this.setShowAnnotation (vs.isShowAnnotation ());
-this.setShowBoxes (vs.getShowBoxes ());
-this.setShowColourText (vs.isShowColourText ());
-this.setShowDBRefs (vs.isShowDBRefs ());
-this.setShowHiddenMarkers (vs.getShowHiddenMarkers ());
-this.setShowJVSuffix (vs.getShowJVSuffix ());
-this.setShowNPFeats (vs.isShowNPFeats ());
-this.setShowSequenceFeaturesHeight (vs.isShowSequenceFeaturesHeight ());
-this.setShowSequenceFeatures (vs.isShowSequenceFeatures ());
-this.setShowText (vs.getShowText ());
-this.setShowUnconserved (vs.getShowUnconserved ());
-this.setTextColour (vs.getTextColour ());
-this.setTextColour2 (vs.getTextColour2 ());
-this.setThreshold (vs.getThreshold ());
-this.setThresholdTextColour (vs.getThresholdTextColour ());
-this.setUpperCasebold (vs.isUpperCasebold ());
-this.setWrapAlignment (vs.getWrapAlignment ());
-this.setWrappedWidth (vs.getWrappedWidth ());
-}, "jalview.api.ViewStyleI");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.overrideMethod (c$, "equals",
-function (other) {
-if (other == null || !(Clazz.instanceOf (other, jalview.viewmodel.styles.ViewStyle))) {
-return false;
-}var vs = other;
-var match = (this.getAbovePIDThreshold () == vs.getAbovePIDThreshold () && this.isCentreColumnLabels () == vs.isCentreColumnLabels () && this.getCharHeight () == vs.getCharHeight () && this.getCharWidth () == vs.getCharWidth () && this.getColourAppliesToAllGroups () == vs.getColourAppliesToAllGroups () && this.isColourByReferenceSeq () == vs.isColourByReferenceSeq () && this.getColourText () == vs.getColourText () && this.isConservationColourSelected () == vs.isConservationColourSelected () && this.getConservationSelected () == vs.getConservationSelected () && this.isDisplayReferenceSeq () == vs.isDisplayReferenceSeq () && this.getFontSize () == vs.getFontSize () && this.getFontStyle () == vs.getFontStyle () && this.getIdWidth () == vs.getIdWidth () && this.getIncrement () == vs.getIncrement () && this.isRenderGaps () == vs.isRenderGaps () && this.isRightAlignIds () == vs.isRightAlignIds () && this.getScaleAboveWrapped () == vs.getScaleAboveWrapped () && this.getScaleLeftWrapped () == vs.getScaleLeftWrapped () && this.isScaleProteinAsCdna () == vs.isScaleProteinAsCdna () && this.getScaleRightWrapped () == vs.getScaleRightWrapped () && this.isSeqNameItalics () == vs.isSeqNameItalics () && this.isShowAnnotation () == vs.isShowAnnotation () && this.getShowBoxes () == vs.getShowBoxes () && this.isShowColourText () == vs.isShowColourText () && this.isShowDBRefs () == vs.isShowDBRefs () && this.getShowHiddenMarkers () == vs.getShowHiddenMarkers () && this.getShowJVSuffix () == vs.getShowJVSuffix () && this.isShowNPFeats () == vs.isShowNPFeats () && this.isShowSequenceFeaturesHeight () == vs.isShowSequenceFeaturesHeight () && this.isShowSequenceFeatures () == vs.isShowSequenceFeatures () && this.getShowText () == vs.getShowText () && this.getShowUnconserved () == vs.getShowUnconserved () && this.getThreshold () == vs.getThreshold () && this.getThresholdTextColour () == vs.getThresholdTextColour () && this.isUpperCasebold () == vs.isUpperCasebold () && this.getWrapAlignment () == vs.getWrapAlignment () && this.getWrappedWidth () == vs.getWrappedWidth ());
-match = match && String.valueOf (this.getFontName ()).equals (String.valueOf (vs.getFontName ()));
-match = match && String.valueOf (this.getTextColour ()).equals (String.valueOf (vs.getTextColour ()));
-match = match && String.valueOf (this.getTextColour2 ()).equals (String.valueOf (vs.getTextColour2 ()));
-return match;
-}, "~O");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-var hash = 0;
-var m = 1;
-hash += m++ * Boolean.$valueOf (this.abovePIDThreshold).hashCode ();
-hash += m++ * Boolean.$valueOf (this.centreColumnLabels).hashCode ();
-hash += m++ * Boolean.$valueOf (this.colourAppliesToAllGroups).hashCode ();
-hash += m++ * Boolean.$valueOf (this.displayReferenceSeq).hashCode ();
-hash += m++ * Boolean.$valueOf (this.renderGaps).hashCode ();
-hash += m++ * Boolean.$valueOf (this.rightAlignIds).hashCode ();
-hash += m++ * Boolean.$valueOf (this.scaleProteinAsCdna).hashCode ();
-hash += m++ * Boolean.$valueOf (this.scaleRightWrapped).hashCode ();
-hash += m++ * Boolean.$valueOf (this.seqNameItalics).hashCode ();
-hash += m++ * Boolean.$valueOf (this.showAnnotation).hashCode ();
-hash += m++ * Boolean.$valueOf (this.showBoxes).hashCode ();
-hash += m++ * Boolean.$valueOf (this.showdbrefs).hashCode ();
-hash += m++ * Boolean.$valueOf (this.showJVSuffix).hashCode ();
-hash += m++ * Boolean.$valueOf (this.showSequenceFeatures).hashCode ();
-hash += m++ * Boolean.$valueOf (this.showUnconserved).hashCode ();
-hash += m++ * Boolean.$valueOf (this.wrapAlignment).hashCode ();
-hash += m++ * this.charHeight;
-hash += m++ * this.charWidth;
-hash += m++ * this.fontSize;
-hash += m++ * this.fontStyle;
-hash += m++ * this.idWidth;
-hash += String.valueOf (this.fontName).hashCode ();
-return hash;
-});
-Clazz.defineMethod (c$, "isUpperCasebold",
-function () {
-return this.upperCasebold;
-});
-Clazz.overrideMethod (c$, "setUpperCasebold",
-function (upperCasebold) {
-this.upperCasebold = upperCasebold;
-}, "~B");
-Clazz.defineMethod (c$, "getAbovePIDThreshold",
-function () {
-return this.abovePIDThreshold;
-});
-Clazz.defineMethod (c$, "getCharHeight",
-function () {
-return this.charHeight;
-});
-Clazz.defineMethod (c$, "getCharWidth",
-function () {
-return this.charWidth;
-});
-Clazz.defineMethod (c$, "getColourAppliesToAllGroups",
-function () {
-return this.colourAppliesToAllGroups;
-});
-Clazz.defineMethod (c$, "getColourText",
-function () {
-return this.showColourText;
-});
-Clazz.defineMethod (c$, "getConservationSelected",
-function () {
-return this.conservationColourSelected;
-});
-Clazz.defineMethod (c$, "getIncrement",
-function () {
-return this.increment;
-});
-Clazz.defineMethod (c$, "getScaleAboveWrapped",
-function () {
-return this.scaleAboveWrapped;
-});
-Clazz.defineMethod (c$, "getScaleLeftWrapped",
-function () {
-return this.scaleLeftWrapped;
-});
-Clazz.defineMethod (c$, "getScaleRightWrapped",
-function () {
-return this.scaleRightWrapped;
-});
-Clazz.defineMethod (c$, "getShowBoxes",
-function () {
-return this.showBoxes;
-});
-Clazz.defineMethod (c$, "getShowHiddenMarkers",
-function () {
-return this.showHiddenMarkers;
-});
-Clazz.defineMethod (c$, "getShowJVSuffix",
-function () {
-return this.showJVSuffix;
-});
-Clazz.defineMethod (c$, "getShowText",
-function () {
-return this.showText;
-});
-Clazz.defineMethod (c$, "getShowUnconserved",
-function () {
-return this.showUnconserved;
-});
-Clazz.defineMethod (c$, "getTextColour",
-function () {
-return this.textColour;
-});
-Clazz.defineMethod (c$, "getTextColour2",
-function () {
-return this.textColour2;
-});
-Clazz.defineMethod (c$, "getThreshold",
-function () {
-return this.threshold;
-});
-Clazz.defineMethod (c$, "getThresholdTextColour",
-function () {
-return this.thresholdTextColour;
-});
-Clazz.defineMethod (c$, "getWrapAlignment",
-function () {
-return this.wrapAlignment;
-});
-Clazz.defineMethod (c$, "getWrappedWidth",
-function () {
-return this.wrappedWidth;
-});
-Clazz.defineMethod (c$, "isColourByReferenceSeq",
-function () {
-return this.colourByReferenceSeq;
-});
-Clazz.defineMethod (c$, "isConservationColourSelected",
-function () {
-return this.conservationColourSelected;
-});
-Clazz.defineMethod (c$, "isDisplayReferenceSeq",
-function () {
-return this.displayReferenceSeq;
-});
-Clazz.defineMethod (c$, "isRenderGaps",
-function () {
-return this.renderGaps;
-});
-Clazz.defineMethod (c$, "isRightAlignIds",
-function () {
-return this.rightAlignIds;
-});
-Clazz.defineMethod (c$, "isSeqNameItalics",
-function () {
-return this.seqNameItalics;
-});
-Clazz.defineMethod (c$, "isShowAnnotation",
-function () {
-return this.showAnnotation;
-});
-Clazz.defineMethod (c$, "isShowColourText",
-function () {
-return this.showColourText;
-});
-Clazz.defineMethod (c$, "isShowSequenceFeaturesHeight",
-function () {
-return this.showSeqFeaturesHeight;
-});
-Clazz.defineMethod (c$, "isShowSequenceFeatures",
-function () {
-return this.showSequenceFeatures;
-});
-Clazz.overrideMethod (c$, "setAbovePIDThreshold",
-function (b) {
-this.abovePIDThreshold = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setCharHeight",
-function (h) {
-this.charHeight = h;
-}, "~N");
-Clazz.overrideMethod (c$, "setCharWidth",
-function (w) {
-this.charWidth = w;
-}, "~N");
-Clazz.overrideMethod (c$, "setColourAppliesToAllGroups",
-function (b) {
-this.colourAppliesToAllGroups = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setColourByReferenceSeq",
-function (colourByReferenceSeq) {
-this.colourByReferenceSeq = colourByReferenceSeq;
-}, "~B");
-Clazz.overrideMethod (c$, "setColourText",
-function (state) {
-this.showColourText = state;
-}, "~B");
-Clazz.overrideMethod (c$, "setConservationColourSelected",
-function (conservationColourSelected) {
-this.conservationColourSelected = conservationColourSelected;
-}, "~B");
-Clazz.overrideMethod (c$, "setConservationSelected",
-function (b) {
-this.conservationColourSelected = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setDisplayReferenceSeq",
-function (displayReferenceSeq) {
-this.displayReferenceSeq = displayReferenceSeq;
-}, "~B");
-Clazz.overrideMethod (c$, "setIncrement",
-function (inc) {
-this.increment = inc;
-}, "~N");
-Clazz.overrideMethod (c$, "setRenderGaps",
-function (state) {
-this.renderGaps = state;
-}, "~B");
-Clazz.overrideMethod (c$, "setRightAlignIds",
-function (rightAlignIds) {
-this.rightAlignIds = rightAlignIds;
-}, "~B");
-Clazz.overrideMethod (c$, "setScaleAboveWrapped",
-function (b) {
-this.scaleAboveWrapped = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setScaleLeftWrapped",
-function (b) {
-this.scaleLeftWrapped = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setScaleRightWrapped",
-function (b) {
-this.scaleRightWrapped = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setSeqNameItalics",
-function (italics) {
-this.seqNameItalics = italics;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowAnnotation",
-function (b) {
-this.showAnnotation = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowBoxes",
-function (state) {
-this.showBoxes = state;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowColourText",
-function (showColourText) {
-this.showColourText = showColourText;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowHiddenMarkers",
-function (show) {
-this.showHiddenMarkers = show;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowJVSuffix",
-function (b) {
-this.showJVSuffix = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowSequenceFeaturesHeight",
-function (selected) {
-this.showSeqFeaturesHeight = selected;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowSequenceFeatures",
-function (b) {
-this.showSequenceFeatures = b;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowText",
-function (state) {
-this.showText = state;
-}, "~B");
-Clazz.overrideMethod (c$, "setShowUnconserved",
-function (showunconserved) {
-this.showUnconserved = showunconserved;
-}, "~B");
-Clazz.overrideMethod (c$, "setTextColour",
-function (textColour) {
-this.textColour = textColour;
-}, "java.awt.Color");
-Clazz.overrideMethod (c$, "setTextColour2",
-function (textColour2) {
-this.textColour2 = textColour2;
-}, "java.awt.Color");
-Clazz.overrideMethod (c$, "setThreshold",
-function (thresh) {
-this.threshold = thresh;
-}, "~N");
-Clazz.overrideMethod (c$, "setThresholdTextColour",
-function (thresholdTextColour) {
-this.thresholdTextColour = thresholdTextColour;
-}, "~N");
-Clazz.overrideMethod (c$, "setWrapAlignment",
-function (state) {
-this.wrapAlignment = state;
-}, "~B");
-Clazz.overrideMethod (c$, "setWrappedWidth",
-function (w) {
-this.wrappedWidth = w;
-}, "~N");
-Clazz.overrideMethod (c$, "sameStyle",
-function (that) {
-return this.equals (that);
-}, "jalview.api.ViewStyleI");
-Clazz.defineMethod (c$, "getFontName",
-function () {
-return this.fontName;
-});
-Clazz.defineMethod (c$, "getFontSize",
-function () {
-return this.fontSize;
-});
-Clazz.defineMethod (c$, "getFontStyle",
-function () {
-return this.fontStyle;
-});
-Clazz.overrideMethod (c$, "setFontName",
-function (name) {
-this.fontName = name;
-}, "~S");
-Clazz.overrideMethod (c$, "setFontSize",
-function (size) {
-this.fontSize = size;
-}, "~N");
-Clazz.overrideMethod (c$, "setFontStyle",
-function (style) {
-this.fontStyle = style;
-}, "~N");
-Clazz.defineMethod (c$, "getIdWidth",
-function () {
-return this.idWidth;
-});
-Clazz.overrideMethod (c$, "setIdWidth",
-function (idWidth) {
-this.idWidth = idWidth;
-}, "~N");
-Clazz.defineMethod (c$, "isCentreColumnLabels",
-function () {
-return this.centreColumnLabels;
-});
-Clazz.overrideMethod (c$, "setCentreColumnLabels",
-function (centreColumnLabels) {
-this.centreColumnLabels = centreColumnLabels;
-}, "~B");
-Clazz.defineMethod (c$, "isShowDBRefs",
-function () {
-return this.showdbrefs;
-});
-Clazz.overrideMethod (c$, "setShowDBRefs",
-function (showdbrefs) {
-this.showdbrefs = showdbrefs;
-}, "~B");
-Clazz.defineMethod (c$, "isShowNPFeats",
-function () {
-return this.shownpfeats;
-});
-Clazz.overrideMethod (c$, "setShowNPFeats",
-function (shownpfeats) {
-this.shownpfeats = shownpfeats;
-}, "~B");
-Clazz.defineMethod (c$, "isScaleProteinAsCdna",
-function () {
-return this.scaleProteinAsCdna;
-});
-Clazz.overrideMethod (c$, "setScaleProteinAsCdna",
-function (b) {
-this.scaleProteinAsCdna = b;
-}, "~B");
-});
+Clazz.declarePackage ("jalview.viewmodel.styles");
+Clazz.load (["jalview.api.ViewStyleI", "java.awt.Color"], "jalview.viewmodel.styles.ViewStyle", ["java.lang.Boolean"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.abovePIDThreshold = false;
+this.charHeight = 0;
+this.charWidth = 0;
+this.idWidth = -1;
+this.colourAppliesToAllGroups = false;
+this.centreColumnLabels = false;
+this.showdbrefs = false;
+this.shownpfeats = false;
+this.colourByReferenceSeq = false;
+this.conservationColourSelected = false;
+this.displayReferenceSeq = false;
+this.increment = 0;
+this.renderGaps = true;
+this.rightAlignIds = false;
+this.scaleAboveWrapped = false;
+this.scaleLeftWrapped = true;
+this.scaleRightWrapped = true;
+this.seqNameItalics = false;
+this.showAnnotation = true;
+this.showBoxes = true;
+this.showColourText = false;
+this.showHiddenMarkers = true;
+this.showJVSuffix = true;
+this.showSeqFeaturesHeight = false;
+this.showSequenceFeatures = false;
+this.showText = true;
+this.showUnconserved = false;
+this.textColour = null;
+this.textColour2 = null;
+this.threshold = 0;
+this.thresholdTextColour = 0;
+this.upperCasebold = false;
+this.fontName = null;
+this.fontSize = 0;
+this.scaleProteinAsCdna = true;
+this.wrapAlignment = false;
+this.wrappedWidth = 0;
+this.fontStyle = 0;
+Clazz.instantialize (this, arguments);
+}, jalview.viewmodel.styles, "ViewStyle", null, jalview.api.ViewStyleI);
+Clazz.prepareFields (c$, function () {
+this.textColour = java.awt.Color.black;
+this.textColour2 = java.awt.Color.white;
+});
+Clazz.makeConstructor (c$,
+function (vs) {
+this.setAbovePIDThreshold (vs.getAbovePIDThreshold ());
+this.setCentreColumnLabels (vs.isCentreColumnLabels ());
+this.setCharHeight (vs.getCharHeight ());
+this.setCharWidth (vs.getCharWidth ());
+this.setColourAppliesToAllGroups (vs.getColourAppliesToAllGroups ());
+this.setColourByReferenceSeq (vs.isColourByReferenceSeq ());
+this.setColourText (vs.getColourText ());
+this.setConservationColourSelected (vs.isConservationColourSelected ());
+this.setConservationSelected (vs.getConservationSelected ());
+this.setDisplayReferenceSeq (vs.isDisplayReferenceSeq ());
+this.setFontName (vs.getFontName ());
+this.setFontSize (vs.getFontSize ());
+this.setFontStyle (vs.getFontStyle ());
+this.setIdWidth (vs.getIdWidth ());
+this.setIncrement (vs.getIncrement ());
+this.setRenderGaps (vs.isRenderGaps ());
+this.setRightAlignIds (vs.isRightAlignIds ());
+this.setScaleAboveWrapped (vs.getScaleAboveWrapped ());
+this.setScaleLeftWrapped (vs.getScaleLeftWrapped ());
+this.setScaleProteinAsCdna (vs.isScaleProteinAsCdna ());
+this.setScaleRightWrapped (vs.getScaleRightWrapped ());
+this.setSeqNameItalics (vs.isSeqNameItalics ());
+this.setShowAnnotation (vs.isShowAnnotation ());
+this.setShowBoxes (vs.getShowBoxes ());
+this.setShowColourText (vs.isShowColourText ());
+this.setShowDBRefs (vs.isShowDBRefs ());
+this.setShowHiddenMarkers (vs.getShowHiddenMarkers ());
+this.setShowJVSuffix (vs.getShowJVSuffix ());
+this.setShowNPFeats (vs.isShowNPFeats ());
+this.setShowSequenceFeaturesHeight (vs.isShowSequenceFeaturesHeight ());
+this.setShowSequenceFeatures (vs.isShowSequenceFeatures ());
+this.setShowText (vs.getShowText ());
+this.setShowUnconserved (vs.getShowUnconserved ());
+this.setTextColour (vs.getTextColour ());
+this.setTextColour2 (vs.getTextColour2 ());
+this.setThreshold (vs.getThreshold ());
+this.setThresholdTextColour (vs.getThresholdTextColour ());
+this.setUpperCasebold (vs.isUpperCasebold ());
+this.setWrapAlignment (vs.getWrapAlignment ());
+this.setWrappedWidth (vs.getWrappedWidth ());
+}, "jalview.api.ViewStyleI");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.overrideMethod (c$, "equals",
+function (other) {
+if (other == null || !(Clazz.instanceOf (other, jalview.viewmodel.styles.ViewStyle))) {
+return false;
+}var vs = other;
+var match = (this.getAbovePIDThreshold () == vs.getAbovePIDThreshold () && this.isCentreColumnLabels () == vs.isCentreColumnLabels () && this.getCharHeight () == vs.getCharHeight () && this.getCharWidth () == vs.getCharWidth () && this.getColourAppliesToAllGroups () == vs.getColourAppliesToAllGroups () && this.isColourByReferenceSeq () == vs.isColourByReferenceSeq () && this.getColourText () == vs.getColourText () && this.isConservationColourSelected () == vs.isConservationColourSelected () && this.getConservationSelected () == vs.getConservationSelected () && this.isDisplayReferenceSeq () == vs.isDisplayReferenceSeq () && this.getFontSize () == vs.getFontSize () && this.getFontStyle () == vs.getFontStyle () && this.getIdWidth () == vs.getIdWidth () && this.getIncrement () == vs.getIncrement () && this.isRenderGaps () == vs.isRenderGaps () && this.isRightAlignIds () == vs.isRightAlignIds () && this.getScaleAboveWrapped () == vs.getScaleAboveWrapped () && this.getScaleLeftWrapped () == vs.getScaleLeftWrapped () && this.isScaleProteinAsCdna () == vs.isScaleProteinAsCdna () && this.getScaleRightWrapped () == vs.getScaleRightWrapped () && this.isSeqNameItalics () == vs.isSeqNameItalics () && this.isShowAnnotation () == vs.isShowAnnotation () && this.getShowBoxes () == vs.getShowBoxes () && this.isShowColourText () == vs.isShowColourText () && this.isShowDBRefs () == vs.isShowDBRefs () && this.getShowHiddenMarkers () == vs.getShowHiddenMarkers () && this.getShowJVSuffix () == vs.getShowJVSuffix () && this.isShowNPFeats () == vs.isShowNPFeats () && this.isShowSequenceFeaturesHeight () == vs.isShowSequenceFeaturesHeight () && this.isShowSequenceFeatures () == vs.isShowSequenceFeatures () && this.getShowText () == vs.getShowText () && this.getShowUnconserved () == vs.getShowUnconserved () && this.getThreshold () == vs.getThreshold () && this.getThresholdTextColour () == vs.getThresholdTextColour () && this.isUpperCasebold () == vs.isUpperCasebold () && this.getWrapAlignment () == vs.getWrapAlignment () && this.getWrappedWidth () == vs.getWrappedWidth ());
+match = match && String.valueOf (this.getFontName ()).equals (String.valueOf (vs.getFontName ()));
+match = match && String.valueOf (this.getTextColour ()).equals (String.valueOf (vs.getTextColour ()));
+match = match && String.valueOf (this.getTextColour2 ()).equals (String.valueOf (vs.getTextColour2 ()));
+return match;
+}, "~O");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+var hash = 0;
+var m = 1;
+hash += m++ * Boolean.$valueOf (this.abovePIDThreshold).hashCode ();
+hash += m++ * Boolean.$valueOf (this.centreColumnLabels).hashCode ();
+hash += m++ * Boolean.$valueOf (this.colourAppliesToAllGroups).hashCode ();
+hash += m++ * Boolean.$valueOf (this.displayReferenceSeq).hashCode ();
+hash += m++ * Boolean.$valueOf (this.renderGaps).hashCode ();
+hash += m++ * Boolean.$valueOf (this.rightAlignIds).hashCode ();
+hash += m++ * Boolean.$valueOf (this.scaleProteinAsCdna).hashCode ();
+hash += m++ * Boolean.$valueOf (this.scaleRightWrapped).hashCode ();
+hash += m++ * Boolean.$valueOf (this.seqNameItalics).hashCode ();
+hash += m++ * Boolean.$valueOf (this.showAnnotation).hashCode ();
+hash += m++ * Boolean.$valueOf (this.showBoxes).hashCode ();
+hash += m++ * Boolean.$valueOf (this.showdbrefs).hashCode ();
+hash += m++ * Boolean.$valueOf (this.showJVSuffix).hashCode ();
+hash += m++ * Boolean.$valueOf (this.showSequenceFeatures).hashCode ();
+hash += m++ * Boolean.$valueOf (this.showUnconserved).hashCode ();
+hash += m++ * Boolean.$valueOf (this.wrapAlignment).hashCode ();
+hash += m++ * this.charHeight;
+hash += m++ * this.charWidth;
+hash += m++ * this.fontSize;
+hash += m++ * this.fontStyle;
+hash += m++ * this.idWidth;
+hash += String.valueOf (this.fontName).hashCode ();
+return hash;
+});
+Clazz.defineMethod (c$, "isUpperCasebold",
+function () {
+return this.upperCasebold;
+});
+Clazz.overrideMethod (c$, "setUpperCasebold",
+function (upperCasebold) {
+this.upperCasebold = upperCasebold;
+}, "~B");
+Clazz.defineMethod (c$, "getAbovePIDThreshold",
+function () {
+return this.abovePIDThreshold;
+});
+Clazz.defineMethod (c$, "getCharHeight",
+function () {
+return this.charHeight;
+});
+Clazz.defineMethod (c$, "getCharWidth",
+function () {
+return this.charWidth;
+});
+Clazz.defineMethod (c$, "getColourAppliesToAllGroups",
+function () {
+return this.colourAppliesToAllGroups;
+});
+Clazz.defineMethod (c$, "getColourText",
+function () {
+return this.showColourText;
+});
+Clazz.defineMethod (c$, "getConservationSelected",
+function () {
+return this.conservationColourSelected;
+});
+Clazz.defineMethod (c$, "getIncrement",
+function () {
+return this.increment;
+});
+Clazz.defineMethod (c$, "getScaleAboveWrapped",
+function () {
+return this.scaleAboveWrapped;
+});
+Clazz.defineMethod (c$, "getScaleLeftWrapped",
+function () {
+return this.scaleLeftWrapped;
+});
+Clazz.defineMethod (c$, "getScaleRightWrapped",
+function () {
+return this.scaleRightWrapped;
+});
+Clazz.defineMethod (c$, "getShowBoxes",
+function () {
+return this.showBoxes;
+});
+Clazz.defineMethod (c$, "getShowHiddenMarkers",
+function () {
+return this.showHiddenMarkers;
+});
+Clazz.defineMethod (c$, "getShowJVSuffix",
+function () {
+return this.showJVSuffix;
+});
+Clazz.defineMethod (c$, "getShowText",
+function () {
+return this.showText;
+});
+Clazz.defineMethod (c$, "getShowUnconserved",
+function () {
+return this.showUnconserved;
+});
+Clazz.defineMethod (c$, "getTextColour",
+function () {
+return this.textColour;
+});
+Clazz.defineMethod (c$, "getTextColour2",
+function () {
+return this.textColour2;
+});
+Clazz.defineMethod (c$, "getThreshold",
+function () {
+return this.threshold;
+});
+Clazz.defineMethod (c$, "getThresholdTextColour",
+function () {
+return this.thresholdTextColour;
+});
+Clazz.defineMethod (c$, "getWrapAlignment",
+function () {
+return this.wrapAlignment;
+});
+Clazz.defineMethod (c$, "getWrappedWidth",
+function () {
+return this.wrappedWidth;
+});
+Clazz.defineMethod (c$, "isColourByReferenceSeq",
+function () {
+return this.colourByReferenceSeq;
+});
+Clazz.defineMethod (c$, "isConservationColourSelected",
+function () {
+return this.conservationColourSelected;
+});
+Clazz.defineMethod (c$, "isDisplayReferenceSeq",
+function () {
+return this.displayReferenceSeq;
+});
+Clazz.defineMethod (c$, "isRenderGaps",
+function () {
+return this.renderGaps;
+});
+Clazz.defineMethod (c$, "isRightAlignIds",
+function () {
+return this.rightAlignIds;
+});
+Clazz.defineMethod (c$, "isSeqNameItalics",
+function () {
+return this.seqNameItalics;
+});
+Clazz.defineMethod (c$, "isShowAnnotation",
+function () {
+return this.showAnnotation;
+});
+Clazz.defineMethod (c$, "isShowColourText",
+function () {
+return this.showColourText;
+});
+Clazz.defineMethod (c$, "isShowSequenceFeaturesHeight",
+function () {
+return this.showSeqFeaturesHeight;
+});
+Clazz.defineMethod (c$, "isShowSequenceFeatures",
+function () {
+return this.showSequenceFeatures;
+});
+Clazz.overrideMethod (c$, "setAbovePIDThreshold",
+function (b) {
+this.abovePIDThreshold = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setCharHeight",
+function (h) {
+this.charHeight = h;
+}, "~N");
+Clazz.overrideMethod (c$, "setCharWidth",
+function (w) {
+this.charWidth = w;
+}, "~N");
+Clazz.overrideMethod (c$, "setColourAppliesToAllGroups",
+function (b) {
+this.colourAppliesToAllGroups = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setColourByReferenceSeq",
+function (colourByReferenceSeq) {
+this.colourByReferenceSeq = colourByReferenceSeq;
+}, "~B");
+Clazz.overrideMethod (c$, "setColourText",
+function (state) {
+this.showColourText = state;
+}, "~B");
+Clazz.overrideMethod (c$, "setConservationColourSelected",
+function (conservationColourSelected) {
+this.conservationColourSelected = conservationColourSelected;
+}, "~B");
+Clazz.overrideMethod (c$, "setConservationSelected",
+function (b) {
+this.conservationColourSelected = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setDisplayReferenceSeq",
+function (displayReferenceSeq) {
+this.displayReferenceSeq = displayReferenceSeq;
+}, "~B");
+Clazz.overrideMethod (c$, "setIncrement",
+function (inc) {
+this.increment = inc;
+}, "~N");
+Clazz.overrideMethod (c$, "setRenderGaps",
+function (state) {
+this.renderGaps = state;
+}, "~B");
+Clazz.overrideMethod (c$, "setRightAlignIds",
+function (rightAlignIds) {
+this.rightAlignIds = rightAlignIds;
+}, "~B");
+Clazz.overrideMethod (c$, "setScaleAboveWrapped",
+function (b) {
+this.scaleAboveWrapped = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setScaleLeftWrapped",
+function (b) {
+this.scaleLeftWrapped = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setScaleRightWrapped",
+function (b) {
+this.scaleRightWrapped = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setSeqNameItalics",
+function (italics) {
+this.seqNameItalics = italics;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowAnnotation",
+function (b) {
+this.showAnnotation = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowBoxes",
+function (state) {
+this.showBoxes = state;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowColourText",
+function (showColourText) {
+this.showColourText = showColourText;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowHiddenMarkers",
+function (show) {
+this.showHiddenMarkers = show;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowJVSuffix",
+function (b) {
+this.showJVSuffix = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowSequenceFeaturesHeight",
+function (selected) {
+this.showSeqFeaturesHeight = selected;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowSequenceFeatures",
+function (b) {
+this.showSequenceFeatures = b;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowText",
+function (state) {
+this.showText = state;
+}, "~B");
+Clazz.overrideMethod (c$, "setShowUnconserved",
+function (showunconserved) {
+this.showUnconserved = showunconserved;
+}, "~B");
+Clazz.overrideMethod (c$, "setTextColour",
+function (textColour) {
+this.textColour = textColour;
+}, "java.awt.Color");
+Clazz.overrideMethod (c$, "setTextColour2",
+function (textColour2) {
+this.textColour2 = textColour2;
+}, "java.awt.Color");
+Clazz.overrideMethod (c$, "setThreshold",
+function (thresh) {
+this.threshold = thresh;
+}, "~N");
+Clazz.overrideMethod (c$, "setThresholdTextColour",
+function (thresholdTextColour) {
+this.thresholdTextColour = thresholdTextColour;
+}, "~N");
+Clazz.overrideMethod (c$, "setWrapAlignment",
+function (state) {
+this.wrapAlignment = state;
+}, "~B");
+Clazz.overrideMethod (c$, "setWrappedWidth",
+function (w) {
+this.wrappedWidth = w;
+}, "~N");
+Clazz.overrideMethod (c$, "sameStyle",
+function (that) {
+return this.equals (that);
+}, "jalview.api.ViewStyleI");
+Clazz.defineMethod (c$, "getFontName",
+function () {
+return this.fontName;
+});
+Clazz.defineMethod (c$, "getFontSize",
+function () {
+return this.fontSize;
+});
+Clazz.defineMethod (c$, "getFontStyle",
+function () {
+return this.fontStyle;
+});
+Clazz.overrideMethod (c$, "setFontName",
+function (name) {
+this.fontName = name;
+}, "~S");
+Clazz.overrideMethod (c$, "setFontSize",
+function (size) {
+this.fontSize = size;
+}, "~N");
+Clazz.overrideMethod (c$, "setFontStyle",
+function (style) {
+this.fontStyle = style;
+}, "~N");
+Clazz.defineMethod (c$, "getIdWidth",
+function () {
+return this.idWidth;
+});
+Clazz.overrideMethod (c$, "setIdWidth",
+function (idWidth) {
+this.idWidth = idWidth;
+}, "~N");
+Clazz.defineMethod (c$, "isCentreColumnLabels",
+function () {
+return this.centreColumnLabels;
+});
+Clazz.overrideMethod (c$, "setCentreColumnLabels",
+function (centreColumnLabels) {
+this.centreColumnLabels = centreColumnLabels;
+}, "~B");
+Clazz.defineMethod (c$, "isShowDBRefs",
+function () {
+return this.showdbrefs;
+});
+Clazz.overrideMethod (c$, "setShowDBRefs",
+function (showdbrefs) {
+this.showdbrefs = showdbrefs;
+}, "~B");
+Clazz.defineMethod (c$, "isShowNPFeats",
+function () {
+return this.shownpfeats;
+});
+Clazz.overrideMethod (c$, "setShowNPFeats",
+function (shownpfeats) {
+this.shownpfeats = shownpfeats;
+}, "~B");
+Clazz.defineMethod (c$, "isScaleProteinAsCdna",
+function () {
+return this.scaleProteinAsCdna;
+});
+Clazz.overrideMethod (c$, "setScaleProteinAsCdna",
+function (b) {
+this.scaleProteinAsCdna = b;
+}, "~B");
+});
diff --git a/bin/jalview/workers/AlignCalcManager.js b/bin/jalview/workers/AlignCalcManager.js
index 7f25a9c..39105f8 100644
--- a/bin/jalview/workers/AlignCalcManager.js
+++ b/bin/jalview/workers/AlignCalcManager.js
@@ -1,192 +1,192 @@
-Clazz.declarePackage ("jalview.workers");
-Clazz.load (["jalview.api.AlignCalcManagerI", "java.util.ArrayList", "$.Collections", "$.HashSet", "$.Hashtable"], "jalview.workers.AlignCalcManager", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.restartable = null;
-this.blackList = null;
-this.inProgress = null;
-this.updating = null;
-this.canUpdate = null;
-Clazz.instantialize (this, arguments);
-}, jalview.workers, "AlignCalcManager", null, jalview.api.AlignCalcManagerI);
-Clazz.prepareFields (c$, function () {
-this.restartable = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
-this.blackList = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
-this.inProgress = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
-this.updating = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
-this.canUpdate = new java.util.HashSet ();
-});
-Clazz.overrideMethod (c$, "notifyStart",
-function (worker) {
-{
-var upd = this.updating.get (worker.getClass ());
-if (upd == null) {
-this.updating.put (worker.getClass (), upd = java.util.Collections.synchronizedList ( new java.util.ArrayList ()));
-}{
-upd.add (worker);
-}}}, "jalview.api.AlignCalcWorkerI");
-Clazz.overrideMethod (c$, "alreadyDoing",
-function (worker) {
-{
-return this.inProgress.containsKey (worker.getClass ());
-}}, "jalview.api.AlignCalcWorkerI");
-Clazz.overrideMethod (c$, "isPending",
-function (workingClass) {
-var upd;
-{
-upd = this.updating.get (workingClass.getClass ());
-if (upd == null) {
-return false;
-}{
-if (upd.size () > 1) {
-return true;
-}}return false;
-}}, "jalview.api.AlignCalcWorkerI");
-Clazz.defineMethod (c$, "numberLive",
-function (worker) {
-{
-var upd = this.updating.get (worker.getClass ());
-if (upd == null) {
-return 0;
-};return upd.size ();
-}}, "jalview.api.AlignCalcWorkerI");
-Clazz.overrideMethod (c$, "notifyWorking",
-function (worker) {
-{
-if (this.inProgress.get (worker.getClass ()) != null) {
-if (false) {
-System.err.println ("Warning: Multiple workers are running of type " + worker.getClass ());
-}return false;
-}this.inProgress.put (worker.getClass (), worker);
-}return true;
-}, "jalview.api.AlignCalcWorkerI");
-Clazz.overrideMethod (c$, "workerComplete",
-function (worker) {
-{
-this.inProgress.remove (worker.getClass ());
-var upd = this.updating.get (worker.getClass ());
-if (upd != null) {
-{
-upd.remove (worker);
-}this.canUpdate.add (worker);
-}}}, "jalview.api.AlignCalcWorkerI");
-Clazz.overrideMethod (c$, "workerCannotRun",
-function (worker) {
-{
-this.blackList.add (worker.getClass ());
-}}, "jalview.api.AlignCalcWorkerI");
-Clazz.defineMethod (c$, "isBlackListed",
-function (workerType) {
-{
-return this.blackList.contains (workerType);
-}}, "Class");
-Clazz.overrideMethod (c$, "startWorker",
-function (worker) {
-var workerAsThread = worker;
-if (workerAsThread.isAlive ()) {
-workerAsThread.interrupt ();
-worker = worker.getNewWorker ();
-}worker.setName (worker.getClass ().getName ());
-worker.start ();
-}, "jalview.api.AlignCalcWorkerI");
-Clazz.defineMethod (c$, "isWorking",
-function (worker) {
-{
-return worker != null && this.inProgress.get (worker.getClass ()) === worker;
-}}, "jalview.api.AlignCalcWorkerI");
-Clazz.defineMethod (c$, "isWorking",
-function () {
-{
-return this.inProgress.size () > 0;
-}});
-Clazz.overrideMethod (c$, "registerWorker",
-function (worker) {
-{
-if (!this.restartable.contains (worker)) {
-this.restartable.add (worker);
-}this.startWorker (worker);
-}}, "jalview.api.AlignCalcWorkerI");
-Clazz.overrideMethod (c$, "restartWorkers",
-function () {
-{
-for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
-this.startWorker (worker);
-}
-}});
-Clazz.overrideMethod (c$, "workingInvolvedWith",
-function (alignmentAnnotation) {
-{
-for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
-if (worker.involves (alignmentAnnotation)) {
-return true;
-}}
-}{
-for (var workers, $workers = this.updating.values ().iterator (); $workers.hasNext () && ((workers = $workers.next ()) || true);) {
-for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
-if (worker.involves (alignmentAnnotation)) {
-return true;
-}}
-}
-}return false;
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.overrideMethod (c$, "updateAnnotationFor",
-function (workerClass) {
-var workers;
-{
-workers = this.canUpdate.toArray ( new Array (0));
-}for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
-if (workerClass.equals (worker.getClass ())) {
-worker.updateAnnotation ();
-}}
-}, "Class");
-Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass",
-function (workerClass) {
-var workingClass = new java.util.ArrayList ();
-var workers;
-{
-workers = this.canUpdate.toArray ( new Array (this.canUpdate.size ()));
-}for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
-if (workerClass.equals (worker.getClass ())) {
-workingClass.add (worker);
-}}
-return (workingClass.size () == 0) ? null : workingClass;
-}, "Class");
-Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass",
-function (workerClass) {
-var workers = this.getRegisteredWorkersOfClass (workerClass);
-if (workers == null) {
-return false;
-}for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
-if (!this.isPending (worker)) {
-this.startWorker (worker);
-} else {
-System.err.println ("Pending exists for " + workerClass);
-}}
-return true;
-}, "Class");
-Clazz.overrideMethod (c$, "workerMayRun",
-function (worker) {
-{
-if (this.blackList.contains (worker.getClass ())) {
-this.blackList.remove (worker.getClass ());
-}}}, "jalview.api.AlignCalcWorkerI");
-Clazz.overrideMethod (c$, "removeRegisteredWorkersOfClass",
-function (typeToRemove) {
-var workers = this.getRegisteredWorkersOfClass (typeToRemove);
-var removable = new java.util.ArrayList ();
-var toremovannot = new java.util.HashSet ();
-{
-for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
-if (typeToRemove.equals (worker.getClass ())) {
-removable.add (worker);
-toremovannot.add (worker);
-}}
-this.restartable.removeAll (removable);
-}{
-for (var worker, $worker = this.canUpdate.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
-if (typeToRemove.equals (worker.getClass ())) {
-removable.add (worker);
-toremovannot.add (worker);
-}}
-this.canUpdate.removeAll (removable);
-}}, "Class");
-});
+Clazz.declarePackage ("jalview.workers");
+Clazz.load (["jalview.api.AlignCalcManagerI", "java.util.ArrayList", "$.Collections", "$.HashSet", "$.Hashtable"], "jalview.workers.AlignCalcManager", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.restartable = null;
+this.blackList = null;
+this.inProgress = null;
+this.updating = null;
+this.canUpdate = null;
+Clazz.instantialize (this, arguments);
+}, jalview.workers, "AlignCalcManager", null, jalview.api.AlignCalcManagerI);
+Clazz.prepareFields (c$, function () {
+this.restartable = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+this.blackList = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+this.inProgress = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
+this.updating = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
+this.canUpdate = new java.util.HashSet ();
+});
+Clazz.overrideMethod (c$, "notifyStart",
+function (worker) {
+{
+var upd = this.updating.get (worker.getClass ());
+if (upd == null) {
+this.updating.put (worker.getClass (), upd = java.util.Collections.synchronizedList ( new java.util.ArrayList ()));
+}{
+upd.add (worker);
+}}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "alreadyDoing",
+function (worker) {
+{
+return this.inProgress.containsKey (worker.getClass ());
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "isPending",
+function (workingClass) {
+var upd;
+{
+upd = this.updating.get (workingClass.getClass ());
+if (upd == null) {
+return false;
+}{
+if (upd.size () > 1) {
+return true;
+}}return false;
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "numberLive",
+function (worker) {
+{
+var upd = this.updating.get (worker.getClass ());
+if (upd == null) {
+return 0;
+};return upd.size ();
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "notifyWorking",
+function (worker) {
+{
+if (this.inProgress.get (worker.getClass ()) != null) {
+if (false) {
+System.err.println ("Warning: Multiple workers are running of type " + worker.getClass ());
+}return false;
+}this.inProgress.put (worker.getClass (), worker);
+}return true;
+}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "workerComplete",
+function (worker) {
+{
+this.inProgress.remove (worker.getClass ());
+var upd = this.updating.get (worker.getClass ());
+if (upd != null) {
+{
+upd.remove (worker);
+}this.canUpdate.add (worker);
+}}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "workerCannotRun",
+function (worker) {
+{
+this.blackList.add (worker.getClass ());
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "isBlackListed",
+function (workerType) {
+{
+return this.blackList.contains (workerType);
+}}, "Class");
+Clazz.overrideMethod (c$, "startWorker",
+function (worker) {
+var workerAsThread = worker;
+if (workerAsThread.isAlive ()) {
+workerAsThread.interrupt ();
+worker = worker.getNewWorker ();
+}worker.setName (worker.getClass ().getName ());
+worker.start ();
+}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "isWorking",
+function (worker) {
+{
+return worker != null && this.inProgress.get (worker.getClass ()) === worker;
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "isWorking",
+function () {
+{
+return this.inProgress.size () > 0;
+}});
+Clazz.overrideMethod (c$, "registerWorker",
+function (worker) {
+{
+if (!this.restartable.contains (worker)) {
+this.restartable.add (worker);
+}this.startWorker (worker);
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "restartWorkers",
+function () {
+{
+for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+this.startWorker (worker);
+}
+}});
+Clazz.overrideMethod (c$, "workingInvolvedWith",
+function (alignmentAnnotation) {
+{
+for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (worker.involves (alignmentAnnotation)) {
+return true;
+}}
+}{
+for (var workers, $workers = this.updating.values ().iterator (); $workers.hasNext () && ((workers = $workers.next ()) || true);) {
+for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (worker.involves (alignmentAnnotation)) {
+return true;
+}}
+}
+}return false;
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "updateAnnotationFor",
+function (workerClass) {
+var workers;
+{
+workers = this.canUpdate.toArray ( new Array (0));
+}for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
+if (workerClass.equals (worker.getClass ())) {
+worker.updateAnnotation ();
+}}
+}, "Class");
+Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass",
+function (workerClass) {
+var workingClass = new java.util.ArrayList ();
+var workers;
+{
+workers = this.canUpdate.toArray ( new Array (this.canUpdate.size ()));
+}for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
+if (workerClass.equals (worker.getClass ())) {
+workingClass.add (worker);
+}}
+return (workingClass.size () == 0) ? null : workingClass;
+}, "Class");
+Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass",
+function (workerClass) {
+var workers = this.getRegisteredWorkersOfClass (workerClass);
+if (workers == null) {
+return false;
+}for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (!this.isPending (worker)) {
+this.startWorker (worker);
+} else {
+System.err.println ("Pending exists for " + workerClass);
+}}
+return true;
+}, "Class");
+Clazz.overrideMethod (c$, "workerMayRun",
+function (worker) {
+{
+if (this.blackList.contains (worker.getClass ())) {
+this.blackList.remove (worker.getClass ());
+}}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "removeRegisteredWorkersOfClass",
+function (typeToRemove) {
+var workers = this.getRegisteredWorkersOfClass (typeToRemove);
+var removable = new java.util.ArrayList ();
+var toremovannot = new java.util.HashSet ();
+{
+for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (typeToRemove.equals (worker.getClass ())) {
+removable.add (worker);
+toremovannot.add (worker);
+}}
+this.restartable.removeAll (removable);
+}{
+for (var worker, $worker = this.canUpdate.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (typeToRemove.equals (worker.getClass ())) {
+removable.add (worker);
+toremovannot.add (worker);
+}}
+this.canUpdate.removeAll (removable);
+}}, "Class");
+});
diff --git a/bin/jalview/workers/AlignCalcWorker.js b/bin/jalview/workers/AlignCalcWorker.js
index 43b690b..6636e6d 100644
--- a/bin/jalview/workers/AlignCalcWorker.js
+++ b/bin/jalview/workers/AlignCalcWorker.js
@@ -1,54 +1,54 @@
-Clazz.declarePackage ("jalview.workers");
-Clazz.load (["jalview.api.AlignCalcWorkerI", "swingjs.JSThread"], "jalview.workers.AlignCalcWorker", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.iFirst = 0;
-this.iLast = 0;
-this.nPer = 2;
-this.started = 0;
-this.alignment = null;
-this.aWidth = 0;
-this.alignViewport = null;
-this.calcMan = null;
-this.ap = null;
-this.ourAnnots = null;
-Clazz.instantialize (this, arguments);
-}, jalview.workers, "AlignCalcWorker", swingjs.JSThread, jalview.api.AlignCalcWorkerI);
-Clazz.makeConstructor (c$,
-function (alignViewport, alignPanel) {
-Clazz.superConstructor (this, jalview.workers.AlignCalcWorker, [null, "AlignCalcWorker"]);
-this.alignViewport = alignViewport;
-this.calcMan = alignViewport.getCalcManager ();
-this.ap = alignPanel;
-}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
-Clazz.defineMethod (c$, "abortAndDestroy",
-function () {
-if (this.calcMan != null) {
-this.calcMan.workerComplete (this);
-}this.alignViewport = null;
-this.calcMan = null;
-this.ap = null;
-});
-Clazz.overrideMethod (c$, "involves",
-function (i) {
-return this.ourAnnots != null && this.ourAnnots.contains (i);
-}, "jalview.datamodel.AlignmentAnnotation");
-Clazz.overrideMethod (c$, "removeOurAnnotation",
-function () {
-if (this.ourAnnots != null && this.alignViewport != null) {
-var alignment = this.alignViewport.getAlignment ();
-{
-for (var aa, $aa = this.ourAnnots.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
-alignment.deleteAnnotation (aa, true);
-}
-}}});
-Clazz.defineMethod (c$, "notifyDone",
-function () {
-if (this.ap != null) {
-this.ap.paintAlignment (true);
-}this.calcMan.workerComplete (this);
-});
-Clazz.defineStatics (c$,
-"LOOP_STANDBY", 3,
-"LOOP_CALCULATE", 4,
-"MS_MAX", 500);
-});
+Clazz.declarePackage ("jalview.workers");
+Clazz.load (["jalview.api.AlignCalcWorkerI", "swingjs.JSThread"], "jalview.workers.AlignCalcWorker", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.iFirst = 0;
+this.iLast = 0;
+this.nPer = 2;
+this.started = 0;
+this.alignment = null;
+this.aWidth = 0;
+this.alignViewport = null;
+this.calcMan = null;
+this.ap = null;
+this.ourAnnots = null;
+Clazz.instantialize (this, arguments);
+}, jalview.workers, "AlignCalcWorker", swingjs.JSThread, jalview.api.AlignCalcWorkerI);
+Clazz.makeConstructor (c$,
+function (alignViewport, alignPanel) {
+Clazz.superConstructor (this, jalview.workers.AlignCalcWorker, [null, "AlignCalcWorker"]);
+this.alignViewport = alignViewport;
+this.calcMan = alignViewport.getCalcManager ();
+this.ap = alignPanel;
+}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
+Clazz.defineMethod (c$, "abortAndDestroy",
+function () {
+if (this.calcMan != null) {
+this.calcMan.workerComplete (this);
+}this.alignViewport = null;
+this.calcMan = null;
+this.ap = null;
+});
+Clazz.overrideMethod (c$, "involves",
+function (i) {
+return this.ourAnnots != null && this.ourAnnots.contains (i);
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "removeOurAnnotation",
+function () {
+if (this.ourAnnots != null && this.alignViewport != null) {
+var alignment = this.alignViewport.getAlignment ();
+{
+for (var aa, $aa = this.ourAnnots.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {
+alignment.deleteAnnotation (aa, true);
+}
+}}});
+Clazz.defineMethod (c$, "notifyDone",
+function () {
+if (this.ap != null) {
+this.ap.paintAlignment (true);
+}this.calcMan.workerComplete (this);
+});
+Clazz.defineStatics (c$,
+"LOOP_STANDBY", 3,
+"LOOP_CALCULATE", 4,
+"MS_MAX", 500);
+});
diff --git a/bin/jalview/workers/ComplementConsensusThread.js b/bin/jalview/workers/ComplementConsensusThread.js
index 641c3ba..17ece7f 100644
--- a/bin/jalview/workers/ComplementConsensusThread.js
+++ b/bin/jalview/workers/ComplementConsensusThread.js
@@ -1,46 +1,46 @@
-Clazz.declarePackage ("jalview.workers");
-Clazz.load (["jalview.workers.ConsensusThread"], "jalview.workers.ComplementConsensusThread", ["jalview.analysis.AAFrequency"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.mappings = null;
-Clazz.instantialize (this, arguments);
-}, jalview.workers, "ComplementConsensusThread", jalview.workers.ConsensusThread);
-Clazz.overrideMethod (c$, "getNewWorker",
-function () {
-return new jalview.workers.ComplementConsensusThread (this.alignViewport, this.ap);
-});
-Clazz.overrideMethod (c$, "getConsensusAnnotation",
-function () {
-return this.alignViewport.getComplementConsensusAnnotation ();
-});
-Clazz.overrideMethod (c$, "getViewportConsensus",
-function () {
-return this.alignViewport.getComplementConsensusHash ();
-});
-Clazz.defineMethod (c$, "initializeCalc",
-function () {
-this.mappings = this.alignment.getCodonFrames ();
-return (this.mappings != null && !this.mappings.isEmpty () && Clazz.superCall (this, jalview.workers.ComplementConsensusThread, "initializeCalc", []));
-});
-Clazz.overrideMethod (c$, "computeConsensus",
-function () {
-for (var i = 0; i < 3; i++) {
-try {
-jalview.analysis.AAFrequency.calculateCdna (this.alignment, this.mappings, this.hconsensus, this.iFirst, this.iLast);
-break;
-} catch (e) {
-if (Clazz.exceptionOf (e, java.util.ConcurrentModificationException)) {
-} else {
-throw e;
-}
-}
-}
-});
-Clazz.overrideMethod (c$, "finalizeCalc",
-function () {
-this.alignViewport.setComplementConsensusHash (this.hconsensus);
-});
-Clazz.overrideMethod (c$, "deriveConsensus",
-function (consensusAnnotation, consensusData) {
-jalview.analysis.AAFrequency.completeCdnaConsensus (consensusAnnotation, consensusData, this.alignViewport.isShowSequenceLogo (), this.getSequences ().length);
-}, "jalview.datamodel.AlignmentAnnotation,~A");
-});
+Clazz.declarePackage ("jalview.workers");
+Clazz.load (["jalview.workers.ConsensusThread"], "jalview.workers.ComplementConsensusThread", ["jalview.analysis.AAFrequency"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.mappings = null;
+Clazz.instantialize (this, arguments);
+}, jalview.workers, "ComplementConsensusThread", jalview.workers.ConsensusThread);
+Clazz.overrideMethod (c$, "getNewWorker",
+function () {
+return new jalview.workers.ComplementConsensusThread (this.alignViewport, this.ap);
+});
+Clazz.overrideMethod (c$, "getConsensusAnnotation",
+function () {
+return this.alignViewport.getComplementConsensusAnnotation ();
+});
+Clazz.overrideMethod (c$, "getViewportConsensus",
+function () {
+return this.alignViewport.getComplementConsensusHash ();
+});
+Clazz.defineMethod (c$, "initializeCalc",
+function () {
+this.mappings = this.alignment.getCodonFrames ();
+return (this.mappings != null && !this.mappings.isEmpty () && Clazz.superCall (this, jalview.workers.ComplementConsensusThread, "initializeCalc", []));
+});
+Clazz.overrideMethod (c$, "computeConsensus",
+function () {
+for (var i = 0; i < 3; i++) {
+try {
+jalview.analysis.AAFrequency.calculateCdna (this.alignment, this.mappings, this.hconsensus, this.iFirst, this.iLast);
+break;
+} catch (e) {
+if (Clazz.exceptionOf (e, java.util.ConcurrentModificationException)) {
+} else {
+throw e;
+}
+}
+}
+});
+Clazz.overrideMethod (c$, "finalizeCalc",
+function () {
+this.alignViewport.setComplementConsensusHash (this.hconsensus);
+});
+Clazz.overrideMethod (c$, "deriveConsensus",
+function (consensusAnnotation, consensusData) {
+jalview.analysis.AAFrequency.completeCdnaConsensus (consensusAnnotation, consensusData, this.alignViewport.isShowSequenceLogo (), this.getSequences ().length);
+}, "jalview.datamodel.AlignmentAnnotation,~A");
+});
diff --git a/bin/jalview/workers/ConsensusThread.js b/bin/jalview/workers/ConsensusThread.js
index 3f62035..089a18e 100644
--- a/bin/jalview/workers/ConsensusThread.js
+++ b/bin/jalview/workers/ConsensusThread.js
@@ -1,149 +1,149 @@
-Clazz.declarePackage ("jalview.workers");
-Clazz.load (["jalview.api.AlignCalcWorkerI", "jalview.workers.AlignCalcWorker"], "jalview.workers.ConsensusThread", ["jalview.analysis.AAFrequency"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.hconsensus = null;
-this.aseqs = null;
-Clazz.instantialize (this, arguments);
-}, jalview.workers, "ConsensusThread", jalview.workers.AlignCalcWorker, jalview.api.AlignCalcWorkerI);
-Clazz.overrideMethod (c$, "getNewWorker",
-function () {
-return new jalview.workers.ConsensusThread (this.alignViewport, this.ap);
-});
-Clazz.overrideMethod (c$, "run1",
-function (state) {
-while (!Thread.interrupted ()) {
-if (this.alignViewport.isClosed ()) {
-this.abortAndDestroy ();
-return;
-}try {
-switch (state) {
-case 0:
-if (this.calcMan.isPending (this)) return;
-this.calcMan.notifyStart (this);
-var consensus = this.getConsensusAnnotation ();
-if (consensus == null || this.calcMan.isPending (this)) {
-this.calcMan.workerComplete (this);
-return;
-}state = 3;
-break;
-case 3:
-while (!this.calcMan.notifyWorking (this)) {
-if (this.ap != null) {
-this.ap.paintAlignment (false);
-}try {
-if (this.sleepAndReturn (200, state)) return;
-} catch (e) {
-if (Clazz.exceptionOf (e, InterruptedException)) {
-state = 2;
-break;
-} else {
-throw e;
-}
-}
-}
-if (this.alignViewport.isClosed ()) {
-this.abortAndDestroy ();
-state = 2;
-break;
-}this.alignment = this.alignViewport.getAlignment ();
-this.aWidth = -1;
-if (this.alignment == null || (this.aWidth = this.alignment.getWidth ()) < 0) {
-state = 2;
-}this.eraseConsensus (this.aWidth);
-state = (this.initializeCalc () ? 4 : 2);
-break;
-case 4:
-this.iFirst = this.iLast;
-this.iLast = Math.min (this.iLast + this.nPer, this.aWidth);
-if (this.iLast == this.iFirst) {
-state = 2;
-} else {
-this.computeConsensus ();
-if (this.sleepAndReturn (0, state)) return;
-}break;
-case 2:
-this.finalizeCalc ();
-this.updateAlignment ();
-this.notifyDone ();
-return;
-}
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, OutOfMemoryError)) {
-var error = e$$;
-{
-this.calcMan.workerCannotRun (this);
-this.ap.raiseOOMWarning ("calculating consensus", error);
-}
-} else {
-var e = e$$;
-{
-System.out.println ("Error in ConsensusThread: " + e);
-e.printStackTrace ();
-this.calcMan.workerComplete (this);
-}
-}
-}
-}
-}, "~N");
-Clazz.defineMethod (c$, "initializeCalc",
-function () {
-this.iLast = 0;
-this.hconsensus = new Array (this.aWidth);
-this.aseqs = this.getSequences ();
-return true;
-});
-Clazz.defineMethod (c$, "computeConsensus",
-function () {
-this.started = System.currentTimeMillis ();
-jalview.analysis.AAFrequency.calculate (this.aseqs, this.iFirst, this.iLast, this.hconsensus, true);
-if (System.currentTimeMillis () - this.started < 500) this.nPer *= 2;
-});
-Clazz.defineMethod (c$, "finalizeCalc",
-function () {
-this.alignViewport.setSequenceConsensusHash (this.hconsensus);
-});
-Clazz.defineMethod (c$, "updateAlignment",
-function () {
-this.setColourSchemeConsensus (this.hconsensus);
-this.updateResultAnnotation (true);
-});
-Clazz.defineMethod (c$, "eraseConsensus",
-function (aWidth) {
-var consensus = this.getConsensusAnnotation ();
-consensus.annotations = new Array (aWidth);
-}, "~N");
-Clazz.defineMethod (c$, "getSequences",
-function () {
-return this.alignViewport.getAlignment ().getSequencesArray ();
-});
-Clazz.defineMethod (c$, "setColourSchemeConsensus",
-function (hconsensus) {
-var globalColourScheme = this.alignViewport.getGlobalColourScheme ();
-if (globalColourScheme != null) {
-globalColourScheme.setConsensus (hconsensus);
-}}, "~A");
-Clazz.defineMethod (c$, "getConsensusAnnotation",
-function () {
-return this.alignViewport.getAlignmentConsensusAnnotation ();
-});
-Clazz.overrideMethod (c$, "updateAnnotation",
-function () {
-this.updateResultAnnotation (false);
-});
-Clazz.defineMethod (c$, "updateResultAnnotation",
-function (immediate) {
-var consensus = this.getConsensusAnnotation ();
-var hconsensus = this.getViewportConsensus ();
-if (immediate || !this.calcMan.isWorking (this) && consensus != null && hconsensus != null) {
-this.deriveConsensus (consensus, hconsensus);
-}}, "~B");
-Clazz.defineMethod (c$, "deriveConsensus",
-function (consensusAnnotation, consensusData) {
-var nseq = this.getSequences ().length;
-jalview.analysis.AAFrequency.completeConsensus (consensusAnnotation, consensusData, 0, consensusData.length, this.alignViewport.isIgnoreGapsConsensus (), this.alignViewport.isShowSequenceLogo (), nseq);
-}, "jalview.datamodel.AlignmentAnnotation,~A");
-Clazz.defineMethod (c$, "getViewportConsensus",
-function () {
-return this.alignViewport.getSequenceConsensusHash ();
-});
-});
+Clazz.declarePackage ("jalview.workers");
+Clazz.load (["jalview.api.AlignCalcWorkerI", "jalview.workers.AlignCalcWorker"], "jalview.workers.ConsensusThread", ["jalview.analysis.AAFrequency"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.hconsensus = null;
+this.aseqs = null;
+Clazz.instantialize (this, arguments);
+}, jalview.workers, "ConsensusThread", jalview.workers.AlignCalcWorker, jalview.api.AlignCalcWorkerI);
+Clazz.overrideMethod (c$, "getNewWorker",
+function () {
+return new jalview.workers.ConsensusThread (this.alignViewport, this.ap);
+});
+Clazz.overrideMethod (c$, "run1",
+function (state) {
+while (!Thread.interrupted ()) {
+if (this.alignViewport.isClosed ()) {
+this.abortAndDestroy ();
+return;
+}try {
+switch (state) {
+case 0:
+if (this.calcMan.isPending (this)) return;
+this.calcMan.notifyStart (this);
+var consensus = this.getConsensusAnnotation ();
+if (consensus == null || this.calcMan.isPending (this)) {
+this.calcMan.workerComplete (this);
+return;
+}state = 3;
+break;
+case 3:
+while (!this.calcMan.notifyWorking (this)) {
+if (this.ap != null) {
+this.ap.paintAlignment (false);
+}try {
+if (this.sleepAndReturn (200, state)) return;
+} catch (e) {
+if (Clazz.exceptionOf (e, InterruptedException)) {
+state = 2;
+break;
+} else {
+throw e;
+}
+}
+}
+if (this.alignViewport.isClosed ()) {
+this.abortAndDestroy ();
+state = 2;
+break;
+}this.alignment = this.alignViewport.getAlignment ();
+this.aWidth = -1;
+if (this.alignment == null || (this.aWidth = this.alignment.getWidth ()) < 0) {
+state = 2;
+}this.eraseConsensus (this.aWidth);
+state = (this.initializeCalc () ? 4 : 2);
+break;
+case 4:
+this.iFirst = this.iLast;
+this.iLast = Math.min (this.iLast + this.nPer, this.aWidth);
+if (this.iLast == this.iFirst) {
+state = 2;
+} else {
+this.computeConsensus ();
+if (this.sleepAndReturn (0, state)) return;
+}break;
+case 2:
+this.finalizeCalc ();
+this.updateAlignment ();
+this.notifyDone ();
+return;
+}
+} catch (e$$) {
+if (Clazz.exceptionOf (e$$, OutOfMemoryError)) {
+var error = e$$;
+{
+this.calcMan.workerCannotRun (this);
+this.ap.raiseOOMWarning ("calculating consensus", error);
+}
+} else {
+var e = e$$;
+{
+System.out.println ("Error in ConsensusThread: " + e);
+e.printStackTrace ();
+this.calcMan.workerComplete (this);
+}
+}
+}
+}
+}, "~N");
+Clazz.defineMethod (c$, "initializeCalc",
+function () {
+this.iLast = 0;
+this.hconsensus = new Array (this.aWidth);
+this.aseqs = this.getSequences ();
+return true;
+});
+Clazz.defineMethod (c$, "computeConsensus",
+function () {
+this.started = System.currentTimeMillis ();
+jalview.analysis.AAFrequency.calculate (this.aseqs, this.iFirst, this.iLast, this.hconsensus, true);
+if (System.currentTimeMillis () - this.started < 500) this.nPer *= 2;
+});
+Clazz.defineMethod (c$, "finalizeCalc",
+function () {
+this.alignViewport.setSequenceConsensusHash (this.hconsensus);
+});
+Clazz.defineMethod (c$, "updateAlignment",
+function () {
+this.setColourSchemeConsensus (this.hconsensus);
+this.updateResultAnnotation (true);
+});
+Clazz.defineMethod (c$, "eraseConsensus",
+function (aWidth) {
+var consensus = this.getConsensusAnnotation ();
+consensus.annotations = new Array (aWidth);
+}, "~N");
+Clazz.defineMethod (c$, "getSequences",
+function () {
+return this.alignViewport.getAlignment ().getSequencesArray ();
+});
+Clazz.defineMethod (c$, "setColourSchemeConsensus",
+function (hconsensus) {
+var globalColourScheme = this.alignViewport.getGlobalColourScheme ();
+if (globalColourScheme != null) {
+globalColourScheme.setConsensus (hconsensus);
+}}, "~A");
+Clazz.defineMethod (c$, "getConsensusAnnotation",
+function () {
+return this.alignViewport.getAlignmentConsensusAnnotation ();
+});
+Clazz.overrideMethod (c$, "updateAnnotation",
+function () {
+this.updateResultAnnotation (false);
+});
+Clazz.defineMethod (c$, "updateResultAnnotation",
+function (immediate) {
+var consensus = this.getConsensusAnnotation ();
+var hconsensus = this.getViewportConsensus ();
+if (immediate || !this.calcMan.isWorking (this) && consensus != null && hconsensus != null) {
+this.deriveConsensus (consensus, hconsensus);
+}}, "~B");
+Clazz.defineMethod (c$, "deriveConsensus",
+function (consensusAnnotation, consensusData) {
+var nseq = this.getSequences ().length;
+jalview.analysis.AAFrequency.completeConsensus (consensusAnnotation, consensusData, 0, consensusData.length, this.alignViewport.isIgnoreGapsConsensus (), this.alignViewport.isShowSequenceLogo (), nseq);
+}, "jalview.datamodel.AlignmentAnnotation,~A");
+Clazz.defineMethod (c$, "getViewportConsensus",
+function () {
+return this.alignViewport.getSequenceConsensusHash ();
+});
+});
diff --git a/bin/jalview/workers/ConservationThread.js b/bin/jalview/workers/ConservationThread.js
index dc839a9..d790876 100644
--- a/bin/jalview/workers/ConservationThread.js
+++ b/bin/jalview/workers/ConservationThread.js
@@ -1,108 +1,108 @@
-Clazz.declarePackage ("jalview.workers");
-Clazz.load (["jalview.api.AlignCalcWorkerI", "jalview.workers.AlignCalcWorker"], "jalview.workers.ConservationThread", ["jalview.analysis.Conservation", "jalview.schemes.ResidueProperties", "java.util.ArrayList"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ConsPercGaps = 25;
-this.cons = null;
-this.conservation = null;
-this.quality = null;
-Clazz.instantialize (this, arguments);
-}, jalview.workers, "ConservationThread", jalview.workers.AlignCalcWorker, jalview.api.AlignCalcWorkerI);
-Clazz.overrideMethod (c$, "getNewWorker",
-function () {
-return new jalview.workers.ConservationThread (this.alignViewport, this.ap);
-});
-Clazz.makeConstructor (c$,
-function (alignViewport, alignPanel) {
-Clazz.superConstructor (this, jalview.workers.ConservationThread, [alignViewport, alignPanel]);
-this.ConsPercGaps = alignViewport.getConsPercGaps ();
-}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
-Clazz.overrideMethod (c$, "run1",
-function (state) {
-while (!Thread.interrupted ()) {
-try {
-switch (state) {
-case 0:
-if (this.calcMan.isPending (this)) return;
-this.calcMan.notifyStart (this);
-state = 3;
-break;
-case 3:
-while (!this.calcMan.notifyWorking (this)) {
-if (this.ap != null) {
-this.ap.paintAlignment (false);
-}try {
-if (this.sleepAndReturn (200, state)) return;
-} catch (e) {
-if (Clazz.exceptionOf (e, InterruptedException)) {
-state = 2;
-break;
-} else {
-throw e;
-}
-}
-}
-if (this.alignViewport.isClosed ()) {
-this.abortAndDestroy ();
-state = 2;
-break;
-}var ourAnnot = new java.util.ArrayList ();
-this.alignment = this.alignViewport.getAlignment ();
-this.conservation = this.alignViewport.getAlignmentConservationAnnotation ();
-this.quality = this.alignViewport.getAlignmentQualityAnnot ();
-ourAnnot.add (this.conservation);
-ourAnnot.add (this.quality);
-this.ourAnnots = ourAnnot;
-this.ConsPercGaps = this.alignViewport.getConsPercGaps ();
-if (this.alignment == null || (this.aWidth = this.alignment.getWidth ()) < 0) {
-this.calcMan.workerComplete (this);
-return;
-}state = 4;
-break;
-case 4:
-this.iFirst = this.iLast;
-this.nPer = this.aWidth + 1;
-this.iLast = Math.min (this.iLast + this.nPer, this.aWidth);
-if (this.iLast == this.iFirst) {
-state = 2;
-} else {
-this.computeConsensus ();
-if (this.sleepAndReturn (0, state)) return;
-}break;
-case 2:
-this.updateResultAnnotation (true);
-this.notifyDone ();
-return;
-}
-} catch (e$$) {
-if (Clazz.exceptionOf (e$$, OutOfMemoryError)) {
-var error = e$$;
-{
-this.calcMan.workerCannotRun (this);
-this.ap.raiseOOMWarning ("calculating conservation", error);
-}
-} else {
-var e = e$$;
-{
-System.out.println ("Error in ConsensusThread: " + e);
-e.printStackTrace ();
-this.calcMan.workerComplete (this);
-}
-}
-}
-}
-}, "~N");
-Clazz.defineMethod (c$, "computeConsensus",
-($fz = function () {
-this.cons = jalview.analysis.Conservation.calculateConservation ("All", jalview.schemes.ResidueProperties.propHash, 3, this.alignment.getSequences (), 0, this.aWidth - 1, false, this.ConsPercGaps, this.quality != null);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "updateResultAnnotation",
-($fz = function (b) {
-if (b || !this.calcMan.isWorking (this) && this.cons != null && this.conservation != null && this.quality != null) {
-this.alignViewport.setConservation (this.cons);
-this.cons.completeAnnotations (this.conservation, this.quality, 0, this.aWidth);
-}}, $fz.isPrivate = true, $fz), "~B");
-Clazz.overrideMethod (c$, "updateAnnotation",
-function () {
-this.updateResultAnnotation (false);
-});
-});
+Clazz.declarePackage ("jalview.workers");
+Clazz.load (["jalview.api.AlignCalcWorkerI", "jalview.workers.AlignCalcWorker"], "jalview.workers.ConservationThread", ["jalview.analysis.Conservation", "jalview.schemes.ResidueProperties", "java.util.ArrayList"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ConsPercGaps = 25;
+this.cons = null;
+this.conservation = null;
+this.quality = null;
+Clazz.instantialize (this, arguments);
+}, jalview.workers, "ConservationThread", jalview.workers.AlignCalcWorker, jalview.api.AlignCalcWorkerI);
+Clazz.overrideMethod (c$, "getNewWorker",
+function () {
+return new jalview.workers.ConservationThread (this.alignViewport, this.ap);
+});
+Clazz.makeConstructor (c$,
+function (alignViewport, alignPanel) {
+Clazz.superConstructor (this, jalview.workers.ConservationThread, [alignViewport, alignPanel]);
+this.ConsPercGaps = alignViewport.getConsPercGaps ();
+}, "jalview.api.AlignViewportI,jalview.api.AlignmentViewPanel");
+Clazz.overrideMethod (c$, "run1",
+function (state) {
+while (!Thread.interrupted ()) {
+try {
+switch (state) {
+case 0:
+if (this.calcMan.isPending (this)) return;
+this.calcMan.notifyStart (this);
+state = 3;
+break;
+case 3:
+while (!this.calcMan.notifyWorking (this)) {
+if (this.ap != null) {
+this.ap.paintAlignment (false);
+}try {
+if (this.sleepAndReturn (200, state)) return;
+} catch (e) {
+if (Clazz.exceptionOf (e, InterruptedException)) {
+state = 2;
+break;
+} else {
+throw e;
+}
+}
+}
+if (this.alignViewport.isClosed ()) {
+this.abortAndDestroy ();
+state = 2;
+break;
+}var ourAnnot = new java.util.ArrayList ();
+this.alignment = this.alignViewport.getAlignment ();
+this.conservation = this.alignViewport.getAlignmentConservationAnnotation ();
+this.quality = this.alignViewport.getAlignmentQualityAnnot ();
+ourAnnot.add (this.conservation);
+ourAnnot.add (this.quality);
+this.ourAnnots = ourAnnot;
+this.ConsPercGaps = this.alignViewport.getConsPercGaps ();
+if (this.alignment == null || (this.aWidth = this.alignment.getWidth ()) < 0) {
+this.calcMan.workerComplete (this);
+return;
+}state = 4;
+break;
+case 4:
+this.iFirst = this.iLast;
+this.nPer = this.aWidth + 1;
+this.iLast = Math.min (this.iLast + this.nPer, this.aWidth);
+if (this.iLast == this.iFirst) {
+state = 2;
+} else {
+this.computeConsensus ();
+if (this.sleepAndReturn (0, state)) return;
+}break;
+case 2:
+this.updateResultAnnotation (true);
+this.notifyDone ();
+return;
+}
+} catch (e$$) {
+if (Clazz.exceptionOf (e$$, OutOfMemoryError)) {
+var error = e$$;
+{
+this.calcMan.workerCannotRun (this);
+this.ap.raiseOOMWarning ("calculating conservation", error);
+}
+} else {
+var e = e$$;
+{
+System.out.println ("Error in ConsensusThread: " + e);
+e.printStackTrace ();
+this.calcMan.workerComplete (this);
+}
+}
+}
+}
+}, "~N");
+Clazz.defineMethod (c$, "computeConsensus",
+($fz = function () {
+this.cons = jalview.analysis.Conservation.calculateConservation ("All", jalview.schemes.ResidueProperties.propHash, 3, this.alignment.getSequences (), 0, this.aWidth - 1, false, this.ConsPercGaps, this.quality != null);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "updateResultAnnotation",
+($fz = function (b) {
+if (b || !this.calcMan.isWorking (this) && this.cons != null && this.conservation != null && this.quality != null) {
+this.alignViewport.setConservation (this.cons);
+this.cons.completeAnnotations (this.conservation, this.quality, 0, this.aWidth);
+}}, $fz.isPrivate = true, $fz), "~B");
+Clazz.overrideMethod (c$, "updateAnnotation",
+function () {
+this.updateResultAnnotation (false);
+});
+});
diff --git a/bin/jalview/workers/StrucConsensusThread.class b/bin/jalview/workers/StrucConsensusThread.class
index 48b83a5..419bb43 100644
Binary files a/bin/jalview/workers/StrucConsensusThread.class and b/bin/jalview/workers/StrucConsensusThread.class differ
diff --git a/bin/jalview/workers/StrucConsensusThread.js b/bin/jalview/workers/StrucConsensusThread.js
index 4010f84..dbe6d50 100644
--- a/bin/jalview/workers/StrucConsensusThread.js
+++ b/bin/jalview/workers/StrucConsensusThread.js
@@ -1,95 +1,95 @@
-Clazz.declarePackage ("jalview.workers");
-Clazz.load (["jalview.api.AlignCalcWorkerI", "jalview.workers.AlignCalcWorker"], "jalview.workers.StrucConsensusThread", ["jalview.analysis.StructureFrequency", "java.lang.Thread"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.strucConsensus = null;
-this.hStrucConsensus = null;
-this.nseq = -1;
-Clazz.instantialize (this, arguments);
-}, jalview.workers, "StrucConsensusThread", jalview.workers.AlignCalcWorker, jalview.api.AlignCalcWorkerI);
-Clazz.overrideMethod (c$, "getNewWorker",
-function () {
-return new jalview.workers.StrucConsensusThread (this.alignViewport, this.ap);
-});
-Clazz.overrideMethod (c$, "run",
-function () {
-try {
-if (this.calcMan.isPending (this)) {
-return;
-}this.calcMan.notifyStart (this);
-while (!this.calcMan.notifyWorking (this)) {
-try {
-if (this.ap != null) {
-}Thread.sleep (200);
-} catch (ex) {
-if (Clazz.exceptionOf (ex, Exception)) {
-ex.printStackTrace ();
-} else {
-throw ex;
-}
-}
-}
-if (this.alignViewport.isClosed ()) {
-this.abortAndDestroy ();
-return;
-}var alignment = this.alignViewport.getAlignment ();
-var aWidth = -1;
-if (alignment == null || (aWidth = alignment.getWidth ()) < 0) {
-this.calcMan.workerComplete (this);
-return;
-}this.strucConsensus = this.alignViewport.getAlignmentStrucConsensusAnnotation ();
-this.hStrucConsensus = this.alignViewport.getRnaStructureConsensusHash ();
-this.strucConsensus.annotations = null;
-this.strucConsensus.annotations = new Array (aWidth);
-this.hStrucConsensus = new Array (aWidth);
-var aa = this.alignViewport.getAlignment ().getAlignmentAnnotation ();
-var rnaStruc = null;
-for (var i = 0; i < aa.length; i++) {
-if (aa[i].getRNAStruc () != null && aa[i].isValidStruc ()) {
-rnaStruc = aa[i];
-break;
-}}
-if (rnaStruc == null || !rnaStruc.isValidStruc ()) {
-this.calcMan.workerComplete (this);
-return;
-}try {
-var arr = alignment.getSequencesArray ();
-this.nseq = arr.length;
-jalview.analysis.StructureFrequency.calculate (arr, 0, alignment.getWidth (), this.hStrucConsensus, true, rnaStruc);
-} catch (x) {
-if (Clazz.exceptionOf (x, ArrayIndexOutOfBoundsException)) {
-this.calcMan.workerComplete (this);
-return;
-} else {
-throw x;
-}
-}
-this.alignViewport.setRnaStructureConsensusHash (this.hStrucConsensus);
-this.updateResultAnnotation (true);
-if (this.alignViewport.getGlobalColourScheme () != null) {
-this.alignViewport.getGlobalColourScheme ().setConsensus (this.hStrucConsensus);
-}} catch (error) {
-if (Clazz.exceptionOf (error, OutOfMemoryError)) {
-this.calcMan.workerCannotRun (this);
-this.ap.raiseOOMWarning ("calculating RNA structure consensus", error);
-} else {
-throw error;
-}
-} finally {
-this.calcMan.workerComplete (this);
-if (this.ap != null) {
-this.ap.paintAlignment (true);
-}}
-});
-Clazz.overrideMethod (c$, "updateAnnotation",
-function () {
-this.updateResultAnnotation (false);
-});
-Clazz.defineMethod (c$, "updateResultAnnotation",
-function (immediate) {
-if (immediate || !this.calcMan.isWorking (this) && this.strucConsensus != null && this.hStrucConsensus != null) {
-jalview.analysis.StructureFrequency.completeConsensus (this.strucConsensus, this.hStrucConsensus, 0, this.hStrucConsensus.length, this.alignViewport.isIgnoreGapsConsensus (), this.alignViewport.isShowSequenceLogo (), this.nseq);
-}}, "~B");
-Clazz.overrideMethod (c$, "run1",
-function (state) {
-}, "~N");
-});
+Clazz.declarePackage ("jalview.workers");
+Clazz.load (["jalview.api.AlignCalcWorkerI", "jalview.workers.AlignCalcWorker"], "jalview.workers.StrucConsensusThread", ["jalview.analysis.StructureFrequency", "java.lang.Thread"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.strucConsensus = null;
+this.hStrucConsensus = null;
+this.nseq = -1;
+Clazz.instantialize (this, arguments);
+}, jalview.workers, "StrucConsensusThread", jalview.workers.AlignCalcWorker, jalview.api.AlignCalcWorkerI);
+Clazz.overrideMethod (c$, "getNewWorker",
+function () {
+return new jalview.workers.StrucConsensusThread (this.alignViewport, this.ap);
+});
+Clazz.overrideMethod (c$, "run",
+function () {
+try {
+if (this.calcMan.isPending (this)) {
+return;
+}this.calcMan.notifyStart (this);
+while (!this.calcMan.notifyWorking (this)) {
+try {
+if (this.ap != null) {
+}Thread.sleep (200);
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+ex.printStackTrace ();
+} else {
+throw ex;
+}
+}
+}
+if (this.alignViewport.isClosed ()) {
+this.abortAndDestroy ();
+return;
+}var alignment = this.alignViewport.getAlignment ();
+var aWidth = -1;
+if (alignment == null || (aWidth = alignment.getWidth ()) < 0) {
+this.calcMan.workerComplete (this);
+return;
+}this.strucConsensus = this.alignViewport.getAlignmentStrucConsensusAnnotation ();
+this.hStrucConsensus = this.alignViewport.getRnaStructureConsensusHash ();
+this.strucConsensus.annotations = null;
+this.strucConsensus.annotations = new Array (aWidth);
+this.hStrucConsensus = new Array (aWidth);
+var aa = this.alignViewport.getAlignment ().getAlignmentAnnotation ();
+var rnaStruc = null;
+for (var i = 0; i < aa.length; i++) {
+if (aa[i].getRNAStruc () != null && aa[i].isValidStruc ()) {
+rnaStruc = aa[i];
+break;
+}}
+if (rnaStruc == null || !rnaStruc.isValidStruc ()) {
+this.calcMan.workerComplete (this);
+return;
+}try {
+var arr = alignment.getSequencesArray ();
+this.nseq = arr.length;
+jalview.analysis.StructureFrequency.calculate (arr, 0, alignment.getWidth (), this.hStrucConsensus, true, rnaStruc);
+} catch (x) {
+if (Clazz.exceptionOf (x, ArrayIndexOutOfBoundsException)) {
+this.calcMan.workerComplete (this);
+return;
+} else {
+throw x;
+}
+}
+this.alignViewport.setRnaStructureConsensusHash (this.hStrucConsensus);
+this.updateResultAnnotation (true);
+if (this.alignViewport.getGlobalColourScheme () != null) {
+this.alignViewport.getGlobalColourScheme ().setConsensus (this.hStrucConsensus);
+}} catch (error) {
+if (Clazz.exceptionOf (error, OutOfMemoryError)) {
+this.calcMan.workerCannotRun (this);
+this.ap.raiseOOMWarning ("calculating RNA structure consensus", error);
+} else {
+throw error;
+}
+} finally {
+this.calcMan.workerComplete (this);
+if (this.ap != null) {
+this.ap.paintAlignment (true);
+}}
+});
+Clazz.overrideMethod (c$, "updateAnnotation",
+function () {
+this.updateResultAnnotation (false);
+});
+Clazz.defineMethod (c$, "updateResultAnnotation",
+function (immediate) {
+if (immediate || !this.calcMan.isWorking (this) && this.strucConsensus != null && this.hStrucConsensus != null) {
+jalview.analysis.StructureFrequency.completeConsensus (this.strucConsensus, this.hStrucConsensus, 0, this.hStrucConsensus.length, this.alignViewport.isIgnoreGapsConsensus (), this.alignViewport.isShowSequenceLogo (), this.nseq);
+}}, "~B");
+Clazz.overrideMethod (c$, "run1",
+function (state) {
+}, "~N");
+});
diff --git a/bin/java.policy.applet b/bin/java.policy.applet
deleted file mode 100644
index 35527af..0000000
--- a/bin/java.policy.applet
+++ /dev/null
@@ -1,7 +0,0 @@
-/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
-/* DO NOT EDIT */
-
-grant {
- permission java.security.AllPermission;
-};
-
diff --git a/bin/javajs/J2SIgnoreImport.js b/bin/javajs/J2SIgnoreImport.js
index 5b4de23..bd94c0d 100644
--- a/bin/javajs/J2SIgnoreImport.js
+++ b/bin/javajs/J2SIgnoreImport.js
@@ -1 +1 @@
-Clazz.declarePackage ("javajs");
+Clazz.declarePackage ("javajs");
diff --git a/bin/javajs/J2SRequireImport.js b/bin/javajs/J2SRequireImport.js
index 5b4de23..bd94c0d 100644
--- a/bin/javajs/J2SRequireImport.js
+++ b/bin/javajs/J2SRequireImport.js
@@ -1 +1 @@
-Clazz.declarePackage ("javajs");
+Clazz.declarePackage ("javajs");
diff --git a/bin/javajs/api/BytePoster.js b/bin/javajs/api/BytePoster.js
index c97ddaf..1fb861c 100644
--- a/bin/javajs/api/BytePoster.js
+++ b/bin/javajs/api/BytePoster.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "BytePoster");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "BytePoster");
diff --git a/bin/javajs/api/EigenInterface.js b/bin/javajs/api/EigenInterface.js
index b5d1d99..b6e97f1 100644
--- a/bin/javajs/api/EigenInterface.js
+++ b/bin/javajs/api/EigenInterface.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "EigenInterface");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "EigenInterface");
diff --git a/bin/javajs/api/EventManager.js b/bin/javajs/api/EventManager.js
index c5a4fa9..a80b250 100644
--- a/bin/javajs/api/EventManager.js
+++ b/bin/javajs/api/EventManager.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "EventManager");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "EventManager");
diff --git a/bin/javajs/api/FontManager.js b/bin/javajs/api/FontManager.js
index a809538..f458d89 100644
--- a/bin/javajs/api/FontManager.js
+++ b/bin/javajs/api/FontManager.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "FontManager");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "FontManager");
diff --git a/bin/javajs/api/GenericBinaryDocument.js b/bin/javajs/api/GenericBinaryDocument.js
index 0da5b99..8a2bbf9 100644
--- a/bin/javajs/api/GenericBinaryDocument.js
+++ b/bin/javajs/api/GenericBinaryDocument.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericBinaryDocument");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericBinaryDocument");
diff --git a/bin/javajs/api/GenericCifDataParser.js b/bin/javajs/api/GenericCifDataParser.js
index 2696094..6127596 100644
--- a/bin/javajs/api/GenericCifDataParser.js
+++ b/bin/javajs/api/GenericCifDataParser.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("javajs.api");
-c$ = Clazz.declareInterface (javajs.api, "GenericCifDataParser");
-Clazz.defineStatics (c$,
-"NONE", -1);
+Clazz.declarePackage ("javajs.api");
+c$ = Clazz.declareInterface (javajs.api, "GenericCifDataParser");
+Clazz.defineStatics (c$,
+"NONE", -1);
diff --git a/bin/javajs/api/GenericColor.js b/bin/javajs/api/GenericColor.js
index c5d0d77..ed0a0ee 100644
--- a/bin/javajs/api/GenericColor.js
+++ b/bin/javajs/api/GenericColor.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericColor");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericColor");
diff --git a/bin/javajs/api/GenericFileInterface.js b/bin/javajs/api/GenericFileInterface.js
index 9a09815..deae68e 100644
--- a/bin/javajs/api/GenericFileInterface.js
+++ b/bin/javajs/api/GenericFileInterface.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericFileInterface");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericFileInterface");
diff --git a/bin/javajs/api/GenericImageDialog.js b/bin/javajs/api/GenericImageDialog.js
index 16c01cb..fa18c18 100644
--- a/bin/javajs/api/GenericImageDialog.js
+++ b/bin/javajs/api/GenericImageDialog.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericImageDialog");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericImageDialog");
diff --git a/bin/javajs/api/GenericImageEncoder.js b/bin/javajs/api/GenericImageEncoder.js
index f6a2e95..a7313d0 100644
--- a/bin/javajs/api/GenericImageEncoder.js
+++ b/bin/javajs/api/GenericImageEncoder.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericImageEncoder");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericImageEncoder");
diff --git a/bin/javajs/api/GenericLineReader.js b/bin/javajs/api/GenericLineReader.js
index f4d2aad..787a669 100644
--- a/bin/javajs/api/GenericLineReader.js
+++ b/bin/javajs/api/GenericLineReader.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericLineReader");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericLineReader");
diff --git a/bin/javajs/api/GenericMenuInterface.js b/bin/javajs/api/GenericMenuInterface.js
index d35fda0..8636834 100644
--- a/bin/javajs/api/GenericMenuInterface.js
+++ b/bin/javajs/api/GenericMenuInterface.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericMenuInterface");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericMenuInterface");
diff --git a/bin/javajs/api/GenericMouseInterface.js b/bin/javajs/api/GenericMouseInterface.js
index d40a3a0..dad99c3 100644
--- a/bin/javajs/api/GenericMouseInterface.js
+++ b/bin/javajs/api/GenericMouseInterface.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericMouseInterface");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericMouseInterface");
diff --git a/bin/javajs/api/GenericPlatform.js b/bin/javajs/api/GenericPlatform.js
index 00504e7..ae3869f 100644
--- a/bin/javajs/api/GenericPlatform.js
+++ b/bin/javajs/api/GenericPlatform.js
@@ -1,11 +1,11 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.load (["javajs.api.FontManager"], "javajs.api.GenericPlatform", null, function () {
-c$ = Clazz.declareInterface (javajs.api, "GenericPlatform", javajs.api.FontManager);
-Clazz.defineStatics (c$,
-"CURSOR_DEFAULT", 0,
-"CURSOR_CROSSHAIR", 1,
-"CURSOR_WAIT", 3,
-"CURSOR_ZOOM", 8,
-"CURSOR_HAND", 12,
-"CURSOR_MOVE", 13);
-});
+Clazz.declarePackage ("javajs.api");
+Clazz.load (["javajs.api.FontManager"], "javajs.api.GenericPlatform", null, function () {
+c$ = Clazz.declareInterface (javajs.api, "GenericPlatform", javajs.api.FontManager);
+Clazz.defineStatics (c$,
+"CURSOR_DEFAULT", 0,
+"CURSOR_CROSSHAIR", 1,
+"CURSOR_WAIT", 3,
+"CURSOR_ZOOM", 8,
+"CURSOR_HAND", 12,
+"CURSOR_MOVE", 13);
+});
diff --git a/bin/javajs/api/GenericZipInputStream.js b/bin/javajs/api/GenericZipInputStream.js
index 9e55715..d74cfea 100644
--- a/bin/javajs/api/GenericZipInputStream.js
+++ b/bin/javajs/api/GenericZipInputStream.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.load (["java.util.zip.ZipInputStream", "javajs.api.ZInputStream"], "javajs.api.GenericZipInputStream", null, function () {
-c$ = Clazz.declareType (javajs.api, "GenericZipInputStream", java.util.zip.ZipInputStream, javajs.api.ZInputStream);
-});
+Clazz.declarePackage ("javajs.api");
+Clazz.load (["java.util.zip.ZipInputStream", "javajs.api.ZInputStream"], "javajs.api.GenericZipInputStream", null, function () {
+c$ = Clazz.declareType (javajs.api, "GenericZipInputStream", java.util.zip.ZipInputStream, javajs.api.ZInputStream);
+});
diff --git a/bin/javajs/api/GenericZipTools.js b/bin/javajs/api/GenericZipTools.js
index 00e6edf..902f592 100644
--- a/bin/javajs/api/GenericZipTools.js
+++ b/bin/javajs/api/GenericZipTools.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "GenericZipTools");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "GenericZipTools");
diff --git a/bin/javajs/api/HTMLElement.js b/bin/javajs/api/HTMLElement.js
index b305eae..97473c7 100644
--- a/bin/javajs/api/HTMLElement.js
+++ b/bin/javajs/api/HTMLElement.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "HTMLElement");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "HTMLElement");
diff --git a/bin/javajs/api/HTMLWindowEvent.js b/bin/javajs/api/HTMLWindowEvent.js
index 47438ca..538a5c1 100644
--- a/bin/javajs/api/HTMLWindowEvent.js
+++ b/bin/javajs/api/HTMLWindowEvent.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "HTMLWindowEvent");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "HTMLWindowEvent");
diff --git a/bin/javajs/api/Interface.js b/bin/javajs/api/Interface.js
index 024bf74..8887be8 100644
--- a/bin/javajs/api/Interface.js
+++ b/bin/javajs/api/Interface.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("javajs.api");
-c$ = Clazz.declareType (javajs.api, "Interface");
-c$.getInterface = Clazz.defineMethod (c$, "getInterface",
-function (name) {
-try {
-var x = Class.forName (name);
-return (x == null ? null : x.newInstance ());
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println ("Interface.java Error creating instance for " + name + ": \n" + e);
-return null;
-} else {
-throw e;
-}
-}
-}, "~S");
+Clazz.declarePackage ("javajs.api");
+c$ = Clazz.declareType (javajs.api, "Interface");
+c$.getInterface = Clazz.defineMethod (c$, "getInterface",
+function (name) {
+try {
+var x = Class.forName (name);
+return (x == null ? null : x.newInstance ());
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println ("Interface.java Error creating instance for " + name + ": \n" + e);
+return null;
+} else {
+throw e;
+}
+}
+}, "~S");
diff --git a/bin/javajs/api/JSInterface.js b/bin/javajs/api/JSInterface.js
index 1086b93..ce34ecc 100644
--- a/bin/javajs/api/JSInterface.js
+++ b/bin/javajs/api/JSInterface.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "JSInterface");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "JSInterface");
diff --git a/bin/javajs/api/JSONEncodable.js b/bin/javajs/api/JSONEncodable.js
index 9f5778f..e94f4b8 100644
--- a/bin/javajs/api/JSONEncodable.js
+++ b/bin/javajs/api/JSONEncodable.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "JSONEncodable");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "JSONEncodable");
diff --git a/bin/javajs/api/JmolObjectInterface.js b/bin/javajs/api/JmolObjectInterface.js
index a499b01..0f1e805 100644
--- a/bin/javajs/api/JmolObjectInterface.js
+++ b/bin/javajs/api/JmolObjectInterface.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "JmolObjectInterface");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "JmolObjectInterface");
diff --git a/bin/javajs/api/PlatformViewer.js b/bin/javajs/api/PlatformViewer.js
index 8cad055..32ed2dc 100644
--- a/bin/javajs/api/PlatformViewer.js
+++ b/bin/javajs/api/PlatformViewer.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "PlatformViewer");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "PlatformViewer");
diff --git a/bin/javajs/api/SC.js b/bin/javajs/api/SC.js
index 0edd956..01512cd 100644
--- a/bin/javajs/api/SC.js
+++ b/bin/javajs/api/SC.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "SC");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "SC");
diff --git a/bin/javajs/api/SwingController.js b/bin/javajs/api/SwingController.js
index 75f1f05..277bc34 100644
--- a/bin/javajs/api/SwingController.js
+++ b/bin/javajs/api/SwingController.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "SwingController");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "SwingController");
diff --git a/bin/javajs/api/ZInputStream.js b/bin/javajs/api/ZInputStream.js
index abc5bb9..7a79598 100644
--- a/bin/javajs/api/ZInputStream.js
+++ b/bin/javajs/api/ZInputStream.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.api");
-Clazz.declareInterface (javajs.api, "ZInputStream");
+Clazz.declarePackage ("javajs.api");
+Clazz.declareInterface (javajs.api, "ZInputStream");
diff --git a/bin/javajs/awt/BorderLayout.js b/bin/javajs/awt/BorderLayout.js
index 875b476..1686394 100644
--- a/bin/javajs/awt/BorderLayout.js
+++ b/bin/javajs/awt/BorderLayout.js
@@ -1,10 +1,10 @@
-Clazz.declarePackage ("javajs.awt");
-Clazz.load (["javajs.awt.LayoutManager"], "javajs.awt.BorderLayout", null, function () {
-c$ = Clazz.declareType (javajs.awt, "BorderLayout", javajs.awt.LayoutManager);
-Clazz.defineStatics (c$,
-"CENTER", "Center",
-"NORTH", "North",
-"SOUTH", "South",
-"EAST", "East",
-"WEST", "West");
-});
+Clazz.declarePackage ("javajs.awt");
+Clazz.load (["javajs.awt.LayoutManager"], "javajs.awt.BorderLayout", null, function () {
+c$ = Clazz.declareType (javajs.awt, "BorderLayout", javajs.awt.LayoutManager);
+Clazz.defineStatics (c$,
+"CENTER", "Center",
+"NORTH", "North",
+"SOUTH", "South",
+"EAST", "East",
+"WEST", "West");
+});
diff --git a/bin/javajs/awt/Color.js b/bin/javajs/awt/Color.js
index 1f168d2..725aa31 100644
--- a/bin/javajs/awt/Color.js
+++ b/bin/javajs/awt/Color.js
@@ -1,43 +1,43 @@
-Clazz.declarePackage ("javajs.awt");
-Clazz.load (["javajs.api.GenericColor"], "javajs.awt.Color", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.argb = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.awt, "Color", null, javajs.api.GenericColor);
-Clazz.overrideMethod (c$, "getRGB",
-function () {
-return this.argb & 0x00FFFFFF;
-});
-Clazz.overrideMethod (c$, "getOpacity255",
-function () {
-return ((this.argb >> 24) & 0xFF);
-});
-Clazz.overrideMethod (c$, "setOpacity255",
-function (a) {
-this.argb = this.argb & 0xFFFFFF | ((a & 0xFF) << 24);
-}, "~N");
-c$.get1 = Clazz.defineMethod (c$, "get1",
-function (rgb) {
-var c = new javajs.awt.Color ();
-c.argb = rgb | 0xFF000000;
-return c;
-}, "~N");
-c$.get3 = Clazz.defineMethod (c$, "get3",
-function (r, g, b) {
-return new javajs.awt.Color ().set4 (r, g, b, 0xFF);
-}, "~N,~N,~N");
-c$.get4 = Clazz.defineMethod (c$, "get4",
-function (r, g, b, a) {
-return new javajs.awt.Color ().set4 (r, g, b, a);
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "set4",
-($fz = function (r, g, b, a) {
-this.argb = ((a << 24) | (r << 16) | (g << 8) | b) & 0xFFFFFFFF;
-return this;
-}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var s = ("00000000" + Integer.toHexString (this.argb));
-return "[0x" + s.substring (s.length - 8, s.length) + "]";
-});
-});
+Clazz.declarePackage ("javajs.awt");
+Clazz.load (["javajs.api.GenericColor"], "javajs.awt.Color", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.argb = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.awt, "Color", null, javajs.api.GenericColor);
+Clazz.overrideMethod (c$, "getRGB",
+function () {
+return this.argb & 0x00FFFFFF;
+});
+Clazz.overrideMethod (c$, "getOpacity255",
+function () {
+return ((this.argb >> 24) & 0xFF);
+});
+Clazz.overrideMethod (c$, "setOpacity255",
+function (a) {
+this.argb = this.argb & 0xFFFFFF | ((a & 0xFF) << 24);
+}, "~N");
+c$.get1 = Clazz.defineMethod (c$, "get1",
+function (rgb) {
+var c = new javajs.awt.Color ();
+c.argb = rgb | 0xFF000000;
+return c;
+}, "~N");
+c$.get3 = Clazz.defineMethod (c$, "get3",
+function (r, g, b) {
+return new javajs.awt.Color ().set4 (r, g, b, 0xFF);
+}, "~N,~N,~N");
+c$.get4 = Clazz.defineMethod (c$, "get4",
+function (r, g, b, a) {
+return new javajs.awt.Color ().set4 (r, g, b, a);
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "set4",
+($fz = function (r, g, b, a) {
+this.argb = ((a << 24) | (r << 16) | (g << 8) | b) & 0xFFFFFFFF;
+return this;
+}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var s = ("00000000" + Integer.toHexString (this.argb));
+return "[0x" + s.substring (s.length - 8, s.length) + "]";
+});
+});
diff --git a/bin/javajs/awt/Component.js b/bin/javajs/awt/Component.js
index f17a3eb..20f1f1a 100644
--- a/bin/javajs/awt/Component.js
+++ b/bin/javajs/awt/Component.js
@@ -1,120 +1,120 @@
-Clazz.declarePackage ("javajs.awt");
-Clazz.load (null, "javajs.awt.Component", ["javajs.util.CU"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.visible = false;
-this.enabled = true;
-this.text = null;
-this.name = null;
-this.width = 0;
-this.height = 0;
-this.id = null;
-this.parent = null;
-this.mouseListener = null;
-this.bgcolor = null;
-this.minWidth = 30;
-this.minHeight = 30;
-this.renderWidth = 0;
-this.renderHeight = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.awt, "Component");
-Clazz.defineMethod (c$, "setParent",
-function (p) {
-this.parent = p;
-}, "~O");
-Clazz.makeConstructor (c$,
-function (type) {
-this.id = javajs.awt.Component.newID (type);
-if (type == null) return;
-{
-SwingController.register(this, type);
-}}, "~S");
-c$.newID = Clazz.defineMethod (c$, "newID",
-function (type) {
-return type + ("" + Math.random ()).substring (3, 10);
-}, "~S");
-Clazz.defineMethod (c$, "setBackground",
-function (color) {
-this.bgcolor = color;
-}, "javajs.api.GenericColor");
-Clazz.defineMethod (c$, "setText",
-function (text) {
-this.text = text;
-{
-SwingController.setText(this);
-}}, "~S");
-Clazz.defineMethod (c$, "setName",
-function (name) {
-this.name = name;
-}, "~S");
-Clazz.defineMethod (c$, "getName",
-function () {
-return this.name;
-});
-Clazz.defineMethod (c$, "getParent",
-function () {
-return this.parent;
-});
-Clazz.defineMethod (c$, "setPreferredSize",
-function (dimension) {
-this.width = dimension.width;
-this.height = dimension.height;
-}, "javajs.awt.Dimension");
-Clazz.defineMethod (c$, "addMouseListener",
-function (listener) {
-this.mouseListener = listener;
-}, "~O");
-Clazz.defineMethod (c$, "getText",
-function () {
-return this.text;
-});
-Clazz.defineMethod (c$, "isEnabled",
-function () {
-return this.enabled;
-});
-Clazz.defineMethod (c$, "setEnabled",
-function (enabled) {
-this.enabled = enabled;
-{
-SwingController.setEnabled(this);
-}}, "~B");
-Clazz.defineMethod (c$, "isVisible",
-function () {
-return this.visible;
-});
-Clazz.defineMethod (c$, "setVisible",
-function (visible) {
-this.visible = visible;
-{
-SwingController.setVisible(this);
-}}, "~B");
-Clazz.defineMethod (c$, "getHeight",
-function () {
-return this.height;
-});
-Clazz.defineMethod (c$, "getWidth",
-function () {
-return this.width;
-});
-Clazz.defineMethod (c$, "setMinimumSize",
-function (d) {
-this.minWidth = d.width;
-this.minHeight = d.height;
-}, "javajs.awt.Dimension");
-Clazz.defineMethod (c$, "getSubcomponentWidth",
-function () {
-return this.width;
-});
-Clazz.defineMethod (c$, "getSubcomponentHeight",
-function () {
-return this.height;
-});
-Clazz.defineMethod (c$, "getCSSstyle",
-function (defaultPercentW, defaultPercentH) {
-var width = (this.renderWidth > 0 ? this.renderWidth : this.getSubcomponentWidth ());
-var height = (this.renderHeight > 0 ? this.renderHeight : this.getSubcomponentHeight ());
-return (width > 0 ? "width:" + width + "px;" : defaultPercentW > 0 ? "width:" + defaultPercentW + "%;" : "") + (height > 0 ? "height:" + height + "px;" : defaultPercentH > 0 ? "height:" + defaultPercentH + "%;" : "") + (this.bgcolor == null ? "" : "background-color:" + javajs.util.CU.toCSSString (this.bgcolor) + ";");
-}, "~N,~N");
-Clazz.defineMethod (c$, "repaint",
-function () {
-});
-});
+Clazz.declarePackage ("javajs.awt");
+Clazz.load (null, "javajs.awt.Component", ["javajs.util.CU"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.visible = false;
+this.enabled = true;
+this.text = null;
+this.name = null;
+this.width = 0;
+this.height = 0;
+this.id = null;
+this.parent = null;
+this.mouseListener = null;
+this.bgcolor = null;
+this.minWidth = 30;
+this.minHeight = 30;
+this.renderWidth = 0;
+this.renderHeight = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.awt, "Component");
+Clazz.defineMethod (c$, "setParent",
+function (p) {
+this.parent = p;
+}, "~O");
+Clazz.makeConstructor (c$,
+function (type) {
+this.id = javajs.awt.Component.newID (type);
+if (type == null) return;
+{
+SwingController.register(this, type);
+}}, "~S");
+c$.newID = Clazz.defineMethod (c$, "newID",
+function (type) {
+return type + ("" + Math.random ()).substring (3, 10);
+}, "~S");
+Clazz.defineMethod (c$, "setBackground",
+function (color) {
+this.bgcolor = color;
+}, "javajs.api.GenericColor");
+Clazz.defineMethod (c$, "setText",
+function (text) {
+this.text = text;
+{
+SwingController.setText(this);
+}}, "~S");
+Clazz.defineMethod (c$, "setName",
+function (name) {
+this.name = name;
+}, "~S");
+Clazz.defineMethod (c$, "getName",
+function () {
+return this.name;
+});
+Clazz.defineMethod (c$, "getParent",
+function () {
+return this.parent;
+});
+Clazz.defineMethod (c$, "setPreferredSize",
+function (dimension) {
+this.width = dimension.width;
+this.height = dimension.height;
+}, "javajs.awt.Dimension");
+Clazz.defineMethod (c$, "addMouseListener",
+function (listener) {
+this.mouseListener = listener;
+}, "~O");
+Clazz.defineMethod (c$, "getText",
+function () {
+return this.text;
+});
+Clazz.defineMethod (c$, "isEnabled",
+function () {
+return this.enabled;
+});
+Clazz.defineMethod (c$, "setEnabled",
+function (enabled) {
+this.enabled = enabled;
+{
+SwingController.setEnabled(this);
+}}, "~B");
+Clazz.defineMethod (c$, "isVisible",
+function () {
+return this.visible;
+});
+Clazz.defineMethod (c$, "setVisible",
+function (visible) {
+this.visible = visible;
+{
+SwingController.setVisible(this);
+}}, "~B");
+Clazz.defineMethod (c$, "getHeight",
+function () {
+return this.height;
+});
+Clazz.defineMethod (c$, "getWidth",
+function () {
+return this.width;
+});
+Clazz.defineMethod (c$, "setMinimumSize",
+function (d) {
+this.minWidth = d.width;
+this.minHeight = d.height;
+}, "javajs.awt.Dimension");
+Clazz.defineMethod (c$, "getSubcomponentWidth",
+function () {
+return this.width;
+});
+Clazz.defineMethod (c$, "getSubcomponentHeight",
+function () {
+return this.height;
+});
+Clazz.defineMethod (c$, "getCSSstyle",
+function (defaultPercentW, defaultPercentH) {
+var width = (this.renderWidth > 0 ? this.renderWidth : this.getSubcomponentWidth ());
+var height = (this.renderHeight > 0 ? this.renderHeight : this.getSubcomponentHeight ());
+return (width > 0 ? "width:" + width + "px;" : defaultPercentW > 0 ? "width:" + defaultPercentW + "%;" : "") + (height > 0 ? "height:" + height + "px;" : defaultPercentH > 0 ? "height:" + defaultPercentH + "%;" : "") + (this.bgcolor == null ? "" : "background-color:" + javajs.util.CU.toCSSString (this.bgcolor) + ";");
+}, "~N,~N");
+Clazz.defineMethod (c$, "repaint",
+function () {
+});
+});
diff --git a/bin/javajs/awt/Container.js b/bin/javajs/awt/Container.js
index fe3fb75..5bb85ea 100644
--- a/bin/javajs/awt/Container.js
+++ b/bin/javajs/awt/Container.js
@@ -1,65 +1,65 @@
-Clazz.declarePackage ("javajs.awt");
-Clazz.load (["javajs.awt.Component"], "javajs.awt.Container", ["javajs.util.Lst"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.list = null;
-this.cList = null;
-Clazz.instantialize (this, arguments);
-}, javajs.awt, "Container", javajs.awt.Component);
-Clazz.defineMethod (c$, "getComponent",
-function (i) {
-return this.list.get (i);
-}, "~N");
-Clazz.defineMethod (c$, "getComponentCount",
-function () {
-return (this.list == null ? 0 : this.list.size ());
-});
-Clazz.defineMethod (c$, "getComponents",
-function () {
-if (this.cList == null) {
-if (this.list == null) return new Array (0);
-this.cList = this.list.toArray ();
-}return this.cList;
-});
-Clazz.defineMethod (c$, "add",
-function (component) {
-return this.addComponent (component);
-}, "javajs.awt.Component");
-Clazz.defineMethod (c$, "addComponent",
-function (component) {
-if (this.list == null) this.list = new javajs.util.Lst ();
-this.list.addLast (component);
-this.cList = null;
-component.parent = this;
-return component;
-}, "javajs.awt.Component");
-Clazz.defineMethod (c$, "insertComponent",
-function (component, index) {
-if (this.list == null) return this.addComponent (component);
-this.list.add (index, component);
-this.cList = null;
-component.parent = this;
-return component;
-}, "javajs.awt.Component,~N");
-Clazz.defineMethod (c$, "remove",
-function (i) {
-var c = this.list.remove (i);
-c.parent = null;
-this.cList = null;
-}, "~N");
-Clazz.defineMethod (c$, "removeAll",
-function () {
-if (this.list != null) {
-for (var i = this.list.size (); --i >= 0; ) this.list.get (i).parent = null;
-
-this.list.clear ();
-}this.cList = null;
-});
-Clazz.defineMethod (c$, "getSubcomponentWidth",
-function () {
-return (this.list != null && this.list.size () == 1 ? this.list.get (0).getSubcomponentWidth () : 0);
-});
-Clazz.defineMethod (c$, "getSubcomponentHeight",
-function () {
-return (this.list != null && this.list.size () == 1 ? this.list.get (0).getSubcomponentHeight () : 0);
-});
-});
+Clazz.declarePackage ("javajs.awt");
+Clazz.load (["javajs.awt.Component"], "javajs.awt.Container", ["javajs.util.Lst"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.list = null;
+this.cList = null;
+Clazz.instantialize (this, arguments);
+}, javajs.awt, "Container", javajs.awt.Component);
+Clazz.defineMethod (c$, "getComponent",
+function (i) {
+return this.list.get (i);
+}, "~N");
+Clazz.defineMethod (c$, "getComponentCount",
+function () {
+return (this.list == null ? 0 : this.list.size ());
+});
+Clazz.defineMethod (c$, "getComponents",
+function () {
+if (this.cList == null) {
+if (this.list == null) return new Array (0);
+this.cList = this.list.toArray ();
+}return this.cList;
+});
+Clazz.defineMethod (c$, "add",
+function (component) {
+return this.addComponent (component);
+}, "javajs.awt.Component");
+Clazz.defineMethod (c$, "addComponent",
+function (component) {
+if (this.list == null) this.list = new javajs.util.Lst ();
+this.list.addLast (component);
+this.cList = null;
+component.parent = this;
+return component;
+}, "javajs.awt.Component");
+Clazz.defineMethod (c$, "insertComponent",
+function (component, index) {
+if (this.list == null) return this.addComponent (component);
+this.list.add (index, component);
+this.cList = null;
+component.parent = this;
+return component;
+}, "javajs.awt.Component,~N");
+Clazz.defineMethod (c$, "remove",
+function (i) {
+var c = this.list.remove (i);
+c.parent = null;
+this.cList = null;
+}, "~N");
+Clazz.defineMethod (c$, "removeAll",
+function () {
+if (this.list != null) {
+for (var i = this.list.size (); --i >= 0; ) this.list.get (i).parent = null;
+
+this.list.clear ();
+}this.cList = null;
+});
+Clazz.defineMethod (c$, "getSubcomponentWidth",
+function () {
+return (this.list != null && this.list.size () == 1 ? this.list.get (0).getSubcomponentWidth () : 0);
+});
+Clazz.defineMethod (c$, "getSubcomponentHeight",
+function () {
+return (this.list != null && this.list.size () == 1 ? this.list.get (0).getSubcomponentHeight () : 0);
+});
+});
diff --git a/bin/javajs/awt/Dimension.js b/bin/javajs/awt/Dimension.js
index 4d21384..448d107 100644
--- a/bin/javajs/awt/Dimension.js
+++ b/bin/javajs/awt/Dimension.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("javajs.awt");
-c$ = Clazz.decorateAsClass (function () {
-this.width = 0;
-this.height = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.awt, "Dimension");
-Clazz.makeConstructor (c$,
-function (w, h) {
-this.set (w, h);
-}, "~N,~N");
-Clazz.defineMethod (c$, "set",
-function (w, h) {
-this.width = w;
-this.height = h;
-return this;
-}, "~N,~N");
+Clazz.declarePackage ("javajs.awt");
+c$ = Clazz.decorateAsClass (function () {
+this.width = 0;
+this.height = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.awt, "Dimension");
+Clazz.makeConstructor (c$,
+function (w, h) {
+this.set (w, h);
+}, "~N,~N");
+Clazz.defineMethod (c$, "set",
+function (w, h) {
+this.width = w;
+this.height = h;
+return this;
+}, "~N,~N");
diff --git a/bin/javajs/awt/Font.js b/bin/javajs/awt/Font.js
index a5f2df9..809c862 100644
--- a/bin/javajs/awt/Font.js
+++ b/bin/javajs/awt/Font.js
@@ -1,105 +1,105 @@
-Clazz.declarePackage ("javajs.awt");
-Clazz.load (null, "javajs.awt.Font", ["javajs.util.AU"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.fid = 0;
-this.fontFace = null;
-this.fontStyle = null;
-this.fontSizeNominal = 0;
-this.idFontFace = 0;
-this.idFontStyle = 0;
-this.fontSize = 0;
-this.font = null;
-this.fontMetrics = null;
-this.manager = null;
-this.ascent = 0;
-this.descent = 0;
-this.isBold = false;
-this.isItalic = false;
-Clazz.instantialize (this, arguments);
-}, javajs.awt, "Font");
-Clazz.makeConstructor (c$,
-($fz = function (manager, fid, idFontFace, idFontStyle, fontSize, fontSizeNominal, graphics) {
-this.manager = manager;
-this.fid = fid;
-this.fontFace = javajs.awt.Font.fontFaces[idFontFace];
-this.fontStyle = javajs.awt.Font.fontStyles[idFontStyle];
-this.idFontFace = idFontFace;
-this.idFontStyle = idFontStyle;
-this.fontSize = fontSize;
-this.isBold = (idFontStyle & 1) == 1;
-this.isItalic = (idFontStyle & 2) == 2;
-this.fontSizeNominal = fontSizeNominal;
-this.font = manager.newFont (javajs.awt.Font.fontFaces[idFontFace], this.isBold, this.isItalic, fontSize);
-this.fontMetrics = manager.getFontMetrics (this, graphics);
-this.descent = manager.getFontDescent (this.fontMetrics);
-this.ascent = manager.getFontAscent (this.fontMetrics);
-}, $fz.isPrivate = true, $fz), "javajs.api.FontManager,~N,~N,~N,~N,~N,~O");
-c$.getFont3D = Clazz.defineMethod (c$, "getFont3D",
-function (fontID) {
-return javajs.awt.Font.font3ds[fontID & 0xFF];
-}, "~N");
-c$.createFont3D = Clazz.defineMethod (c$, "createFont3D",
-function (fontface, fontstyle, fontsize, fontsizeNominal, manager, graphicsForMetrics) {
-if (fontsize > 0xFF) fontsize = 0xFF;
-var fontsizeX16 = (Clazz.floatToInt (fontsize)) << 4;
-var fontkey = ((fontface & 3) | ((fontstyle & 3) << 2) | (fontsizeX16 << 4));
-for (var i = javajs.awt.Font.fontkeyCount; --i > 0; ) if (fontkey == javajs.awt.Font.fontkeys[i] && javajs.awt.Font.font3ds[i].fontSizeNominal == fontsizeNominal) return javajs.awt.Font.font3ds[i];
-
-var fontIndexNext = javajs.awt.Font.fontkeyCount++;
-if (fontIndexNext == javajs.awt.Font.fontkeys.length) javajs.awt.Font.fontkeys = javajs.util.AU.arrayCopyI (javajs.awt.Font.fontkeys, fontIndexNext + 8);
-javajs.awt.Font.font3ds = javajs.util.AU.arrayCopyObject (javajs.awt.Font.font3ds, fontIndexNext + 8);
-var font3d = new javajs.awt.Font (manager, fontIndexNext, fontface, fontstyle, fontsize, fontsizeNominal, graphicsForMetrics);
-javajs.awt.Font.font3ds[fontIndexNext] = font3d;
-javajs.awt.Font.fontkeys[fontIndexNext] = fontkey;
-return font3d;
-}, "~N,~N,~N,~N,javajs.api.FontManager,~O");
-c$.getFontFaceID = Clazz.defineMethod (c$, "getFontFaceID",
-function (fontface) {
-return ("Monospaced".equalsIgnoreCase (fontface) ? 2 : "Serif".equalsIgnoreCase (fontface) ? 1 : 0);
-}, "~S");
-c$.getFontStyleID = Clazz.defineMethod (c$, "getFontStyleID",
-function (fontstyle) {
-for (var i = 4; --i >= 0; ) if (javajs.awt.Font.fontStyles[i].equalsIgnoreCase (fontstyle)) return i;
-
-return -1;
-}, "~S");
-Clazz.defineMethod (c$, "getAscent",
-function () {
-return this.ascent;
-});
-Clazz.defineMethod (c$, "getDescent",
-function () {
-return this.descent;
-});
-Clazz.defineMethod (c$, "getHeight",
-function () {
-return this.getAscent () + this.getDescent ();
-});
-Clazz.defineMethod (c$, "getFontMetrics",
-function () {
-return this.fontMetrics;
-});
-Clazz.defineMethod (c$, "stringWidth",
-function (text) {
-return this.manager.fontStringWidth (this, text);
-}, "~S");
-Clazz.defineMethod (c$, "getInfo",
-function () {
-return this.fontSizeNominal + " " + this.fontFace + " " + this.fontStyle;
-});
-Clazz.defineStatics (c$,
-"FONT_ALLOCATION_UNIT", 8,
-"fontkeyCount", 1,
-"fontkeys", Clazz.newIntArray (8, 0));
-c$.font3ds = c$.prototype.font3ds = new Array (8);
-Clazz.defineStatics (c$,
-"FONT_FACE_SANS", 0,
-"FONT_FACE_SERIF", 1,
-"FONT_FACE_MONO", 2,
-"fontFaces", Clazz.newArray (-1, ["SansSerif", "Serif", "Monospaced", ""]),
-"FONT_STYLE_PLAIN", 0,
-"FONT_STYLE_BOLD", 1,
-"FONT_STYLE_ITALIC", 2,
-"FONT_STYLE_BOLDITALIC", 3,
-"fontStyles", Clazz.newArray (-1, ["Plain", "Bold", "Italic", "BoldItalic"]));
-});
+Clazz.declarePackage ("javajs.awt");
+Clazz.load (null, "javajs.awt.Font", ["javajs.util.AU"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.fid = 0;
+this.fontFace = null;
+this.fontStyle = null;
+this.fontSizeNominal = 0;
+this.idFontFace = 0;
+this.idFontStyle = 0;
+this.fontSize = 0;
+this.font = null;
+this.fontMetrics = null;
+this.manager = null;
+this.ascent = 0;
+this.descent = 0;
+this.isBold = false;
+this.isItalic = false;
+Clazz.instantialize (this, arguments);
+}, javajs.awt, "Font");
+Clazz.makeConstructor (c$,
+($fz = function (manager, fid, idFontFace, idFontStyle, fontSize, fontSizeNominal, graphics) {
+this.manager = manager;
+this.fid = fid;
+this.fontFace = javajs.awt.Font.fontFaces[idFontFace];
+this.fontStyle = javajs.awt.Font.fontStyles[idFontStyle];
+this.idFontFace = idFontFace;
+this.idFontStyle = idFontStyle;
+this.fontSize = fontSize;
+this.isBold = (idFontStyle & 1) == 1;
+this.isItalic = (idFontStyle & 2) == 2;
+this.fontSizeNominal = fontSizeNominal;
+this.font = manager.newFont (javajs.awt.Font.fontFaces[idFontFace], this.isBold, this.isItalic, fontSize);
+this.fontMetrics = manager.getFontMetrics (this, graphics);
+this.descent = manager.getFontDescent (this.fontMetrics);
+this.ascent = manager.getFontAscent (this.fontMetrics);
+}, $fz.isPrivate = true, $fz), "javajs.api.FontManager,~N,~N,~N,~N,~N,~O");
+c$.getFont3D = Clazz.defineMethod (c$, "getFont3D",
+function (fontID) {
+return javajs.awt.Font.font3ds[fontID & 0xFF];
+}, "~N");
+c$.createFont3D = Clazz.defineMethod (c$, "createFont3D",
+function (fontface, fontstyle, fontsize, fontsizeNominal, manager, graphicsForMetrics) {
+if (fontsize > 0xFF) fontsize = 0xFF;
+var fontsizeX16 = (Clazz.floatToInt (fontsize)) << 4;
+var fontkey = ((fontface & 3) | ((fontstyle & 3) << 2) | (fontsizeX16 << 4));
+for (var i = javajs.awt.Font.fontkeyCount; --i > 0; ) if (fontkey == javajs.awt.Font.fontkeys[i] && javajs.awt.Font.font3ds[i].fontSizeNominal == fontsizeNominal) return javajs.awt.Font.font3ds[i];
+
+var fontIndexNext = javajs.awt.Font.fontkeyCount++;
+if (fontIndexNext == javajs.awt.Font.fontkeys.length) javajs.awt.Font.fontkeys = javajs.util.AU.arrayCopyI (javajs.awt.Font.fontkeys, fontIndexNext + 8);
+javajs.awt.Font.font3ds = javajs.util.AU.arrayCopyObject (javajs.awt.Font.font3ds, fontIndexNext + 8);
+var font3d = new javajs.awt.Font (manager, fontIndexNext, fontface, fontstyle, fontsize, fontsizeNominal, graphicsForMetrics);
+javajs.awt.Font.font3ds[fontIndexNext] = font3d;
+javajs.awt.Font.fontkeys[fontIndexNext] = fontkey;
+return font3d;
+}, "~N,~N,~N,~N,javajs.api.FontManager,~O");
+c$.getFontFaceID = Clazz.defineMethod (c$, "getFontFaceID",
+function (fontface) {
+return ("Monospaced".equalsIgnoreCase (fontface) ? 2 : "Serif".equalsIgnoreCase (fontface) ? 1 : 0);
+}, "~S");
+c$.getFontStyleID = Clazz.defineMethod (c$, "getFontStyleID",
+function (fontstyle) {
+for (var i = 4; --i >= 0; ) if (javajs.awt.Font.fontStyles[i].equalsIgnoreCase (fontstyle)) return i;
+
+return -1;
+}, "~S");
+Clazz.defineMethod (c$, "getAscent",
+function () {
+return this.ascent;
+});
+Clazz.defineMethod (c$, "getDescent",
+function () {
+return this.descent;
+});
+Clazz.defineMethod (c$, "getHeight",
+function () {
+return this.getAscent () + this.getDescent ();
+});
+Clazz.defineMethod (c$, "getFontMetrics",
+function () {
+return this.fontMetrics;
+});
+Clazz.defineMethod (c$, "stringWidth",
+function (text) {
+return this.manager.fontStringWidth (this, text);
+}, "~S");
+Clazz.defineMethod (c$, "getInfo",
+function () {
+return this.fontSizeNominal + " " + this.fontFace + " " + this.fontStyle;
+});
+Clazz.defineStatics (c$,
+"FONT_ALLOCATION_UNIT", 8,
+"fontkeyCount", 1,
+"fontkeys", Clazz.newIntArray (8, 0));
+c$.font3ds = c$.prototype.font3ds = new Array (8);
+Clazz.defineStatics (c$,
+"FONT_FACE_SANS", 0,
+"FONT_FACE_SERIF", 1,
+"FONT_FACE_MONO", 2,
+"fontFaces", Clazz.newArray (-1, ["SansSerif", "Serif", "Monospaced", ""]),
+"FONT_STYLE_PLAIN", 0,
+"FONT_STYLE_BOLD", 1,
+"FONT_STYLE_ITALIC", 2,
+"FONT_STYLE_BOLDITALIC", 3,
+"fontStyles", Clazz.newArray (-1, ["Plain", "Bold", "Italic", "BoldItalic"]));
+});
diff --git a/bin/javajs/awt/LayoutManager.js b/bin/javajs/awt/LayoutManager.js
index 49c8b3a..93d4055 100644
--- a/bin/javajs/awt/LayoutManager.js
+++ b/bin/javajs/awt/LayoutManager.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.awt");
-c$ = Clazz.declareType (javajs.awt, "LayoutManager");
+Clazz.declarePackage ("javajs.awt");
+c$ = Clazz.declareType (javajs.awt, "LayoutManager");
diff --git a/bin/javajs/awt/event/ActionEvent.js b/bin/javajs/awt/event/ActionEvent.js
index 11f0d44..5ff2dcc 100644
--- a/bin/javajs/awt/event/ActionEvent.js
+++ b/bin/javajs/awt/event/ActionEvent.js
@@ -1,11 +1,11 @@
-Clazz.declarePackage ("javajs.awt.event");
-Clazz.load (["javajs.awt.event.Event"], "javajs.awt.event.ActionEvent", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.actionCommand = null;
-Clazz.instantialize (this, arguments);
-}, javajs.awt.event, "ActionEvent", javajs.awt.event.Event);
-Clazz.defineMethod (c$, "getActionCommand",
-function () {
-return this.actionCommand;
-});
-});
+Clazz.declarePackage ("javajs.awt.event");
+Clazz.load (["javajs.awt.event.Event"], "javajs.awt.event.ActionEvent", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.actionCommand = null;
+Clazz.instantialize (this, arguments);
+}, javajs.awt.event, "ActionEvent", javajs.awt.event.Event);
+Clazz.defineMethod (c$, "getActionCommand",
+function () {
+return this.actionCommand;
+});
+});
diff --git a/bin/javajs/awt/event/ActionListener.js b/bin/javajs/awt/event/ActionListener.js
index c41017a..09f483e 100644
--- a/bin/javajs/awt/event/ActionListener.js
+++ b/bin/javajs/awt/event/ActionListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.awt.event");
-Clazz.declareInterface (javajs.awt.event, "ActionListener");
+Clazz.declarePackage ("javajs.awt.event");
+Clazz.declareInterface (javajs.awt.event, "ActionListener");
diff --git a/bin/javajs/awt/event/Event.js b/bin/javajs/awt/event/Event.js
index 795e48f..522ac2f 100644
--- a/bin/javajs/awt/event/Event.js
+++ b/bin/javajs/awt/event/Event.js
@@ -1,49 +1,49 @@
-Clazz.declarePackage ("javajs.awt.event");
-c$ = Clazz.decorateAsClass (function () {
-this.source = null;
-Clazz.instantialize (this, arguments);
-}, javajs.awt.event, "Event");
-Clazz.defineMethod (c$, "getSource",
-function () {
-return this.source;
-});
-Clazz.defineStatics (c$,
-"MOUSE_LEFT", 16,
-"MOUSE_MIDDLE", 8,
-"MOUSE_RIGHT", 4,
-"MOUSE_WHEEL", 32,
-"MAC_COMMAND", 20,
-"BUTTON_MASK", 28,
-"MOUSE_DOWN", 501,
-"MOUSE_UP", 502,
-"MOUSE_MOVE", 503,
-"MOUSE_ENTER", 504,
-"MOUSE_EXIT", 505,
-"MOUSE_DRAG", 506,
-"SHIFT_MASK", 1,
-"ALT_MASK", 8,
-"CTRL_MASK", 2,
-"CTRL_ALT", 10,
-"CTRL_SHIFT", 3,
-"META_MASK", 4,
-"VK_SHIFT", 16,
-"VK_ALT", 18,
-"VK_CONTROL", 17,
-"VK_META", 157,
-"VK_LEFT", 37,
-"VK_RIGHT", 39,
-"VK_PERIOD", 46,
-"VK_SPACE", 32,
-"VK_DOWN", 40,
-"VK_UP", 38,
-"VK_ESCAPE", 27,
-"VK_DELETE", 127,
-"VK_BACK_SPACE", 8,
-"VK_PAGE_DOWN", 34,
-"VK_PAGE_UP", 33,
-"MOVED", 0,
-"DRAGGED", 1,
-"CLICKED", 2,
-"WHEELED", 3,
-"PRESSED", 4,
-"RELEASED", 5);
+Clazz.declarePackage ("javajs.awt.event");
+c$ = Clazz.decorateAsClass (function () {
+this.source = null;
+Clazz.instantialize (this, arguments);
+}, javajs.awt.event, "Event");
+Clazz.defineMethod (c$, "getSource",
+function () {
+return this.source;
+});
+Clazz.defineStatics (c$,
+"MOUSE_LEFT", 16,
+"MOUSE_MIDDLE", 8,
+"MOUSE_RIGHT", 4,
+"MOUSE_WHEEL", 32,
+"MAC_COMMAND", 20,
+"BUTTON_MASK", 28,
+"MOUSE_DOWN", 501,
+"MOUSE_UP", 502,
+"MOUSE_MOVE", 503,
+"MOUSE_ENTER", 504,
+"MOUSE_EXIT", 505,
+"MOUSE_DRAG", 506,
+"SHIFT_MASK", 1,
+"ALT_MASK", 8,
+"CTRL_MASK", 2,
+"CTRL_ALT", 10,
+"CTRL_SHIFT", 3,
+"META_MASK", 4,
+"VK_SHIFT", 16,
+"VK_ALT", 18,
+"VK_CONTROL", 17,
+"VK_META", 157,
+"VK_LEFT", 37,
+"VK_RIGHT", 39,
+"VK_PERIOD", 46,
+"VK_SPACE", 32,
+"VK_DOWN", 40,
+"VK_UP", 38,
+"VK_ESCAPE", 27,
+"VK_DELETE", 127,
+"VK_BACK_SPACE", 8,
+"VK_PAGE_DOWN", 34,
+"VK_PAGE_UP", 33,
+"MOVED", 0,
+"DRAGGED", 1,
+"CLICKED", 2,
+"WHEELED", 3,
+"PRESSED", 4,
+"RELEASED", 5);
diff --git a/bin/javajs/awt/event/ItemEvent.js b/bin/javajs/awt/event/ItemEvent.js
index 8aa944f..b2722ab 100644
--- a/bin/javajs/awt/event/ItemEvent.js
+++ b/bin/javajs/awt/event/ItemEvent.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("javajs.awt.event");
-Clazz.load (["javajs.awt.event.Event"], "javajs.awt.event.ItemEvent", null, function () {
-c$ = Clazz.declareType (javajs.awt.event, "ItemEvent", javajs.awt.event.Event);
-});
+Clazz.declarePackage ("javajs.awt.event");
+Clazz.load (["javajs.awt.event.Event"], "javajs.awt.event.ItemEvent", null, function () {
+c$ = Clazz.declareType (javajs.awt.event, "ItemEvent", javajs.awt.event.Event);
+});
diff --git a/bin/javajs/awt/event/WindowEvent.js b/bin/javajs/awt/event/WindowEvent.js
index efa578b..0017c88 100644
--- a/bin/javajs/awt/event/WindowEvent.js
+++ b/bin/javajs/awt/event/WindowEvent.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("javajs.awt.event");
-Clazz.load (["javajs.awt.event.Event"], "javajs.awt.event.WindowEvent", null, function () {
-c$ = Clazz.declareType (javajs.awt.event, "WindowEvent", javajs.awt.event.Event);
-});
+Clazz.declarePackage ("javajs.awt.event");
+Clazz.load (["javajs.awt.event.Event"], "javajs.awt.event.WindowEvent", null, function () {
+c$ = Clazz.declareType (javajs.awt.event, "WindowEvent", javajs.awt.event.Event);
+});
diff --git a/bin/javajs/awt/event/WindowListener.js b/bin/javajs/awt/event/WindowListener.js
index bb9e9c5..7656d2f 100644
--- a/bin/javajs/awt/event/WindowListener.js
+++ b/bin/javajs/awt/event/WindowListener.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.awt.event");
-Clazz.declareInterface (javajs.awt.event, "WindowListener");
+Clazz.declarePackage ("javajs.awt.event");
+Clazz.declareInterface (javajs.awt.event, "WindowListener");
diff --git a/bin/javajs/export/PDFCreator.js b/bin/javajs/export/PDFCreator.js
index 7f5c820..3442530 100644
--- a/bin/javajs/export/PDFCreator.js
+++ b/bin/javajs/export/PDFCreator.js
@@ -1,300 +1,300 @@
-Clazz.declarePackage ("javajs.export");
-Clazz.load (null, "javajs.export.PDFCreator", ["java.lang.Double", "java.util.Hashtable", "javajs.export.PDFObject", "javajs.util.Lst", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.os = null;
-this.indirectObjects = null;
-this.root = null;
-this.graphics = null;
-this.pt = 0;
-this.xrefPt = 0;
-this.count = 0;
-this.height = 0;
-this.width = 0;
-this.fonts = null;
-this.images = null;
-Clazz.instantialize (this, arguments);
-}, javajs["export"], "PDFCreator");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "setOutputStream",
-function (os) {
-this.os = os;
-}, "java.io.OutputStream");
-Clazz.defineMethod (c$, "newDocument",
-function (paperWidth, paperHeight, isLandscape) {
-this.width = (isLandscape ? paperHeight : paperWidth);
-this.height = (isLandscape ? paperWidth : paperHeight);
-System.out.println ("Creating PDF with width=" + this.width + " and height=" + this.height);
-this.fonts = new java.util.Hashtable ();
-this.indirectObjects = new javajs.util.Lst ();
-this.root = this.newObject ("Catalog");
-var pages = this.newObject ("Pages");
-var page = this.newObject ("Page");
-var pageContents = this.newObject (null);
-this.graphics = this.newObject ("XObject");
-this.root.addDef ("Pages", pages.getRef ());
-pages.addDef ("Count", "1");
-pages.addDef ("Kids", "[ " + page.getRef () + " ]");
-page.addDef ("Parent", pages.getRef ());
-page.addDef ("MediaBox", "[ 0 0 " + paperWidth + " " + paperHeight + " ]");
-if (isLandscape) page.addDef ("Rotate", "90");
-pageContents.addDef ("Length", "?");
-pageContents.append ((isLandscape ? "q 0 1 1 0 0 0 " : "q 1 0 0 -1 0 " + (paperHeight)) + " cm /" + this.graphics.getID () + " Do Q");
-page.addDef ("Contents", pageContents.getRef ());
-this.addProcSet (page);
-this.addProcSet (this.graphics);
-this.graphics.addDef ("Subtype", "/Form");
-this.graphics.addDef ("FormType", "1");
-this.graphics.addDef ("BBox", "[0 0 " + this.width + " " + this.height + "]");
-this.graphics.addDef ("Matrix", "[1 0 0 1 0 0]");
-this.graphics.addDef ("Length", "?");
-page.addResource ("XObject", this.graphics.getID (), this.graphics.getRef ());
-this.g ("q 1 w 1 J 1 j 10 M []0 d q ");
-this.clip (0, 0, this.width, this.height);
-}, "~N,~N,~B");
-Clazz.defineMethod (c$, "addProcSet",
-($fz = function (o) {
-o.addResource (null, "ProcSet", "[/PDF /Text /ImageB /ImageC /ImageI]");
-}, $fz.isPrivate = true, $fz), "javajs.export.PDFObject");
-Clazz.defineMethod (c$, "clip",
-($fz = function (x1, y1, x2, y2) {
-this.moveto (x1, y1);
-this.lineto (x2, y1);
-this.lineto (x2, y2);
-this.lineto (x1, y2);
-this.g ("h W n");
-}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "moveto",
-function (x, y) {
-this.g (x + " " + y + " m");
-}, "~N,~N");
-Clazz.defineMethod (c$, "lineto",
-function (x, y) {
-this.g (x + " " + y + " l");
-}, "~N,~N");
-Clazz.defineMethod (c$, "newObject",
-($fz = function (type) {
-var o = new javajs["export"].PDFObject (++this.count);
-if (type != null) o.addDef ("Type", "/" + type);
-this.indirectObjects.addLast (o);
-return o;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "addInfo",
-function (data) {
-var info = new java.util.Hashtable ();
-for (var e, $e = data.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
-var value = "(" + e.getValue ().$replace (')', '_').$replace ('(', '_') + ")";
-info.put (e.getKey (), value);
-}
-this.root.addDef ("Info", info);
-}, "java.util.Map");
-Clazz.defineMethod (c$, "addFontResource",
-($fz = function (fname) {
-var f = this.newObject ("Font");
-this.fonts.put (fname, f);
-f.addDef ("BaseFont", fname);
-f.addDef ("Encoding", "/WinAnsiEncoding");
-f.addDef ("Subtype", "/Type1");
-this.graphics.addResource ("Font", f.getID (), f.getRef ());
-return f;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "addImageResource",
-function (newImage, width, height, buffer, isRGB) {
-var imageObj = this.newObject ("XObject");
-if (this.images == null) this.images = new java.util.Hashtable ();
-this.images.put (newImage, imageObj);
-imageObj.addDef ("Subtype", "/Image");
-imageObj.addDef ("Length", "?");
-imageObj.addDef ("ColorSpace", isRGB ? "/DeviceRGB" : "/DeviceGray");
-imageObj.addDef ("BitsPerComponent", "8");
-imageObj.addDef ("Width", "" + width);
-imageObj.addDef ("Height", "" + height);
-this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());
-var n = buffer.length;
-var stream = Clazz.newByteArray (n * (isRGB ? 3 : 1), 0);
-if (isRGB) {
-for (var i = 0, pt = 0; i < n; i++) {
-stream[pt++] = ((buffer[i] >> 16) & 0xFF);
-stream[pt++] = ((buffer[i] >> 8) & 0xFF);
-stream[pt++] = (buffer[i] & 0xFF);
-}
-} else {
-for (var i = 0; i < n; i++) stream[i] = buffer[i];
-
-}imageObj.setStream (stream);
-this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());
-}, "~O,~N,~N,~A,~B");
-Clazz.defineMethod (c$, "g",
-function (cmd) {
-this.graphics.append (cmd).appendC ('\n');
-}, "~S");
-Clazz.defineMethod (c$, "output",
-($fz = function (s) {
-var b = s.getBytes ();
-this.os.write (b, 0, b.length);
-this.pt += b.length;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "closeDocument",
-function () {
-this.g ("Q Q");
-this.outputHeader ();
-this.writeObjects ();
-this.writeXRefTable ();
-this.writeTrailer ();
-this.os.flush ();
-this.os.close ();
-});
-Clazz.defineMethod (c$, "outputHeader",
-($fz = function () {
-this.output ("%PDF-1.3\n%");
-var b = Clazz.newByteArray (-1, [-1, -1, -1, -1]);
-this.os.write (b, 0, b.length);
-this.pt += 4;
-this.output ("\n");
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeTrailer",
-($fz = function () {
-var trailer = new javajs["export"].PDFObject (-2);
-this.output ("trailer");
-trailer.addDef ("Size", "" + this.indirectObjects.size ());
-trailer.addDef ("Root", this.root.getRef ());
-trailer.output (this.os);
-this.output ("startxref\n");
-this.output ("" + this.xrefPt + "\n");
-this.output ("%%EOF\n");
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeObjects",
-($fz = function () {
-var nObj = this.indirectObjects.size ();
-for (var i = 0; i < nObj; i++) {
-var o = this.indirectObjects.get (i);
-if (!o.isFont ()) continue;
-o.pt = this.pt;
-this.pt += o.output (this.os);
-}
-for (var i = 0; i < nObj; i++) {
-var o = this.indirectObjects.get (i);
-if (o.isFont ()) continue;
-o.pt = this.pt;
-this.pt += o.output (this.os);
-}
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeXRefTable",
-($fz = function () {
-this.xrefPt = this.pt;
-var nObj = this.indirectObjects.size ();
-var sb = new javajs.util.SB ();
-sb.append ("xref\n0 " + (nObj + 1) + "\n0000000000 65535 f\r\n");
-for (var i = 0; i < nObj; i++) {
-var o = this.indirectObjects.get (i);
-var s = "0000000000" + o.pt;
-sb.append (s.substring (s.length - 10));
-sb.append (" 00000 n\r\n");
-}
-this.output (sb.toString ());
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "canDoLineTo",
-function () {
-return true;
-});
-Clazz.defineMethod (c$, "fill",
-function () {
-this.g ("f");
-});
-Clazz.defineMethod (c$, "stroke",
-function () {
-this.g ("S");
-});
-Clazz.defineMethod (c$, "doCircle",
-function (x, y, r, doFill) {
-var d = r * 4 * (Math.sqrt (2) - 1) / 3;
-var dx = x;
-var dy = y;
-this.g ((dx + r) + " " + dy + " m");
-this.g ((dx + r) + " " + (dy + d) + " " + (dx + d) + " " + (dy + r) + " " + (dx) + " " + (dy + r) + " " + " c");
-this.g ((dx - d) + " " + (dy + r) + " " + (dx - r) + " " + (dy + d) + " " + (dx - r) + " " + (dy) + " c");
-this.g ((dx - r) + " " + (dy - d) + " " + (dx - d) + " " + (dy - r) + " " + (dx) + " " + (dy - r) + " c");
-this.g ((dx + d) + " " + (dy - r) + " " + (dx + r) + " " + (dy - d) + " " + (dx + r) + " " + (dy) + " c");
-this.g (doFill ? "f" : "s");
-}, "~N,~N,~N,~B");
-Clazz.defineMethod (c$, "doPolygon",
-function (axPoints, ayPoints, nPoints, doFill) {
-this.moveto (axPoints[0], ayPoints[0]);
-for (var i = 1; i < nPoints; i++) this.lineto (axPoints[i], ayPoints[i]);
-
-this.g (doFill ? "f" : "s");
-}, "~A,~A,~N,~B");
-Clazz.defineMethod (c$, "doRect",
-function (x, y, width, height, doFill) {
-this.g (x + " " + y + " " + width + " " + height + " re " + (doFill ? "f" : "s"));
-}, "~N,~N,~N,~N,~B");
-Clazz.defineMethod (c$, "drawImage",
-function (image, destX0, destY0, destX1, destY1, srcX0, srcY0, srcX1, srcY1) {
-var imageObj = this.images.get (image);
-if (imageObj == null) return;
-this.g ("q");
-this.clip (destX0, destY0, destX1, destY1);
-var iw = Double.parseDouble (imageObj.getDef ("Width"));
-var ih = Double.parseDouble (imageObj.getDef ("Height"));
-var dw = (destX1 - destX0 + 1);
-var dh = (destY1 - destY0 + 1);
-var sw = (srcX1 - srcX0 + 1);
-var sh = (srcY1 - srcY0 + 1);
-var scaleX = dw / sw;
-var scaleY = dh / sh;
-var transX = destX0 - srcX0 * scaleX;
-var transY = destY0 + (ih - srcY0) * scaleY;
-this.g (scaleX * iw + " 0 0 " + -scaleY * ih + " " + transX + " " + transY + " cm");
-this.g ("/" + imageObj.getID () + " Do");
-this.g ("Q");
-}, "~O,~N,~N,~N,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "drawStringRotated",
-function (s, x, y, angle) {
-this.g ("q " + this.getRotation (angle) + " " + x + " " + y + " cm BT(" + s + ")Tj ET Q");
-}, "~S,~N,~N,~N");
-Clazz.defineMethod (c$, "getRotation",
-function (angle) {
-var cos = 0;
-var sin = 0;
-switch (angle) {
-case 0:
-cos = 1;
-break;
-case 90:
-sin = 1;
-break;
-case -90:
-sin = -1;
-break;
-case 180:
-cos = -1;
-break;
-default:
-var a = (angle / 180.0 * 3.141592653589793);
-cos = Math.cos (a);
-sin = Math.sin (a);
-if (Math.abs (cos) < 0.0001) cos = 0;
-if (Math.abs (sin) < 0.0001) sin = 0;
-}
-return cos + " " + sin + " " + sin + " " + -cos;
-}, "~N");
-Clazz.defineMethod (c$, "setColor",
-function (rgb, isFill) {
-this.g (rgb[0] + " " + rgb[1] + " " + rgb[2] + (isFill ? " rg" : " RG"));
-}, "~A,~B");
-Clazz.defineMethod (c$, "setFont",
-function (fname, size) {
-var f = this.fonts.get (fname);
-if (f == null) f = this.addFontResource (fname);
-this.g ("/" + f.getID () + " " + size + " Tf");
-}, "~S,~N");
-Clazz.defineMethod (c$, "setLineWidth",
-function (width) {
-this.g (width + " w");
-}, "~N");
-Clazz.defineMethod (c$, "translateScale",
-function (x, y, scale) {
-this.g (scale + " 0 0 " + scale + " " + x + " " + y + " cm");
-}, "~N,~N,~N");
-});
+Clazz.declarePackage ("javajs.export");
+Clazz.load (null, "javajs.export.PDFCreator", ["java.lang.Double", "java.util.Hashtable", "javajs.export.PDFObject", "javajs.util.Lst", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.os = null;
+this.indirectObjects = null;
+this.root = null;
+this.graphics = null;
+this.pt = 0;
+this.xrefPt = 0;
+this.count = 0;
+this.height = 0;
+this.width = 0;
+this.fonts = null;
+this.images = null;
+Clazz.instantialize (this, arguments);
+}, javajs["export"], "PDFCreator");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "setOutputStream",
+function (os) {
+this.os = os;
+}, "java.io.OutputStream");
+Clazz.defineMethod (c$, "newDocument",
+function (paperWidth, paperHeight, isLandscape) {
+this.width = (isLandscape ? paperHeight : paperWidth);
+this.height = (isLandscape ? paperWidth : paperHeight);
+System.out.println ("Creating PDF with width=" + this.width + " and height=" + this.height);
+this.fonts = new java.util.Hashtable ();
+this.indirectObjects = new javajs.util.Lst ();
+this.root = this.newObject ("Catalog");
+var pages = this.newObject ("Pages");
+var page = this.newObject ("Page");
+var pageContents = this.newObject (null);
+this.graphics = this.newObject ("XObject");
+this.root.addDef ("Pages", pages.getRef ());
+pages.addDef ("Count", "1");
+pages.addDef ("Kids", "[ " + page.getRef () + " ]");
+page.addDef ("Parent", pages.getRef ());
+page.addDef ("MediaBox", "[ 0 0 " + paperWidth + " " + paperHeight + " ]");
+if (isLandscape) page.addDef ("Rotate", "90");
+pageContents.addDef ("Length", "?");
+pageContents.append ((isLandscape ? "q 0 1 1 0 0 0 " : "q 1 0 0 -1 0 " + (paperHeight)) + " cm /" + this.graphics.getID () + " Do Q");
+page.addDef ("Contents", pageContents.getRef ());
+this.addProcSet (page);
+this.addProcSet (this.graphics);
+this.graphics.addDef ("Subtype", "/Form");
+this.graphics.addDef ("FormType", "1");
+this.graphics.addDef ("BBox", "[0 0 " + this.width + " " + this.height + "]");
+this.graphics.addDef ("Matrix", "[1 0 0 1 0 0]");
+this.graphics.addDef ("Length", "?");
+page.addResource ("XObject", this.graphics.getID (), this.graphics.getRef ());
+this.g ("q 1 w 1 J 1 j 10 M []0 d q ");
+this.clip (0, 0, this.width, this.height);
+}, "~N,~N,~B");
+Clazz.defineMethod (c$, "addProcSet",
+($fz = function (o) {
+o.addResource (null, "ProcSet", "[/PDF /Text /ImageB /ImageC /ImageI]");
+}, $fz.isPrivate = true, $fz), "javajs.export.PDFObject");
+Clazz.defineMethod (c$, "clip",
+($fz = function (x1, y1, x2, y2) {
+this.moveto (x1, y1);
+this.lineto (x2, y1);
+this.lineto (x2, y2);
+this.lineto (x1, y2);
+this.g ("h W n");
+}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "moveto",
+function (x, y) {
+this.g (x + " " + y + " m");
+}, "~N,~N");
+Clazz.defineMethod (c$, "lineto",
+function (x, y) {
+this.g (x + " " + y + " l");
+}, "~N,~N");
+Clazz.defineMethod (c$, "newObject",
+($fz = function (type) {
+var o = new javajs["export"].PDFObject (++this.count);
+if (type != null) o.addDef ("Type", "/" + type);
+this.indirectObjects.addLast (o);
+return o;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "addInfo",
+function (data) {
+var info = new java.util.Hashtable ();
+for (var e, $e = data.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
+var value = "(" + e.getValue ().$replace (')', '_').$replace ('(', '_') + ")";
+info.put (e.getKey (), value);
+}
+this.root.addDef ("Info", info);
+}, "java.util.Map");
+Clazz.defineMethod (c$, "addFontResource",
+($fz = function (fname) {
+var f = this.newObject ("Font");
+this.fonts.put (fname, f);
+f.addDef ("BaseFont", fname);
+f.addDef ("Encoding", "/WinAnsiEncoding");
+f.addDef ("Subtype", "/Type1");
+this.graphics.addResource ("Font", f.getID (), f.getRef ());
+return f;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "addImageResource",
+function (newImage, width, height, buffer, isRGB) {
+var imageObj = this.newObject ("XObject");
+if (this.images == null) this.images = new java.util.Hashtable ();
+this.images.put (newImage, imageObj);
+imageObj.addDef ("Subtype", "/Image");
+imageObj.addDef ("Length", "?");
+imageObj.addDef ("ColorSpace", isRGB ? "/DeviceRGB" : "/DeviceGray");
+imageObj.addDef ("BitsPerComponent", "8");
+imageObj.addDef ("Width", "" + width);
+imageObj.addDef ("Height", "" + height);
+this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());
+var n = buffer.length;
+var stream = Clazz.newByteArray (n * (isRGB ? 3 : 1), 0);
+if (isRGB) {
+for (var i = 0, pt = 0; i < n; i++) {
+stream[pt++] = ((buffer[i] >> 16) & 0xFF);
+stream[pt++] = ((buffer[i] >> 8) & 0xFF);
+stream[pt++] = (buffer[i] & 0xFF);
+}
+} else {
+for (var i = 0; i < n; i++) stream[i] = buffer[i];
+
+}imageObj.setStream (stream);
+this.graphics.addResource ("XObject", imageObj.getID (), imageObj.getRef ());
+}, "~O,~N,~N,~A,~B");
+Clazz.defineMethod (c$, "g",
+function (cmd) {
+this.graphics.append (cmd).appendC ('\n');
+}, "~S");
+Clazz.defineMethod (c$, "output",
+($fz = function (s) {
+var b = s.getBytes ();
+this.os.write (b, 0, b.length);
+this.pt += b.length;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "closeDocument",
+function () {
+this.g ("Q Q");
+this.outputHeader ();
+this.writeObjects ();
+this.writeXRefTable ();
+this.writeTrailer ();
+this.os.flush ();
+this.os.close ();
+});
+Clazz.defineMethod (c$, "outputHeader",
+($fz = function () {
+this.output ("%PDF-1.3\n%");
+var b = Clazz.newByteArray (-1, [-1, -1, -1, -1]);
+this.os.write (b, 0, b.length);
+this.pt += 4;
+this.output ("\n");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeTrailer",
+($fz = function () {
+var trailer = new javajs["export"].PDFObject (-2);
+this.output ("trailer");
+trailer.addDef ("Size", "" + this.indirectObjects.size ());
+trailer.addDef ("Root", this.root.getRef ());
+trailer.output (this.os);
+this.output ("startxref\n");
+this.output ("" + this.xrefPt + "\n");
+this.output ("%%EOF\n");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeObjects",
+($fz = function () {
+var nObj = this.indirectObjects.size ();
+for (var i = 0; i < nObj; i++) {
+var o = this.indirectObjects.get (i);
+if (!o.isFont ()) continue;
+o.pt = this.pt;
+this.pt += o.output (this.os);
+}
+for (var i = 0; i < nObj; i++) {
+var o = this.indirectObjects.get (i);
+if (o.isFont ()) continue;
+o.pt = this.pt;
+this.pt += o.output (this.os);
+}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeXRefTable",
+($fz = function () {
+this.xrefPt = this.pt;
+var nObj = this.indirectObjects.size ();
+var sb = new javajs.util.SB ();
+sb.append ("xref\n0 " + (nObj + 1) + "\n0000000000 65535 f\r\n");
+for (var i = 0; i < nObj; i++) {
+var o = this.indirectObjects.get (i);
+var s = "0000000000" + o.pt;
+sb.append (s.substring (s.length - 10));
+sb.append (" 00000 n\r\n");
+}
+this.output (sb.toString ());
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "canDoLineTo",
+function () {
+return true;
+});
+Clazz.defineMethod (c$, "fill",
+function () {
+this.g ("f");
+});
+Clazz.defineMethod (c$, "stroke",
+function () {
+this.g ("S");
+});
+Clazz.defineMethod (c$, "doCircle",
+function (x, y, r, doFill) {
+var d = r * 4 * (Math.sqrt (2) - 1) / 3;
+var dx = x;
+var dy = y;
+this.g ((dx + r) + " " + dy + " m");
+this.g ((dx + r) + " " + (dy + d) + " " + (dx + d) + " " + (dy + r) + " " + (dx) + " " + (dy + r) + " " + " c");
+this.g ((dx - d) + " " + (dy + r) + " " + (dx - r) + " " + (dy + d) + " " + (dx - r) + " " + (dy) + " c");
+this.g ((dx - r) + " " + (dy - d) + " " + (dx - d) + " " + (dy - r) + " " + (dx) + " " + (dy - r) + " c");
+this.g ((dx + d) + " " + (dy - r) + " " + (dx + r) + " " + (dy - d) + " " + (dx + r) + " " + (dy) + " c");
+this.g (doFill ? "f" : "s");
+}, "~N,~N,~N,~B");
+Clazz.defineMethod (c$, "doPolygon",
+function (axPoints, ayPoints, nPoints, doFill) {
+this.moveto (axPoints[0], ayPoints[0]);
+for (var i = 1; i < nPoints; i++) this.lineto (axPoints[i], ayPoints[i]);
+
+this.g (doFill ? "f" : "s");
+}, "~A,~A,~N,~B");
+Clazz.defineMethod (c$, "doRect",
+function (x, y, width, height, doFill) {
+this.g (x + " " + y + " " + width + " " + height + " re " + (doFill ? "f" : "s"));
+}, "~N,~N,~N,~N,~B");
+Clazz.defineMethod (c$, "drawImage",
+function (image, destX0, destY0, destX1, destY1, srcX0, srcY0, srcX1, srcY1) {
+var imageObj = this.images.get (image);
+if (imageObj == null) return;
+this.g ("q");
+this.clip (destX0, destY0, destX1, destY1);
+var iw = Double.parseDouble (imageObj.getDef ("Width"));
+var ih = Double.parseDouble (imageObj.getDef ("Height"));
+var dw = (destX1 - destX0 + 1);
+var dh = (destY1 - destY0 + 1);
+var sw = (srcX1 - srcX0 + 1);
+var sh = (srcY1 - srcY0 + 1);
+var scaleX = dw / sw;
+var scaleY = dh / sh;
+var transX = destX0 - srcX0 * scaleX;
+var transY = destY0 + (ih - srcY0) * scaleY;
+this.g (scaleX * iw + " 0 0 " + -scaleY * ih + " " + transX + " " + transY + " cm");
+this.g ("/" + imageObj.getID () + " Do");
+this.g ("Q");
+}, "~O,~N,~N,~N,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "drawStringRotated",
+function (s, x, y, angle) {
+this.g ("q " + this.getRotation (angle) + " " + x + " " + y + " cm BT(" + s + ")Tj ET Q");
+}, "~S,~N,~N,~N");
+Clazz.defineMethod (c$, "getRotation",
+function (angle) {
+var cos = 0;
+var sin = 0;
+switch (angle) {
+case 0:
+cos = 1;
+break;
+case 90:
+sin = 1;
+break;
+case -90:
+sin = -1;
+break;
+case 180:
+cos = -1;
+break;
+default:
+var a = (angle / 180.0 * 3.141592653589793);
+cos = Math.cos (a);
+sin = Math.sin (a);
+if (Math.abs (cos) < 0.0001) cos = 0;
+if (Math.abs (sin) < 0.0001) sin = 0;
+}
+return cos + " " + sin + " " + sin + " " + -cos;
+}, "~N");
+Clazz.defineMethod (c$, "setColor",
+function (rgb, isFill) {
+this.g (rgb[0] + " " + rgb[1] + " " + rgb[2] + (isFill ? " rg" : " RG"));
+}, "~A,~B");
+Clazz.defineMethod (c$, "setFont",
+function (fname, size) {
+var f = this.fonts.get (fname);
+if (f == null) f = this.addFontResource (fname);
+this.g ("/" + f.getID () + " " + size + " Tf");
+}, "~S,~N");
+Clazz.defineMethod (c$, "setLineWidth",
+function (width) {
+this.g (width + " w");
+}, "~N");
+Clazz.defineMethod (c$, "translateScale",
+function (x, y, scale) {
+this.g (scale + " 0 0 " + scale + " " + x + " " + y + " cm");
+}, "~N,~N,~N");
+});
diff --git a/bin/javajs/export/PDFObject.class b/bin/javajs/export/PDFObject.class
index c270a41..9a6e8fe 100644
Binary files a/bin/javajs/export/PDFObject.class and b/bin/javajs/export/PDFObject.class differ
diff --git a/bin/javajs/export/PDFObject.js b/bin/javajs/export/PDFObject.js
index 2752622..ad20c61 100644
--- a/bin/javajs/export/PDFObject.js
+++ b/bin/javajs/export/PDFObject.js
@@ -1,115 +1,115 @@
-Clazz.declarePackage ("javajs.export");
-Clazz.load (["javajs.util.SB"], "javajs.export.PDFObject", ["java.io.ByteArrayOutputStream", "java.util.Hashtable", "$.Map", "java.util.zip.Deflater", "$.DeflaterOutputStream"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.dictionary = null;
-this.stream = null;
-this.index = 0;
-this.type = null;
-this.len = 0;
-this.pt = 0;
-Clazz.instantialize (this, arguments);
-}, javajs["export"], "PDFObject", javajs.util.SB);
-Clazz.makeConstructor (c$,
-function (index) {
-Clazz.superConstructor (this, javajs["export"].PDFObject, []);
-this.index = index;
-}, "~N");
-Clazz.defineMethod (c$, "getRef",
-function () {
-return this.index + " 0 R";
-});
-Clazz.defineMethod (c$, "getID",
-function () {
-return this.type.substring (0, 1) + this.index;
-});
-Clazz.defineMethod (c$, "isFont",
-function () {
-return "Font".equals (this.type);
-});
-Clazz.defineMethod (c$, "setStream",
-function (stream) {
-this.stream = stream;
-}, "~A");
-Clazz.defineMethod (c$, "getDef",
-function (key) {
-return this.dictionary.get (key);
-}, "~S");
-Clazz.defineMethod (c$, "addDef",
-function (key, value) {
-if (this.dictionary == null) this.dictionary = new java.util.Hashtable ();
-this.dictionary.put (key, value);
-if (key.equals ("Type")) this.type = (value).substring (1);
-}, "~S,~O");
-Clazz.defineMethod (c$, "setAsStream",
-function () {
-this.stream = this.toBytes (0, -1);
-this.setLength (0);
-});
-Clazz.defineMethod (c$, "output",
-function (os) {
-if (this.index > 0) {
-var s = this.index + " 0 obj\n";
-this.write (os, s.getBytes (), 0);
-}var streamLen = 0;
-if (this.dictionary != null) {
-if (this.dictionary.containsKey ("Length")) {
-if (this.stream == null) this.setAsStream ();
-streamLen = this.stream.length;
-var doDeflate = (streamLen > 1000);
-if (doDeflate) {
-var deflater = new java.util.zip.Deflater (9);
-var outBytes = new java.io.ByteArrayOutputStream (1024);
-var compBytes = new java.util.zip.DeflaterOutputStream (outBytes, deflater);
-compBytes.write (this.stream, 0, streamLen);
-compBytes.finish ();
-this.stream = outBytes.toByteArray ();
-this.dictionary.put ("Filter", "/FlateDecode");
-streamLen = this.stream.length;
-}this.dictionary.put ("Length", "" + streamLen);
-}this.write (os, this.getDictionaryText (this.dictionary, "\n").getBytes (), 0);
-}if (this.length () > 0) this.write (os, this.toString ().getBytes (), 0);
-if (this.stream != null) {
-this.write (os, "stream\r\n".getBytes (), 0);
-this.write (os, this.stream, streamLen);
-this.write (os, "\r\nendstream\r\n".getBytes (), 0);
-}if (this.index > 0) this.write (os, "endobj\n".getBytes (), 0);
-return this.len;
-}, "java.io.OutputStream");
-Clazz.defineMethod (c$, "write",
-($fz = function (os, bytes, nBytes) {
-if (nBytes == 0) nBytes = bytes.length;
-this.len += nBytes;
-os.write (bytes, 0, nBytes);
-}, $fz.isPrivate = true, $fz), "java.io.OutputStream,~A,~N");
-Clazz.defineMethod (c$, "getDictionaryText",
-($fz = function (d, nl) {
-var sb = new javajs.util.SB ();
-sb.append ("<<");
-if (d.containsKey ("Type")) sb.append ("/Type").appendO (d.get ("Type"));
-for (var e, $e = d.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
-var s = e.getKey ();
-if (s.equals ("Type") || s.startsWith ("!")) continue;
-sb.append ("/" + s);
-var o = e.getValue ();
-if (Clazz.instanceOf (o, java.util.Map)) {
-sb.append ((this.getDictionaryText (o, "")));
-continue;
-}s = e.getValue ();
-if (!s.startsWith ("/")) sb.append (" ");
-sb.appendO (s);
-}
-return (sb.length () > 3 ? sb.append (">>").append (nl).toString () : "");
-}, $fz.isPrivate = true, $fz), "java.util.Map,~S");
-Clazz.defineMethod (c$, "createSubdict",
-($fz = function (d0, dict) {
-var d = d0.get (dict);
-if (d == null) d0.put (dict, d = new java.util.Hashtable ());
-return d;
-}, $fz.isPrivate = true, $fz), "java.util.Map,~S");
-Clazz.defineMethod (c$, "addResource",
-function (type, key, value) {
-var r = this.createSubdict (this.dictionary, "Resources");
-if (type != null) r = this.createSubdict (r, type);
-r.put (key, value);
-}, "~S,~S,~S");
-});
+Clazz.declarePackage ("javajs.export");
+Clazz.load (["javajs.util.SB"], "javajs.export.PDFObject", ["java.io.ByteArrayOutputStream", "java.util.Hashtable", "$.Map", "java.util.zip.Deflater", "$.DeflaterOutputStream"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.dictionary = null;
+this.stream = null;
+this.index = 0;
+this.type = null;
+this.len = 0;
+this.pt = 0;
+Clazz.instantialize (this, arguments);
+}, javajs["export"], "PDFObject", javajs.util.SB);
+Clazz.makeConstructor (c$,
+function (index) {
+Clazz.superConstructor (this, javajs["export"].PDFObject, []);
+this.index = index;
+}, "~N");
+Clazz.defineMethod (c$, "getRef",
+function () {
+return this.index + " 0 R";
+});
+Clazz.defineMethod (c$, "getID",
+function () {
+return this.type.substring (0, 1) + this.index;
+});
+Clazz.defineMethod (c$, "isFont",
+function () {
+return "Font".equals (this.type);
+});
+Clazz.defineMethod (c$, "setStream",
+function (stream) {
+this.stream = stream;
+}, "~A");
+Clazz.defineMethod (c$, "getDef",
+function (key) {
+return this.dictionary.get (key);
+}, "~S");
+Clazz.defineMethod (c$, "addDef",
+function (key, value) {
+if (this.dictionary == null) this.dictionary = new java.util.Hashtable ();
+this.dictionary.put (key, value);
+if (key.equals ("Type")) this.type = (value).substring (1);
+}, "~S,~O");
+Clazz.defineMethod (c$, "setAsStream",
+function () {
+this.stream = this.toBytes (0, -1);
+this.setLength (0);
+});
+Clazz.defineMethod (c$, "output",
+function (os) {
+if (this.index > 0) {
+var s = this.index + " 0 obj\n";
+this.write (os, s.getBytes (), 0);
+}var streamLen = 0;
+if (this.dictionary != null) {
+if (this.dictionary.containsKey ("Length")) {
+if (this.stream == null) this.setAsStream ();
+streamLen = this.stream.length;
+var doDeflate = (streamLen > 1000);
+if (doDeflate) {
+var deflater = new java.util.zip.Deflater (9);
+var outBytes = new java.io.ByteArrayOutputStream (1024);
+var compBytes = new java.util.zip.DeflaterOutputStream (outBytes, deflater);
+compBytes.write (this.stream, 0, streamLen);
+compBytes.finish ();
+this.stream = outBytes.toByteArray ();
+this.dictionary.put ("Filter", "/FlateDecode");
+streamLen = this.stream.length;
+}this.dictionary.put ("Length", "" + streamLen);
+}this.write (os, this.getDictionaryText (this.dictionary, "\n").getBytes (), 0);
+}if (this.length () > 0) this.write (os, this.toString ().getBytes (), 0);
+if (this.stream != null) {
+this.write (os, "stream\r\n".getBytes (), 0);
+this.write (os, this.stream, streamLen);
+this.write (os, "\r\nendstream\r\n".getBytes (), 0);
+}if (this.index > 0) this.write (os, "endobj\n".getBytes (), 0);
+return this.len;
+}, "java.io.OutputStream");
+Clazz.defineMethod (c$, "write",
+($fz = function (os, bytes, nBytes) {
+if (nBytes == 0) nBytes = bytes.length;
+this.len += nBytes;
+os.write (bytes, 0, nBytes);
+}, $fz.isPrivate = true, $fz), "java.io.OutputStream,~A,~N");
+Clazz.defineMethod (c$, "getDictionaryText",
+($fz = function (d, nl) {
+var sb = new javajs.util.SB ();
+sb.append ("<<");
+if (d.containsKey ("Type")) sb.append ("/Type").appendO (d.get ("Type"));
+for (var e, $e = d.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
+var s = e.getKey ();
+if (s.equals ("Type") || s.startsWith ("!")) continue;
+sb.append ("/" + s);
+var o = e.getValue ();
+if (Clazz.instanceOf (o, java.util.Map)) {
+sb.append ((this.getDictionaryText (o, "")));
+continue;
+}s = e.getValue ();
+if (!s.startsWith ("/")) sb.append (" ");
+sb.appendO (s);
+}
+return (sb.length () > 3 ? sb.append (">>").append (nl).toString () : "");
+}, $fz.isPrivate = true, $fz), "java.util.Map,~S");
+Clazz.defineMethod (c$, "createSubdict",
+($fz = function (d0, dict) {
+var d = d0.get (dict);
+if (d == null) d0.put (dict, d = new java.util.Hashtable ());
+return d;
+}, $fz.isPrivate = true, $fz), "java.util.Map,~S");
+Clazz.defineMethod (c$, "addResource",
+function (type, key, value) {
+var r = this.createSubdict (this.dictionary, "Resources");
+if (type != null) r = this.createSubdict (r, type);
+r.put (key, value);
+}, "~S,~S,~S");
+});
diff --git a/bin/javajs/img/BMPDecoder.js b/bin/javajs/img/BMPDecoder.js
index b32016b..c3b4dc7 100644
--- a/bin/javajs/img/BMPDecoder.js
+++ b/bin/javajs/img/BMPDecoder.js
@@ -1,144 +1,144 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (null, "javajs.img.BMPDecoder", ["javajs.util.Rdr"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.bis = null;
-this.temp = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "BMPDecoder");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "decodeWindowsBMP",
-function (bytes) {
-try {
-this.bis = javajs.util.Rdr.getBIS (bytes);
-this.temp = Clazz.newByteArray (4, 0);
-if (this.readByte () != 66 || this.readByte () != 77) return null;
-this.readInt ();
-this.readShort ();
-this.readShort ();
-this.readInt ();
-var imageWidth;
-var imageHeight;
-var bitsPerPixel;
-var nColors = 0;
-var imageSize = 0;
-var headerSize = this.readInt ();
-switch (headerSize) {
-case 12:
-imageWidth = this.readShort ();
-imageHeight = this.readShort ();
-this.readShort ();
-bitsPerPixel = this.readShort ();
-break;
-case 40:
-imageWidth = this.readInt ();
-imageHeight = this.readInt ();
-this.readShort ();
-bitsPerPixel = this.readShort ();
-var ncompression = this.readInt ();
-if (ncompression != 0) {
-System.out.println ("BMP Compression is :" + ncompression + " -- aborting");
-return null;
-}imageSize = this.readInt ();
-this.readInt ();
-this.readInt ();
-nColors = this.readInt ();
-this.readInt ();
-break;
-default:
-System.out.println ("BMP Header unrecognized, length=" + headerSize + " -- aborting");
-return null;
-}
-var isYReversed = (imageHeight < 0);
-if (isYReversed) imageHeight = -imageHeight;
-var nPixels = imageHeight * imageWidth;
-var bytesPerPixel = Clazz.doubleToInt (bitsPerPixel / 8);
-nColors = (nColors > 0 ? nColors : 1 << bitsPerPixel);
-var npad = (bytesPerPixel == 4 ? 0 : imageSize == 0 ? 4 - (imageWidth % 4) : (Clazz.doubleToInt (imageSize / imageHeight)) - imageWidth * bytesPerPixel) % 4;
-var palette;
-var buf = Clazz.newIntArray (nPixels, 0);
-var dpt = (isYReversed ? imageWidth : -imageWidth);
-var pt0 = (isYReversed ? 0 : nPixels + dpt);
-var pt1 = (isYReversed ? nPixels : dpt);
-switch (bitsPerPixel) {
-case 32:
-case 24:
-for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0; i < imageWidth; i++) buf[pt + i] = this.readColor (bytesPerPixel);
-
-
-break;
-case 8:
-palette = Clazz.newIntArray (nColors, 0);
-for (var i = 0; i < nColors; i++) palette[i] = this.readColor (4);
-
-for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0; i < imageWidth; i++) buf[pt + i] = palette[this.readByte ()];
-
-
-break;
-case 4:
-npad = (4 - ((Clazz.doubleToInt ((imageWidth + 1) / 2)) % 4)) % 4;
-palette = Clazz.newIntArray (nColors, 0);
-for (var i = 0; i < nColors; i++) palette[i] = this.readColor (4);
-
-var b4 = 0;
-for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0, shift = 4; i < imageWidth; i++, shift = 4 - shift) buf[pt + i] = palette[((shift == 4 ? (b4 = this.readByte ()) : b4) >> shift) & 0xF];
-
-
-break;
-case 1:
-var color1 = this.readColor (3);
-var color2 = this.readColor (3);
-npad = (4 - ((Clazz.doubleToInt ((imageWidth + 7) / 8)) % 4)) % 4;
-var b = 0;
-for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0, bpt = -1; i < imageWidth; i++, bpt--) {
-if (bpt < 0) {
-b = this.readByte ();
-bpt = 7;
-}buf[pt + i] = ((b & (1 << bpt)) == 0 ? color1 : color2);
-}
-
-break;
-case 64:
-case 2:
-default:
-System.out.println ("Not a 32-, 24-, 8-, 4-, or 1-bit Windows Bitmap, aborting...");
-return null;
-}
-return Clazz.newArray (-1, [buf, Integer.$valueOf (imageWidth), Integer.$valueOf (imageHeight)]);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println ("Caught exception in loadbitmap!");
-} else {
-throw e;
-}
-}
-return null;
-}, "~A");
-Clazz.defineMethod (c$, "pad",
-($fz = function (npad) {
-for (var i = 0; i < npad; i++) this.readByte ();
-
-return true;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "readColor",
-($fz = function (n) {
-this.bis.read (this.temp, 0, n);
-return -16777216 | ((this.temp[2] & 0xff) << 16) | ((this.temp[1] & 0xff) << 8) | this.temp[0] & 0xff;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "readInt",
-($fz = function () {
-this.bis.read (this.temp, 0, 4);
-return ((this.temp[3] & 0xff) << 24) | ((this.temp[2] & 0xff) << 16) | ((this.temp[1] & 0xff) << 8) | this.temp[0] & 0xff;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "readShort",
-($fz = function () {
-this.bis.read (this.temp, 0, 2);
-return ((this.temp[1] & 0xff) << 8) | this.temp[0] & 0xff;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "readByte",
-($fz = function () {
-this.bis.read (this.temp, 0, 1);
-return this.temp[0] & 0xff;
-}, $fz.isPrivate = true, $fz));
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (null, "javajs.img.BMPDecoder", ["javajs.util.Rdr"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.bis = null;
+this.temp = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "BMPDecoder");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "decodeWindowsBMP",
+function (bytes) {
+try {
+this.bis = javajs.util.Rdr.getBIS (bytes);
+this.temp = Clazz.newByteArray (4, 0);
+if (this.readByte () != 66 || this.readByte () != 77) return null;
+this.readInt ();
+this.readShort ();
+this.readShort ();
+this.readInt ();
+var imageWidth;
+var imageHeight;
+var bitsPerPixel;
+var nColors = 0;
+var imageSize = 0;
+var headerSize = this.readInt ();
+switch (headerSize) {
+case 12:
+imageWidth = this.readShort ();
+imageHeight = this.readShort ();
+this.readShort ();
+bitsPerPixel = this.readShort ();
+break;
+case 40:
+imageWidth = this.readInt ();
+imageHeight = this.readInt ();
+this.readShort ();
+bitsPerPixel = this.readShort ();
+var ncompression = this.readInt ();
+if (ncompression != 0) {
+System.out.println ("BMP Compression is :" + ncompression + " -- aborting");
+return null;
+}imageSize = this.readInt ();
+this.readInt ();
+this.readInt ();
+nColors = this.readInt ();
+this.readInt ();
+break;
+default:
+System.out.println ("BMP Header unrecognized, length=" + headerSize + " -- aborting");
+return null;
+}
+var isYReversed = (imageHeight < 0);
+if (isYReversed) imageHeight = -imageHeight;
+var nPixels = imageHeight * imageWidth;
+var bytesPerPixel = Clazz.doubleToInt (bitsPerPixel / 8);
+nColors = (nColors > 0 ? nColors : 1 << bitsPerPixel);
+var npad = (bytesPerPixel == 4 ? 0 : imageSize == 0 ? 4 - (imageWidth % 4) : (Clazz.doubleToInt (imageSize / imageHeight)) - imageWidth * bytesPerPixel) % 4;
+var palette;
+var buf = Clazz.newIntArray (nPixels, 0);
+var dpt = (isYReversed ? imageWidth : -imageWidth);
+var pt0 = (isYReversed ? 0 : nPixels + dpt);
+var pt1 = (isYReversed ? nPixels : dpt);
+switch (bitsPerPixel) {
+case 32:
+case 24:
+for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0; i < imageWidth; i++) buf[pt + i] = this.readColor (bytesPerPixel);
+
+
+break;
+case 8:
+palette = Clazz.newIntArray (nColors, 0);
+for (var i = 0; i < nColors; i++) palette[i] = this.readColor (4);
+
+for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0; i < imageWidth; i++) buf[pt + i] = palette[this.readByte ()];
+
+
+break;
+case 4:
+npad = (4 - ((Clazz.doubleToInt ((imageWidth + 1) / 2)) % 4)) % 4;
+palette = Clazz.newIntArray (nColors, 0);
+for (var i = 0; i < nColors; i++) palette[i] = this.readColor (4);
+
+var b4 = 0;
+for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0, shift = 4; i < imageWidth; i++, shift = 4 - shift) buf[pt + i] = palette[((shift == 4 ? (b4 = this.readByte ()) : b4) >> shift) & 0xF];
+
+
+break;
+case 1:
+var color1 = this.readColor (3);
+var color2 = this.readColor (3);
+npad = (4 - ((Clazz.doubleToInt ((imageWidth + 7) / 8)) % 4)) % 4;
+var b = 0;
+for (var pt = pt0; pt != pt1; pt += dpt, this.pad (npad)) for (var i = 0, bpt = -1; i < imageWidth; i++, bpt--) {
+if (bpt < 0) {
+b = this.readByte ();
+bpt = 7;
+}buf[pt + i] = ((b & (1 << bpt)) == 0 ? color1 : color2);
+}
+
+break;
+case 64:
+case 2:
+default:
+System.out.println ("Not a 32-, 24-, 8-, 4-, or 1-bit Windows Bitmap, aborting...");
+return null;
+}
+return Clazz.newArray (-1, [buf, Integer.$valueOf (imageWidth), Integer.$valueOf (imageHeight)]);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println ("Caught exception in loadbitmap!");
+} else {
+throw e;
+}
+}
+return null;
+}, "~A");
+Clazz.defineMethod (c$, "pad",
+($fz = function (npad) {
+for (var i = 0; i < npad; i++) this.readByte ();
+
+return true;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "readColor",
+($fz = function (n) {
+this.bis.read (this.temp, 0, n);
+return -16777216 | ((this.temp[2] & 0xff) << 16) | ((this.temp[1] & 0xff) << 8) | this.temp[0] & 0xff;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "readInt",
+($fz = function () {
+this.bis.read (this.temp, 0, 4);
+return ((this.temp[3] & 0xff) << 24) | ((this.temp[2] & 0xff) << 16) | ((this.temp[1] & 0xff) << 8) | this.temp[0] & 0xff;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "readShort",
+($fz = function () {
+this.bis.read (this.temp, 0, 2);
+return ((this.temp[1] & 0xff) << 8) | this.temp[0] & 0xff;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "readByte",
+($fz = function () {
+this.bis.read (this.temp, 0, 1);
+return this.temp[0] & 0xff;
+}, $fz.isPrivate = true, $fz));
+});
diff --git a/bin/javajs/img/CRCEncoder.js b/bin/javajs/img/CRCEncoder.js
index 3a7582e..2dca50d 100644
--- a/bin/javajs/img/CRCEncoder.js
+++ b/bin/javajs/img/CRCEncoder.js
@@ -1,74 +1,74 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.ImageEncoder"], "javajs.img.CRCEncoder", ["java.util.zip.CRC32", "javajs.util.AU"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.startPos = 0;
-this.bytePos = 0;
-this.crc = null;
-this.pngBytes = null;
-this.dataLen = 0;
-this.int2 = null;
-this.int4 = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "CRCEncoder", javajs.img.ImageEncoder);
-Clazz.prepareFields (c$, function () {
-this.int2 = Clazz.newByteArray (2, 0);
-this.int4 = Clazz.newByteArray (4, 0);
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.img.CRCEncoder, []);
-this.pngBytes = Clazz.newByteArray (250, 0);
-this.crc = new java.util.zip.CRC32 ();
-});
-Clazz.defineMethod (c$, "setData",
-function (b, pt) {
-this.pngBytes = b;
-this.dataLen = b.length;
-this.startPos = this.bytePos = pt;
-}, "~A,~N");
-Clazz.defineMethod (c$, "getBytes",
-function () {
-return (this.dataLen == this.pngBytes.length ? this.pngBytes : javajs.util.AU.arrayCopyByte (this.pngBytes, this.dataLen));
-});
-Clazz.defineMethod (c$, "writeCRC",
-function () {
-this.crc.reset ();
-this.crc.update (this.pngBytes, this.startPos, this.bytePos - this.startPos);
-this.writeInt4 (this.crc.getValue ());
-});
-Clazz.defineMethod (c$, "writeInt2",
-function (n) {
-this.int2[0] = ((n >> 8) & 0xff);
-this.int2[1] = (n & 0xff);
-this.writeBytes (this.int2);
-}, "~N");
-Clazz.defineMethod (c$, "writeInt4",
-function (n) {
-javajs.img.CRCEncoder.getInt4 (n, this.int4);
-this.writeBytes (this.int4);
-}, "~N");
-c$.getInt4 = Clazz.defineMethod (c$, "getInt4",
-function (n, int4) {
-int4[0] = ((n >> 24) & 0xff);
-int4[1] = ((n >> 16) & 0xff);
-int4[2] = ((n >> 8) & 0xff);
-int4[3] = (n & 0xff);
-}, "~N,~A");
-Clazz.defineMethod (c$, "writeByte",
-function (b) {
-var temp = Clazz.newByteArray (-1, [b]);
-this.writeBytes (temp);
-}, "~N");
-Clazz.defineMethod (c$, "writeString",
-function (s) {
-this.writeBytes (s.getBytes ());
-}, "~S");
-Clazz.defineMethod (c$, "writeBytes",
-function (data) {
-var newPos = this.bytePos + data.length;
-this.dataLen = Math.max (this.dataLen, newPos);
-if (newPos > this.pngBytes.length) this.pngBytes = javajs.util.AU.arrayCopyByte (this.pngBytes, newPos + 16);
-System.arraycopy (data, 0, this.pngBytes, this.bytePos, data.length);
-this.bytePos = newPos;
-}, "~A");
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.img.ImageEncoder"], "javajs.img.CRCEncoder", ["java.util.zip.CRC32", "javajs.util.AU"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.startPos = 0;
+this.bytePos = 0;
+this.crc = null;
+this.pngBytes = null;
+this.dataLen = 0;
+this.int2 = null;
+this.int4 = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "CRCEncoder", javajs.img.ImageEncoder);
+Clazz.prepareFields (c$, function () {
+this.int2 = Clazz.newByteArray (2, 0);
+this.int4 = Clazz.newByteArray (4, 0);
+});
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.img.CRCEncoder, []);
+this.pngBytes = Clazz.newByteArray (250, 0);
+this.crc = new java.util.zip.CRC32 ();
+});
+Clazz.defineMethod (c$, "setData",
+function (b, pt) {
+this.pngBytes = b;
+this.dataLen = b.length;
+this.startPos = this.bytePos = pt;
+}, "~A,~N");
+Clazz.defineMethod (c$, "getBytes",
+function () {
+return (this.dataLen == this.pngBytes.length ? this.pngBytes : javajs.util.AU.arrayCopyByte (this.pngBytes, this.dataLen));
+});
+Clazz.defineMethod (c$, "writeCRC",
+function () {
+this.crc.reset ();
+this.crc.update (this.pngBytes, this.startPos, this.bytePos - this.startPos);
+this.writeInt4 (this.crc.getValue ());
+});
+Clazz.defineMethod (c$, "writeInt2",
+function (n) {
+this.int2[0] = ((n >> 8) & 0xff);
+this.int2[1] = (n & 0xff);
+this.writeBytes (this.int2);
+}, "~N");
+Clazz.defineMethod (c$, "writeInt4",
+function (n) {
+javajs.img.CRCEncoder.getInt4 (n, this.int4);
+this.writeBytes (this.int4);
+}, "~N");
+c$.getInt4 = Clazz.defineMethod (c$, "getInt4",
+function (n, int4) {
+int4[0] = ((n >> 24) & 0xff);
+int4[1] = ((n >> 16) & 0xff);
+int4[2] = ((n >> 8) & 0xff);
+int4[3] = (n & 0xff);
+}, "~N,~A");
+Clazz.defineMethod (c$, "writeByte",
+function (b) {
+var temp = Clazz.newByteArray (-1, [b]);
+this.writeBytes (temp);
+}, "~N");
+Clazz.defineMethod (c$, "writeString",
+function (s) {
+this.writeBytes (s.getBytes ());
+}, "~S");
+Clazz.defineMethod (c$, "writeBytes",
+function (data) {
+var newPos = this.bytePos + data.length;
+this.dataLen = Math.max (this.dataLen, newPos);
+if (newPos > this.pngBytes.length) this.pngBytes = javajs.util.AU.arrayCopyByte (this.pngBytes, newPos + 16);
+System.arraycopy (data, 0, this.pngBytes, this.bytePos, data.length);
+this.bytePos = newPos;
+}, "~A");
+});
diff --git a/bin/javajs/img/GifEncoder$ColorCell.class b/bin/javajs/img/GifEncoder$ColorCell.class
index 738eed0..305c142 100644
Binary files a/bin/javajs/img/GifEncoder$ColorCell.class and b/bin/javajs/img/GifEncoder$ColorCell.class differ
diff --git a/bin/javajs/img/GifEncoder.class b/bin/javajs/img/GifEncoder.class
index ee78a46..a2954d3 100644
Binary files a/bin/javajs/img/GifEncoder.class and b/bin/javajs/img/GifEncoder.class differ
diff --git a/bin/javajs/img/GifEncoder.js b/bin/javajs/img/GifEncoder.js
index dd22f43..9170951 100644
--- a/bin/javajs/img/GifEncoder.js
+++ b/bin/javajs/img/GifEncoder.js
@@ -1,627 +1,627 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.ImageEncoder", "javajs.util.Lst", "$.P3"], "javajs.img.GifEncoder", ["java.lang.Boolean", "java.util.Hashtable", "javajs.util.CU", "$.M3"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.params = null;
-this.palette = null;
-this.backgroundColor = 0;
-this.interlaced = false;
-this.addHeader = true;
-this.addImage = true;
-this.addTrailer = true;
-this.isTransparent = false;
-this.floydSteinberg = true;
-this.capturing = false;
-this.looping = false;
-this.delayTime100ths = -1;
-this.bitsPerPixel = 1;
-this.byteCount = 0;
-if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorItem")) {
-javajs.img.GifEncoder.$GifEncoder$ColorItem$ ();
-}
-if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorCell")) {
-javajs.img.GifEncoder.$GifEncoder$ColorCell$ ();
-}
-this.initCodeSize = 0;
-this.curpt = 0;
-this.nBits = 0;
-this.maxbits = 12;
-this.maxcode = 0;
-this.maxmaxcode = 4096;
-this.htab = null;
-this.codetab = null;
-this.hsize = 5003;
-this.freeEnt = 0;
-this.clearFlag = false;
-this.clearCode = 0;
-this.EOFCode = 0;
-this.countDown = 0;
-this.pass = 0;
-this.curx = 0;
-this.cury = 0;
-this.curAccum = 0;
-this.curBits = 0;
-this.masks = null;
-this.bufPt = 0;
-this.buf = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "GifEncoder", javajs.img.ImageEncoder);
-Clazz.prepareFields (c$, function () {
-this.htab = Clazz.newIntArray (5003, 0);
-this.codetab = Clazz.newIntArray (5003, 0);
-this.masks = Clazz.newIntArray (-1, [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF]);
-this.buf = Clazz.newByteArray (256, 0);
-});
-Clazz.overrideMethod (c$, "setParams",
-function (params) {
-this.params = params;
-var ic = params.get ("transparentColor");
-if (ic == null) {
-ic = params.get ("backgroundColor");
-if (ic != null) this.backgroundColor = ic.intValue ();
-} else {
-this.backgroundColor = ic.intValue ();
-this.isTransparent = true;
-}this.interlaced = (Boolean.TRUE === params.get ("interlaced"));
-if (params.containsKey ("captureRootExt") || !params.containsKey ("captureMode")) return;
-this.interlaced = false;
-this.capturing = true;
-try {
-this.byteCount = (params.get ("captureByteCount")).intValue ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-switch ("maec".indexOf ((params.get ("captureMode")).substring (0, 1))) {
-case 0:
-params.put ("captureMode", "add");
-this.addImage = false;
-this.addTrailer = false;
-break;
-case 1:
-this.addHeader = false;
-this.addTrailer = false;
-var fps = Math.abs ((params.get ("captureFps")).intValue ());
-this.delayTime100ths = (fps == 0 ? 0 : Clazz.doubleToInt (100 / fps));
-this.looping = (Boolean.FALSE !== params.get ("captureLooping"));
-break;
-case 2:
-this.addHeader = false;
-this.addImage = false;
-break;
-case 3:
-this.addHeader = false;
-this.addImage = false;
-this.out.cancel ();
-break;
-}
-}, "java.util.Map");
-Clazz.overrideMethod (c$, "generate",
-function () {
-if (this.addHeader) this.writeHeader ();
-this.addHeader = false;
-if (this.addImage) {
-this.createPalette ();
-this.writeGraphicControlExtension ();
-if (this.delayTime100ths >= 0 && this.looping) this.writeNetscapeLoopExtension ();
-this.writeImage ();
-}});
-Clazz.overrideMethod (c$, "close",
-function () {
-if (this.addTrailer) {
-this.writeTrailer ();
-} else {
-this.doClose = false;
-}if (this.capturing) this.params.put ("captureByteCount", Integer.$valueOf (this.byteCount));
-});
-Clazz.defineMethod (c$, "createPalette",
-($fz = function () {
-var tempColors = new javajs.util.Lst ();
-var ciHash = new java.util.Hashtable ();
-for (var i = 0, n = this.pixels.length; i < n; i++) {
-var rgb = this.pixels[i];
-var key = Integer.$valueOf (rgb);
-var item = ciHash.get (key);
-if (item == null) {
-item = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, rgb, rgb == this.backgroundColor);
-ciHash.put (key, item);
-tempColors.addLast (item);
-}}
-var nColors = tempColors.size ();
-System.out.println ("GIF total image colors: " + nColors);
-ciHash = null;
-var cells = this.quantizeColors (tempColors);
-nColors = cells.size ();
-System.out.println ("GIF final color count: " + nColors);
-var colorMap = new java.util.Hashtable ();
-this.bitsPerPixel = (nColors <= 2 ? 1 : nColors <= 4 ? 2 : nColors <= 16 ? 4 : 8);
-this.palette = new Array (1 << this.bitsPerPixel);
-for (var i = 0; i < nColors; i++) {
-var c = cells.get (i);
-colorMap.put (Integer.$valueOf (javajs.util.CU.colorPtToFFRGB (this.palette[i] = c.setColor ())), c);
-}
-this.pixels = this.indexPixels (cells, colorMap);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "quantizeColors",
-($fz = function (tempColors) {
-var n = tempColors.size ();
-var cells = new javajs.util.Lst ();
-var cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 0);
-cc.addLast (Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, this.backgroundColor, true));
-cells.addLast (cc);
-cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 1);
-if (n > 256) cells.addLast (cc);
-for (var i = 0; i < n; i++) {
-var c = tempColors.get (i);
-if (c.isBackground) continue;
-cc.addLast (c);
-if (n <= 256) {
-cells.addLast (cc);
-cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, cells.size ());
-}}
-tempColors.clear ();
-if (n > 256) while ((n = cells.size ()) < 256) {
-var maxVol = 0;
-var maxCell = null;
-for (var i = n; --i >= 1; ) {
-var c = cells.get (i);
-var v = c.getVolume (false);
-if (v > maxVol) {
-maxVol = v;
-maxCell = c;
-}}
-if (maxCell == null || !maxCell.splitCell (cells)) break;
-}
-return cells;
-}, $fz.isPrivate = true, $fz), "javajs.util.Lst");
-Clazz.defineMethod (c$, "indexPixels",
-($fz = function (cells, colorMap) {
-var w2 = this.width + 2;
-var errors = new Array (w2);
-var newPixels = Clazz.newIntArray (this.pixels.length, 0);
-var err = new javajs.util.P3 ();
-var lab;
-var rgb;
-var nearestCell = new java.util.Hashtable ();
-for (var i = 0, p = 0; i < this.height; ++i) {
-var notLastRow = (i != this.height - 1);
-for (var j = 0; j < this.width; ++j, p++) {
-if (this.pixels[p] == this.backgroundColor) {
-continue;
-}var pe = errors[p % w2];
-if (pe == null || pe.x == 3.4028235E38) {
-lab = null;
-rgb = this.pixels[p];
-} else {
-lab = this.toLABnorm (this.pixels[p]);
-err = pe;
-err.x = this.clamp (err.x, -75, 75);
-err.y = this.clamp (err.y, -75, 75);
-err.z = this.clamp (err.z, -75, 75);
-lab.add (err);
-rgb = javajs.util.CU.colorPtToFFRGB (this.toRGB (lab));
-}var key = Integer.$valueOf (rgb);
-var cell = colorMap.get (key);
-if (cell == null) {
-lab = this.toLABnorm (rgb);
-cell = nearestCell.get (key);
-if (cell == null) {
-var maxerr = 3.4028235E38;
-for (var ib = cells.size (); --ib >= 1; ) {
-var c = cells.get (ib);
-err.sub2 (lab, c.center);
-var d = err.lengthSquared ();
-if (d < maxerr) {
-maxerr = d;
-cell = c;
-}}
-nearestCell.put (key, cell);
-}if (this.floydSteinberg) {
-err.sub2 (lab, cell.center);
-var notLastCol = (j < this.width - 1);
-if (notLastCol) this.addError (err, 7, errors, p + 1, w2);
-if (notLastRow) {
-if (j > 0) this.addError (err, 3, errors, p + this.width - 1, w2);
-this.addError (err, 5, errors, p + this.width, w2);
-if (notLastCol) this.addError (err, 1, errors, p + this.width + 1, w2);
-}}err.x = 3.4028235E38;
-}newPixels[p] = cell.index;
-}
-}
-return newPixels;
-}, $fz.isPrivate = true, $fz), "javajs.util.Lst,java.util.Map");
-Clazz.defineMethod (c$, "addError",
-($fz = function (err, f, errors, p, w2) {
-if (this.pixels[p] == this.backgroundColor) return;
-p %= w2;
-var errp = errors[p];
-if (errp == null) errp = errors[p] = new javajs.util.P3 ();
- else if (errp.x == 3.4028235E38) errp.set (0, 0, 0);
-errp.scaleAdd2 (f / 16, err, errp);
-}, $fz.isPrivate = true, $fz), "javajs.util.P3,~N,~A,~N,~N");
-Clazz.defineMethod (c$, "toLABnorm",
-function (rgb) {
-var lab = javajs.util.CU.colorPtFromInt (rgb, null);
-this.rgbToXyz (lab, lab);
-this.xyzToLab (lab, lab);
-lab.y = (lab.y + 86.185) / (184.439) * 100;
-lab.z = (lab.z + 107.863) / (202.345) * 100;
-return lab;
-}, "~N");
-Clazz.defineMethod (c$, "toRGB",
-function (lab) {
-var xyz = javajs.util.P3.newP (lab);
-xyz.y = xyz.y / 100 * (184.439) - 86.185;
-xyz.z = xyz.z / 100 * (202.345) - 107.863;
-this.labToXyz (xyz, xyz);
-return this.xyzToRgb (xyz, xyz);
-}, "javajs.util.P3");
-Clazz.defineMethod (c$, "rgbToXyz",
-function (rgb, xyz) {
-if (xyz == null) xyz = new javajs.util.P3 ();
-xyz.x = this.sxyz (rgb.x);
-xyz.y = this.sxyz (rgb.y);
-xyz.z = this.sxyz (rgb.z);
-javajs.img.GifEncoder.rgb2xyz.rotate (xyz);
-return xyz;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "sxyz",
-($fz = function (x) {
-x /= 255;
-return (x <= 0.04045 ? x / 12.92 : Math.pow (((x + 0.055) / 1.055), 2.4)) * 100;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "xyzToRgb",
-function (xyz, rgb) {
-if (rgb == null) rgb = new javajs.util.P3 ();
-rgb.setT (xyz);
-rgb.scale (0.01);
-javajs.img.GifEncoder.xyz2rgb.rotate (rgb);
-rgb.x = this.clamp (this.srgb (rgb.x), 0, 255);
-rgb.y = this.clamp (this.srgb (rgb.y), 0, 255);
-rgb.z = this.clamp (this.srgb (rgb.z), 0, 255);
-return rgb;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "srgb",
-($fz = function (x) {
-return (x > 0.0031308 ? (1.055 * Math.pow (x, 0.4166666666666667)) - 0.055 : x * 12.92) * 255;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "xyzToLab",
-function (xyz, lab) {
-if (lab == null) lab = new javajs.util.P3 ();
-var x = this.flab (xyz.x / 95.0429);
-var y = this.flab (xyz.y / 100);
-var z = this.flab (xyz.z / 108.89);
-lab.x = (116 * y) - 16;
-lab.y = 500 * (x - y);
-lab.z = 200 * (y - z);
-return lab;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "flab",
-($fz = function (t) {
-return (t > 8.85645168E-3 ? Math.pow (t, 0.333333333) : 7.78703704 * t + 0.137931034);
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "labToXyz",
-function (lab, xyz) {
-if (xyz == null) xyz = new javajs.util.P3 ();
-xyz.setT (lab);
-var y = (xyz.x + 16) / 116;
-var x = xyz.y / 500 + y;
-var z = y - xyz.z / 200;
-xyz.x = this.fxyz (x) * 95.0429;
-xyz.y = this.fxyz (y) * 100;
-xyz.z = this.fxyz (z) * 108.89;
-return xyz;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "fxyz",
-($fz = function (t) {
-return (t > 0.206896552 ? t * t * t : 0.128418549 * (t - 0.137931034));
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "clamp",
-($fz = function (c, min, max) {
-c = (c < min ? min : c > max ? max : c);
-return (min == 0 ? Math.round (c) : c);
-}, $fz.isPrivate = true, $fz), "~N,~N,~N");
-Clazz.defineMethod (c$, "writeHeader",
-($fz = function () {
-this.putString ("GIF89a");
-this.putWord (this.width);
-this.putWord (this.height);
-this.putByte (0);
-this.putByte (0);
-this.putByte (0);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeGraphicControlExtension",
-($fz = function () {
-if (this.isTransparent || this.delayTime100ths >= 0) {
-this.putByte (0x21);
-this.putByte (0xf9);
-this.putByte (4);
-this.putByte ((this.isTransparent ? 9 : 0) | (this.delayTime100ths > 0 ? 2 : 0));
-this.putWord (this.delayTime100ths > 0 ? this.delayTime100ths : 0);
-this.putByte (0);
-this.putByte (0);
-}}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeNetscapeLoopExtension",
-($fz = function () {
-this.putByte (0x21);
-this.putByte (0xff);
-this.putByte (0x0B);
-this.putString ("NETSCAPE2.0");
-this.putByte (3);
-this.putByte (1);
-this.putWord (0);
-this.putByte (0);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeImage",
-($fz = function () {
-this.putByte (0x2C);
-this.putWord (0);
-this.putWord (0);
-this.putWord (this.width);
-this.putWord (this.height);
-var packedFields = 0x80 | (this.interlaced ? 0x40 : 0) | (this.bitsPerPixel - 1);
-this.putByte (packedFields);
-var colorMapSize = 1 << this.bitsPerPixel;
-var p = new javajs.util.P3 ();
-for (var i = 0; i < colorMapSize; i++) {
-if (this.palette[i] != null) p = this.palette[i];
-this.putByte (Clazz.floatToInt (p.x));
-this.putByte (Clazz.floatToInt (p.y));
-this.putByte (Clazz.floatToInt (p.z));
-}
-this.putByte (this.initCodeSize = (this.bitsPerPixel <= 1 ? 2 : this.bitsPerPixel));
-this.compress ();
-this.putByte (0);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeTrailer",
-($fz = function () {
-this.putByte (0x3B);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "nextPixel",
-($fz = function () {
-if (this.countDown-- == 0) return -1;
-var colorIndex = this.pixels[this.curpt];
-++this.curx;
-if (this.curx == this.width) {
-this.curx = 0;
-if (this.interlaced) this.updateY (javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass], javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass + 4]);
- else ++this.cury;
-}this.curpt = this.cury * this.width + this.curx;
-return colorIndex & 0xff;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "updateY",
-($fz = function (yNext, yNew) {
-this.cury += yNext;
-if (yNew >= 0 && this.cury >= this.height) {
-this.cury = yNew;
-++this.pass;
-}}, $fz.isPrivate = true, $fz), "~N,~N");
-Clazz.defineMethod (c$, "putWord",
-($fz = function (w) {
-this.putByte (w);
-this.putByte (w >> 8);
-}, $fz.isPrivate = true, $fz), "~N");
-c$.MAXCODE = Clazz.defineMethod (c$, "MAXCODE",
-($fz = function (nBits) {
-return (1 << nBits) - 1;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "compress",
-($fz = function () {
-this.countDown = this.width * this.height;
-this.pass = 0;
-this.curx = 0;
-this.cury = 0;
-this.clearFlag = false;
-this.nBits = this.initCodeSize + 1;
-this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);
-this.clearCode = 1 << this.initCodeSize;
-this.EOFCode = this.clearCode + 1;
-this.freeEnt = this.clearCode + 2;
-this.bufPt = 0;
-var ent = this.nextPixel ();
-var hshift = 0;
-var fcode;
-for (fcode = this.hsize; fcode < 65536; fcode *= 2) ++hshift;
-
-hshift = 8 - hshift;
-var hsizeReg = this.hsize;
-this.clearHash (hsizeReg);
-this.output (this.clearCode);
-var c;
-outer_loop : while ((c = this.nextPixel ()) != -1) {
-fcode = (c << this.maxbits) + ent;
-var i = (c << hshift) ^ ent;
-if (this.htab[i] == fcode) {
-ent = this.codetab[i];
-continue;
-} else if (this.htab[i] >= 0) {
-var disp = hsizeReg - i;
-if (i == 0) disp = 1;
-do {
-if ((i -= disp) < 0) i += hsizeReg;
-if (this.htab[i] == fcode) {
-ent = this.codetab[i];
-continue outer_loop;
-}} while (this.htab[i] >= 0);
-}this.output (ent);
-ent = c;
-if (this.freeEnt < this.maxmaxcode) {
-this.codetab[i] = this.freeEnt++;
-this.htab[i] = fcode;
-} else {
-this.clearBlock ();
-}}
-this.output (ent);
-this.output (this.EOFCode);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "output",
-($fz = function (code) {
-this.curAccum &= this.masks[this.curBits];
-if (this.curBits > 0) this.curAccum |= (code << this.curBits);
- else this.curAccum = code;
-this.curBits += this.nBits;
-while (this.curBits >= 8) {
-this.byteOut ((this.curAccum & 0xff));
-this.curAccum >>= 8;
-this.curBits -= 8;
-}
-if (this.freeEnt > this.maxcode || this.clearFlag) {
-if (this.clearFlag) {
-this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits = this.initCodeSize + 1);
-this.clearFlag = false;
-} else {
-++this.nBits;
-if (this.nBits == this.maxbits) this.maxcode = this.maxmaxcode;
- else this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);
-}}if (code == this.EOFCode) {
-while (this.curBits > 0) {
-this.byteOut ((this.curAccum & 0xff));
-this.curAccum >>= 8;
-this.curBits -= 8;
-}
-this.flushBytes ();
-}}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "clearBlock",
-($fz = function () {
-this.clearHash (this.hsize);
-this.freeEnt = this.clearCode + 2;
-this.clearFlag = true;
-this.output (this.clearCode);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "clearHash",
-($fz = function (hsize) {
-for (var i = 0; i < hsize; ++i) this.htab[i] = -1;
-
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "byteOut",
-($fz = function (c) {
-this.buf[this.bufPt++] = c;
-if (this.bufPt >= 254) this.flushBytes ();
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "flushBytes",
-function () {
-if (this.bufPt > 0) {
-this.putByte (this.bufPt);
-this.out.write (this.buf, 0, this.bufPt);
-this.byteCount += this.bufPt;
-this.bufPt = 0;
-}});
-c$.$GifEncoder$ColorItem$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.isBackground = false;
-Clazz.instantialize (this, arguments);
-}, javajs.img.GifEncoder, "ColorItem", javajs.util.P3);
-Clazz.makeConstructor (c$,
-function (a, b) {
-Clazz.superConstructor (this, javajs.img.GifEncoder.ColorItem, []);
-this.isBackground = b;
-this.setT (this.b$["javajs.img.GifEncoder"].toLABnorm (a));
-}, "~N,~B");
-c$ = Clazz.p0p ();
-};
-c$.$GifEncoder$ColorCell$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.index = 0;
-this.center = null;
-this.volume = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.img.GifEncoder, "ColorCell", javajs.util.Lst);
-Clazz.makeConstructor (c$,
-function (a) {
-Clazz.superConstructor (this, javajs.img.GifEncoder.ColorCell, []);
-this.index = a;
-}, "~N");
-Clazz.defineMethod (c$, "getVolume",
-function (a) {
-if (this.volume != 0) return this.volume;
-if (this.size () < 2) return -1;
-var b = -2147483647;
-var c = 2147483647;
-var d = -2147483647;
-var e = 2147483647;
-var f = -2147483647;
-var g = 2147483647;
-var h = this.size ();
-for (var i = h; --i >= 0; ) {
-var j = this.get (i);
-if (j.x < c) c = j.x;
-if (j.y < e) e = j.y;
-if (j.z < g) g = j.z;
-if (j.x > b) b = j.x;
-if (j.y > d) d = j.y;
-if (j.z > f) f = j.z;
-}
-var j = (b - c);
-var k = (d - e);
-var l = (f - g);
-return this.volume = j * j + k * k + l * l;
-}, "~B");
-Clazz.defineMethod (c$, "setColor",
-function () {
-var a = this.size ();
-this.center = new javajs.util.P3 ();
-for (var b = a; --b >= 0; ) this.center.add (this.get (b));
-
-this.center.scale (1 / a);
-return this.b$["javajs.img.GifEncoder"].toRGB (this.center);
-});
-Clazz.defineMethod (c$, "splitCell",
-function (a) {
-var b = this.size ();
-if (b < 2) return false;
-var c = a.size ();
-var d = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, c);
-a.addLast (d);
-var e = Clazz.newFloatArray (3, 3, 0);
-for (var f = 0; f < 3; f++) {
-var g = 3.4028235E38;
-var h = -3.4028235E38;
-for (var i = b; --i >= 0; ) {
-var j = this.get (i);
-var k = (f == 0 ? j.x : f == 1 ? j.y : j.z);
-if (g > k) g = k;
-if (h < k) h = k;
-}
-e[0][f] = g;
-e[1][f] = h;
-e[2][f] = h - g;
-}
-var g = e[2];
-var h = (g[0] >= g[1] ? (g[0] >= g[2] ? 0 : 2) : g[1] >= g[2] ? 1 : 2);
-var i = e[0][h] + e[2][h] / 2;
-this.volume = 0;
-switch (h) {
-case 0:
-for (var j = b; --j >= 0; ) if (this.get (j).x >= i) d.addLast (this.remove (j));
-
-break;
-case 1:
-for (var k = b; --k >= 0; ) if (this.get (k).y >= i) d.addLast (this.remove (k));
-
-break;
-case 2:
-for (var l = this.size (); --l >= 0; ) if (this.get (l).z >= i) d.addLast (this.remove (l));
-
-break;
-}
-return true;
-}, "javajs.util.Lst");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"xyz2rgb", null,
-"rgb2xyz", null);
-{
-javajs.img.GifEncoder.rgb2xyz = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [0.4124, 0.3576, 0.1805, 0.2126, 0.7152, 0.0722, 0.0193, 0.1192, 0.9505]));
-javajs.img.GifEncoder.xyz2rgb = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [3.2406, -1.5372, -0.4986, -0.9689, 1.8758, 0.0415, 0.0557, -0.204, 1.0570]));
-}Clazz.defineStatics (c$,
-"EOF", -1,
-"INTERLACE_PARAMS", Clazz.newIntArray (-1, [8, 8, 4, 2, 4, 2, 1, 0]),
-"BITS", 12,
-"HSIZE", 5003);
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.img.ImageEncoder", "javajs.util.Lst", "$.P3"], "javajs.img.GifEncoder", ["java.lang.Boolean", "java.util.Hashtable", "javajs.util.CU", "$.M3"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.params = null;
+this.palette = null;
+this.backgroundColor = 0;
+this.interlaced = false;
+this.addHeader = true;
+this.addImage = true;
+this.addTrailer = true;
+this.isTransparent = false;
+this.floydSteinberg = true;
+this.capturing = false;
+this.looping = false;
+this.delayTime100ths = -1;
+this.bitsPerPixel = 1;
+this.byteCount = 0;
+if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorItem")) {
+javajs.img.GifEncoder.$GifEncoder$ColorItem$ ();
+}
+if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorCell")) {
+javajs.img.GifEncoder.$GifEncoder$ColorCell$ ();
+}
+this.initCodeSize = 0;
+this.curpt = 0;
+this.nBits = 0;
+this.maxbits = 12;
+this.maxcode = 0;
+this.maxmaxcode = 4096;
+this.htab = null;
+this.codetab = null;
+this.hsize = 5003;
+this.freeEnt = 0;
+this.clearFlag = false;
+this.clearCode = 0;
+this.EOFCode = 0;
+this.countDown = 0;
+this.pass = 0;
+this.curx = 0;
+this.cury = 0;
+this.curAccum = 0;
+this.curBits = 0;
+this.masks = null;
+this.bufPt = 0;
+this.buf = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "GifEncoder", javajs.img.ImageEncoder);
+Clazz.prepareFields (c$, function () {
+this.htab = Clazz.newIntArray (5003, 0);
+this.codetab = Clazz.newIntArray (5003, 0);
+this.masks = Clazz.newIntArray (-1, [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF]);
+this.buf = Clazz.newByteArray (256, 0);
+});
+Clazz.overrideMethod (c$, "setParams",
+function (params) {
+this.params = params;
+var ic = params.get ("transparentColor");
+if (ic == null) {
+ic = params.get ("backgroundColor");
+if (ic != null) this.backgroundColor = ic.intValue ();
+} else {
+this.backgroundColor = ic.intValue ();
+this.isTransparent = true;
+}this.interlaced = (Boolean.TRUE === params.get ("interlaced"));
+if (params.containsKey ("captureRootExt") || !params.containsKey ("captureMode")) return;
+this.interlaced = false;
+this.capturing = true;
+try {
+this.byteCount = (params.get ("captureByteCount")).intValue ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+switch ("maec".indexOf ((params.get ("captureMode")).substring (0, 1))) {
+case 0:
+params.put ("captureMode", "add");
+this.addImage = false;
+this.addTrailer = false;
+break;
+case 1:
+this.addHeader = false;
+this.addTrailer = false;
+var fps = Math.abs ((params.get ("captureFps")).intValue ());
+this.delayTime100ths = (fps == 0 ? 0 : Clazz.doubleToInt (100 / fps));
+this.looping = (Boolean.FALSE !== params.get ("captureLooping"));
+break;
+case 2:
+this.addHeader = false;
+this.addImage = false;
+break;
+case 3:
+this.addHeader = false;
+this.addImage = false;
+this.out.cancel ();
+break;
+}
+}, "java.util.Map");
+Clazz.overrideMethod (c$, "generate",
+function () {
+if (this.addHeader) this.writeHeader ();
+this.addHeader = false;
+if (this.addImage) {
+this.createPalette ();
+this.writeGraphicControlExtension ();
+if (this.delayTime100ths >= 0 && this.looping) this.writeNetscapeLoopExtension ();
+this.writeImage ();
+}});
+Clazz.overrideMethod (c$, "close",
+function () {
+if (this.addTrailer) {
+this.writeTrailer ();
+} else {
+this.doClose = false;
+}if (this.capturing) this.params.put ("captureByteCount", Integer.$valueOf (this.byteCount));
+});
+Clazz.defineMethod (c$, "createPalette",
+($fz = function () {
+var tempColors = new javajs.util.Lst ();
+var ciHash = new java.util.Hashtable ();
+for (var i = 0, n = this.pixels.length; i < n; i++) {
+var rgb = this.pixels[i];
+var key = Integer.$valueOf (rgb);
+var item = ciHash.get (key);
+if (item == null) {
+item = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, rgb, rgb == this.backgroundColor);
+ciHash.put (key, item);
+tempColors.addLast (item);
+}}
+var nColors = tempColors.size ();
+System.out.println ("GIF total image colors: " + nColors);
+ciHash = null;
+var cells = this.quantizeColors (tempColors);
+nColors = cells.size ();
+System.out.println ("GIF final color count: " + nColors);
+var colorMap = new java.util.Hashtable ();
+this.bitsPerPixel = (nColors <= 2 ? 1 : nColors <= 4 ? 2 : nColors <= 16 ? 4 : 8);
+this.palette = new Array (1 << this.bitsPerPixel);
+for (var i = 0; i < nColors; i++) {
+var c = cells.get (i);
+colorMap.put (Integer.$valueOf (javajs.util.CU.colorPtToFFRGB (this.palette[i] = c.setColor ())), c);
+}
+this.pixels = this.indexPixels (cells, colorMap);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "quantizeColors",
+($fz = function (tempColors) {
+var n = tempColors.size ();
+var cells = new javajs.util.Lst ();
+var cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 0);
+cc.addLast (Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, this.backgroundColor, true));
+cells.addLast (cc);
+cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 1);
+if (n > 256) cells.addLast (cc);
+for (var i = 0; i < n; i++) {
+var c = tempColors.get (i);
+if (c.isBackground) continue;
+cc.addLast (c);
+if (n <= 256) {
+cells.addLast (cc);
+cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, cells.size ());
+}}
+tempColors.clear ();
+if (n > 256) while ((n = cells.size ()) < 256) {
+var maxVol = 0;
+var maxCell = null;
+for (var i = n; --i >= 1; ) {
+var c = cells.get (i);
+var v = c.getVolume (false);
+if (v > maxVol) {
+maxVol = v;
+maxCell = c;
+}}
+if (maxCell == null || !maxCell.splitCell (cells)) break;
+}
+return cells;
+}, $fz.isPrivate = true, $fz), "javajs.util.Lst");
+Clazz.defineMethod (c$, "indexPixels",
+($fz = function (cells, colorMap) {
+var w2 = this.width + 2;
+var errors = new Array (w2);
+var newPixels = Clazz.newIntArray (this.pixels.length, 0);
+var err = new javajs.util.P3 ();
+var lab;
+var rgb;
+var nearestCell = new java.util.Hashtable ();
+for (var i = 0, p = 0; i < this.height; ++i) {
+var notLastRow = (i != this.height - 1);
+for (var j = 0; j < this.width; ++j, p++) {
+if (this.pixels[p] == this.backgroundColor) {
+continue;
+}var pe = errors[p % w2];
+if (pe == null || pe.x == 3.4028235E38) {
+lab = null;
+rgb = this.pixels[p];
+} else {
+lab = this.toLABnorm (this.pixels[p]);
+err = pe;
+err.x = this.clamp (err.x, -75, 75);
+err.y = this.clamp (err.y, -75, 75);
+err.z = this.clamp (err.z, -75, 75);
+lab.add (err);
+rgb = javajs.util.CU.colorPtToFFRGB (this.toRGB (lab));
+}var key = Integer.$valueOf (rgb);
+var cell = colorMap.get (key);
+if (cell == null) {
+lab = this.toLABnorm (rgb);
+cell = nearestCell.get (key);
+if (cell == null) {
+var maxerr = 3.4028235E38;
+for (var ib = cells.size (); --ib >= 1; ) {
+var c = cells.get (ib);
+err.sub2 (lab, c.center);
+var d = err.lengthSquared ();
+if (d < maxerr) {
+maxerr = d;
+cell = c;
+}}
+nearestCell.put (key, cell);
+}if (this.floydSteinberg) {
+err.sub2 (lab, cell.center);
+var notLastCol = (j < this.width - 1);
+if (notLastCol) this.addError (err, 7, errors, p + 1, w2);
+if (notLastRow) {
+if (j > 0) this.addError (err, 3, errors, p + this.width - 1, w2);
+this.addError (err, 5, errors, p + this.width, w2);
+if (notLastCol) this.addError (err, 1, errors, p + this.width + 1, w2);
+}}err.x = 3.4028235E38;
+}newPixels[p] = cell.index;
+}
+}
+return newPixels;
+}, $fz.isPrivate = true, $fz), "javajs.util.Lst,java.util.Map");
+Clazz.defineMethod (c$, "addError",
+($fz = function (err, f, errors, p, w2) {
+if (this.pixels[p] == this.backgroundColor) return;
+p %= w2;
+var errp = errors[p];
+if (errp == null) errp = errors[p] = new javajs.util.P3 ();
+ else if (errp.x == 3.4028235E38) errp.set (0, 0, 0);
+errp.scaleAdd2 (f / 16, err, errp);
+}, $fz.isPrivate = true, $fz), "javajs.util.P3,~N,~A,~N,~N");
+Clazz.defineMethod (c$, "toLABnorm",
+function (rgb) {
+var lab = javajs.util.CU.colorPtFromInt (rgb, null);
+this.rgbToXyz (lab, lab);
+this.xyzToLab (lab, lab);
+lab.y = (lab.y + 86.185) / (184.439) * 100;
+lab.z = (lab.z + 107.863) / (202.345) * 100;
+return lab;
+}, "~N");
+Clazz.defineMethod (c$, "toRGB",
+function (lab) {
+var xyz = javajs.util.P3.newP (lab);
+xyz.y = xyz.y / 100 * (184.439) - 86.185;
+xyz.z = xyz.z / 100 * (202.345) - 107.863;
+this.labToXyz (xyz, xyz);
+return this.xyzToRgb (xyz, xyz);
+}, "javajs.util.P3");
+Clazz.defineMethod (c$, "rgbToXyz",
+function (rgb, xyz) {
+if (xyz == null) xyz = new javajs.util.P3 ();
+xyz.x = this.sxyz (rgb.x);
+xyz.y = this.sxyz (rgb.y);
+xyz.z = this.sxyz (rgb.z);
+javajs.img.GifEncoder.rgb2xyz.rotate (xyz);
+return xyz;
+}, "javajs.util.P3,javajs.util.P3");
+Clazz.defineMethod (c$, "sxyz",
+($fz = function (x) {
+x /= 255;
+return (x <= 0.04045 ? x / 12.92 : Math.pow (((x + 0.055) / 1.055), 2.4)) * 100;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "xyzToRgb",
+function (xyz, rgb) {
+if (rgb == null) rgb = new javajs.util.P3 ();
+rgb.setT (xyz);
+rgb.scale (0.01);
+javajs.img.GifEncoder.xyz2rgb.rotate (rgb);
+rgb.x = this.clamp (this.srgb (rgb.x), 0, 255);
+rgb.y = this.clamp (this.srgb (rgb.y), 0, 255);
+rgb.z = this.clamp (this.srgb (rgb.z), 0, 255);
+return rgb;
+}, "javajs.util.P3,javajs.util.P3");
+Clazz.defineMethod (c$, "srgb",
+($fz = function (x) {
+return (x > 0.0031308 ? (1.055 * Math.pow (x, 0.4166666666666667)) - 0.055 : x * 12.92) * 255;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "xyzToLab",
+function (xyz, lab) {
+if (lab == null) lab = new javajs.util.P3 ();
+var x = this.flab (xyz.x / 95.0429);
+var y = this.flab (xyz.y / 100);
+var z = this.flab (xyz.z / 108.89);
+lab.x = (116 * y) - 16;
+lab.y = 500 * (x - y);
+lab.z = 200 * (y - z);
+return lab;
+}, "javajs.util.P3,javajs.util.P3");
+Clazz.defineMethod (c$, "flab",
+($fz = function (t) {
+return (t > 8.85645168E-3 ? Math.pow (t, 0.333333333) : 7.78703704 * t + 0.137931034);
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "labToXyz",
+function (lab, xyz) {
+if (xyz == null) xyz = new javajs.util.P3 ();
+xyz.setT (lab);
+var y = (xyz.x + 16) / 116;
+var x = xyz.y / 500 + y;
+var z = y - xyz.z / 200;
+xyz.x = this.fxyz (x) * 95.0429;
+xyz.y = this.fxyz (y) * 100;
+xyz.z = this.fxyz (z) * 108.89;
+return xyz;
+}, "javajs.util.P3,javajs.util.P3");
+Clazz.defineMethod (c$, "fxyz",
+($fz = function (t) {
+return (t > 0.206896552 ? t * t * t : 0.128418549 * (t - 0.137931034));
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "clamp",
+($fz = function (c, min, max) {
+c = (c < min ? min : c > max ? max : c);
+return (min == 0 ? Math.round (c) : c);
+}, $fz.isPrivate = true, $fz), "~N,~N,~N");
+Clazz.defineMethod (c$, "writeHeader",
+($fz = function () {
+this.putString ("GIF89a");
+this.putWord (this.width);
+this.putWord (this.height);
+this.putByte (0);
+this.putByte (0);
+this.putByte (0);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeGraphicControlExtension",
+($fz = function () {
+if (this.isTransparent || this.delayTime100ths >= 0) {
+this.putByte (0x21);
+this.putByte (0xf9);
+this.putByte (4);
+this.putByte ((this.isTransparent ? 9 : 0) | (this.delayTime100ths > 0 ? 2 : 0));
+this.putWord (this.delayTime100ths > 0 ? this.delayTime100ths : 0);
+this.putByte (0);
+this.putByte (0);
+}}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeNetscapeLoopExtension",
+($fz = function () {
+this.putByte (0x21);
+this.putByte (0xff);
+this.putByte (0x0B);
+this.putString ("NETSCAPE2.0");
+this.putByte (3);
+this.putByte (1);
+this.putWord (0);
+this.putByte (0);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeImage",
+($fz = function () {
+this.putByte (0x2C);
+this.putWord (0);
+this.putWord (0);
+this.putWord (this.width);
+this.putWord (this.height);
+var packedFields = 0x80 | (this.interlaced ? 0x40 : 0) | (this.bitsPerPixel - 1);
+this.putByte (packedFields);
+var colorMapSize = 1 << this.bitsPerPixel;
+var p = new javajs.util.P3 ();
+for (var i = 0; i < colorMapSize; i++) {
+if (this.palette[i] != null) p = this.palette[i];
+this.putByte (Clazz.floatToInt (p.x));
+this.putByte (Clazz.floatToInt (p.y));
+this.putByte (Clazz.floatToInt (p.z));
+}
+this.putByte (this.initCodeSize = (this.bitsPerPixel <= 1 ? 2 : this.bitsPerPixel));
+this.compress ();
+this.putByte (0);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeTrailer",
+($fz = function () {
+this.putByte (0x3B);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "nextPixel",
+($fz = function () {
+if (this.countDown-- == 0) return -1;
+var colorIndex = this.pixels[this.curpt];
+++this.curx;
+if (this.curx == this.width) {
+this.curx = 0;
+if (this.interlaced) this.updateY (javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass], javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass + 4]);
+ else ++this.cury;
+}this.curpt = this.cury * this.width + this.curx;
+return colorIndex & 0xff;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "updateY",
+($fz = function (yNext, yNew) {
+this.cury += yNext;
+if (yNew >= 0 && this.cury >= this.height) {
+this.cury = yNew;
+++this.pass;
+}}, $fz.isPrivate = true, $fz), "~N,~N");
+Clazz.defineMethod (c$, "putWord",
+($fz = function (w) {
+this.putByte (w);
+this.putByte (w >> 8);
+}, $fz.isPrivate = true, $fz), "~N");
+c$.MAXCODE = Clazz.defineMethod (c$, "MAXCODE",
+($fz = function (nBits) {
+return (1 << nBits) - 1;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "compress",
+($fz = function () {
+this.countDown = this.width * this.height;
+this.pass = 0;
+this.curx = 0;
+this.cury = 0;
+this.clearFlag = false;
+this.nBits = this.initCodeSize + 1;
+this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);
+this.clearCode = 1 << this.initCodeSize;
+this.EOFCode = this.clearCode + 1;
+this.freeEnt = this.clearCode + 2;
+this.bufPt = 0;
+var ent = this.nextPixel ();
+var hshift = 0;
+var fcode;
+for (fcode = this.hsize; fcode < 65536; fcode *= 2) ++hshift;
+
+hshift = 8 - hshift;
+var hsizeReg = this.hsize;
+this.clearHash (hsizeReg);
+this.output (this.clearCode);
+var c;
+outer_loop : while ((c = this.nextPixel ()) != -1) {
+fcode = (c << this.maxbits) + ent;
+var i = (c << hshift) ^ ent;
+if (this.htab[i] == fcode) {
+ent = this.codetab[i];
+continue;
+} else if (this.htab[i] >= 0) {
+var disp = hsizeReg - i;
+if (i == 0) disp = 1;
+do {
+if ((i -= disp) < 0) i += hsizeReg;
+if (this.htab[i] == fcode) {
+ent = this.codetab[i];
+continue outer_loop;
+}} while (this.htab[i] >= 0);
+}this.output (ent);
+ent = c;
+if (this.freeEnt < this.maxmaxcode) {
+this.codetab[i] = this.freeEnt++;
+this.htab[i] = fcode;
+} else {
+this.clearBlock ();
+}}
+this.output (ent);
+this.output (this.EOFCode);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "output",
+($fz = function (code) {
+this.curAccum &= this.masks[this.curBits];
+if (this.curBits > 0) this.curAccum |= (code << this.curBits);
+ else this.curAccum = code;
+this.curBits += this.nBits;
+while (this.curBits >= 8) {
+this.byteOut ((this.curAccum & 0xff));
+this.curAccum >>= 8;
+this.curBits -= 8;
+}
+if (this.freeEnt > this.maxcode || this.clearFlag) {
+if (this.clearFlag) {
+this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits = this.initCodeSize + 1);
+this.clearFlag = false;
+} else {
+++this.nBits;
+if (this.nBits == this.maxbits) this.maxcode = this.maxmaxcode;
+ else this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);
+}}if (code == this.EOFCode) {
+while (this.curBits > 0) {
+this.byteOut ((this.curAccum & 0xff));
+this.curAccum >>= 8;
+this.curBits -= 8;
+}
+this.flushBytes ();
+}}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "clearBlock",
+($fz = function () {
+this.clearHash (this.hsize);
+this.freeEnt = this.clearCode + 2;
+this.clearFlag = true;
+this.output (this.clearCode);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "clearHash",
+($fz = function (hsize) {
+for (var i = 0; i < hsize; ++i) this.htab[i] = -1;
+
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "byteOut",
+($fz = function (c) {
+this.buf[this.bufPt++] = c;
+if (this.bufPt >= 254) this.flushBytes ();
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "flushBytes",
+function () {
+if (this.bufPt > 0) {
+this.putByte (this.bufPt);
+this.out.write (this.buf, 0, this.bufPt);
+this.byteCount += this.bufPt;
+this.bufPt = 0;
+}});
+c$.$GifEncoder$ColorItem$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.isBackground = false;
+Clazz.instantialize (this, arguments);
+}, javajs.img.GifEncoder, "ColorItem", javajs.util.P3);
+Clazz.makeConstructor (c$,
+function (a, b) {
+Clazz.superConstructor (this, javajs.img.GifEncoder.ColorItem, []);
+this.isBackground = b;
+this.setT (this.b$["javajs.img.GifEncoder"].toLABnorm (a));
+}, "~N,~B");
+c$ = Clazz.p0p ();
+};
+c$.$GifEncoder$ColorCell$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.index = 0;
+this.center = null;
+this.volume = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.img.GifEncoder, "ColorCell", javajs.util.Lst);
+Clazz.makeConstructor (c$,
+function (a) {
+Clazz.superConstructor (this, javajs.img.GifEncoder.ColorCell, []);
+this.index = a;
+}, "~N");
+Clazz.defineMethod (c$, "getVolume",
+function (a) {
+if (this.volume != 0) return this.volume;
+if (this.size () < 2) return -1;
+var b = -2147483647;
+var c = 2147483647;
+var d = -2147483647;
+var e = 2147483647;
+var f = -2147483647;
+var g = 2147483647;
+var h = this.size ();
+for (var i = h; --i >= 0; ) {
+var j = this.get (i);
+if (j.x < c) c = j.x;
+if (j.y < e) e = j.y;
+if (j.z < g) g = j.z;
+if (j.x > b) b = j.x;
+if (j.y > d) d = j.y;
+if (j.z > f) f = j.z;
+}
+var j = (b - c);
+var k = (d - e);
+var l = (f - g);
+return this.volume = j * j + k * k + l * l;
+}, "~B");
+Clazz.defineMethod (c$, "setColor",
+function () {
+var a = this.size ();
+this.center = new javajs.util.P3 ();
+for (var b = a; --b >= 0; ) this.center.add (this.get (b));
+
+this.center.scale (1 / a);
+return this.b$["javajs.img.GifEncoder"].toRGB (this.center);
+});
+Clazz.defineMethod (c$, "splitCell",
+function (a) {
+var b = this.size ();
+if (b < 2) return false;
+var c = a.size ();
+var d = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, c);
+a.addLast (d);
+var e = Clazz.newFloatArray (3, 3, 0);
+for (var f = 0; f < 3; f++) {
+var g = 3.4028235E38;
+var h = -3.4028235E38;
+for (var i = b; --i >= 0; ) {
+var j = this.get (i);
+var k = (f == 0 ? j.x : f == 1 ? j.y : j.z);
+if (g > k) g = k;
+if (h < k) h = k;
+}
+e[0][f] = g;
+e[1][f] = h;
+e[2][f] = h - g;
+}
+var g = e[2];
+var h = (g[0] >= g[1] ? (g[0] >= g[2] ? 0 : 2) : g[1] >= g[2] ? 1 : 2);
+var i = e[0][h] + e[2][h] / 2;
+this.volume = 0;
+switch (h) {
+case 0:
+for (var j = b; --j >= 0; ) if (this.get (j).x >= i) d.addLast (this.remove (j));
+
+break;
+case 1:
+for (var k = b; --k >= 0; ) if (this.get (k).y >= i) d.addLast (this.remove (k));
+
+break;
+case 2:
+for (var l = this.size (); --l >= 0; ) if (this.get (l).z >= i) d.addLast (this.remove (l));
+
+break;
+}
+return true;
+}, "javajs.util.Lst");
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"xyz2rgb", null,
+"rgb2xyz", null);
+{
+javajs.img.GifEncoder.rgb2xyz = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [0.4124, 0.3576, 0.1805, 0.2126, 0.7152, 0.0722, 0.0193, 0.1192, 0.9505]));
+javajs.img.GifEncoder.xyz2rgb = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [3.2406, -1.5372, -0.4986, -0.9689, 1.8758, 0.0415, 0.0557, -0.204, 1.0570]));
+}Clazz.defineStatics (c$,
+"EOF", -1,
+"INTERLACE_PARAMS", Clazz.newIntArray (-1, [8, 8, 4, 2, 4, 2, 1, 0]),
+"BITS", 12,
+"HSIZE", 5003);
+});
diff --git a/bin/javajs/img/ImageEncoder.js b/bin/javajs/img/ImageEncoder.js
index 79e2086..a0fc4c0 100644
--- a/bin/javajs/img/ImageEncoder.js
+++ b/bin/javajs/img/ImageEncoder.js
@@ -1,41 +1,41 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.api.GenericImageEncoder"], "javajs.img.ImageEncoder", ["java.lang.Boolean"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.out = null;
-this.width = -1;
-this.height = -1;
-this.quality = -1;
-this.date = null;
-this.logging = false;
-this.doClose = true;
-this.pixels = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "ImageEncoder", null, javajs.api.GenericImageEncoder);
-Clazz.overrideMethod (c$, "createImage",
-function (type, out, params) {
-this.out = out;
-this.logging = (Boolean.TRUE === params.get ("logging"));
-this.width = (params.get ("imageWidth")).intValue ();
-this.height = (params.get ("imageHeight")).intValue ();
-this.pixels = params.get ("imagePixels");
-this.date = params.get ("date");
-var q = params.get ("quality");
-this.quality = (q == null ? -1 : q.intValue ());
-this.setParams (params);
-this.generate ();
-this.close ();
-return this.doClose;
-}, "~S,javajs.util.OC,java.util.Map");
-Clazz.defineMethod (c$, "putString",
-function (s) {
-var b = s.getBytes ();
-this.out.write (b, 0, b.length);
-}, "~S");
-Clazz.defineMethod (c$, "putByte",
-function (b) {
-this.out.writeByteAsInt (b);
-}, "~N");
-Clazz.defineMethod (c$, "close",
-function () {
-});
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.api.GenericImageEncoder"], "javajs.img.ImageEncoder", ["java.lang.Boolean"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.out = null;
+this.width = -1;
+this.height = -1;
+this.quality = -1;
+this.date = null;
+this.logging = false;
+this.doClose = true;
+this.pixels = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "ImageEncoder", null, javajs.api.GenericImageEncoder);
+Clazz.overrideMethod (c$, "createImage",
+function (type, out, params) {
+this.out = out;
+this.logging = (Boolean.TRUE === params.get ("logging"));
+this.width = (params.get ("imageWidth")).intValue ();
+this.height = (params.get ("imageHeight")).intValue ();
+this.pixels = params.get ("imagePixels");
+this.date = params.get ("date");
+var q = params.get ("quality");
+this.quality = (q == null ? -1 : q.intValue ());
+this.setParams (params);
+this.generate ();
+this.close ();
+return this.doClose;
+}, "~S,javajs.util.OC,java.util.Map");
+Clazz.defineMethod (c$, "putString",
+function (s) {
+var b = s.getBytes ();
+this.out.write (b, 0, b.length);
+}, "~S");
+Clazz.defineMethod (c$, "putByte",
+function (b) {
+this.out.writeByteAsInt (b);
+}, "~N");
+Clazz.defineMethod (c$, "close",
+function () {
+});
+});
diff --git a/bin/javajs/img/Jpg64Encoder.js b/bin/javajs/img/Jpg64Encoder.js
index 2ef2678..c8eb5d1 100644
--- a/bin/javajs/img/Jpg64Encoder.js
+++ b/bin/javajs/img/Jpg64Encoder.js
@@ -1,23 +1,23 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.JpgEncoder"], "javajs.img.Jpg64Encoder", ["javajs.util.Base64"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.outTemp = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "Jpg64Encoder", javajs.img.JpgEncoder);
-Clazz.defineMethod (c$, "setParams",
-function (params) {
-this.defaultQuality = 75;
-this.outTemp = params.remove ("outputChannelTemp");
-Clazz.superCall (this, javajs.img.Jpg64Encoder, "setParams", [params]);
-}, "java.util.Map");
-Clazz.defineMethod (c$, "generate",
-function () {
-var out0 = this.out;
-this.out = this.outTemp;
-Clazz.superCall (this, javajs.img.Jpg64Encoder, "generate", []);
-var bytes = javajs.util.Base64.getBytes64 (this.out.toByteArray ());
-this.outTemp = null;
-this.out = out0;
-this.out.write (bytes, 0, bytes.length);
-});
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.img.JpgEncoder"], "javajs.img.Jpg64Encoder", ["javajs.util.Base64"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.outTemp = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "Jpg64Encoder", javajs.img.JpgEncoder);
+Clazz.defineMethod (c$, "setParams",
+function (params) {
+this.defaultQuality = 75;
+this.outTemp = params.remove ("outputChannelTemp");
+Clazz.superCall (this, javajs.img.Jpg64Encoder, "setParams", [params]);
+}, "java.util.Map");
+Clazz.defineMethod (c$, "generate",
+function () {
+var out0 = this.out;
+this.out = this.outTemp;
+Clazz.superCall (this, javajs.img.Jpg64Encoder, "generate", []);
+var bytes = javajs.util.Base64.getBytes64 (this.out.toByteArray ());
+this.outTemp = null;
+this.out = out0;
+this.out.write (bytes, 0, bytes.length);
+});
+});
diff --git a/bin/javajs/img/JpgEncoder.js b/bin/javajs/img/JpgEncoder.js
index 9edf3b2..b13c26f 100644
--- a/bin/javajs/img/JpgEncoder.js
+++ b/bin/javajs/img/JpgEncoder.js
@@ -1,753 +1,753 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.ImageEncoder", "javajs.util.AU"], ["javajs.img.DCT", "$.JpgEncoder", "$.JpegObj", "$.Huffman"], null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.jpegObj = null;
-this.huf = null;
-this.dct = null;
-this.defaultQuality = 100;
-this.applicationTag = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "JpgEncoder", javajs.img.ImageEncoder);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.img.JpgEncoder, []);
-});
-Clazz.overrideMethod (c$, "setParams",
-function (params) {
-if (this.quality <= 0) this.quality = (params.containsKey ("qualityJPG") ? (params.get ("qualityJPG")).intValue () : this.defaultQuality);
-this.jpegObj = new javajs.img.JpegObj ();
-this.jpegObj.comment = params.get ("comment");
-this.applicationTag = params.get ("jpgAppTag");
-}, "java.util.Map");
-Clazz.overrideMethod (c$, "generate",
-function () {
-this.jpegObj.imageWidth = this.width;
-this.jpegObj.imageHeight = this.height;
-this.dct = new javajs.img.DCT (this.quality);
-this.huf = new javajs.img.Huffman (this.width, this.height);
-if (this.jpegObj == null) return;
-this.jpegObj.getYCCArray (this.pixels);
-var longState = this.writeHeaders (this.jpegObj, this.dct);
-this.writeCompressedData (this.jpegObj, this.dct, this.huf);
-this.writeMarker (javajs.img.JpgEncoder.eoi);
-if (longState != null) {
-var b = longState.getBytes ();
-this.out.write (b, 0, b.length);
-}});
-Clazz.defineMethod (c$, "writeCompressedData",
-($fz = function (jpegObj, dct, huf) {
-var i;
-var j;
-var r;
-var c;
-var a;
-var b;
-var comp;
-var xpos;
-var ypos;
-var xblockoffset;
-var yblockoffset;
-var inputArray;
-var dctArray1 = Clazz.newFloatArray (8, 8, 0);
-var dctArray2 = Clazz.newDoubleArray (8, 8, 0);
-var dctArray3 = Clazz.newIntArray (64, 0);
-var lastDCvalue = Clazz.newIntArray (jpegObj.numberOfComponents, 0);
-var minBlockWidth;
-var minBlockHeight;
-minBlockWidth = ((huf.imageWidth % 8 != 0) ? Clazz.doubleToInt (Math.floor (huf.imageWidth / 8.0) + 1) * 8 : huf.imageWidth);
-minBlockHeight = ((huf.imageHeight % 8 != 0) ? Clazz.doubleToInt (Math.floor (huf.imageHeight / 8.0) + 1) * 8 : huf.imageHeight);
-for (comp = 0; comp < jpegObj.numberOfComponents; comp++) {
-minBlockWidth = Math.min (minBlockWidth, jpegObj.blockWidth[comp]);
-minBlockHeight = Math.min (minBlockHeight, jpegObj.blockHeight[comp]);
-}
-xpos = 0;
-for (r = 0; r < minBlockHeight; r++) {
-for (c = 0; c < minBlockWidth; c++) {
-xpos = c * 8;
-ypos = r * 8;
-for (comp = 0; comp < jpegObj.numberOfComponents; comp++) {
-inputArray = jpegObj.components[comp];
-var vsampF = jpegObj.vsampFactor[comp];
-var hsampF = jpegObj.hsampFactor[comp];
-var qNumber = jpegObj.qtableNumber[comp];
-var dcNumber = jpegObj.dctableNumber[comp];
-var acNumber = jpegObj.actableNumber[comp];
-for (i = 0; i < vsampF; i++) {
-for (j = 0; j < hsampF; j++) {
-xblockoffset = j * 8;
-yblockoffset = i * 8;
-for (a = 0; a < 8; a++) {
-for (b = 0; b < 8; b++) {
-dctArray1[a][b] = inputArray[ypos + yblockoffset + a][xpos + xblockoffset + b];
-}
-}
-dctArray2 = javajs.img.DCT.forwardDCT (dctArray1);
-dctArray3 = javajs.img.DCT.quantizeBlock (dctArray2, dct.divisors[qNumber]);
-huf.HuffmanBlockEncoder (this.out, dctArray3, lastDCvalue[comp], dcNumber, acNumber);
-lastDCvalue[comp] = dctArray3[0];
-}
-}
-}
-}
-}
-huf.flushBuffer (this.out);
-}, $fz.isPrivate = true, $fz), "javajs.img.JpegObj,javajs.img.DCT,javajs.img.Huffman");
-Clazz.defineMethod (c$, "writeHeaders",
-($fz = function (jpegObj, dct) {
-var i;
-var j;
-var index;
-var offset;
-var tempArray;
-this.writeMarker (javajs.img.JpgEncoder.soi);
-this.writeArray (javajs.img.JpgEncoder.jfif);
-var comment = null;
-if (jpegObj.comment.length > 0) this.writeString (jpegObj.comment, 0xE1);
-this.writeString ("JPEG Encoder Copyright 1998, James R. Weeks and BioElectroMech.\n\n", 0xFE);
-var dqt = Clazz.newByteArray (134, 0);
-dqt[0] = 0xFF;
-dqt[1] = 0xDB;
-dqt[2] = 0;
-dqt[3] = 132;
-offset = 4;
-for (i = 0; i < 2; i++) {
-dqt[offset++] = ((0) + i);
-tempArray = dct.quantum[i];
-for (j = 0; j < 64; j++) {
-dqt[offset++] = tempArray[javajs.img.Huffman.jpegNaturalOrder[j]];
-}
-}
-this.writeArray (dqt);
-var sof = Clazz.newByteArray (19, 0);
-sof[0] = 0xFF;
-sof[1] = 0xC0;
-sof[2] = 0;
-sof[3] = 17;
-sof[4] = jpegObj.precision;
-sof[5] = ((jpegObj.imageHeight >> 8) & 0xFF);
-sof[6] = ((jpegObj.imageHeight) & 0xFF);
-sof[7] = ((jpegObj.imageWidth >> 8) & 0xFF);
-sof[8] = ((jpegObj.imageWidth) & 0xFF);
-sof[9] = jpegObj.numberOfComponents;
-index = 10;
-for (i = 0; i < sof[9]; i++) {
-sof[index++] = jpegObj.compID[i];
-sof[index++] = ((jpegObj.hsampFactor[i] << 4) + jpegObj.vsampFactor[i]);
-sof[index++] = jpegObj.qtableNumber[i];
-}
-this.writeArray (sof);
-this.WriteDHTHeader (javajs.img.Huffman.bitsDCluminance, javajs.img.Huffman.valDCluminance);
-this.WriteDHTHeader (javajs.img.Huffman.bitsACluminance, javajs.img.Huffman.valACluminance);
-this.WriteDHTHeader (javajs.img.Huffman.bitsDCchrominance, javajs.img.Huffman.valDCchrominance);
-this.WriteDHTHeader (javajs.img.Huffman.bitsACchrominance, javajs.img.Huffman.valACchrominance);
-var sos = Clazz.newByteArray (14, 0);
-sos[0] = 0xFF;
-sos[1] = 0xDA;
-sos[2] = 0;
-sos[3] = 12;
-sos[4] = jpegObj.numberOfComponents;
-index = 5;
-for (i = 0; i < sos[4]; i++) {
-sos[index++] = jpegObj.compID[i];
-sos[index++] = ((jpegObj.dctableNumber[i] << 4) + jpegObj.actableNumber[i]);
-}
-sos[index++] = jpegObj.ss;
-sos[index++] = jpegObj.se;
-sos[index++] = ((jpegObj.ah << 4) + jpegObj.al);
-this.writeArray (sos);
-return comment;
-}, $fz.isPrivate = true, $fz), "javajs.img.JpegObj,javajs.img.DCT");
-Clazz.defineMethod (c$, "writeString",
-($fz = function (s, id) {
-var len = s.length;
-var i0 = 0;
-var suffix = this.applicationTag;
-while (i0 < len) {
-var nBytes = len - i0;
-if (nBytes > 65510) {
-nBytes = 65500;
-var pt = s.lastIndexOf ('\n', i0 + nBytes);
-if (pt > i0 + 1) nBytes = pt - i0;
-}if (i0 + nBytes == len) suffix = "";
-this.writeTag (nBytes + suffix.length, id);
-this.writeArray (s.substring (i0, i0 + nBytes).getBytes ());
-if (suffix.length > 0) this.writeArray (suffix.getBytes ());
-i0 += nBytes;
-}
-}, $fz.isPrivate = true, $fz), "~S,~N");
-Clazz.defineMethod (c$, "writeTag",
-($fz = function (length, id) {
-length += 2;
-var com = Clazz.newByteArray (4, 0);
-com[0] = 0xFF;
-com[1] = id;
-com[2] = ((length >> 8) & 0xFF);
-com[3] = (length & 0xFF);
-this.writeArray (com);
-}, $fz.isPrivate = true, $fz), "~N,~N");
-Clazz.defineMethod (c$, "WriteDHTHeader",
-function (bits, val) {
-var dht;
-var bytes = 0;
-for (var j = 1; j < 17; j++) bytes += bits[j];
-
-dht = Clazz.newByteArray (21 + bytes, 0);
-dht[0] = 0xFF;
-dht[1] = 0xC4;
-var index = 4;
-for (var j = 0; j < 17; j++) dht[index++] = bits[j];
-
-for (var j = 0; j < bytes; j++) dht[index++] = val[j];
-
-dht[2] = (((index - 2) >> 8) & 0xFF);
-dht[3] = ((index - 2) & 0xFF);
-this.writeArray (dht);
-}, "~A,~A");
-Clazz.defineMethod (c$, "writeMarker",
-function (data) {
-this.out.write (data, 0, 2);
-}, "~A");
-Clazz.defineMethod (c$, "writeArray",
-function (data) {
-this.out.write (data, 0, data.length);
-}, "~A");
-Clazz.defineStatics (c$,
-"CONTINUE_MAX", 65500,
-"CONTINUE_MAX_BUFFER", 65510,
-"eoi", Clazz.newByteArray (-1, [0xFF, 0xD9]),
-"jfif", Clazz.newByteArray (-1, [0xff, 0xe0, 0, 16, 0x4a, 0x46, 0x49, 0x46, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0]),
-"soi", Clazz.newByteArray (-1, [0xFF, 0xD8]));
-c$ = Clazz.decorateAsClass (function () {
-this.quantum = null;
-this.divisors = null;
-this.quantum_luminance = null;
-this.DivisorsLuminance = null;
-this.quantum_chrominance = null;
-this.DivisorsChrominance = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "DCT");
-Clazz.prepareFields (c$, function () {
-this.quantum = javajs.util.AU.newInt2 (2);
-this.divisors = javajs.util.AU.newDouble2 (2);
-this.quantum_luminance = Clazz.newIntArray (64, 0);
-this.DivisorsLuminance = Clazz.newDoubleArray (64, 0);
-this.quantum_chrominance = Clazz.newIntArray (64, 0);
-this.DivisorsChrominance = Clazz.newDoubleArray (64, 0);
-});
-Clazz.makeConstructor (c$,
-function (quality) {
-this.initMatrix (quality);
-}, "~N");
-Clazz.defineMethod (c$, "initMatrix",
-($fz = function (quality) {
-quality = (quality < 1 ? 1 : quality > 100 ? 100 : quality);
-quality = (quality < 50 ? Clazz.doubleToInt (5000 / quality) : 200 - quality * 2);
-this.quantum_luminance[0] = 16;
-this.quantum_luminance[1] = 11;
-this.quantum_luminance[2] = 10;
-this.quantum_luminance[3] = 16;
-this.quantum_luminance[4] = 24;
-this.quantum_luminance[5] = 40;
-this.quantum_luminance[6] = 51;
-this.quantum_luminance[7] = 61;
-this.quantum_luminance[8] = 12;
-this.quantum_luminance[9] = 12;
-this.quantum_luminance[10] = 14;
-this.quantum_luminance[11] = 19;
-this.quantum_luminance[12] = 26;
-this.quantum_luminance[13] = 58;
-this.quantum_luminance[14] = 60;
-this.quantum_luminance[15] = 55;
-this.quantum_luminance[16] = 14;
-this.quantum_luminance[17] = 13;
-this.quantum_luminance[18] = 16;
-this.quantum_luminance[19] = 24;
-this.quantum_luminance[20] = 40;
-this.quantum_luminance[21] = 57;
-this.quantum_luminance[22] = 69;
-this.quantum_luminance[23] = 56;
-this.quantum_luminance[24] = 14;
-this.quantum_luminance[25] = 17;
-this.quantum_luminance[26] = 22;
-this.quantum_luminance[27] = 29;
-this.quantum_luminance[28] = 51;
-this.quantum_luminance[29] = 87;
-this.quantum_luminance[30] = 80;
-this.quantum_luminance[31] = 62;
-this.quantum_luminance[32] = 18;
-this.quantum_luminance[33] = 22;
-this.quantum_luminance[34] = 37;
-this.quantum_luminance[35] = 56;
-this.quantum_luminance[36] = 68;
-this.quantum_luminance[37] = 109;
-this.quantum_luminance[38] = 103;
-this.quantum_luminance[39] = 77;
-this.quantum_luminance[40] = 24;
-this.quantum_luminance[41] = 35;
-this.quantum_luminance[42] = 55;
-this.quantum_luminance[43] = 64;
-this.quantum_luminance[44] = 81;
-this.quantum_luminance[45] = 104;
-this.quantum_luminance[46] = 113;
-this.quantum_luminance[47] = 92;
-this.quantum_luminance[48] = 49;
-this.quantum_luminance[49] = 64;
-this.quantum_luminance[50] = 78;
-this.quantum_luminance[51] = 87;
-this.quantum_luminance[52] = 103;
-this.quantum_luminance[53] = 121;
-this.quantum_luminance[54] = 120;
-this.quantum_luminance[55] = 101;
-this.quantum_luminance[56] = 72;
-this.quantum_luminance[57] = 92;
-this.quantum_luminance[58] = 95;
-this.quantum_luminance[59] = 98;
-this.quantum_luminance[60] = 112;
-this.quantum_luminance[61] = 100;
-this.quantum_luminance[62] = 103;
-this.quantum_luminance[63] = 99;
-javajs.img.DCT.AANscale (this.DivisorsLuminance, this.quantum_luminance, quality);
-for (var i = 4; i < 64; i++) this.quantum_chrominance[i] = 99;
-
-this.quantum_chrominance[0] = 17;
-this.quantum_chrominance[1] = 18;
-this.quantum_chrominance[2] = 24;
-this.quantum_chrominance[3] = 47;
-this.quantum_chrominance[8] = 18;
-this.quantum_chrominance[9] = 21;
-this.quantum_chrominance[10] = 26;
-this.quantum_chrominance[11] = 66;
-this.quantum_chrominance[16] = 24;
-this.quantum_chrominance[17] = 26;
-this.quantum_chrominance[18] = 56;
-this.quantum_chrominance[24] = 47;
-this.quantum_chrominance[25] = 66;
-javajs.img.DCT.AANscale (this.DivisorsChrominance, this.quantum_chrominance, quality);
-this.quantum[0] = this.quantum_luminance;
-this.quantum[1] = this.quantum_chrominance;
-this.divisors[0] = this.DivisorsLuminance;
-this.divisors[1] = this.DivisorsChrominance;
-}, $fz.isPrivate = true, $fz), "~N");
-c$.AANscale = Clazz.defineMethod (c$, "AANscale",
-($fz = function (divisors, values, quality) {
-for (var j = 0; j < 64; j++) {
-var temp = Clazz.doubleToInt ((values[j] * quality + 50) / 100);
-values[j] = (temp < 1 ? 1 : temp > 255 ? 255 : temp);
-}
-for (var i = 0, index = 0; i < 8; i++) for (var j = 0; j < 8; j++, index++) divisors[index] = (0.125 / (values[index] * javajs.img.DCT.AANscaleFactor[i] * javajs.img.DCT.AANscaleFactor[j]));
-
-
-}, $fz.isPrivate = true, $fz), "~A,~A,~N");
-c$.forwardDCT = Clazz.defineMethod (c$, "forwardDCT",
-function (input) {
-var output = Clazz.newDoubleArray (8, 8, 0);
-var tmp0;
-var tmp1;
-var tmp2;
-var tmp3;
-var tmp4;
-var tmp5;
-var tmp6;
-var tmp7;
-var tmp10;
-var tmp11;
-var tmp12;
-var tmp13;
-var z1;
-var z2;
-var z3;
-var z4;
-var z5;
-var z11;
-var z13;
-for (var i = 0; i < 8; i++) for (var j = 0; j < 8; j++) output[i][j] = (input[i][j] - 128.0);
-
-
-for (var i = 0; i < 8; i++) {
-tmp0 = output[i][0] + output[i][7];
-tmp7 = output[i][0] - output[i][7];
-tmp1 = output[i][1] + output[i][6];
-tmp6 = output[i][1] - output[i][6];
-tmp2 = output[i][2] + output[i][5];
-tmp5 = output[i][2] - output[i][5];
-tmp3 = output[i][3] + output[i][4];
-tmp4 = output[i][3] - output[i][4];
-tmp10 = tmp0 + tmp3;
-tmp13 = tmp0 - tmp3;
-tmp11 = tmp1 + tmp2;
-tmp12 = tmp1 - tmp2;
-output[i][0] = tmp10 + tmp11;
-output[i][4] = tmp10 - tmp11;
-z1 = (tmp12 + tmp13) * 0.707106781;
-output[i][2] = tmp13 + z1;
-output[i][6] = tmp13 - z1;
-tmp10 = tmp4 + tmp5;
-tmp11 = tmp5 + tmp6;
-tmp12 = tmp6 + tmp7;
-z5 = (tmp10 - tmp12) * 0.382683433;
-z2 = 0.541196100 * tmp10 + z5;
-z4 = 1.306562965 * tmp12 + z5;
-z3 = tmp11 * 0.707106781;
-z11 = tmp7 + z3;
-z13 = tmp7 - z3;
-output[i][5] = z13 + z2;
-output[i][3] = z13 - z2;
-output[i][1] = z11 + z4;
-output[i][7] = z11 - z4;
-}
-for (var i = 0; i < 8; i++) {
-tmp0 = output[0][i] + output[7][i];
-tmp7 = output[0][i] - output[7][i];
-tmp1 = output[1][i] + output[6][i];
-tmp6 = output[1][i] - output[6][i];
-tmp2 = output[2][i] + output[5][i];
-tmp5 = output[2][i] - output[5][i];
-tmp3 = output[3][i] + output[4][i];
-tmp4 = output[3][i] - output[4][i];
-tmp10 = tmp0 + tmp3;
-tmp13 = tmp0 - tmp3;
-tmp11 = tmp1 + tmp2;
-tmp12 = tmp1 - tmp2;
-output[0][i] = tmp10 + tmp11;
-output[4][i] = tmp10 - tmp11;
-z1 = (tmp12 + tmp13) * 0.707106781;
-output[2][i] = tmp13 + z1;
-output[6][i] = tmp13 - z1;
-tmp10 = tmp4 + tmp5;
-tmp11 = tmp5 + tmp6;
-tmp12 = tmp6 + tmp7;
-z5 = (tmp10 - tmp12) * 0.382683433;
-z2 = 0.541196100 * tmp10 + z5;
-z4 = 1.306562965 * tmp12 + z5;
-z3 = tmp11 * 0.707106781;
-z11 = tmp7 + z3;
-z13 = tmp7 - z3;
-output[5][i] = z13 + z2;
-output[3][i] = z13 - z2;
-output[1][i] = z11 + z4;
-output[7][i] = z11 - z4;
-}
-return output;
-}, "~A");
-c$.quantizeBlock = Clazz.defineMethod (c$, "quantizeBlock",
-function (inputData, divisorsCode) {
-var outputData = Clazz.newIntArray (64, 0);
-for (var i = 0, index = 0; i < 8; i++) for (var j = 0; j < 8; j++, index++) outputData[index] = (Math.round (inputData[i][j] * divisorsCode[index]));
-
-
-return outputData;
-}, "~A,~A");
-Clazz.defineStatics (c$,
-"N", 8,
-"NN", 64,
-"AANscaleFactor", Clazz.newDoubleArray (-1, [1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379]));
-c$ = Clazz.decorateAsClass (function () {
-this.bufferPutBits = 0;
-this.bufferPutBuffer = 0;
-this.imageHeight = 0;
-this.imageWidth = 0;
-this.dc_matrix0 = null;
-this.ac_matrix0 = null;
-this.dc_matrix1 = null;
-this.ac_matrix1 = null;
-this.dc_matrix = null;
-this.ac_matrix = null;
-this.numOfDCTables = 0;
-this.numOfACTables = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "Huffman");
-Clazz.makeConstructor (c$,
-function (width, height) {
-this.initHuf ();
-this.imageWidth = width;
-this.imageHeight = height;
-}, "~N,~N");
-Clazz.defineMethod (c$, "HuffmanBlockEncoder",
-function (out, zigzag, prec, dcCode, acCode) {
-var temp;
-var temp2;
-var nbits;
-var k;
-var r;
-var i;
-this.numOfDCTables = 2;
-this.numOfACTables = 2;
-var matrixDC = this.dc_matrix[dcCode];
-var matrixAC = this.ac_matrix[acCode];
-temp = temp2 = zigzag[0] - prec;
-if (temp < 0) {
-temp = -temp;
-temp2--;
-}nbits = 0;
-while (temp != 0) {
-nbits++;
-temp >>= 1;
-}
-this.bufferIt (out, matrixDC[nbits][0], matrixDC[nbits][1]);
-if (nbits != 0) {
-this.bufferIt (out, temp2, nbits);
-}r = 0;
-for (k = 1; k < 64; k++) {
-if ((temp = zigzag[javajs.img.Huffman.jpegNaturalOrder[k]]) == 0) {
-r++;
-} else {
-while (r > 15) {
-this.bufferIt (out, matrixAC[0xF0][0], matrixAC[0xF0][1]);
-r -= 16;
-}
-temp2 = temp;
-if (temp < 0) {
-temp = -temp;
-temp2--;
-}nbits = 1;
-while ((temp >>= 1) != 0) {
-nbits++;
-}
-i = (r << 4) + nbits;
-this.bufferIt (out, matrixAC[i][0], matrixAC[i][1]);
-this.bufferIt (out, temp2, nbits);
-r = 0;
-}}
-if (r > 0) {
-this.bufferIt (out, matrixAC[0][0], matrixAC[0][1]);
-}}, "javajs.util.OC,~A,~N,~N,~N");
-Clazz.defineMethod (c$, "bufferIt",
-function (out, code, size) {
-var putBuffer = code;
-var putBits = this.bufferPutBits;
-putBuffer &= (1 << size) - 1;
-putBits += size;
-putBuffer <<= 24 - putBits;
-putBuffer |= this.bufferPutBuffer;
-while (putBits >= 8) {
-var c = ((putBuffer >> 16) & 0xFF);
-out.writeByteAsInt (c);
-if (c == 0xFF) {
-out.writeByteAsInt (0);
-}putBuffer <<= 8;
-putBits -= 8;
-}
-this.bufferPutBuffer = putBuffer;
-this.bufferPutBits = putBits;
-}, "javajs.util.OC,~N,~N");
-Clazz.defineMethod (c$, "flushBuffer",
-function (out) {
-var putBuffer = this.bufferPutBuffer;
-var putBits = this.bufferPutBits;
-while (putBits >= 8) {
-var c = ((putBuffer >> 16) & 0xFF);
-out.writeByteAsInt (c);
-if (c == 0xFF) {
-out.writeByteAsInt (0);
-}putBuffer <<= 8;
-putBits -= 8;
-}
-if (putBits > 0) {
-var c = ((putBuffer >> 16) & 0xFF);
-out.writeByteAsInt (c);
-}}, "javajs.util.OC");
-Clazz.defineMethod (c$, "initHuf",
-($fz = function () {
-this.dc_matrix0 = Clazz.newIntArray (12, 2, 0);
-this.dc_matrix1 = Clazz.newIntArray (12, 2, 0);
-this.ac_matrix0 = Clazz.newIntArray (255, 2, 0);
-this.ac_matrix1 = Clazz.newIntArray (255, 2, 0);
-this.dc_matrix = javajs.util.AU.newInt3 (2, -1);
-this.ac_matrix = javajs.util.AU.newInt3 (2, -1);
-var p;
-var l;
-var i;
-var lastp;
-var si;
-var code;
-var huffsize = Clazz.newIntArray (257, 0);
-var huffcode = Clazz.newIntArray (257, 0);
-p = 0;
-for (l = 1; l <= 16; l++) {
-for (i = javajs.img.Huffman.bitsDCchrominance[l]; --i >= 0; ) {
-huffsize[p++] = l;
-}
-}
-huffsize[p] = 0;
-lastp = p;
-code = 0;
-si = huffsize[0];
-p = 0;
-while (huffsize[p] != 0) {
-while (huffsize[p] == si) {
-huffcode[p++] = code;
-code++;
-}
-code <<= 1;
-si++;
-}
-for (p = 0; p < lastp; p++) {
-this.dc_matrix1[javajs.img.Huffman.valDCchrominance[p]][0] = huffcode[p];
-this.dc_matrix1[javajs.img.Huffman.valDCchrominance[p]][1] = huffsize[p];
-}
-p = 0;
-for (l = 1; l <= 16; l++) {
-for (i = javajs.img.Huffman.bitsACchrominance[l]; --i >= 0; ) {
-huffsize[p++] = l;
-}
-}
-huffsize[p] = 0;
-lastp = p;
-code = 0;
-si = huffsize[0];
-p = 0;
-while (huffsize[p] != 0) {
-while (huffsize[p] == si) {
-huffcode[p++] = code;
-code++;
-}
-code <<= 1;
-si++;
-}
-for (p = 0; p < lastp; p++) {
-this.ac_matrix1[javajs.img.Huffman.valACchrominance[p]][0] = huffcode[p];
-this.ac_matrix1[javajs.img.Huffman.valACchrominance[p]][1] = huffsize[p];
-}
-p = 0;
-for (l = 1; l <= 16; l++) {
-for (i = javajs.img.Huffman.bitsDCluminance[l]; --i >= 0; ) {
-huffsize[p++] = l;
-}
-}
-huffsize[p] = 0;
-lastp = p;
-code = 0;
-si = huffsize[0];
-p = 0;
-while (huffsize[p] != 0) {
-while (huffsize[p] == si) {
-huffcode[p++] = code;
-code++;
-}
-code <<= 1;
-si++;
-}
-for (p = 0; p < lastp; p++) {
-this.dc_matrix0[javajs.img.Huffman.valDCluminance[p]][0] = huffcode[p];
-this.dc_matrix0[javajs.img.Huffman.valDCluminance[p]][1] = huffsize[p];
-}
-p = 0;
-for (l = 1; l <= 16; l++) {
-for (i = javajs.img.Huffman.bitsACluminance[l]; --i >= 0; ) {
-huffsize[p++] = l;
-}
-}
-huffsize[p] = 0;
-lastp = p;
-code = 0;
-si = huffsize[0];
-p = 0;
-while (huffsize[p] != 0) {
-while (huffsize[p] == si) {
-huffcode[p++] = code;
-code++;
-}
-code <<= 1;
-si++;
-}
-for (var q = 0; q < lastp; q++) {
-this.ac_matrix0[javajs.img.Huffman.valACluminance[q]][0] = huffcode[q];
-this.ac_matrix0[javajs.img.Huffman.valACluminance[q]][1] = huffsize[q];
-}
-this.dc_matrix[0] = this.dc_matrix0;
-this.dc_matrix[1] = this.dc_matrix1;
-this.ac_matrix[0] = this.ac_matrix0;
-this.ac_matrix[1] = this.ac_matrix1;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineStatics (c$,
-"bitsDCluminance", Clazz.newIntArray (-1, [0x00, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]),
-"valDCluminance", Clazz.newIntArray (-1, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
-"bitsDCchrominance", Clazz.newIntArray (-1, [0x01, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]),
-"valDCchrominance", Clazz.newIntArray (-1, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
-"bitsACluminance", Clazz.newIntArray (-1, [0x10, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d]),
-"valACluminance", Clazz.newIntArray (-1, [0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]),
-"bitsACchrominance", Clazz.newIntArray (-1, [0x11, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77]),
-"valACchrominance", Clazz.newIntArray (-1, [0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]),
-"jpegNaturalOrder", Clazz.newIntArray (-1, [0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]));
-c$ = Clazz.decorateAsClass (function () {
-this.comment = null;
-this.imageHeight = 0;
-this.imageWidth = 0;
-this.blockWidth = null;
-this.blockHeight = null;
-this.precision = 8;
-this.numberOfComponents = 3;
-this.components = null;
-this.compID = null;
-this.hsampFactor = null;
-this.vsampFactor = null;
-this.qtableNumber = null;
-this.dctableNumber = null;
-this.actableNumber = null;
-this.lastColumnIsDummy = null;
-this.lastRowIsDummy = null;
-this.ss = 0;
-this.se = 63;
-this.ah = 0;
-this.al = 0;
-this.compWidth = null;
-this.compHeight = null;
-this.maxHsampFactor = 0;
-this.maxVsampFactor = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "JpegObj");
-Clazz.prepareFields (c$, function () {
-this.compID = Clazz.newIntArray (-1, [1, 2, 3]);
-this.hsampFactor = Clazz.newIntArray (-1, [1, 1, 1]);
-this.vsampFactor = Clazz.newIntArray (-1, [1, 1, 1]);
-this.qtableNumber = Clazz.newIntArray (-1, [0, 1, 1]);
-this.dctableNumber = Clazz.newIntArray (-1, [0, 1, 1]);
-this.actableNumber = Clazz.newIntArray (-1, [0, 1, 1]);
-this.lastColumnIsDummy = Clazz.newBooleanArray (-1, [false, false, false]);
-this.lastRowIsDummy = Clazz.newBooleanArray (-1, [false, false, false]);
-});
-Clazz.makeConstructor (c$,
-function () {
-this.components = javajs.util.AU.newFloat3 (this.numberOfComponents, -1);
-this.compWidth = Clazz.newIntArray (this.numberOfComponents, 0);
-this.compHeight = Clazz.newIntArray (this.numberOfComponents, 0);
-this.blockWidth = Clazz.newIntArray (this.numberOfComponents, 0);
-this.blockHeight = Clazz.newIntArray (this.numberOfComponents, 0);
-});
-Clazz.defineMethod (c$, "getYCCArray",
-function (pixels) {
-this.maxHsampFactor = 1;
-this.maxVsampFactor = 1;
-for (var y = 0; y < this.numberOfComponents; y++) {
-this.maxHsampFactor = Math.max (this.maxHsampFactor, this.hsampFactor[y]);
-this.maxVsampFactor = Math.max (this.maxVsampFactor, this.vsampFactor[y]);
-}
-for (var y = 0; y < this.numberOfComponents; y++) {
-this.compWidth[y] = (Clazz.doubleToInt (((this.imageWidth % 8 != 0) ? (Clazz.doubleToInt (Math.ceil (this.imageWidth / 8.0))) * 8 : this.imageWidth) / this.maxHsampFactor)) * this.hsampFactor[y];
-if (this.compWidth[y] != ((Clazz.doubleToInt (this.imageWidth / this.maxHsampFactor)) * this.hsampFactor[y])) {
-this.lastColumnIsDummy[y] = true;
-}this.blockWidth[y] = Clazz.doubleToInt (Math.ceil (this.compWidth[y] / 8.0));
-this.compHeight[y] = (Clazz.doubleToInt (((this.imageHeight % 8 != 0) ? (Clazz.doubleToInt (Math.ceil (this.imageHeight / 8.0))) * 8 : this.imageHeight) / this.maxVsampFactor)) * this.vsampFactor[y];
-if (this.compHeight[y] != ((Clazz.doubleToInt (this.imageHeight / this.maxVsampFactor)) * this.vsampFactor[y])) {
-this.lastRowIsDummy[y] = true;
-}this.blockHeight[y] = Clazz.doubleToInt (Math.ceil (this.compHeight[y] / 8.0));
-}
-var Y = Clazz.newFloatArray (this.compHeight[0], this.compWidth[0], 0);
-var Cr1 = Clazz.newFloatArray (this.compHeight[0], this.compWidth[0], 0);
-var Cb1 = Clazz.newFloatArray (this.compHeight[0], this.compWidth[0], 0);
-for (var pt = 0, y = 0; y < this.imageHeight; ++y) {
-for (var x = 0; x < this.imageWidth; ++x, pt++) {
-var p = pixels[pt];
-var r = ((p >> 16) & 0xff);
-var g = ((p >> 8) & 0xff);
-var b = (p & 0xff);
-Y[y][x] = ((0.299 * r + 0.587 * g + 0.114 * b));
-Cb1[y][x] = 128 + ((-0.16874 * r - 0.33126 * g + 0.5 * b));
-Cr1[y][x] = 128 + ((0.5 * r - 0.41869 * g - 0.08131 * b));
-}
-}
-this.components[0] = Y;
-this.components[1] = Cb1;
-this.components[2] = Cr1;
-}, "~A");
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.img.ImageEncoder", "javajs.util.AU"], ["javajs.img.DCT", "$.JpgEncoder", "$.JpegObj", "$.Huffman"], null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.jpegObj = null;
+this.huf = null;
+this.dct = null;
+this.defaultQuality = 100;
+this.applicationTag = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "JpgEncoder", javajs.img.ImageEncoder);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.img.JpgEncoder, []);
+});
+Clazz.overrideMethod (c$, "setParams",
+function (params) {
+if (this.quality <= 0) this.quality = (params.containsKey ("qualityJPG") ? (params.get ("qualityJPG")).intValue () : this.defaultQuality);
+this.jpegObj = new javajs.img.JpegObj ();
+this.jpegObj.comment = params.get ("comment");
+this.applicationTag = params.get ("jpgAppTag");
+}, "java.util.Map");
+Clazz.overrideMethod (c$, "generate",
+function () {
+this.jpegObj.imageWidth = this.width;
+this.jpegObj.imageHeight = this.height;
+this.dct = new javajs.img.DCT (this.quality);
+this.huf = new javajs.img.Huffman (this.width, this.height);
+if (this.jpegObj == null) return;
+this.jpegObj.getYCCArray (this.pixels);
+var longState = this.writeHeaders (this.jpegObj, this.dct);
+this.writeCompressedData (this.jpegObj, this.dct, this.huf);
+this.writeMarker (javajs.img.JpgEncoder.eoi);
+if (longState != null) {
+var b = longState.getBytes ();
+this.out.write (b, 0, b.length);
+}});
+Clazz.defineMethod (c$, "writeCompressedData",
+($fz = function (jpegObj, dct, huf) {
+var i;
+var j;
+var r;
+var c;
+var a;
+var b;
+var comp;
+var xpos;
+var ypos;
+var xblockoffset;
+var yblockoffset;
+var inputArray;
+var dctArray1 = Clazz.newFloatArray (8, 8, 0);
+var dctArray2 = Clazz.newDoubleArray (8, 8, 0);
+var dctArray3 = Clazz.newIntArray (64, 0);
+var lastDCvalue = Clazz.newIntArray (jpegObj.numberOfComponents, 0);
+var minBlockWidth;
+var minBlockHeight;
+minBlockWidth = ((huf.imageWidth % 8 != 0) ? Clazz.doubleToInt (Math.floor (huf.imageWidth / 8.0) + 1) * 8 : huf.imageWidth);
+minBlockHeight = ((huf.imageHeight % 8 != 0) ? Clazz.doubleToInt (Math.floor (huf.imageHeight / 8.0) + 1) * 8 : huf.imageHeight);
+for (comp = 0; comp < jpegObj.numberOfComponents; comp++) {
+minBlockWidth = Math.min (minBlockWidth, jpegObj.blockWidth[comp]);
+minBlockHeight = Math.min (minBlockHeight, jpegObj.blockHeight[comp]);
+}
+xpos = 0;
+for (r = 0; r < minBlockHeight; r++) {
+for (c = 0; c < minBlockWidth; c++) {
+xpos = c * 8;
+ypos = r * 8;
+for (comp = 0; comp < jpegObj.numberOfComponents; comp++) {
+inputArray = jpegObj.components[comp];
+var vsampF = jpegObj.vsampFactor[comp];
+var hsampF = jpegObj.hsampFactor[comp];
+var qNumber = jpegObj.qtableNumber[comp];
+var dcNumber = jpegObj.dctableNumber[comp];
+var acNumber = jpegObj.actableNumber[comp];
+for (i = 0; i < vsampF; i++) {
+for (j = 0; j < hsampF; j++) {
+xblockoffset = j * 8;
+yblockoffset = i * 8;
+for (a = 0; a < 8; a++) {
+for (b = 0; b < 8; b++) {
+dctArray1[a][b] = inputArray[ypos + yblockoffset + a][xpos + xblockoffset + b];
+}
+}
+dctArray2 = javajs.img.DCT.forwardDCT (dctArray1);
+dctArray3 = javajs.img.DCT.quantizeBlock (dctArray2, dct.divisors[qNumber]);
+huf.HuffmanBlockEncoder (this.out, dctArray3, lastDCvalue[comp], dcNumber, acNumber);
+lastDCvalue[comp] = dctArray3[0];
+}
+}
+}
+}
+}
+huf.flushBuffer (this.out);
+}, $fz.isPrivate = true, $fz), "javajs.img.JpegObj,javajs.img.DCT,javajs.img.Huffman");
+Clazz.defineMethod (c$, "writeHeaders",
+($fz = function (jpegObj, dct) {
+var i;
+var j;
+var index;
+var offset;
+var tempArray;
+this.writeMarker (javajs.img.JpgEncoder.soi);
+this.writeArray (javajs.img.JpgEncoder.jfif);
+var comment = null;
+if (jpegObj.comment.length > 0) this.writeString (jpegObj.comment, 0xE1);
+this.writeString ("JPEG Encoder Copyright 1998, James R. Weeks and BioElectroMech.\n\n", 0xFE);
+var dqt = Clazz.newByteArray (134, 0);
+dqt[0] = 0xFF;
+dqt[1] = 0xDB;
+dqt[2] = 0;
+dqt[3] = 132;
+offset = 4;
+for (i = 0; i < 2; i++) {
+dqt[offset++] = ((0) + i);
+tempArray = dct.quantum[i];
+for (j = 0; j < 64; j++) {
+dqt[offset++] = tempArray[javajs.img.Huffman.jpegNaturalOrder[j]];
+}
+}
+this.writeArray (dqt);
+var sof = Clazz.newByteArray (19, 0);
+sof[0] = 0xFF;
+sof[1] = 0xC0;
+sof[2] = 0;
+sof[3] = 17;
+sof[4] = jpegObj.precision;
+sof[5] = ((jpegObj.imageHeight >> 8) & 0xFF);
+sof[6] = ((jpegObj.imageHeight) & 0xFF);
+sof[7] = ((jpegObj.imageWidth >> 8) & 0xFF);
+sof[8] = ((jpegObj.imageWidth) & 0xFF);
+sof[9] = jpegObj.numberOfComponents;
+index = 10;
+for (i = 0; i < sof[9]; i++) {
+sof[index++] = jpegObj.compID[i];
+sof[index++] = ((jpegObj.hsampFactor[i] << 4) + jpegObj.vsampFactor[i]);
+sof[index++] = jpegObj.qtableNumber[i];
+}
+this.writeArray (sof);
+this.WriteDHTHeader (javajs.img.Huffman.bitsDCluminance, javajs.img.Huffman.valDCluminance);
+this.WriteDHTHeader (javajs.img.Huffman.bitsACluminance, javajs.img.Huffman.valACluminance);
+this.WriteDHTHeader (javajs.img.Huffman.bitsDCchrominance, javajs.img.Huffman.valDCchrominance);
+this.WriteDHTHeader (javajs.img.Huffman.bitsACchrominance, javajs.img.Huffman.valACchrominance);
+var sos = Clazz.newByteArray (14, 0);
+sos[0] = 0xFF;
+sos[1] = 0xDA;
+sos[2] = 0;
+sos[3] = 12;
+sos[4] = jpegObj.numberOfComponents;
+index = 5;
+for (i = 0; i < sos[4]; i++) {
+sos[index++] = jpegObj.compID[i];
+sos[index++] = ((jpegObj.dctableNumber[i] << 4) + jpegObj.actableNumber[i]);
+}
+sos[index++] = jpegObj.ss;
+sos[index++] = jpegObj.se;
+sos[index++] = ((jpegObj.ah << 4) + jpegObj.al);
+this.writeArray (sos);
+return comment;
+}, $fz.isPrivate = true, $fz), "javajs.img.JpegObj,javajs.img.DCT");
+Clazz.defineMethod (c$, "writeString",
+($fz = function (s, id) {
+var len = s.length;
+var i0 = 0;
+var suffix = this.applicationTag;
+while (i0 < len) {
+var nBytes = len - i0;
+if (nBytes > 65510) {
+nBytes = 65500;
+var pt = s.lastIndexOf ('\n', i0 + nBytes);
+if (pt > i0 + 1) nBytes = pt - i0;
+}if (i0 + nBytes == len) suffix = "";
+this.writeTag (nBytes + suffix.length, id);
+this.writeArray (s.substring (i0, i0 + nBytes).getBytes ());
+if (suffix.length > 0) this.writeArray (suffix.getBytes ());
+i0 += nBytes;
+}
+}, $fz.isPrivate = true, $fz), "~S,~N");
+Clazz.defineMethod (c$, "writeTag",
+($fz = function (length, id) {
+length += 2;
+var com = Clazz.newByteArray (4, 0);
+com[0] = 0xFF;
+com[1] = id;
+com[2] = ((length >> 8) & 0xFF);
+com[3] = (length & 0xFF);
+this.writeArray (com);
+}, $fz.isPrivate = true, $fz), "~N,~N");
+Clazz.defineMethod (c$, "WriteDHTHeader",
+function (bits, val) {
+var dht;
+var bytes = 0;
+for (var j = 1; j < 17; j++) bytes += bits[j];
+
+dht = Clazz.newByteArray (21 + bytes, 0);
+dht[0] = 0xFF;
+dht[1] = 0xC4;
+var index = 4;
+for (var j = 0; j < 17; j++) dht[index++] = bits[j];
+
+for (var j = 0; j < bytes; j++) dht[index++] = val[j];
+
+dht[2] = (((index - 2) >> 8) & 0xFF);
+dht[3] = ((index - 2) & 0xFF);
+this.writeArray (dht);
+}, "~A,~A");
+Clazz.defineMethod (c$, "writeMarker",
+function (data) {
+this.out.write (data, 0, 2);
+}, "~A");
+Clazz.defineMethod (c$, "writeArray",
+function (data) {
+this.out.write (data, 0, data.length);
+}, "~A");
+Clazz.defineStatics (c$,
+"CONTINUE_MAX", 65500,
+"CONTINUE_MAX_BUFFER", 65510,
+"eoi", Clazz.newByteArray (-1, [0xFF, 0xD9]),
+"jfif", Clazz.newByteArray (-1, [0xff, 0xe0, 0, 16, 0x4a, 0x46, 0x49, 0x46, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0]),
+"soi", Clazz.newByteArray (-1, [0xFF, 0xD8]));
+c$ = Clazz.decorateAsClass (function () {
+this.quantum = null;
+this.divisors = null;
+this.quantum_luminance = null;
+this.DivisorsLuminance = null;
+this.quantum_chrominance = null;
+this.DivisorsChrominance = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "DCT");
+Clazz.prepareFields (c$, function () {
+this.quantum = javajs.util.AU.newInt2 (2);
+this.divisors = javajs.util.AU.newDouble2 (2);
+this.quantum_luminance = Clazz.newIntArray (64, 0);
+this.DivisorsLuminance = Clazz.newDoubleArray (64, 0);
+this.quantum_chrominance = Clazz.newIntArray (64, 0);
+this.DivisorsChrominance = Clazz.newDoubleArray (64, 0);
+});
+Clazz.makeConstructor (c$,
+function (quality) {
+this.initMatrix (quality);
+}, "~N");
+Clazz.defineMethod (c$, "initMatrix",
+($fz = function (quality) {
+quality = (quality < 1 ? 1 : quality > 100 ? 100 : quality);
+quality = (quality < 50 ? Clazz.doubleToInt (5000 / quality) : 200 - quality * 2);
+this.quantum_luminance[0] = 16;
+this.quantum_luminance[1] = 11;
+this.quantum_luminance[2] = 10;
+this.quantum_luminance[3] = 16;
+this.quantum_luminance[4] = 24;
+this.quantum_luminance[5] = 40;
+this.quantum_luminance[6] = 51;
+this.quantum_luminance[7] = 61;
+this.quantum_luminance[8] = 12;
+this.quantum_luminance[9] = 12;
+this.quantum_luminance[10] = 14;
+this.quantum_luminance[11] = 19;
+this.quantum_luminance[12] = 26;
+this.quantum_luminance[13] = 58;
+this.quantum_luminance[14] = 60;
+this.quantum_luminance[15] = 55;
+this.quantum_luminance[16] = 14;
+this.quantum_luminance[17] = 13;
+this.quantum_luminance[18] = 16;
+this.quantum_luminance[19] = 24;
+this.quantum_luminance[20] = 40;
+this.quantum_luminance[21] = 57;
+this.quantum_luminance[22] = 69;
+this.quantum_luminance[23] = 56;
+this.quantum_luminance[24] = 14;
+this.quantum_luminance[25] = 17;
+this.quantum_luminance[26] = 22;
+this.quantum_luminance[27] = 29;
+this.quantum_luminance[28] = 51;
+this.quantum_luminance[29] = 87;
+this.quantum_luminance[30] = 80;
+this.quantum_luminance[31] = 62;
+this.quantum_luminance[32] = 18;
+this.quantum_luminance[33] = 22;
+this.quantum_luminance[34] = 37;
+this.quantum_luminance[35] = 56;
+this.quantum_luminance[36] = 68;
+this.quantum_luminance[37] = 109;
+this.quantum_luminance[38] = 103;
+this.quantum_luminance[39] = 77;
+this.quantum_luminance[40] = 24;
+this.quantum_luminance[41] = 35;
+this.quantum_luminance[42] = 55;
+this.quantum_luminance[43] = 64;
+this.quantum_luminance[44] = 81;
+this.quantum_luminance[45] = 104;
+this.quantum_luminance[46] = 113;
+this.quantum_luminance[47] = 92;
+this.quantum_luminance[48] = 49;
+this.quantum_luminance[49] = 64;
+this.quantum_luminance[50] = 78;
+this.quantum_luminance[51] = 87;
+this.quantum_luminance[52] = 103;
+this.quantum_luminance[53] = 121;
+this.quantum_luminance[54] = 120;
+this.quantum_luminance[55] = 101;
+this.quantum_luminance[56] = 72;
+this.quantum_luminance[57] = 92;
+this.quantum_luminance[58] = 95;
+this.quantum_luminance[59] = 98;
+this.quantum_luminance[60] = 112;
+this.quantum_luminance[61] = 100;
+this.quantum_luminance[62] = 103;
+this.quantum_luminance[63] = 99;
+javajs.img.DCT.AANscale (this.DivisorsLuminance, this.quantum_luminance, quality);
+for (var i = 4; i < 64; i++) this.quantum_chrominance[i] = 99;
+
+this.quantum_chrominance[0] = 17;
+this.quantum_chrominance[1] = 18;
+this.quantum_chrominance[2] = 24;
+this.quantum_chrominance[3] = 47;
+this.quantum_chrominance[8] = 18;
+this.quantum_chrominance[9] = 21;
+this.quantum_chrominance[10] = 26;
+this.quantum_chrominance[11] = 66;
+this.quantum_chrominance[16] = 24;
+this.quantum_chrominance[17] = 26;
+this.quantum_chrominance[18] = 56;
+this.quantum_chrominance[24] = 47;
+this.quantum_chrominance[25] = 66;
+javajs.img.DCT.AANscale (this.DivisorsChrominance, this.quantum_chrominance, quality);
+this.quantum[0] = this.quantum_luminance;
+this.quantum[1] = this.quantum_chrominance;
+this.divisors[0] = this.DivisorsLuminance;
+this.divisors[1] = this.DivisorsChrominance;
+}, $fz.isPrivate = true, $fz), "~N");
+c$.AANscale = Clazz.defineMethod (c$, "AANscale",
+($fz = function (divisors, values, quality) {
+for (var j = 0; j < 64; j++) {
+var temp = Clazz.doubleToInt ((values[j] * quality + 50) / 100);
+values[j] = (temp < 1 ? 1 : temp > 255 ? 255 : temp);
+}
+for (var i = 0, index = 0; i < 8; i++) for (var j = 0; j < 8; j++, index++) divisors[index] = (0.125 / (values[index] * javajs.img.DCT.AANscaleFactor[i] * javajs.img.DCT.AANscaleFactor[j]));
+
+
+}, $fz.isPrivate = true, $fz), "~A,~A,~N");
+c$.forwardDCT = Clazz.defineMethod (c$, "forwardDCT",
+function (input) {
+var output = Clazz.newDoubleArray (8, 8, 0);
+var tmp0;
+var tmp1;
+var tmp2;
+var tmp3;
+var tmp4;
+var tmp5;
+var tmp6;
+var tmp7;
+var tmp10;
+var tmp11;
+var tmp12;
+var tmp13;
+var z1;
+var z2;
+var z3;
+var z4;
+var z5;
+var z11;
+var z13;
+for (var i = 0; i < 8; i++) for (var j = 0; j < 8; j++) output[i][j] = (input[i][j] - 128.0);
+
+
+for (var i = 0; i < 8; i++) {
+tmp0 = output[i][0] + output[i][7];
+tmp7 = output[i][0] - output[i][7];
+tmp1 = output[i][1] + output[i][6];
+tmp6 = output[i][1] - output[i][6];
+tmp2 = output[i][2] + output[i][5];
+tmp5 = output[i][2] - output[i][5];
+tmp3 = output[i][3] + output[i][4];
+tmp4 = output[i][3] - output[i][4];
+tmp10 = tmp0 + tmp3;
+tmp13 = tmp0 - tmp3;
+tmp11 = tmp1 + tmp2;
+tmp12 = tmp1 - tmp2;
+output[i][0] = tmp10 + tmp11;
+output[i][4] = tmp10 - tmp11;
+z1 = (tmp12 + tmp13) * 0.707106781;
+output[i][2] = tmp13 + z1;
+output[i][6] = tmp13 - z1;
+tmp10 = tmp4 + tmp5;
+tmp11 = tmp5 + tmp6;
+tmp12 = tmp6 + tmp7;
+z5 = (tmp10 - tmp12) * 0.382683433;
+z2 = 0.541196100 * tmp10 + z5;
+z4 = 1.306562965 * tmp12 + z5;
+z3 = tmp11 * 0.707106781;
+z11 = tmp7 + z3;
+z13 = tmp7 - z3;
+output[i][5] = z13 + z2;
+output[i][3] = z13 - z2;
+output[i][1] = z11 + z4;
+output[i][7] = z11 - z4;
+}
+for (var i = 0; i < 8; i++) {
+tmp0 = output[0][i] + output[7][i];
+tmp7 = output[0][i] - output[7][i];
+tmp1 = output[1][i] + output[6][i];
+tmp6 = output[1][i] - output[6][i];
+tmp2 = output[2][i] + output[5][i];
+tmp5 = output[2][i] - output[5][i];
+tmp3 = output[3][i] + output[4][i];
+tmp4 = output[3][i] - output[4][i];
+tmp10 = tmp0 + tmp3;
+tmp13 = tmp0 - tmp3;
+tmp11 = tmp1 + tmp2;
+tmp12 = tmp1 - tmp2;
+output[0][i] = tmp10 + tmp11;
+output[4][i] = tmp10 - tmp11;
+z1 = (tmp12 + tmp13) * 0.707106781;
+output[2][i] = tmp13 + z1;
+output[6][i] = tmp13 - z1;
+tmp10 = tmp4 + tmp5;
+tmp11 = tmp5 + tmp6;
+tmp12 = tmp6 + tmp7;
+z5 = (tmp10 - tmp12) * 0.382683433;
+z2 = 0.541196100 * tmp10 + z5;
+z4 = 1.306562965 * tmp12 + z5;
+z3 = tmp11 * 0.707106781;
+z11 = tmp7 + z3;
+z13 = tmp7 - z3;
+output[5][i] = z13 + z2;
+output[3][i] = z13 - z2;
+output[1][i] = z11 + z4;
+output[7][i] = z11 - z4;
+}
+return output;
+}, "~A");
+c$.quantizeBlock = Clazz.defineMethod (c$, "quantizeBlock",
+function (inputData, divisorsCode) {
+var outputData = Clazz.newIntArray (64, 0);
+for (var i = 0, index = 0; i < 8; i++) for (var j = 0; j < 8; j++, index++) outputData[index] = (Math.round (inputData[i][j] * divisorsCode[index]));
+
+
+return outputData;
+}, "~A,~A");
+Clazz.defineStatics (c$,
+"N", 8,
+"NN", 64,
+"AANscaleFactor", Clazz.newDoubleArray (-1, [1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379]));
+c$ = Clazz.decorateAsClass (function () {
+this.bufferPutBits = 0;
+this.bufferPutBuffer = 0;
+this.imageHeight = 0;
+this.imageWidth = 0;
+this.dc_matrix0 = null;
+this.ac_matrix0 = null;
+this.dc_matrix1 = null;
+this.ac_matrix1 = null;
+this.dc_matrix = null;
+this.ac_matrix = null;
+this.numOfDCTables = 0;
+this.numOfACTables = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "Huffman");
+Clazz.makeConstructor (c$,
+function (width, height) {
+this.initHuf ();
+this.imageWidth = width;
+this.imageHeight = height;
+}, "~N,~N");
+Clazz.defineMethod (c$, "HuffmanBlockEncoder",
+function (out, zigzag, prec, dcCode, acCode) {
+var temp;
+var temp2;
+var nbits;
+var k;
+var r;
+var i;
+this.numOfDCTables = 2;
+this.numOfACTables = 2;
+var matrixDC = this.dc_matrix[dcCode];
+var matrixAC = this.ac_matrix[acCode];
+temp = temp2 = zigzag[0] - prec;
+if (temp < 0) {
+temp = -temp;
+temp2--;
+}nbits = 0;
+while (temp != 0) {
+nbits++;
+temp >>= 1;
+}
+this.bufferIt (out, matrixDC[nbits][0], matrixDC[nbits][1]);
+if (nbits != 0) {
+this.bufferIt (out, temp2, nbits);
+}r = 0;
+for (k = 1; k < 64; k++) {
+if ((temp = zigzag[javajs.img.Huffman.jpegNaturalOrder[k]]) == 0) {
+r++;
+} else {
+while (r > 15) {
+this.bufferIt (out, matrixAC[0xF0][0], matrixAC[0xF0][1]);
+r -= 16;
+}
+temp2 = temp;
+if (temp < 0) {
+temp = -temp;
+temp2--;
+}nbits = 1;
+while ((temp >>= 1) != 0) {
+nbits++;
+}
+i = (r << 4) + nbits;
+this.bufferIt (out, matrixAC[i][0], matrixAC[i][1]);
+this.bufferIt (out, temp2, nbits);
+r = 0;
+}}
+if (r > 0) {
+this.bufferIt (out, matrixAC[0][0], matrixAC[0][1]);
+}}, "javajs.util.OC,~A,~N,~N,~N");
+Clazz.defineMethod (c$, "bufferIt",
+function (out, code, size) {
+var putBuffer = code;
+var putBits = this.bufferPutBits;
+putBuffer &= (1 << size) - 1;
+putBits += size;
+putBuffer <<= 24 - putBits;
+putBuffer |= this.bufferPutBuffer;
+while (putBits >= 8) {
+var c = ((putBuffer >> 16) & 0xFF);
+out.writeByteAsInt (c);
+if (c == 0xFF) {
+out.writeByteAsInt (0);
+}putBuffer <<= 8;
+putBits -= 8;
+}
+this.bufferPutBuffer = putBuffer;
+this.bufferPutBits = putBits;
+}, "javajs.util.OC,~N,~N");
+Clazz.defineMethod (c$, "flushBuffer",
+function (out) {
+var putBuffer = this.bufferPutBuffer;
+var putBits = this.bufferPutBits;
+while (putBits >= 8) {
+var c = ((putBuffer >> 16) & 0xFF);
+out.writeByteAsInt (c);
+if (c == 0xFF) {
+out.writeByteAsInt (0);
+}putBuffer <<= 8;
+putBits -= 8;
+}
+if (putBits > 0) {
+var c = ((putBuffer >> 16) & 0xFF);
+out.writeByteAsInt (c);
+}}, "javajs.util.OC");
+Clazz.defineMethod (c$, "initHuf",
+($fz = function () {
+this.dc_matrix0 = Clazz.newIntArray (12, 2, 0);
+this.dc_matrix1 = Clazz.newIntArray (12, 2, 0);
+this.ac_matrix0 = Clazz.newIntArray (255, 2, 0);
+this.ac_matrix1 = Clazz.newIntArray (255, 2, 0);
+this.dc_matrix = javajs.util.AU.newInt3 (2, -1);
+this.ac_matrix = javajs.util.AU.newInt3 (2, -1);
+var p;
+var l;
+var i;
+var lastp;
+var si;
+var code;
+var huffsize = Clazz.newIntArray (257, 0);
+var huffcode = Clazz.newIntArray (257, 0);
+p = 0;
+for (l = 1; l <= 16; l++) {
+for (i = javajs.img.Huffman.bitsDCchrominance[l]; --i >= 0; ) {
+huffsize[p++] = l;
+}
+}
+huffsize[p] = 0;
+lastp = p;
+code = 0;
+si = huffsize[0];
+p = 0;
+while (huffsize[p] != 0) {
+while (huffsize[p] == si) {
+huffcode[p++] = code;
+code++;
+}
+code <<= 1;
+si++;
+}
+for (p = 0; p < lastp; p++) {
+this.dc_matrix1[javajs.img.Huffman.valDCchrominance[p]][0] = huffcode[p];
+this.dc_matrix1[javajs.img.Huffman.valDCchrominance[p]][1] = huffsize[p];
+}
+p = 0;
+for (l = 1; l <= 16; l++) {
+for (i = javajs.img.Huffman.bitsACchrominance[l]; --i >= 0; ) {
+huffsize[p++] = l;
+}
+}
+huffsize[p] = 0;
+lastp = p;
+code = 0;
+si = huffsize[0];
+p = 0;
+while (huffsize[p] != 0) {
+while (huffsize[p] == si) {
+huffcode[p++] = code;
+code++;
+}
+code <<= 1;
+si++;
+}
+for (p = 0; p < lastp; p++) {
+this.ac_matrix1[javajs.img.Huffman.valACchrominance[p]][0] = huffcode[p];
+this.ac_matrix1[javajs.img.Huffman.valACchrominance[p]][1] = huffsize[p];
+}
+p = 0;
+for (l = 1; l <= 16; l++) {
+for (i = javajs.img.Huffman.bitsDCluminance[l]; --i >= 0; ) {
+huffsize[p++] = l;
+}
+}
+huffsize[p] = 0;
+lastp = p;
+code = 0;
+si = huffsize[0];
+p = 0;
+while (huffsize[p] != 0) {
+while (huffsize[p] == si) {
+huffcode[p++] = code;
+code++;
+}
+code <<= 1;
+si++;
+}
+for (p = 0; p < lastp; p++) {
+this.dc_matrix0[javajs.img.Huffman.valDCluminance[p]][0] = huffcode[p];
+this.dc_matrix0[javajs.img.Huffman.valDCluminance[p]][1] = huffsize[p];
+}
+p = 0;
+for (l = 1; l <= 16; l++) {
+for (i = javajs.img.Huffman.bitsACluminance[l]; --i >= 0; ) {
+huffsize[p++] = l;
+}
+}
+huffsize[p] = 0;
+lastp = p;
+code = 0;
+si = huffsize[0];
+p = 0;
+while (huffsize[p] != 0) {
+while (huffsize[p] == si) {
+huffcode[p++] = code;
+code++;
+}
+code <<= 1;
+si++;
+}
+for (var q = 0; q < lastp; q++) {
+this.ac_matrix0[javajs.img.Huffman.valACluminance[q]][0] = huffcode[q];
+this.ac_matrix0[javajs.img.Huffman.valACluminance[q]][1] = huffsize[q];
+}
+this.dc_matrix[0] = this.dc_matrix0;
+this.dc_matrix[1] = this.dc_matrix1;
+this.ac_matrix[0] = this.ac_matrix0;
+this.ac_matrix[1] = this.ac_matrix1;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineStatics (c$,
+"bitsDCluminance", Clazz.newIntArray (-1, [0x00, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]),
+"valDCluminance", Clazz.newIntArray (-1, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
+"bitsDCchrominance", Clazz.newIntArray (-1, [0x01, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]),
+"valDCchrominance", Clazz.newIntArray (-1, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]),
+"bitsACluminance", Clazz.newIntArray (-1, [0x10, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d]),
+"valACluminance", Clazz.newIntArray (-1, [0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]),
+"bitsACchrominance", Clazz.newIntArray (-1, [0x11, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77]),
+"valACchrominance", Clazz.newIntArray (-1, [0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]),
+"jpegNaturalOrder", Clazz.newIntArray (-1, [0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]));
+c$ = Clazz.decorateAsClass (function () {
+this.comment = null;
+this.imageHeight = 0;
+this.imageWidth = 0;
+this.blockWidth = null;
+this.blockHeight = null;
+this.precision = 8;
+this.numberOfComponents = 3;
+this.components = null;
+this.compID = null;
+this.hsampFactor = null;
+this.vsampFactor = null;
+this.qtableNumber = null;
+this.dctableNumber = null;
+this.actableNumber = null;
+this.lastColumnIsDummy = null;
+this.lastRowIsDummy = null;
+this.ss = 0;
+this.se = 63;
+this.ah = 0;
+this.al = 0;
+this.compWidth = null;
+this.compHeight = null;
+this.maxHsampFactor = 0;
+this.maxVsampFactor = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "JpegObj");
+Clazz.prepareFields (c$, function () {
+this.compID = Clazz.newIntArray (-1, [1, 2, 3]);
+this.hsampFactor = Clazz.newIntArray (-1, [1, 1, 1]);
+this.vsampFactor = Clazz.newIntArray (-1, [1, 1, 1]);
+this.qtableNumber = Clazz.newIntArray (-1, [0, 1, 1]);
+this.dctableNumber = Clazz.newIntArray (-1, [0, 1, 1]);
+this.actableNumber = Clazz.newIntArray (-1, [0, 1, 1]);
+this.lastColumnIsDummy = Clazz.newBooleanArray (-1, [false, false, false]);
+this.lastRowIsDummy = Clazz.newBooleanArray (-1, [false, false, false]);
+});
+Clazz.makeConstructor (c$,
+function () {
+this.components = javajs.util.AU.newFloat3 (this.numberOfComponents, -1);
+this.compWidth = Clazz.newIntArray (this.numberOfComponents, 0);
+this.compHeight = Clazz.newIntArray (this.numberOfComponents, 0);
+this.blockWidth = Clazz.newIntArray (this.numberOfComponents, 0);
+this.blockHeight = Clazz.newIntArray (this.numberOfComponents, 0);
+});
+Clazz.defineMethod (c$, "getYCCArray",
+function (pixels) {
+this.maxHsampFactor = 1;
+this.maxVsampFactor = 1;
+for (var y = 0; y < this.numberOfComponents; y++) {
+this.maxHsampFactor = Math.max (this.maxHsampFactor, this.hsampFactor[y]);
+this.maxVsampFactor = Math.max (this.maxVsampFactor, this.vsampFactor[y]);
+}
+for (var y = 0; y < this.numberOfComponents; y++) {
+this.compWidth[y] = (Clazz.doubleToInt (((this.imageWidth % 8 != 0) ? (Clazz.doubleToInt (Math.ceil (this.imageWidth / 8.0))) * 8 : this.imageWidth) / this.maxHsampFactor)) * this.hsampFactor[y];
+if (this.compWidth[y] != ((Clazz.doubleToInt (this.imageWidth / this.maxHsampFactor)) * this.hsampFactor[y])) {
+this.lastColumnIsDummy[y] = true;
+}this.blockWidth[y] = Clazz.doubleToInt (Math.ceil (this.compWidth[y] / 8.0));
+this.compHeight[y] = (Clazz.doubleToInt (((this.imageHeight % 8 != 0) ? (Clazz.doubleToInt (Math.ceil (this.imageHeight / 8.0))) * 8 : this.imageHeight) / this.maxVsampFactor)) * this.vsampFactor[y];
+if (this.compHeight[y] != ((Clazz.doubleToInt (this.imageHeight / this.maxVsampFactor)) * this.vsampFactor[y])) {
+this.lastRowIsDummy[y] = true;
+}this.blockHeight[y] = Clazz.doubleToInt (Math.ceil (this.compHeight[y] / 8.0));
+}
+var Y = Clazz.newFloatArray (this.compHeight[0], this.compWidth[0], 0);
+var Cr1 = Clazz.newFloatArray (this.compHeight[0], this.compWidth[0], 0);
+var Cb1 = Clazz.newFloatArray (this.compHeight[0], this.compWidth[0], 0);
+for (var pt = 0, y = 0; y < this.imageHeight; ++y) {
+for (var x = 0; x < this.imageWidth; ++x, pt++) {
+var p = pixels[pt];
+var r = ((p >> 16) & 0xff);
+var g = ((p >> 8) & 0xff);
+var b = (p & 0xff);
+Y[y][x] = ((0.299 * r + 0.587 * g + 0.114 * b));
+Cb1[y][x] = 128 + ((-0.16874 * r - 0.33126 * g + 0.5 * b));
+Cr1[y][x] = 128 + ((0.5 * r - 0.41869 * g - 0.08131 * b));
+}
+}
+this.components[0] = Y;
+this.components[1] = Cb1;
+this.components[2] = Cr1;
+}, "~A");
+});
diff --git a/bin/javajs/img/PdfEncoder.js b/bin/javajs/img/PdfEncoder.js
index 0a468dc..664879f 100644
--- a/bin/javajs/img/PdfEncoder.js
+++ b/bin/javajs/img/PdfEncoder.js
@@ -1,58 +1,58 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.ImageEncoder"], "javajs.img.PdfEncoder", ["java.util.Hashtable", "javajs.export.PDFCreator"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.isLandscape = false;
-this.pdf = null;
-this.comment = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "PdfEncoder", javajs.img.ImageEncoder);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.img.PdfEncoder, []);
-});
-Clazz.overrideMethod (c$, "setParams",
-function (params) {
-this.isLandscape = (this.quality > 1);
-this.comment = "Jmol " + params.get ("comment");
-}, "java.util.Map");
-Clazz.overrideMethod (c$, "generate",
-function () {
-this.pdf = new javajs["export"].PDFCreator ();
-var pageWidth = 576;
-var pageHeight = 792;
-this.pdf.setOutputStream (this.out);
-this.pdf.newDocument (pageWidth, pageHeight, this.isLandscape);
-this.addMyImage (pageWidth, pageHeight);
-var ht = new java.util.Hashtable ();
-if (this.comment != null) ht.put ("Producer", this.comment);
-ht.put ("Author", "JMol");
-ht.put ("CreationDate", this.date);
-this.pdf.addInfo (ht);
-this.pdf.closeDocument ();
-});
-Clazz.defineMethod (c$, "addMyImage",
-($fz = function (pageWidth, pageHeight) {
-this.pdf.addImageResource ("img1", this.width, this.height, this.pixels, true);
-var w = (this.isLandscape ? pageHeight : pageWidth);
-var h = (this.isLandscape ? pageWidth : pageHeight);
-var iw = this.width;
-var ih = this.height;
-if (iw > 0.9 * w) {
-ih = Clazz.doubleToInt (ih * 0.9 * w / iw);
-iw = Clazz.doubleToInt (w * 0.9);
-}if (ih > 0.9 * h) {
-iw = Clazz.doubleToInt (iw * 0.9 * h / ih);
-ih = Clazz.doubleToInt (h * 0.9);
-}var x = 0;
-var y = 0;
-var x1 = iw;
-var y1 = ih;
-if (w > iw) {
-x = Clazz.doubleToInt ((w - iw) / 2);
-x1 = iw + x;
-}if (h > ih) {
-y = Clazz.doubleToInt ((h - ih) / 2);
-y1 = ih + y;
-}this.pdf.drawImage ("img1", x, y, x1, y1, 0, 0, this.width, this.height);
-}, $fz.isPrivate = true, $fz), "~N,~N");
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.img.ImageEncoder"], "javajs.img.PdfEncoder", ["java.util.Hashtable", "javajs.export.PDFCreator"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.isLandscape = false;
+this.pdf = null;
+this.comment = null;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "PdfEncoder", javajs.img.ImageEncoder);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.img.PdfEncoder, []);
+});
+Clazz.overrideMethod (c$, "setParams",
+function (params) {
+this.isLandscape = (this.quality > 1);
+this.comment = "Jmol " + params.get ("comment");
+}, "java.util.Map");
+Clazz.overrideMethod (c$, "generate",
+function () {
+this.pdf = new javajs["export"].PDFCreator ();
+var pageWidth = 576;
+var pageHeight = 792;
+this.pdf.setOutputStream (this.out);
+this.pdf.newDocument (pageWidth, pageHeight, this.isLandscape);
+this.addMyImage (pageWidth, pageHeight);
+var ht = new java.util.Hashtable ();
+if (this.comment != null) ht.put ("Producer", this.comment);
+ht.put ("Author", "JMol");
+ht.put ("CreationDate", this.date);
+this.pdf.addInfo (ht);
+this.pdf.closeDocument ();
+});
+Clazz.defineMethod (c$, "addMyImage",
+($fz = function (pageWidth, pageHeight) {
+this.pdf.addImageResource ("img1", this.width, this.height, this.pixels, true);
+var w = (this.isLandscape ? pageHeight : pageWidth);
+var h = (this.isLandscape ? pageWidth : pageHeight);
+var iw = this.width;
+var ih = this.height;
+if (iw > 0.9 * w) {
+ih = Clazz.doubleToInt (ih * 0.9 * w / iw);
+iw = Clazz.doubleToInt (w * 0.9);
+}if (ih > 0.9 * h) {
+iw = Clazz.doubleToInt (iw * 0.9 * h / ih);
+ih = Clazz.doubleToInt (h * 0.9);
+}var x = 0;
+var y = 0;
+var x1 = iw;
+var y1 = ih;
+if (w > iw) {
+x = Clazz.doubleToInt ((w - iw) / 2);
+x1 = iw + x;
+}if (h > ih) {
+y = Clazz.doubleToInt ((h - ih) / 2);
+y1 = ih + y;
+}this.pdf.drawImage ("img1", x, y, x1, y1, 0, 0, this.width, this.height);
+}, $fz.isPrivate = true, $fz), "~N,~N");
+});
diff --git a/bin/javajs/img/PngEncoder.js b/bin/javajs/img/PngEncoder.js
index 8c07dbd..0accd9e 100644
--- a/bin/javajs/img/PngEncoder.js
+++ b/bin/javajs/img/PngEncoder.js
@@ -1,173 +1,173 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.CRCEncoder"], "javajs.img.PngEncoder", ["java.io.ByteArrayOutputStream", "java.util.zip.Deflater", "$.DeflaterOutputStream"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.encodeAlpha = false;
-this.filter = 0;
-this.bytesPerPixel = 0;
-this.compressionLevel = 0;
-this.type = null;
-this.transparentColor = null;
-this.appData = null;
-this.appPrefix = null;
-this.comment = null;
-this.bytes = null;
-this.scanLines = null;
-this.byteWidth = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "PngEncoder", javajs.img.CRCEncoder);
-Clazz.overrideMethod (c$, "setParams",
-function (params) {
-if (this.quality < 0) this.quality = (params.containsKey ("qualityPNG") ? (params.get ("qualityPNG")).intValue () : 2);
-if (this.quality > 9) this.quality = 9;
-this.encodeAlpha = false;
-this.filter = 0;
-this.compressionLevel = this.quality;
-this.transparentColor = params.get ("transparentColor");
-this.comment = params.get ("comment");
-this.type = (params.get ("type") + "0000").substring (0, 4);
-this.bytes = params.get ("pngImgData");
-this.appData = params.get ("pngAppData");
-this.appPrefix = params.get ("pngAppPrefix");
-}, "java.util.Map");
-Clazz.overrideMethod (c$, "generate",
-function () {
-if (this.bytes == null) {
-if (!this.pngEncode ()) {
-this.out.cancel ();
-return;
-}this.bytes = this.getBytes ();
-} else {
-this.dataLen = this.bytes.length;
-}var len = this.dataLen;
-if (this.appData != null) {
-javajs.img.PngEncoder.setJmolTypeText (this.appPrefix, this.bytes, len, this.appData.length, this.type);
-this.out.write (this.bytes, 0, len);
-len = (this.bytes = this.appData).length;
-}this.out.write (this.bytes, 0, len);
-});
-Clazz.defineMethod (c$, "pngEncode",
-($fz = function () {
-var pngIdBytes = Clazz.newByteArray (-1, [-119, 80, 78, 71, 13, 10, 26, 10]);
-this.writeBytes (pngIdBytes);
-this.writeHeader ();
-this.writeText (javajs.img.PngEncoder.getApplicationText (this.appPrefix, this.type, 0, 0));
-this.writeText ("Software\0Jmol " + this.comment);
-this.writeText ("Creation Time\0" + this.date);
-if (!this.encodeAlpha && this.transparentColor != null) this.writeTransparentColor (this.transparentColor.intValue ());
-return this.writeImageData ();
-}, $fz.isPrivate = true, $fz));
-c$.setJmolTypeText = Clazz.defineMethod (c$, "setJmolTypeText",
-($fz = function (prefix, b, nPNG, nState, type) {
-var s = "tEXt" + javajs.img.PngEncoder.getApplicationText (prefix, type, nPNG, nState);
-var encoder = new javajs.img.PngEncoder ();
-var test = s.substring (0, 4 + prefix.length).getBytes ();
-for (var i = test.length; --i >= 0; ) if (b[i + 37] != test[i]) {
-System.out.println ("image is not of the right form; appending data, but not adding tEXt tag.");
-return;
-}
-encoder.setData (b, 37);
-encoder.writeString (s);
-encoder.writeCRC ();
-}, $fz.isPrivate = true, $fz), "~S,~A,~N,~N,~S");
-c$.getApplicationText = Clazz.defineMethod (c$, "getApplicationText",
-($fz = function (prefix, type, nPNG, nState) {
-var sPNG = "000000000" + nPNG;
-sPNG = sPNG.substring (sPNG.length - 9);
-var sState = "000000000" + nState;
-sState = sState.substring (sState.length - 9);
-return prefix + "\0" + type + (type.equals ("PNG") ? "0" : "") + sPNG + "+" + sState;
-}, $fz.isPrivate = true, $fz), "~S,~S,~N,~N");
-Clazz.defineMethod (c$, "writeHeader",
-($fz = function () {
-this.writeInt4 (13);
-this.startPos = this.bytePos;
-this.writeString ("IHDR");
-this.writeInt4 (this.width);
-this.writeInt4 (this.height);
-this.writeByte (8);
-this.writeByte (this.encodeAlpha ? 6 : 2);
-this.writeByte (0);
-this.writeByte (0);
-this.writeByte (0);
-this.writeCRC ();
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeText",
-($fz = function (msg) {
-this.writeInt4 (msg.length);
-this.startPos = this.bytePos;
-this.writeString ("tEXt" + msg);
-this.writeCRC ();
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "writeTransparentColor",
-($fz = function (icolor) {
-this.writeInt4 (6);
-this.startPos = this.bytePos;
-this.writeString ("tRNS");
-this.writeInt2 ((icolor >> 16) & 0xFF);
-this.writeInt2 ((icolor >> 8) & 0xFF);
-this.writeInt2 (icolor & 0xFF);
-this.writeCRC ();
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "writeImageData",
-($fz = function () {
-this.bytesPerPixel = (this.encodeAlpha ? 4 : 3);
-this.byteWidth = this.width * this.bytesPerPixel;
-var scanWidth = this.byteWidth + 1;
-var rowsLeft = this.height;
-var nRows;
-var scanPos;
-var deflater = new java.util.zip.Deflater (this.compressionLevel);
-var outBytes = new java.io.ByteArrayOutputStream (1024);
-var compBytes = new java.util.zip.DeflaterOutputStream (outBytes, deflater);
-var pt = 0;
-try {
-while (rowsLeft > 0) {
-nRows = Math.max (1, Math.min (Clazz.doubleToInt (32767 / scanWidth), rowsLeft));
-this.scanLines = Clazz.newByteArray (scanWidth * nRows, 0);
-var nPixels = this.width * nRows;
-scanPos = 0;
-for (var i = 0; i < nPixels; i++, pt++) {
-if (i % this.width == 0) {
-this.scanLines[scanPos++] = this.filter;
-}this.scanLines[scanPos++] = ((this.pixels[pt] >> 16) & 0xff);
-this.scanLines[scanPos++] = ((this.pixels[pt] >> 8) & 0xff);
-this.scanLines[scanPos++] = ((this.pixels[pt]) & 0xff);
-if (this.encodeAlpha) {
-this.scanLines[scanPos++] = ((this.pixels[pt] >> 24) & 0xff);
-}}
-compBytes.write (this.scanLines, 0, scanPos);
-rowsLeft -= nRows;
-}
-compBytes.close ();
-var compressedLines = outBytes.toByteArray ();
-this.writeInt4 (compressedLines.length);
-this.startPos = this.bytePos;
-this.writeString ("IDAT");
-this.writeBytes (compressedLines);
-this.writeCRC ();
-this.writeEnd ();
-deflater.finish ();
-return true;
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-System.err.println (e.toString ());
-return false;
-} else {
-throw e;
-}
-}
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeEnd",
-($fz = function () {
-this.writeInt4 (0);
-this.startPos = this.bytePos;
-this.writeString ("IEND");
-this.writeCRC ();
-}, $fz.isPrivate = true, $fz));
-Clazz.defineStatics (c$,
-"FILTER_NONE", 0,
-"FILTER_SUB", 1,
-"FILTER_UP", 2,
-"FILTER_LAST", 2,
-"PT_FIRST_TAG", 37);
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.img.CRCEncoder"], "javajs.img.PngEncoder", ["java.io.ByteArrayOutputStream", "java.util.zip.Deflater", "$.DeflaterOutputStream"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.encodeAlpha = false;
+this.filter = 0;
+this.bytesPerPixel = 0;
+this.compressionLevel = 0;
+this.type = null;
+this.transparentColor = null;
+this.appData = null;
+this.appPrefix = null;
+this.comment = null;
+this.bytes = null;
+this.scanLines = null;
+this.byteWidth = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.img, "PngEncoder", javajs.img.CRCEncoder);
+Clazz.overrideMethod (c$, "setParams",
+function (params) {
+if (this.quality < 0) this.quality = (params.containsKey ("qualityPNG") ? (params.get ("qualityPNG")).intValue () : 2);
+if (this.quality > 9) this.quality = 9;
+this.encodeAlpha = false;
+this.filter = 0;
+this.compressionLevel = this.quality;
+this.transparentColor = params.get ("transparentColor");
+this.comment = params.get ("comment");
+this.type = (params.get ("type") + "0000").substring (0, 4);
+this.bytes = params.get ("pngImgData");
+this.appData = params.get ("pngAppData");
+this.appPrefix = params.get ("pngAppPrefix");
+}, "java.util.Map");
+Clazz.overrideMethod (c$, "generate",
+function () {
+if (this.bytes == null) {
+if (!this.pngEncode ()) {
+this.out.cancel ();
+return;
+}this.bytes = this.getBytes ();
+} else {
+this.dataLen = this.bytes.length;
+}var len = this.dataLen;
+if (this.appData != null) {
+javajs.img.PngEncoder.setJmolTypeText (this.appPrefix, this.bytes, len, this.appData.length, this.type);
+this.out.write (this.bytes, 0, len);
+len = (this.bytes = this.appData).length;
+}this.out.write (this.bytes, 0, len);
+});
+Clazz.defineMethod (c$, "pngEncode",
+($fz = function () {
+var pngIdBytes = Clazz.newByteArray (-1, [-119, 80, 78, 71, 13, 10, 26, 10]);
+this.writeBytes (pngIdBytes);
+this.writeHeader ();
+this.writeText (javajs.img.PngEncoder.getApplicationText (this.appPrefix, this.type, 0, 0));
+this.writeText ("Software\0Jmol " + this.comment);
+this.writeText ("Creation Time\0" + this.date);
+if (!this.encodeAlpha && this.transparentColor != null) this.writeTransparentColor (this.transparentColor.intValue ());
+return this.writeImageData ();
+}, $fz.isPrivate = true, $fz));
+c$.setJmolTypeText = Clazz.defineMethod (c$, "setJmolTypeText",
+($fz = function (prefix, b, nPNG, nState, type) {
+var s = "tEXt" + javajs.img.PngEncoder.getApplicationText (prefix, type, nPNG, nState);
+var encoder = new javajs.img.PngEncoder ();
+var test = s.substring (0, 4 + prefix.length).getBytes ();
+for (var i = test.length; --i >= 0; ) if (b[i + 37] != test[i]) {
+System.out.println ("image is not of the right form; appending data, but not adding tEXt tag.");
+return;
+}
+encoder.setData (b, 37);
+encoder.writeString (s);
+encoder.writeCRC ();
+}, $fz.isPrivate = true, $fz), "~S,~A,~N,~N,~S");
+c$.getApplicationText = Clazz.defineMethod (c$, "getApplicationText",
+($fz = function (prefix, type, nPNG, nState) {
+var sPNG = "000000000" + nPNG;
+sPNG = sPNG.substring (sPNG.length - 9);
+var sState = "000000000" + nState;
+sState = sState.substring (sState.length - 9);
+return prefix + "\0" + type + (type.equals ("PNG") ? "0" : "") + sPNG + "+" + sState;
+}, $fz.isPrivate = true, $fz), "~S,~S,~N,~N");
+Clazz.defineMethod (c$, "writeHeader",
+($fz = function () {
+this.writeInt4 (13);
+this.startPos = this.bytePos;
+this.writeString ("IHDR");
+this.writeInt4 (this.width);
+this.writeInt4 (this.height);
+this.writeByte (8);
+this.writeByte (this.encodeAlpha ? 6 : 2);
+this.writeByte (0);
+this.writeByte (0);
+this.writeByte (0);
+this.writeCRC ();
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeText",
+($fz = function (msg) {
+this.writeInt4 (msg.length);
+this.startPos = this.bytePos;
+this.writeString ("tEXt" + msg);
+this.writeCRC ();
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "writeTransparentColor",
+($fz = function (icolor) {
+this.writeInt4 (6);
+this.startPos = this.bytePos;
+this.writeString ("tRNS");
+this.writeInt2 ((icolor >> 16) & 0xFF);
+this.writeInt2 ((icolor >> 8) & 0xFF);
+this.writeInt2 (icolor & 0xFF);
+this.writeCRC ();
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "writeImageData",
+($fz = function () {
+this.bytesPerPixel = (this.encodeAlpha ? 4 : 3);
+this.byteWidth = this.width * this.bytesPerPixel;
+var scanWidth = this.byteWidth + 1;
+var rowsLeft = this.height;
+var nRows;
+var scanPos;
+var deflater = new java.util.zip.Deflater (this.compressionLevel);
+var outBytes = new java.io.ByteArrayOutputStream (1024);
+var compBytes = new java.util.zip.DeflaterOutputStream (outBytes, deflater);
+var pt = 0;
+try {
+while (rowsLeft > 0) {
+nRows = Math.max (1, Math.min (Clazz.doubleToInt (32767 / scanWidth), rowsLeft));
+this.scanLines = Clazz.newByteArray (scanWidth * nRows, 0);
+var nPixels = this.width * nRows;
+scanPos = 0;
+for (var i = 0; i < nPixels; i++, pt++) {
+if (i % this.width == 0) {
+this.scanLines[scanPos++] = this.filter;
+}this.scanLines[scanPos++] = ((this.pixels[pt] >> 16) & 0xff);
+this.scanLines[scanPos++] = ((this.pixels[pt] >> 8) & 0xff);
+this.scanLines[scanPos++] = ((this.pixels[pt]) & 0xff);
+if (this.encodeAlpha) {
+this.scanLines[scanPos++] = ((this.pixels[pt] >> 24) & 0xff);
+}}
+compBytes.write (this.scanLines, 0, scanPos);
+rowsLeft -= nRows;
+}
+compBytes.close ();
+var compressedLines = outBytes.toByteArray ();
+this.writeInt4 (compressedLines.length);
+this.startPos = this.bytePos;
+this.writeString ("IDAT");
+this.writeBytes (compressedLines);
+this.writeCRC ();
+this.writeEnd ();
+deflater.finish ();
+return true;
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+System.err.println (e.toString ());
+return false;
+} else {
+throw e;
+}
+}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeEnd",
+($fz = function () {
+this.writeInt4 (0);
+this.startPos = this.bytePos;
+this.writeString ("IEND");
+this.writeCRC ();
+}, $fz.isPrivate = true, $fz));
+Clazz.defineStatics (c$,
+"FILTER_NONE", 0,
+"FILTER_SUB", 1,
+"FILTER_UP", 2,
+"FILTER_LAST", 2,
+"PT_FIRST_TAG", 37);
+});
diff --git a/bin/javajs/img/PpmEncoder.js b/bin/javajs/img/PpmEncoder.js
index 7cb6943..1769c71 100644
--- a/bin/javajs/img/PpmEncoder.js
+++ b/bin/javajs/img/PpmEncoder.js
@@ -1,23 +1,23 @@
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.ImageEncoder"], "javajs.img.PpmEncoder", null, function () {
-c$ = Clazz.declareType (javajs.img, "PpmEncoder", javajs.img.ImageEncoder);
-Clazz.overrideMethod (c$, "setParams",
-function (params) {
-}, "java.util.Map");
-Clazz.overrideMethod (c$, "generate",
-function () {
-this.putString ("P6\n");
-this.putString (this.width + " " + this.height + "\n");
-this.putString ("255\n");
-var ppmPixels = Clazz.newByteArray (this.width * 3, 0);
-for (var pt = 0, row = 0; row < this.height; ++row) {
-for (var col = 0, j = 0; col < this.width; ++col, pt++) {
-var p = this.pixels[pt];
-ppmPixels[j++] = ((p >> 16) & 0xff);
-ppmPixels[j++] = ((p >> 8) & 0xff);
-ppmPixels[j++] = (p & 0xff);
-}
-this.out.write (ppmPixels, 0, ppmPixels.length);
-}
-});
-});
+Clazz.declarePackage ("javajs.img");
+Clazz.load (["javajs.img.ImageEncoder"], "javajs.img.PpmEncoder", null, function () {
+c$ = Clazz.declareType (javajs.img, "PpmEncoder", javajs.img.ImageEncoder);
+Clazz.overrideMethod (c$, "setParams",
+function (params) {
+}, "java.util.Map");
+Clazz.overrideMethod (c$, "generate",
+function () {
+this.putString ("P6\n");
+this.putString (this.width + " " + this.height + "\n");
+this.putString ("255\n");
+var ppmPixels = Clazz.newByteArray (this.width * 3, 0);
+for (var pt = 0, row = 0; row < this.height; ++row) {
+for (var col = 0, j = 0; col < this.width; ++col, pt++) {
+var p = this.pixels[pt];
+ppmPixels[j++] = ((p >> 16) & 0xff);
+ppmPixels[j++] = ((p >> 8) & 0xff);
+ppmPixels[j++] = (p & 0xff);
+}
+this.out.write (ppmPixels, 0, ppmPixels.length);
+}
+});
+});
diff --git a/bin/javajs/img/package.js b/bin/javajs/img/package.js
index 0982066..4086dd3 100644
--- a/bin/javajs/img/package.js
+++ b/bin/javajs/img/package.js
@@ -1,7 +1,7 @@
-var path = ClazzLoader.getClasspathFor ("javajs.img.package");
-path = path.substring (0, path.lastIndexOf ("package.js"));
-ClazzLoader.jarClasspath (path + "JpgEncoder.js", [
-"javajs.img.DCT",
-"$.JpgEncoder",
-"$.JpegObj",
-"$.Huffman"]);
+var path = ClazzLoader.getClasspathFor ("javajs.img.package");
+path = path.substring (0, path.lastIndexOf ("package.js"));
+ClazzLoader.jarClasspath (path + "JpgEncoder.js", [
+"javajs.img.DCT",
+"$.JpgEncoder",
+"$.JpegObj",
+"$.Huffman"]);
diff --git a/bin/javajs/swing/AbstractButton.js b/bin/javajs/swing/AbstractButton.js
index 7a53af7..f97cb2f 100644
--- a/bin/javajs/swing/AbstractButton.js
+++ b/bin/javajs/swing/AbstractButton.js
@@ -1,82 +1,82 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.api.SC", "javajs.swing.JComponent"], "javajs.swing.AbstractButton", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.itemListener = null;
-this.applet = null;
-this.htmlName = null;
-this.selected = false;
-this.popupMenu = null;
-this.icon = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "AbstractButton", javajs.swing.JComponent, javajs.api.SC);
-Clazz.makeConstructor (c$,
-function (type) {
-Clazz.superConstructor (this, javajs.swing.AbstractButton, [type]);
-this.enabled = true;
-}, "~S");
-Clazz.overrideMethod (c$, "setSelected",
-function (selected) {
-this.selected = selected;
-{
-SwingController.setSelected(this);
-}}, "~B");
-Clazz.overrideMethod (c$, "isSelected",
-function () {
-return this.selected;
-});
-Clazz.overrideMethod (c$, "addItemListener",
-function (listener) {
-this.itemListener = listener;
-}, "~O");
-Clazz.overrideMethod (c$, "getIcon",
-function () {
-return this.icon;
-});
-Clazz.overrideMethod (c$, "setIcon",
-function (icon) {
-this.icon = icon;
-}, "~O");
-Clazz.overrideMethod (c$, "init",
-function (text, icon, actionCommand, popupMenu) {
-this.text = text;
-this.icon = icon;
-this.actionCommand = actionCommand;
-this.popupMenu = popupMenu;
-{
-SwingController.initMenuItem(this);
-}}, "~S,~O,~S,javajs.api.SC");
-Clazz.defineMethod (c$, "getTopPopupMenu",
-function () {
-return this.popupMenu;
-});
-Clazz.defineMethod (c$, "add",
-function (item) {
-this.addComponent (item);
-}, "javajs.api.SC");
-Clazz.overrideMethod (c$, "insert",
-function (subMenu, index) {
-this.insertComponent (subMenu, index);
-}, "javajs.api.SC,~N");
-Clazz.overrideMethod (c$, "getPopupMenu",
-function () {
-return null;
-});
-Clazz.defineMethod (c$, "getMenuHTML",
-function () {
-var label = (this.icon != null ? this.icon : this.text != null ? this.text : null);
-var s = (label == null ? "" : "" + label + " " + this.htmlMenuOpener ("ul"));
-var n = this.getComponentCount ();
-if (n > 0) for (var i = 0; i < n; i++) s += this.getComponent (i).toHTML ();
-
-if (label != null) s += " ";
-return s;
-});
-Clazz.defineMethod (c$, "htmlMenuOpener",
-function (type) {
-return "<" + type + " id=\"" + this.id + "\"" + (this.enabled ? "" : this.getHtmlDisabled ()) + ">";
-}, "~S");
-Clazz.defineMethod (c$, "getHtmlDisabled",
-function () {
-return " disabled=\"disabled\"";
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.api.SC", "javajs.swing.JComponent"], "javajs.swing.AbstractButton", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.itemListener = null;
+this.applet = null;
+this.htmlName = null;
+this.selected = false;
+this.popupMenu = null;
+this.icon = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "AbstractButton", javajs.swing.JComponent, javajs.api.SC);
+Clazz.makeConstructor (c$,
+function (type) {
+Clazz.superConstructor (this, javajs.swing.AbstractButton, [type]);
+this.enabled = true;
+}, "~S");
+Clazz.overrideMethod (c$, "setSelected",
+function (selected) {
+this.selected = selected;
+{
+SwingController.setSelected(this);
+}}, "~B");
+Clazz.overrideMethod (c$, "isSelected",
+function () {
+return this.selected;
+});
+Clazz.overrideMethod (c$, "addItemListener",
+function (listener) {
+this.itemListener = listener;
+}, "~O");
+Clazz.overrideMethod (c$, "getIcon",
+function () {
+return this.icon;
+});
+Clazz.overrideMethod (c$, "setIcon",
+function (icon) {
+this.icon = icon;
+}, "~O");
+Clazz.overrideMethod (c$, "init",
+function (text, icon, actionCommand, popupMenu) {
+this.text = text;
+this.icon = icon;
+this.actionCommand = actionCommand;
+this.popupMenu = popupMenu;
+{
+SwingController.initMenuItem(this);
+}}, "~S,~O,~S,javajs.api.SC");
+Clazz.defineMethod (c$, "getTopPopupMenu",
+function () {
+return this.popupMenu;
+});
+Clazz.defineMethod (c$, "add",
+function (item) {
+this.addComponent (item);
+}, "javajs.api.SC");
+Clazz.overrideMethod (c$, "insert",
+function (subMenu, index) {
+this.insertComponent (subMenu, index);
+}, "javajs.api.SC,~N");
+Clazz.overrideMethod (c$, "getPopupMenu",
+function () {
+return null;
+});
+Clazz.defineMethod (c$, "getMenuHTML",
+function () {
+var label = (this.icon != null ? this.icon : this.text != null ? this.text : null);
+var s = (label == null ? "" : "" + label + " " + this.htmlMenuOpener ("ul"));
+var n = this.getComponentCount ();
+if (n > 0) for (var i = 0; i < n; i++) s += this.getComponent (i).toHTML ();
+
+if (label != null) s += " ";
+return s;
+});
+Clazz.defineMethod (c$, "htmlMenuOpener",
+function (type) {
+return "<" + type + " id=\"" + this.id + "\"" + (this.enabled ? "" : this.getHtmlDisabled ()) + ">";
+}, "~S");
+Clazz.defineMethod (c$, "getHtmlDisabled",
+function () {
+return " disabled=\"disabled\"";
+});
+});
diff --git a/bin/javajs/swing/AbstractTableModel.js b/bin/javajs/swing/AbstractTableModel.js
index 1f7382c..c17cd4a 100644
--- a/bin/javajs/swing/AbstractTableModel.js
+++ b/bin/javajs/swing/AbstractTableModel.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.TableColumn"], "javajs.swing.AbstractTableModel", null, function () {
-Clazz.declareInterface (javajs.swing, "AbstractTableModel", javajs.swing.TableColumn);
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.TableColumn"], "javajs.swing.AbstractTableModel", null, function () {
+Clazz.declareInterface (javajs.swing, "AbstractTableModel", javajs.swing.TableColumn);
+});
diff --git a/bin/javajs/swing/ButtonGroup.js b/bin/javajs/swing/ButtonGroup.js
index dbeaf88..ebd1ca6 100644
--- a/bin/javajs/swing/ButtonGroup.js
+++ b/bin/javajs/swing/ButtonGroup.js
@@ -1,15 +1,15 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (null, "javajs.swing.ButtonGroup", ["javajs.awt.Component"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.id = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "ButtonGroup");
-Clazz.makeConstructor (c$,
-function () {
-this.id = javajs.awt.Component.newID ("bg");
-});
-Clazz.defineMethod (c$, "add",
-function (item) {
-(item).htmlName = this.id;
-}, "javajs.api.SC");
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (null, "javajs.swing.ButtonGroup", ["javajs.awt.Component"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.id = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "ButtonGroup");
+Clazz.makeConstructor (c$,
+function () {
+this.id = javajs.awt.Component.newID ("bg");
+});
+Clazz.defineMethod (c$, "add",
+function (item) {
+(item).htmlName = this.id;
+}, "javajs.api.SC");
+});
diff --git a/bin/javajs/swing/Cell.js b/bin/javajs/swing/Cell.js
index 2fc85c8..5ac8a90 100644
--- a/bin/javajs/swing/Cell.js
+++ b/bin/javajs/swing/Cell.js
@@ -1,21 +1,21 @@
-Clazz.declarePackage ("javajs.swing");
-c$ = Clazz.decorateAsClass (function () {
-this.component = null;
-this.colspan = 0;
-this.rowspan = 0;
-this.textAlign = 0;
-this.c = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "Cell");
-Clazz.makeConstructor (c$,
-function (btn, c) {
-this.component = btn;
-this.colspan = c.gridwidth;
-this.rowspan = c.gridheight;
-this.c = c;
-}, "javajs.swing.JComponent,javajs.swing.GridBagConstraints");
-Clazz.defineMethod (c$, "toHTML",
-function (id) {
-var style = this.c.getStyle (false);
-return " " + this.component.toHTML () + " ";
-}, "~S");
+Clazz.declarePackage ("javajs.swing");
+c$ = Clazz.decorateAsClass (function () {
+this.component = null;
+this.colspan = 0;
+this.rowspan = 0;
+this.textAlign = 0;
+this.c = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "Cell");
+Clazz.makeConstructor (c$,
+function (btn, c) {
+this.component = btn;
+this.colspan = c.gridwidth;
+this.rowspan = c.gridheight;
+this.c = c;
+}, "javajs.swing.JComponent,javajs.swing.GridBagConstraints");
+Clazz.defineMethod (c$, "toHTML",
+function (id) {
+var style = this.c.getStyle (false);
+return "" + this.component.toHTML () + " ";
+}, "~S");
diff --git a/bin/javajs/swing/ColumnSelectionModel.js b/bin/javajs/swing/ColumnSelectionModel.js
index f9395b7..4ce0290 100644
--- a/bin/javajs/swing/ColumnSelectionModel.js
+++ b/bin/javajs/swing/ColumnSelectionModel.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.declareInterface (javajs.swing, "ColumnSelectionModel");
+Clazz.declarePackage ("javajs.swing");
+Clazz.declareInterface (javajs.swing, "ColumnSelectionModel");
diff --git a/bin/javajs/swing/Document.js b/bin/javajs/swing/Document.js
index 90cf95a..243ba05 100644
--- a/bin/javajs/swing/Document.js
+++ b/bin/javajs/swing/Document.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.declareInterface (javajs.swing, "Document");
+Clazz.declarePackage ("javajs.swing");
+Clazz.declareInterface (javajs.swing, "Document");
diff --git a/bin/javajs/swing/FlowLayout.js b/bin/javajs/swing/FlowLayout.js
index 8989304..6ed7d37 100644
--- a/bin/javajs/swing/FlowLayout.js
+++ b/bin/javajs/swing/FlowLayout.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.awt.LayoutManager"], "javajs.swing.FlowLayout", null, function () {
-c$ = Clazz.declareType (javajs.swing, "FlowLayout", javajs.awt.LayoutManager);
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.awt.LayoutManager"], "javajs.swing.FlowLayout", null, function () {
+c$ = Clazz.declareType (javajs.swing, "FlowLayout", javajs.awt.LayoutManager);
+});
diff --git a/bin/javajs/swing/Grid.js b/bin/javajs/swing/Grid.js
index 2551964..d0b179f 100644
--- a/bin/javajs/swing/Grid.js
+++ b/bin/javajs/swing/Grid.js
@@ -1,46 +1,46 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (null, "javajs.swing.Grid", ["javajs.swing.Cell", "javajs.util.AU", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.nrows = 0;
-this.ncols = 0;
-this.grid = null;
-this.renderer = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "Grid");
-Clazz.makeConstructor (c$,
-function (rows, cols) {
-this.grid = Clazz.newArray (0, 0, null);
-}, "~N,~N");
-Clazz.defineMethod (c$, "add",
-function (btn, c) {
-if (c.gridx >= this.ncols) {
-this.ncols = c.gridx + 1;
-for (var i = 0; i < this.nrows; i++) {
-this.grid[i] = javajs.util.AU.ensureLength (this.grid[i], this.ncols * 2);
-}
-}if (c.gridy >= this.nrows) {
-var g = new Array (c.gridy * 2 + 1);
-for (var i = 0; i < this.nrows; i++) g[i] = this.grid[i];
-
-for (var i = g.length; --i >= this.nrows; ) g[i] = new Array (this.ncols * 2 + 1);
-
-this.grid = g;
-this.nrows = c.gridy + 1;
-}this.grid[c.gridy][c.gridx] = new javajs.swing.Cell (btn, c);
-}, "javajs.swing.JComponent,javajs.swing.GridBagConstraints");
-Clazz.defineMethod (c$, "toHTML",
-function (id) {
-var sb = new javajs.util.SB ();
-id += "_grid";
-sb.append ("\n ");
-for (var i = 0; i < this.nrows; i++) {
-var rowid = id + "_" + i;
-sb.append ("\n ");
-for (var j = 0; j < this.ncols; j++) if (this.grid[i][j] != null) sb.append (this.grid[i][j].toHTML (rowid + "_" + j));
-
-sb.append (" ");
-}
-sb.append ("\n
\n");
-return sb.toString ();
-}, "~S");
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (null, "javajs.swing.Grid", ["javajs.swing.Cell", "javajs.util.AU", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.nrows = 0;
+this.ncols = 0;
+this.grid = null;
+this.renderer = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "Grid");
+Clazz.makeConstructor (c$,
+function (rows, cols) {
+this.grid = Clazz.newArray (0, 0, null);
+}, "~N,~N");
+Clazz.defineMethod (c$, "add",
+function (btn, c) {
+if (c.gridx >= this.ncols) {
+this.ncols = c.gridx + 1;
+for (var i = 0; i < this.nrows; i++) {
+this.grid[i] = javajs.util.AU.ensureLength (this.grid[i], this.ncols * 2);
+}
+}if (c.gridy >= this.nrows) {
+var g = new Array (c.gridy * 2 + 1);
+for (var i = 0; i < this.nrows; i++) g[i] = this.grid[i];
+
+for (var i = g.length; --i >= this.nrows; ) g[i] = new Array (this.ncols * 2 + 1);
+
+this.grid = g;
+this.nrows = c.gridy + 1;
+}this.grid[c.gridy][c.gridx] = new javajs.swing.Cell (btn, c);
+}, "javajs.swing.JComponent,javajs.swing.GridBagConstraints");
+Clazz.defineMethod (c$, "toHTML",
+function (id) {
+var sb = new javajs.util.SB ();
+id += "_grid";
+sb.append ("\n ");
+for (var i = 0; i < this.nrows; i++) {
+var rowid = id + "_" + i;
+sb.append ("\n ");
+for (var j = 0; j < this.ncols; j++) if (this.grid[i][j] != null) sb.append (this.grid[i][j].toHTML (rowid + "_" + j));
+
+sb.append (" ");
+}
+sb.append ("\n
\n");
+return sb.toString ();
+}, "~S");
+});
diff --git a/bin/javajs/swing/GridBagConstraints.js b/bin/javajs/swing/GridBagConstraints.js
index 31cf45c..f631d92 100644
--- a/bin/javajs/swing/GridBagConstraints.js
+++ b/bin/javajs/swing/GridBagConstraints.js
@@ -1,41 +1,41 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (null, "javajs.swing.GridBagConstraints", ["javajs.swing.Insets"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.gridx = 0;
-this.gridy = 0;
-this.gridwidth = 0;
-this.gridheight = 0;
-this.weightx = 0;
-this.weighty = 0;
-this.anchor = 0;
-this.fill = 0;
-this.insets = null;
-this.ipadx = 0;
-this.ipady = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "GridBagConstraints");
-Clazz.makeConstructor (c$,
-function (gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady) {
-this.gridx = gridx;
-this.gridy = gridy;
-this.gridwidth = gridwidth;
-this.gridheight = gridheight;
-this.weightx = weightx;
-this.weighty = weighty;
-this.anchor = anchor;
-this.fill = fill;
-if (insets == null) insets = new javajs.swing.Insets (0, 0, 0, 0);
-this.insets = insets;
-this.ipadx = ipadx;
-this.ipady = ipady;
-}, "~N,~N,~N,~N,~N,~N,~N,~N,javajs.swing.Insets,~N,~N");
-Clazz.defineMethod (c$, "getStyle",
-function (margins) {
-return "style='" + (margins ? "margin:" + this.insets.top + "px " + (this.ipady + this.insets.right) + "px " + this.insets.bottom + "px " + (this.ipadx + this.insets.left) + "px;" : "text-align:" + (this.anchor == 13 ? "right" : this.anchor == 17 ? "left" : "center")) + "'";
-}, "~B");
-Clazz.defineStatics (c$,
-"NONE", 0,
-"CENTER", 10,
-"WEST", 17,
-"EAST", 13);
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (null, "javajs.swing.GridBagConstraints", ["javajs.swing.Insets"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.gridx = 0;
+this.gridy = 0;
+this.gridwidth = 0;
+this.gridheight = 0;
+this.weightx = 0;
+this.weighty = 0;
+this.anchor = 0;
+this.fill = 0;
+this.insets = null;
+this.ipadx = 0;
+this.ipady = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "GridBagConstraints");
+Clazz.makeConstructor (c$,
+function (gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady) {
+this.gridx = gridx;
+this.gridy = gridy;
+this.gridwidth = gridwidth;
+this.gridheight = gridheight;
+this.weightx = weightx;
+this.weighty = weighty;
+this.anchor = anchor;
+this.fill = fill;
+if (insets == null) insets = new javajs.swing.Insets (0, 0, 0, 0);
+this.insets = insets;
+this.ipadx = ipadx;
+this.ipady = ipady;
+}, "~N,~N,~N,~N,~N,~N,~N,~N,javajs.swing.Insets,~N,~N");
+Clazz.defineMethod (c$, "getStyle",
+function (margins) {
+return "style='" + (margins ? "margin:" + this.insets.top + "px " + (this.ipady + this.insets.right) + "px " + this.insets.bottom + "px " + (this.ipadx + this.insets.left) + "px;" : "text-align:" + (this.anchor == 13 ? "right" : this.anchor == 17 ? "left" : "center")) + "'";
+}, "~B");
+Clazz.defineStatics (c$,
+"NONE", 0,
+"CENTER", 10,
+"WEST", 17,
+"EAST", 13);
+});
diff --git a/bin/javajs/swing/GridBagLayout.js b/bin/javajs/swing/GridBagLayout.js
index e2a6b72..f2d3d43 100644
--- a/bin/javajs/swing/GridBagLayout.js
+++ b/bin/javajs/swing/GridBagLayout.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.awt.LayoutManager"], "javajs.swing.GridBagLayout", null, function () {
-c$ = Clazz.declareType (javajs.swing, "GridBagLayout", javajs.awt.LayoutManager);
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.awt.LayoutManager"], "javajs.swing.GridBagLayout", null, function () {
+c$ = Clazz.declareType (javajs.swing, "GridBagLayout", javajs.awt.LayoutManager);
+});
diff --git a/bin/javajs/swing/Insets.js b/bin/javajs/swing/Insets.js
index c9338fd..989e644 100644
--- a/bin/javajs/swing/Insets.js
+++ b/bin/javajs/swing/Insets.js
@@ -1,15 +1,15 @@
-Clazz.declarePackage ("javajs.swing");
-c$ = Clazz.decorateAsClass (function () {
-this.top = 0;
-this.left = 0;
-this.bottom = 0;
-this.right = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "Insets");
-Clazz.makeConstructor (c$,
-function (top, left, bottom, right) {
-this.top = top;
-this.left = left;
-this.bottom = bottom;
-this.right = right;
-}, "~N,~N,~N,~N");
+Clazz.declarePackage ("javajs.swing");
+c$ = Clazz.decorateAsClass (function () {
+this.top = 0;
+this.left = 0;
+this.bottom = 0;
+this.right = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "Insets");
+Clazz.makeConstructor (c$,
+function (top, left, bottom, right) {
+this.top = top;
+this.left = left;
+this.bottom = bottom;
+this.right = right;
+}, "~N,~N,~N,~N");
diff --git a/bin/javajs/swing/JButton.js b/bin/javajs/swing/JButton.js
index 6fa242d..b1f5cc2 100644
--- a/bin/javajs/swing/JButton.js
+++ b/bin/javajs/swing/JButton.js
@@ -1,14 +1,14 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JButton", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.swing, "JButton", javajs.swing.AbstractButton);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JButton, ["btnJB"]);
-});
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append (" ");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JButton", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.swing, "JButton", javajs.swing.AbstractButton);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JButton, ["btnJB"]);
+});
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append (" ");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JCheckBox.js b/bin/javajs/swing/JCheckBox.js
index f4697cb..bae9b88 100644
--- a/bin/javajs/swing/JCheckBox.js
+++ b/bin/javajs/swing/JCheckBox.js
@@ -1,13 +1,13 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JCheckBox", null, function () {
-c$ = Clazz.declareType (javajs.swing, "JCheckBox", javajs.swing.AbstractButton);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JCheckBox, ["chkJCB"]);
-});
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var s = " " + this.text + " ";
-return s;
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JCheckBox", null, function () {
+c$ = Clazz.declareType (javajs.swing, "JCheckBox", javajs.swing.AbstractButton);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JCheckBox, ["chkJCB"]);
+});
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var s = " " + this.text + " ";
+return s;
+});
+});
diff --git a/bin/javajs/swing/JCheckBoxMenuItem.js b/bin/javajs/swing/JCheckBoxMenuItem.js
index 7f50135..0b6f970 100644
--- a/bin/javajs/swing/JCheckBoxMenuItem.js
+++ b/bin/javajs/swing/JCheckBoxMenuItem.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JMenuItem"], "javajs.swing.JCheckBoxMenuItem", null, function () {
-c$ = Clazz.declareType (javajs.swing, "JCheckBoxMenuItem", javajs.swing.JMenuItem);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JCheckBoxMenuItem, ["chk", 2]);
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JMenuItem"], "javajs.swing.JCheckBoxMenuItem", null, function () {
+c$ = Clazz.declareType (javajs.swing, "JCheckBoxMenuItem", javajs.swing.JMenuItem);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JCheckBoxMenuItem, ["chk", 2]);
+});
+});
diff --git a/bin/javajs/swing/JComboBox.js b/bin/javajs/swing/JComboBox.js
index 3e829b4..088b19f 100644
--- a/bin/javajs/swing/JComboBox.js
+++ b/bin/javajs/swing/JComboBox.js
@@ -1,36 +1,36 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JComboBox", ["javajs.util.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.info = null;
-this.selectedIndex = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JComboBox", javajs.swing.AbstractButton);
-Clazz.makeConstructor (c$,
-function (info) {
-Clazz.superConstructor (this, javajs.swing.JComboBox, ["cmbJCB"]);
-this.info = info;
-}, "~A");
-Clazz.defineMethod (c$, "setSelectedIndex",
-function (i) {
-this.selectedIndex = i;
-{
-SwingController.setSelectedIndex(this);
-}}, "~N");
-Clazz.defineMethod (c$, "getSelectedIndex",
-function () {
-return this.selectedIndex;
-});
-Clazz.defineMethod (c$, "getSelectedItem",
-function () {
-return (this.selectedIndex < 0 ? null : this.info[this.selectedIndex]);
-});
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("\n\n");
-for (var i = 0; i < this.info.length; i++) sb.append ("\n" + this.info[i] + " ");
-
-sb.append ("\n \n");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JComboBox", ["javajs.util.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.info = null;
+this.selectedIndex = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JComboBox", javajs.swing.AbstractButton);
+Clazz.makeConstructor (c$,
+function (info) {
+Clazz.superConstructor (this, javajs.swing.JComboBox, ["cmbJCB"]);
+this.info = info;
+}, "~A");
+Clazz.defineMethod (c$, "setSelectedIndex",
+function (i) {
+this.selectedIndex = i;
+{
+SwingController.setSelectedIndex(this);
+}}, "~N");
+Clazz.defineMethod (c$, "getSelectedIndex",
+function () {
+return this.selectedIndex;
+});
+Clazz.defineMethod (c$, "getSelectedItem",
+function () {
+return (this.selectedIndex < 0 ? null : this.info[this.selectedIndex]);
+});
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("\n\n");
+for (var i = 0; i < this.info.length; i++) sb.append ("\n" + this.info[i] + " ");
+
+sb.append ("\n \n");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JComponent.js b/bin/javajs/swing/JComponent.js
index 28b137e..aca8bfd 100644
--- a/bin/javajs/swing/JComponent.js
+++ b/bin/javajs/swing/JComponent.js
@@ -1,25 +1,25 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.awt.Container"], "javajs.swing.JComponent", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.autoScrolls = false;
-this.actionCommand = null;
-this.actionListener = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JComponent", javajs.awt.Container);
-Clazz.defineMethod (c$, "setAutoscrolls",
-function (b) {
-this.autoScrolls = b;
-}, "~B");
-Clazz.defineMethod (c$, "addActionListener",
-function (listener) {
-this.actionListener = listener;
-}, "~O");
-Clazz.defineMethod (c$, "getActionCommand",
-function () {
-return this.actionCommand;
-});
-Clazz.defineMethod (c$, "setActionCommand",
-function (actionCommand) {
-this.actionCommand = actionCommand;
-}, "~S");
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.awt.Container"], "javajs.swing.JComponent", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.autoScrolls = false;
+this.actionCommand = null;
+this.actionListener = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JComponent", javajs.awt.Container);
+Clazz.defineMethod (c$, "setAutoscrolls",
+function (b) {
+this.autoScrolls = b;
+}, "~B");
+Clazz.defineMethod (c$, "addActionListener",
+function (listener) {
+this.actionListener = listener;
+}, "~O");
+Clazz.defineMethod (c$, "getActionCommand",
+function () {
+return this.actionCommand;
+});
+Clazz.defineMethod (c$, "setActionCommand",
+function (actionCommand) {
+this.actionCommand = actionCommand;
+}, "~S");
+});
diff --git a/bin/javajs/swing/JComponentImp.js b/bin/javajs/swing/JComponentImp.js
index 2158688..a19f4ee 100644
--- a/bin/javajs/swing/JComponentImp.js
+++ b/bin/javajs/swing/JComponentImp.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JComponentImp", null, function () {
-c$ = Clazz.declareType (javajs.swing, "JComponentImp", javajs.swing.JComponent);
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-return null;
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JComponentImp", null, function () {
+c$ = Clazz.declareType (javajs.swing, "JComponentImp", javajs.swing.JComponent);
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+return null;
+});
+});
diff --git a/bin/javajs/swing/JContentPane.js b/bin/javajs/swing/JContentPane.js
index 5f822fa..5cd86e3 100644
--- a/bin/javajs/swing/JContentPane.js
+++ b/bin/javajs/swing/JContentPane.js
@@ -1,17 +1,17 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JContentPane", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.swing, "JContentPane", javajs.swing.JComponent);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JContentPane, ["JCP"]);
-});
-Clazz.defineMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("\n\n");
-if (this.list != null) for (var i = 0; i < this.list.size (); i++) sb.append (this.list.get (i).toHTML ());
-
-sb.append ("\n
\n");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JContentPane", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.swing, "JContentPane", javajs.swing.JComponent);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JContentPane, ["JCP"]);
+});
+Clazz.defineMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("\n\n");
+if (this.list != null) for (var i = 0; i < this.list.size (); i++) sb.append (this.list.get (i).toHTML ());
+
+sb.append ("\n
\n");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JDialog.js b/bin/javajs/swing/JDialog.js
index 16bacd5..6b11856 100644
--- a/bin/javajs/swing/JDialog.js
+++ b/bin/javajs/swing/JDialog.js
@@ -1,82 +1,82 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.awt.Container"], "javajs.swing.JDialog", ["javajs.awt.Color", "javajs.swing.JContentPane", "javajs.util.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.defaultWidth = 600;
-this.defaultHeight = 300;
-this.contentPane = null;
-this.title = null;
-this.html = null;
-this.zIndex = 9000;
-this.loc = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JDialog", javajs.awt.Container);
-Clazz.defineMethod (c$, "setZIndex",
-function (zIndex) {
-this.zIndex = zIndex;
-}, "~N");
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JDialog, ["JD"]);
-this.add (this.contentPane = new javajs.swing.JContentPane ());
-this.setBackground (javajs.awt.Color.get3 (210, 210, 240));
-this.contentPane.setBackground (javajs.awt.Color.get3 (230, 230, 230));
-});
-Clazz.defineMethod (c$, "setLocation",
-function (loc) {
-this.loc = loc;
-}, "~A");
-Clazz.defineMethod (c$, "getContentPane",
-function () {
-return this.contentPane;
-});
-Clazz.defineMethod (c$, "setTitle",
-function (title) {
-this.title = title;
-}, "~S");
-Clazz.defineMethod (c$, "pack",
-function () {
-this.html = null;
-});
-Clazz.defineMethod (c$, "validate",
-function () {
-this.html = null;
-});
-Clazz.defineMethod (c$, "setVisible",
-function (tf) {
-if (tf && this.html == null) this.setDialog ();
-Clazz.superCall (this, javajs.swing.JDialog, "setVisible", [tf]);
-}, "~B");
-Clazz.defineMethod (c$, "dispose",
-function () {
-{
-{
-SwingController.dispose(this);
-}}});
-Clazz.overrideMethod (c$, "repaint",
-function () {
-this.setDialog ();
-});
-Clazz.defineMethod (c$, "setDialog",
-($fz = function () {
-this.html = this.toHTML ();
-{
-SwingController.setDialog(this);
-}}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-this.renderWidth = this.getSubcomponentWidth ();
-if (this.renderWidth == 0) this.renderWidth = this.defaultWidth;
-this.renderHeight = this.contentPane.getSubcomponentHeight ();
-if (this.renderHeight == 0) this.renderHeight = this.defaultHeight;
-var h = this.renderHeight - 25;
-var sb = new javajs.util.SB ();
-sb.append ("\n\n");
-sb.append ("\n
" + "" + this.title + " " + "
\n");
-sb.append ("\n
\n");
-sb.append (this.contentPane.toHTML ());
-sb.append ("\n
\n");
-return sb.toString ();
-});
-Clazz.defineStatics (c$,
-"headerHeight", 25);
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.awt.Container"], "javajs.swing.JDialog", ["javajs.awt.Color", "javajs.swing.JContentPane", "javajs.util.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.defaultWidth = 600;
+this.defaultHeight = 300;
+this.contentPane = null;
+this.title = null;
+this.html = null;
+this.zIndex = 9000;
+this.loc = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JDialog", javajs.awt.Container);
+Clazz.defineMethod (c$, "setZIndex",
+function (zIndex) {
+this.zIndex = zIndex;
+}, "~N");
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JDialog, ["JD"]);
+this.add (this.contentPane = new javajs.swing.JContentPane ());
+this.setBackground (javajs.awt.Color.get3 (210, 210, 240));
+this.contentPane.setBackground (javajs.awt.Color.get3 (230, 230, 230));
+});
+Clazz.defineMethod (c$, "setLocation",
+function (loc) {
+this.loc = loc;
+}, "~A");
+Clazz.defineMethod (c$, "getContentPane",
+function () {
+return this.contentPane;
+});
+Clazz.defineMethod (c$, "setTitle",
+function (title) {
+this.title = title;
+}, "~S");
+Clazz.defineMethod (c$, "pack",
+function () {
+this.html = null;
+});
+Clazz.defineMethod (c$, "validate",
+function () {
+this.html = null;
+});
+Clazz.defineMethod (c$, "setVisible",
+function (tf) {
+if (tf && this.html == null) this.setDialog ();
+Clazz.superCall (this, javajs.swing.JDialog, "setVisible", [tf]);
+}, "~B");
+Clazz.defineMethod (c$, "dispose",
+function () {
+{
+{
+SwingController.dispose(this);
+}}});
+Clazz.overrideMethod (c$, "repaint",
+function () {
+this.setDialog ();
+});
+Clazz.defineMethod (c$, "setDialog",
+($fz = function () {
+this.html = this.toHTML ();
+{
+SwingController.setDialog(this);
+}}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+this.renderWidth = this.getSubcomponentWidth ();
+if (this.renderWidth == 0) this.renderWidth = this.defaultWidth;
+this.renderHeight = this.contentPane.getSubcomponentHeight ();
+if (this.renderHeight == 0) this.renderHeight = this.defaultHeight;
+var h = this.renderHeight - 25;
+var sb = new javajs.util.SB ();
+sb.append ("\n\n");
+sb.append ("\n
" + "" + this.title + " " + "
\n");
+sb.append ("\n
\n");
+sb.append (this.contentPane.toHTML ());
+sb.append ("\n
\n");
+return sb.toString ();
+});
+Clazz.defineStatics (c$,
+"headerHeight", 25);
+});
diff --git a/bin/javajs/swing/JEditorPane.js b/bin/javajs/swing/JEditorPane.js
index 4f40aab..f8dcf8c 100644
--- a/bin/javajs/swing/JEditorPane.js
+++ b/bin/javajs/swing/JEditorPane.js
@@ -1,15 +1,15 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JEditorPane", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.swing, "JEditorPane", javajs.swing.JComponent);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JEditorPane, ["txtJEP"]);
-this.text = "";
-});
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JEditorPane", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.swing, "JEditorPane", javajs.swing.JComponent);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JEditorPane, ["txtJEP"]);
+this.text = "";
+});
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JLabel.js b/bin/javajs/swing/JLabel.js
index 778976c..2146a5e 100644
--- a/bin/javajs/swing/JLabel.js
+++ b/bin/javajs/swing/JLabel.js
@@ -1,17 +1,17 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JLabel", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.swing, "JLabel", javajs.swing.JComponent);
-Clazz.makeConstructor (c$,
-function (text) {
-Clazz.superConstructor (this, javajs.swing.JLabel, ["lblJL"]);
-this.text = text;
-}, "~S");
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("");
-sb.append (this.text);
-sb.append (" ");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JLabel", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.swing, "JLabel", javajs.swing.JComponent);
+Clazz.makeConstructor (c$,
+function (text) {
+Clazz.superConstructor (this, javajs.swing.JLabel, ["lblJL"]);
+this.text = text;
+}, "~S");
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("");
+sb.append (this.text);
+sb.append (" ");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JMenu.js b/bin/javajs/swing/JMenu.js
index f887330..4dae0ad 100644
--- a/bin/javajs/swing/JMenu.js
+++ b/bin/javajs/swing/JMenu.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JMenuItem"], "javajs.swing.JMenu", null, function () {
-c$ = Clazz.declareType (javajs.swing, "JMenu", javajs.swing.JMenuItem);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JMenu, ["mnu", 4]);
-});
-Clazz.defineMethod (c$, "getItemCount",
-function () {
-return this.getComponentCount ();
-});
-Clazz.defineMethod (c$, "getItem",
-function (i) {
-return this.getComponent (i);
-}, "~N");
-Clazz.overrideMethod (c$, "getPopupMenu",
-function () {
-return this;
-});
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-return this.getMenuHTML ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JMenuItem"], "javajs.swing.JMenu", null, function () {
+c$ = Clazz.declareType (javajs.swing, "JMenu", javajs.swing.JMenuItem);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JMenu, ["mnu", 4]);
+});
+Clazz.defineMethod (c$, "getItemCount",
+function () {
+return this.getComponentCount ();
+});
+Clazz.defineMethod (c$, "getItem",
+function (i) {
+return this.getComponent (i);
+}, "~N");
+Clazz.overrideMethod (c$, "getPopupMenu",
+function () {
+return this;
+});
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+return this.getMenuHTML ();
+});
+});
diff --git a/bin/javajs/swing/JMenuItem.js b/bin/javajs/swing/JMenuItem.js
index 36e3220..b1183cc 100644
--- a/bin/javajs/swing/JMenuItem.js
+++ b/bin/javajs/swing/JMenuItem.js
@@ -1,36 +1,36 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JMenuItem", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.btnType = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JMenuItem", javajs.swing.AbstractButton);
-Clazz.makeConstructor (c$,
-function (text) {
-Clazz.superConstructor (this, javajs.swing.JMenuItem, ["btn"]);
-this.setText (text);
-this.btnType = (text == null ? 0 : 1);
-}, "~S");
-Clazz.makeConstructor (c$,
-function (type, i) {
-Clazz.superConstructor (this, javajs.swing.JMenuItem, [type]);
-this.btnType = i;
-}, "~S,~N");
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-return this.htmlMenuOpener ("li") + (this.text == null ? "" : "" + this.htmlLabel () + " ") + "";
-});
-Clazz.overrideMethod (c$, "getHtmlDisabled",
-function () {
-return " class=\"ui-state-disabled\"";
-});
-Clazz.defineMethod (c$, "htmlLabel",
-($fz = function () {
-return (this.btnType == 1 ? this.text : " " + this.text + " ");
-}, $fz.isPrivate = true, $fz));
-Clazz.defineStatics (c$,
-"TYPE_SEPARATOR", 0,
-"TYPE_BUTTON", 1,
-"TYPE_CHECKBOX", 2,
-"TYPE_RADIO", 3,
-"TYPE_MENU", 4);
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JMenuItem", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.btnType = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JMenuItem", javajs.swing.AbstractButton);
+Clazz.makeConstructor (c$,
+function (text) {
+Clazz.superConstructor (this, javajs.swing.JMenuItem, ["btn"]);
+this.setText (text);
+this.btnType = (text == null ? 0 : 1);
+}, "~S");
+Clazz.makeConstructor (c$,
+function (type, i) {
+Clazz.superConstructor (this, javajs.swing.JMenuItem, [type]);
+this.btnType = i;
+}, "~S,~N");
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+return this.htmlMenuOpener ("li") + (this.text == null ? "" : "" + this.htmlLabel () + " ") + "";
+});
+Clazz.overrideMethod (c$, "getHtmlDisabled",
+function () {
+return " class=\"ui-state-disabled\"";
+});
+Clazz.defineMethod (c$, "htmlLabel",
+($fz = function () {
+return (this.btnType == 1 ? this.text : " " + this.text + " ");
+}, $fz.isPrivate = true, $fz));
+Clazz.defineStatics (c$,
+"TYPE_SEPARATOR", 0,
+"TYPE_BUTTON", 1,
+"TYPE_CHECKBOX", 2,
+"TYPE_RADIO", 3,
+"TYPE_MENU", 4);
+});
diff --git a/bin/javajs/swing/JPanel.js b/bin/javajs/swing/JPanel.js
index a7a7ef9..76bb933 100644
--- a/bin/javajs/swing/JPanel.js
+++ b/bin/javajs/swing/JPanel.js
@@ -1,39 +1,39 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JPanel", ["javajs.swing.Grid", "$.GridBagConstraints", "javajs.util.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.grid = null;
-this.nElements = 0;
-this.last = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JPanel", javajs.swing.JComponent);
-Clazz.makeConstructor (c$,
-function (manager) {
-Clazz.superConstructor (this, javajs.swing.JPanel, ["JP"]);
-this.grid = new javajs.swing.Grid (10, 10);
-}, "javajs.awt.LayoutManager");
-Clazz.defineMethod (c$, "add",
-function (btn, c) {
-this.last = (++this.nElements == 1 ? btn : null);
-if (Clazz.instanceOf (c, String)) {
-if (c.equals ("North")) c = new javajs.swing.GridBagConstraints (0, 0, 3, 1, 0, 0, 10, 0, null, 0, 0);
- else if (c.equals ("South")) c = new javajs.swing.GridBagConstraints (0, 2, 3, 1, 0, 0, 10, 0, null, 0, 0);
- else if (c.equals ("East")) c = new javajs.swing.GridBagConstraints (2, 1, 1, 1, 0, 0, 13, 0, null, 0, 0);
- else if (c.equals ("West")) c = new javajs.swing.GridBagConstraints (0, 1, 1, 1, 0, 0, 17, 0, null, 0, 0);
- else c = new javajs.swing.GridBagConstraints (1, 1, 1, 1, 0, 0, 10, 0, null, 0, 0);
-}this.grid.add (btn, c);
-}, "javajs.swing.JComponent,~O");
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-if (this.last != null) {
-this.grid = new javajs.swing.Grid (1, 1);
-this.grid.add (this.last, new javajs.swing.GridBagConstraints (0, 0, 1, 1, 0, 0, 10, 0, null, 0, 0));
-this.last = null;
-}var sb = new javajs.util.SB ();
-sb.append ("\n\n");
-sb.append ("\n");
-sb.append (this.grid.toHTML (this.id));
-sb.append (" ");
-sb.append ("\n
\n");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JPanel", ["javajs.swing.Grid", "$.GridBagConstraints", "javajs.util.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.grid = null;
+this.nElements = 0;
+this.last = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JPanel", javajs.swing.JComponent);
+Clazz.makeConstructor (c$,
+function (manager) {
+Clazz.superConstructor (this, javajs.swing.JPanel, ["JP"]);
+this.grid = new javajs.swing.Grid (10, 10);
+}, "javajs.awt.LayoutManager");
+Clazz.defineMethod (c$, "add",
+function (btn, c) {
+this.last = (++this.nElements == 1 ? btn : null);
+if (Clazz.instanceOf (c, String)) {
+if (c.equals ("North")) c = new javajs.swing.GridBagConstraints (0, 0, 3, 1, 0, 0, 10, 0, null, 0, 0);
+ else if (c.equals ("South")) c = new javajs.swing.GridBagConstraints (0, 2, 3, 1, 0, 0, 10, 0, null, 0, 0);
+ else if (c.equals ("East")) c = new javajs.swing.GridBagConstraints (2, 1, 1, 1, 0, 0, 13, 0, null, 0, 0);
+ else if (c.equals ("West")) c = new javajs.swing.GridBagConstraints (0, 1, 1, 1, 0, 0, 17, 0, null, 0, 0);
+ else c = new javajs.swing.GridBagConstraints (1, 1, 1, 1, 0, 0, 10, 0, null, 0, 0);
+}this.grid.add (btn, c);
+}, "javajs.swing.JComponent,~O");
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+if (this.last != null) {
+this.grid = new javajs.swing.Grid (1, 1);
+this.grid.add (this.last, new javajs.swing.GridBagConstraints (0, 0, 1, 1, 0, 0, 10, 0, null, 0, 0));
+this.last = null;
+}var sb = new javajs.util.SB ();
+sb.append ("\n\n");
+sb.append ("\n");
+sb.append (this.grid.toHTML (this.id));
+sb.append (" ");
+sb.append ("\n
\n");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JPopupMenu.js b/bin/javajs/swing/JPopupMenu.js
index 855df96..95cbc1f 100644
--- a/bin/javajs/swing/JPopupMenu.js
+++ b/bin/javajs/swing/JPopupMenu.js
@@ -1,37 +1,37 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JPopupMenu", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.tainted = true;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JPopupMenu", javajs.swing.AbstractButton);
-Clazz.makeConstructor (c$,
-function (name) {
-Clazz.superConstructor (this, javajs.swing.JPopupMenu, ["mnu"]);
-this.name = name;
-}, "~S");
-Clazz.defineMethod (c$, "setInvoker",
-function (applet) {
-this.applet = applet;
-{
-SwingController.setMenu(this);
-}}, "~O");
-Clazz.defineMethod (c$, "show",
-function (applet, x, y) {
-{
-if (applet != null)
-this.tainted = true;
-SwingController.showMenu(this, x, y);
-}}, "javajs.awt.Component,~N,~N");
-Clazz.defineMethod (c$, "disposeMenu",
-function () {
-{
-SwingController.disposeMenu(this);
-}});
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-return this.getMenuHTML ();
-});
-{
-{
-SwingController.setDraggable(javajs.swing.JPopupMenu);
-}}});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.AbstractButton"], "javajs.swing.JPopupMenu", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.tainted = true;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JPopupMenu", javajs.swing.AbstractButton);
+Clazz.makeConstructor (c$,
+function (name) {
+Clazz.superConstructor (this, javajs.swing.JPopupMenu, ["mnu"]);
+this.name = name;
+}, "~S");
+Clazz.defineMethod (c$, "setInvoker",
+function (applet) {
+this.applet = applet;
+{
+SwingController.setMenu(this);
+}}, "~O");
+Clazz.defineMethod (c$, "show",
+function (applet, x, y) {
+{
+if (applet != null)
+this.tainted = true;
+SwingController.showMenu(this, x, y);
+}}, "javajs.awt.Component,~N,~N");
+Clazz.defineMethod (c$, "disposeMenu",
+function () {
+{
+SwingController.disposeMenu(this);
+}});
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+return this.getMenuHTML ();
+});
+{
+{
+SwingController.setDraggable(javajs.swing.JPopupMenu);
+}}});
diff --git a/bin/javajs/swing/JRadioButtonMenuItem.js b/bin/javajs/swing/JRadioButtonMenuItem.js
index 1ba2401..8388819 100644
--- a/bin/javajs/swing/JRadioButtonMenuItem.js
+++ b/bin/javajs/swing/JRadioButtonMenuItem.js
@@ -1,11 +1,11 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JMenuItem"], "javajs.swing.JRadioButtonMenuItem", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.isRadio = true;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JRadioButtonMenuItem", javajs.swing.JMenuItem);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JRadioButtonMenuItem, ["rad", 3]);
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JMenuItem"], "javajs.swing.JRadioButtonMenuItem", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.isRadio = true;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JRadioButtonMenuItem", javajs.swing.JMenuItem);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JRadioButtonMenuItem, ["rad", 3]);
+});
+});
diff --git a/bin/javajs/swing/JScrollPane.js b/bin/javajs/swing/JScrollPane.js
index 64c766a..2ba9959 100644
--- a/bin/javajs/swing/JScrollPane.js
+++ b/bin/javajs/swing/JScrollPane.js
@@ -1,22 +1,22 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JScrollPane", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.swing, "JScrollPane", javajs.swing.JComponent);
-Clazz.makeConstructor (c$,
-function (component) {
-Clazz.superConstructor (this, javajs.swing.JScrollPane, ["JScP"]);
-this.add (component);
-}, "javajs.swing.JComponent");
-Clazz.defineMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("\n\n");
-if (this.list != null) {
-var c = this.list.get (0);
-sb.append (c.toHTML ());
-}sb.append ("\n
\n");
-return sb.toString ();
-});
-Clazz.overrideMethod (c$, "setMinimumSize",
-function (dimension) {
-}, "javajs.awt.Dimension");
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JScrollPane", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.swing, "JScrollPane", javajs.swing.JComponent);
+Clazz.makeConstructor (c$,
+function (component) {
+Clazz.superConstructor (this, javajs.swing.JScrollPane, ["JScP"]);
+this.add (component);
+}, "javajs.swing.JComponent");
+Clazz.defineMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("\n\n");
+if (this.list != null) {
+var c = this.list.get (0);
+sb.append (c.toHTML ());
+}sb.append ("\n
\n");
+return sb.toString ();
+});
+Clazz.overrideMethod (c$, "setMinimumSize",
+function (dimension) {
+}, "javajs.awt.Dimension");
+});
diff --git a/bin/javajs/swing/JSplitPane.js b/bin/javajs/swing/JSplitPane.js
index 11f99e2..08969e2 100644
--- a/bin/javajs/swing/JSplitPane.js
+++ b/bin/javajs/swing/JSplitPane.js
@@ -1,67 +1,67 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JSplitPane", ["javajs.swing.JComponentImp", "javajs.util.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.isH = true;
-this.split = 1;
-this.right = null;
-this.left = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JSplitPane", javajs.swing.JComponent);
-Clazz.makeConstructor (c$,
-function (split) {
-Clazz.superConstructor (this, javajs.swing.JSplitPane, ["JSpP"]);
-this.split = split;
-this.isH = (split == 1);
-}, "~N");
-Clazz.defineMethod (c$, "setRightComponent",
-function (r) {
-this.right = new javajs.swing.JComponentImp (null);
-this.right.add (r);
-}, "javajs.swing.JComponent");
-Clazz.defineMethod (c$, "setLeftComponent",
-function (l) {
-this.left = new javajs.swing.JComponentImp (null);
-this.left.add (l);
-}, "javajs.swing.JComponent");
-Clazz.defineMethod (c$, "getSubcomponentWidth",
-function () {
-var w = this.width;
-if (w == 0) {
-var wleft = this.left.getSubcomponentWidth ();
-var wright = this.right.getSubcomponentWidth ();
-if (wleft > 0 && wright > 0) {
-if (this.isH) w = wleft + wright;
- else w = Math.max (wleft, wright);
-}}return w;
-});
-Clazz.defineMethod (c$, "getSubcomponentHeight",
-function () {
-var h = this.height;
-if (h == 0) {
-var hleft = this.left.getSubcomponentHeight ();
-var hright = this.right.getSubcomponentHeight ();
-if (hleft > 0 && hright > 0) {
-if (this.isH) h = Math.max (hleft, hright);
- else h = hleft + hright;
-}}return h;
-});
-Clazz.defineMethod (c$, "toHTML",
-function () {
-if (this.left == null || this.right == null) return "";
-var isH = (this.split == 1);
-if (this.width == 0) this.width = this.getSubcomponentWidth ();
-if (this.height == 0) this.height = this.getSubcomponentHeight ();
-var sb = new javajs.util.SB ();
-sb.append ("");
-if (isH) sb.append ("
");
- else sb.append ("
");
-sb.append (this.left.getComponents ()[0].toHTML ());
-if (isH) sb.append ("
");
- else sb.append ("
");
-sb.append (this.right.getComponents ()[0].toHTML ());
-sb.append ("
\n");
-return sb.toString ();
-});
-Clazz.defineStatics (c$,
-"HORIZONTAL_SPLIT", 1);
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JSplitPane", ["javajs.swing.JComponentImp", "javajs.util.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.isH = true;
+this.split = 1;
+this.right = null;
+this.left = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JSplitPane", javajs.swing.JComponent);
+Clazz.makeConstructor (c$,
+function (split) {
+Clazz.superConstructor (this, javajs.swing.JSplitPane, ["JSpP"]);
+this.split = split;
+this.isH = (split == 1);
+}, "~N");
+Clazz.defineMethod (c$, "setRightComponent",
+function (r) {
+this.right = new javajs.swing.JComponentImp (null);
+this.right.add (r);
+}, "javajs.swing.JComponent");
+Clazz.defineMethod (c$, "setLeftComponent",
+function (l) {
+this.left = new javajs.swing.JComponentImp (null);
+this.left.add (l);
+}, "javajs.swing.JComponent");
+Clazz.defineMethod (c$, "getSubcomponentWidth",
+function () {
+var w = this.width;
+if (w == 0) {
+var wleft = this.left.getSubcomponentWidth ();
+var wright = this.right.getSubcomponentWidth ();
+if (wleft > 0 && wright > 0) {
+if (this.isH) w = wleft + wright;
+ else w = Math.max (wleft, wright);
+}}return w;
+});
+Clazz.defineMethod (c$, "getSubcomponentHeight",
+function () {
+var h = this.height;
+if (h == 0) {
+var hleft = this.left.getSubcomponentHeight ();
+var hright = this.right.getSubcomponentHeight ();
+if (hleft > 0 && hright > 0) {
+if (this.isH) h = Math.max (hleft, hright);
+ else h = hleft + hright;
+}}return h;
+});
+Clazz.defineMethod (c$, "toHTML",
+function () {
+if (this.left == null || this.right == null) return "";
+var isH = (this.split == 1);
+if (this.width == 0) this.width = this.getSubcomponentWidth ();
+if (this.height == 0) this.height = this.getSubcomponentHeight ();
+var sb = new javajs.util.SB ();
+sb.append ("
");
+if (isH) sb.append ("
");
+ else sb.append ("
");
+sb.append (this.left.getComponents ()[0].toHTML ());
+if (isH) sb.append ("
");
+ else sb.append ("
");
+sb.append (this.right.getComponents ()[0].toHTML ());
+sb.append ("
\n");
+return sb.toString ();
+});
+Clazz.defineStatics (c$,
+"HORIZONTAL_SPLIT", 1);
+});
diff --git a/bin/javajs/swing/JTable.js b/bin/javajs/swing/JTable.js
index a281668..b8f4499 100644
--- a/bin/javajs/swing/JTable.js
+++ b/bin/javajs/swing/JTable.js
@@ -1,67 +1,67 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.ColumnSelectionModel", "$.JComponent", "$.ListSelectionModel"], "javajs.swing.JTable", ["javajs.util.BS", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.tableModel = null;
-this.bsSelectedCells = null;
-this.bsSelectedRows = null;
-this.rowSelectionAllowed = false;
-this.cellSelectionEnabled = false;
-this.selectionListener = null;
-Clazz.instantialize (this, arguments);
-}, javajs.swing, "JTable", javajs.swing.JComponent, [javajs.swing.ListSelectionModel, javajs.swing.ColumnSelectionModel]);
-Clazz.makeConstructor (c$,
-function (tableModel) {
-Clazz.superConstructor (this, javajs.swing.JTable, ["JT"]);
-this.tableModel = tableModel;
-this.bsSelectedCells = new javajs.util.BS ();
-this.bsSelectedRows = new javajs.util.BS ();
-}, "javajs.swing.AbstractTableModel");
-Clazz.overrideMethod (c$, "getSelectionModel",
-function () {
-return this;
-});
-Clazz.defineMethod (c$, "getColumnModel",
-function () {
-return this;
-});
-Clazz.defineMethod (c$, "setPreferredScrollableViewportSize",
-function (dimension) {
-this.width = dimension.width;
-this.height = dimension.height;
-}, "javajs.awt.Dimension");
-Clazz.defineMethod (c$, "clearSelection",
-function () {
-this.bsSelectedCells.clearAll ();
-this.bsSelectedRows.clearAll ();
-});
-Clazz.defineMethod (c$, "setRowSelectionAllowed",
-function (b) {
-this.rowSelectionAllowed = b;
-}, "~B");
-Clazz.defineMethod (c$, "setRowSelectionInterval",
-function (i, j) {
-this.bsSelectedRows.clearAll ();
-this.bsSelectedRows.setBits (i, j);
-this.bsSelectedCells.clearAll ();
-}, "~N,~N");
-Clazz.defineMethod (c$, "setCellSelectionEnabled",
-function (enabled) {
-this.cellSelectionEnabled = enabled;
-}, "~B");
-Clazz.overrideMethod (c$, "addListSelectionListener",
-function (listener) {
-this.selectionListener = listener;
-}, "~O");
-Clazz.overrideMethod (c$, "getColumn",
-function (i) {
-return this.tableModel.getColumn (i);
-}, "~N");
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("\n
");
-this.tableModel.toHTML (sb, this.id, this.bsSelectedRows);
-sb.append ("\n
\n");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.ColumnSelectionModel", "$.JComponent", "$.ListSelectionModel"], "javajs.swing.JTable", ["javajs.util.BS", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.tableModel = null;
+this.bsSelectedCells = null;
+this.bsSelectedRows = null;
+this.rowSelectionAllowed = false;
+this.cellSelectionEnabled = false;
+this.selectionListener = null;
+Clazz.instantialize (this, arguments);
+}, javajs.swing, "JTable", javajs.swing.JComponent, [javajs.swing.ListSelectionModel, javajs.swing.ColumnSelectionModel]);
+Clazz.makeConstructor (c$,
+function (tableModel) {
+Clazz.superConstructor (this, javajs.swing.JTable, ["JT"]);
+this.tableModel = tableModel;
+this.bsSelectedCells = new javajs.util.BS ();
+this.bsSelectedRows = new javajs.util.BS ();
+}, "javajs.swing.AbstractTableModel");
+Clazz.overrideMethod (c$, "getSelectionModel",
+function () {
+return this;
+});
+Clazz.defineMethod (c$, "getColumnModel",
+function () {
+return this;
+});
+Clazz.defineMethod (c$, "setPreferredScrollableViewportSize",
+function (dimension) {
+this.width = dimension.width;
+this.height = dimension.height;
+}, "javajs.awt.Dimension");
+Clazz.defineMethod (c$, "clearSelection",
+function () {
+this.bsSelectedCells.clearAll ();
+this.bsSelectedRows.clearAll ();
+});
+Clazz.defineMethod (c$, "setRowSelectionAllowed",
+function (b) {
+this.rowSelectionAllowed = b;
+}, "~B");
+Clazz.defineMethod (c$, "setRowSelectionInterval",
+function (i, j) {
+this.bsSelectedRows.clearAll ();
+this.bsSelectedRows.setBits (i, j);
+this.bsSelectedCells.clearAll ();
+}, "~N,~N");
+Clazz.defineMethod (c$, "setCellSelectionEnabled",
+function (enabled) {
+this.cellSelectionEnabled = enabled;
+}, "~B");
+Clazz.overrideMethod (c$, "addListSelectionListener",
+function (listener) {
+this.selectionListener = listener;
+}, "~O");
+Clazz.overrideMethod (c$, "getColumn",
+function (i) {
+return this.tableModel.getColumn (i);
+}, "~N");
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("\n
");
+this.tableModel.toHTML (sb, this.id, this.bsSelectedRows);
+sb.append ("\n
\n");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JTextField.js b/bin/javajs/swing/JTextField.js
index 9cc639f..88b08a6 100644
--- a/bin/javajs/swing/JTextField.js
+++ b/bin/javajs/swing/JTextField.js
@@ -1,15 +1,15 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JTextField", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.swing, "JTextField", javajs.swing.JComponent);
-Clazz.makeConstructor (c$,
-function (value) {
-Clazz.superConstructor (this, javajs.swing.JTextField, ["txtJT"]);
-this.text = value;
-}, "~S");
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("
");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.JComponent"], "javajs.swing.JTextField", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.swing, "JTextField", javajs.swing.JComponent);
+Clazz.makeConstructor (c$,
+function (value) {
+Clazz.superConstructor (this, javajs.swing.JTextField, ["txtJT"]);
+this.text = value;
+}, "~S");
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("
");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/JTextPane.js b/bin/javajs/swing/JTextPane.js
index 23d5a22..25d3764 100644
--- a/bin/javajs/swing/JTextPane.js
+++ b/bin/javajs/swing/JTextPane.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.load (["javajs.swing.Document", "$.JComponent"], "javajs.swing.JTextPane", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.swing, "JTextPane", javajs.swing.JComponent, javajs.swing.Document);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.swing.JTextPane, ["txtJTP"]);
-this.text = "";
-});
-Clazz.defineMethod (c$, "getDocument",
-function () {
-return this;
-});
-Clazz.overrideMethod (c$, "insertString",
-function (i, s, object) {
-i = Math.min (i, this.text.length);
-this.text = this.text.substring (0, i) + s + this.text.substring (i);
-}, "~N,~S,~O");
-Clazz.overrideMethod (c$, "toHTML",
-function () {
-var sb = new javajs.util.SB ();
-sb.append ("
");
-return sb.toString ();
-});
-});
+Clazz.declarePackage ("javajs.swing");
+Clazz.load (["javajs.swing.Document", "$.JComponent"], "javajs.swing.JTextPane", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.swing, "JTextPane", javajs.swing.JComponent, javajs.swing.Document);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.swing.JTextPane, ["txtJTP"]);
+this.text = "";
+});
+Clazz.defineMethod (c$, "getDocument",
+function () {
+return this;
+});
+Clazz.overrideMethod (c$, "insertString",
+function (i, s, object) {
+i = Math.min (i, this.text.length);
+this.text = this.text.substring (0, i) + s + this.text.substring (i);
+}, "~N,~S,~O");
+Clazz.overrideMethod (c$, "toHTML",
+function () {
+var sb = new javajs.util.SB ();
+sb.append ("
");
+return sb.toString ();
+});
+});
diff --git a/bin/javajs/swing/ListSelectionModel.js b/bin/javajs/swing/ListSelectionModel.js
index 5cb1d3a..c5fd420 100644
--- a/bin/javajs/swing/ListSelectionModel.js
+++ b/bin/javajs/swing/ListSelectionModel.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.declareInterface (javajs.swing, "ListSelectionModel");
+Clazz.declarePackage ("javajs.swing");
+Clazz.declareInterface (javajs.swing, "ListSelectionModel");
diff --git a/bin/javajs/swing/SwingConstants.js b/bin/javajs/swing/SwingConstants.js
index f10e094..2298d0a 100644
--- a/bin/javajs/swing/SwingConstants.js
+++ b/bin/javajs/swing/SwingConstants.js
@@ -1,6 +1,6 @@
-Clazz.declarePackage ("javajs.swing");
-c$ = Clazz.declareType (javajs.swing, "SwingConstants");
-Clazz.defineStatics (c$,
-"LEFT", 2,
-"CENTER", 0,
-"RIGHT", 4);
+Clazz.declarePackage ("javajs.swing");
+c$ = Clazz.declareType (javajs.swing, "SwingConstants");
+Clazz.defineStatics (c$,
+"LEFT", 2,
+"CENTER", 0,
+"RIGHT", 4);
diff --git a/bin/javajs/swing/TableCellRenderer.js b/bin/javajs/swing/TableCellRenderer.js
index 94b3f9f..6b1942e 100644
--- a/bin/javajs/swing/TableCellRenderer.js
+++ b/bin/javajs/swing/TableCellRenderer.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.declareInterface (javajs.swing, "TableCellRenderer");
+Clazz.declarePackage ("javajs.swing");
+Clazz.declareInterface (javajs.swing, "TableCellRenderer");
diff --git a/bin/javajs/swing/TableColumn.js b/bin/javajs/swing/TableColumn.js
index e2fa800..19d5394 100644
--- a/bin/javajs/swing/TableColumn.js
+++ b/bin/javajs/swing/TableColumn.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("javajs.swing");
-Clazz.declareInterface (javajs.swing, "TableColumn");
+Clazz.declarePackage ("javajs.swing");
+Clazz.declareInterface (javajs.swing, "TableColumn");
diff --git a/bin/javajs/util/A4.js b/bin/javajs/util/A4.js
index d3d3a66..b3f66b8 100644
--- a/bin/javajs/util/A4.js
+++ b/bin/javajs/util/A4.js
@@ -1,89 +1,89 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.JSONEncodable"], "javajs.util.A4", ["javajs.util.T3"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.x = 0;
-this.y = 0;
-this.z = 0;
-this.angle = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "A4", null, [javajs.api.JSONEncodable, java.io.Serializable]);
-Clazz.makeConstructor (c$,
-function () {
-this.z = 1.0;
-});
-c$.new4 = Clazz.defineMethod (c$, "new4",
-function (x, y, z, angle) {
-var a = new javajs.util.A4 ();
-a.set4 (x, y, z, angle);
-return a;
-}, "~N,~N,~N,~N");
-c$.newAA = Clazz.defineMethod (c$, "newAA",
-function (a1) {
-var a = new javajs.util.A4 ();
-a.set4 (a1.x, a1.y, a1.z, a1.angle);
-return a;
-}, "javajs.util.A4");
-c$.newVA = Clazz.defineMethod (c$, "newVA",
-function (axis, angle) {
-var a = new javajs.util.A4 ();
-a.setVA (axis, angle);
-return a;
-}, "javajs.util.V3,~N");
-Clazz.defineMethod (c$, "setVA",
-function (axis, angle) {
-this.x = axis.x;
-this.y = axis.y;
-this.z = axis.z;
-this.angle = angle;
-}, "javajs.util.V3,~N");
-Clazz.defineMethod (c$, "set4",
-function (x, y, z, angle) {
-this.x = x;
-this.y = y;
-this.z = z;
-this.angle = angle;
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "setAA",
-function (a) {
-this.x = a.x;
-this.y = a.y;
-this.z = a.z;
-this.angle = a.angle;
-}, "javajs.util.A4");
-Clazz.defineMethod (c$, "setM",
-function (m1) {
-this.setFromMat (m1.m00, m1.m01, m1.m02, m1.m10, m1.m11, m1.m12, m1.m20, m1.m21, m1.m22);
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "setFromMat",
-($fz = function (m00, m01, m02, m10, m11, m12, m20, m21, m22) {
-var cos = (m00 + m11 + m22 - 1.0) * 0.5;
-this.x = (m21 - m12);
-this.y = (m02 - m20);
-this.z = (m10 - m01);
-var sin = 0.5 * Math.sqrt (this.x * this.x + this.y * this.y + this.z * this.z);
-if (sin == 0 && cos == 1) {
-this.x = this.y = 0;
-this.z = 1;
-this.angle = 0;
-} else {
-this.angle = Math.atan2 (sin, cos);
-}}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-return javajs.util.T3.floatToIntBits0 (this.x) ^ javajs.util.T3.floatToIntBits0 (this.y) ^ javajs.util.T3.floatToIntBits0 (this.z) ^ javajs.util.T3.floatToIntBits0 (this.angle);
-});
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (!(Clazz.instanceOf (o, javajs.util.A4))) return false;
-var a1 = o;
-return this.x == a1.x && this.y == a1.y && this.z == a1.z && this.angle == a1.angle;
-}, "~O");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(" + this.x + ", " + this.y + ", " + this.z + ", " + this.angle + ")";
-});
-Clazz.overrideMethod (c$, "toJSON",
-function () {
-return "[" + this.x + "," + this.y + "," + this.z + "," + (this.angle * 180.0 / 3.141592653589793) + "]";
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.JSONEncodable"], "javajs.util.A4", ["javajs.util.T3"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.x = 0;
+this.y = 0;
+this.z = 0;
+this.angle = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "A4", null, [javajs.api.JSONEncodable, java.io.Serializable]);
+Clazz.makeConstructor (c$,
+function () {
+this.z = 1.0;
+});
+c$.new4 = Clazz.defineMethod (c$, "new4",
+function (x, y, z, angle) {
+var a = new javajs.util.A4 ();
+a.set4 (x, y, z, angle);
+return a;
+}, "~N,~N,~N,~N");
+c$.newAA = Clazz.defineMethod (c$, "newAA",
+function (a1) {
+var a = new javajs.util.A4 ();
+a.set4 (a1.x, a1.y, a1.z, a1.angle);
+return a;
+}, "javajs.util.A4");
+c$.newVA = Clazz.defineMethod (c$, "newVA",
+function (axis, angle) {
+var a = new javajs.util.A4 ();
+a.setVA (axis, angle);
+return a;
+}, "javajs.util.V3,~N");
+Clazz.defineMethod (c$, "setVA",
+function (axis, angle) {
+this.x = axis.x;
+this.y = axis.y;
+this.z = axis.z;
+this.angle = angle;
+}, "javajs.util.V3,~N");
+Clazz.defineMethod (c$, "set4",
+function (x, y, z, angle) {
+this.x = x;
+this.y = y;
+this.z = z;
+this.angle = angle;
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "setAA",
+function (a) {
+this.x = a.x;
+this.y = a.y;
+this.z = a.z;
+this.angle = a.angle;
+}, "javajs.util.A4");
+Clazz.defineMethod (c$, "setM",
+function (m1) {
+this.setFromMat (m1.m00, m1.m01, m1.m02, m1.m10, m1.m11, m1.m12, m1.m20, m1.m21, m1.m22);
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "setFromMat",
+($fz = function (m00, m01, m02, m10, m11, m12, m20, m21, m22) {
+var cos = (m00 + m11 + m22 - 1.0) * 0.5;
+this.x = (m21 - m12);
+this.y = (m02 - m20);
+this.z = (m10 - m01);
+var sin = 0.5 * Math.sqrt (this.x * this.x + this.y * this.y + this.z * this.z);
+if (sin == 0 && cos == 1) {
+this.x = this.y = 0;
+this.z = 1;
+this.angle = 0;
+} else {
+this.angle = Math.atan2 (sin, cos);
+}}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+return javajs.util.T3.floatToIntBits0 (this.x) ^ javajs.util.T3.floatToIntBits0 (this.y) ^ javajs.util.T3.floatToIntBits0 (this.z) ^ javajs.util.T3.floatToIntBits0 (this.angle);
+});
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (!(Clazz.instanceOf (o, javajs.util.A4))) return false;
+var a1 = o;
+return this.x == a1.x && this.y == a1.y && this.z == a1.z && this.angle == a1.angle;
+}, "~O");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(" + this.x + ", " + this.y + ", " + this.z + ", " + this.angle + ")";
+});
+Clazz.overrideMethod (c$, "toJSON",
+function () {
+return "[" + this.x + "," + this.y + "," + this.z + "," + (this.angle * 180.0 / 3.141592653589793) + "]";
+});
+});
diff --git a/bin/javajs/util/AU.js b/bin/javajs/util/AU.js
index f7f0201..080d17c 100644
--- a/bin/javajs/util/AU.js
+++ b/bin/javajs/util/AU.js
@@ -1,351 +1,351 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (null, "javajs.util.AU", ["java.util.Arrays", "javajs.util.Lst"], function () {
-c$ = Clazz.declareType (javajs.util, "AU");
-c$.ensureLength = Clazz.defineMethod (c$, "ensureLength",
-function (array, minimumLength) {
-if (array != null && javajs.util.AU.getLength (array) >= minimumLength) return array;
-return javajs.util.AU.arrayCopyObject (array, minimumLength);
-}, "~O,~N");
-c$.ensureLengthS = Clazz.defineMethod (c$, "ensureLengthS",
-function (array, minimumLength) {
-if (array != null && array.length >= minimumLength) return array;
-return javajs.util.AU.arrayCopyS (array, minimumLength);
-}, "~A,~N");
-c$.ensureLengthA = Clazz.defineMethod (c$, "ensureLengthA",
-function (array, minimumLength) {
-if (array != null && array.length >= minimumLength) return array;
-return javajs.util.AU.arrayCopyF (array, minimumLength);
-}, "~A,~N");
-c$.ensureLengthI = Clazz.defineMethod (c$, "ensureLengthI",
-function (array, minimumLength) {
-if (array != null && array.length >= minimumLength) return array;
-return javajs.util.AU.arrayCopyI (array, minimumLength);
-}, "~A,~N");
-c$.ensureLengthShort = Clazz.defineMethod (c$, "ensureLengthShort",
-function (array, minimumLength) {
-if (array != null && array.length >= minimumLength) return array;
-return javajs.util.AU.arrayCopyShort (array, minimumLength);
-}, "~A,~N");
-c$.ensureLengthByte = Clazz.defineMethod (c$, "ensureLengthByte",
-function (array, minimumLength) {
-if (array != null && array.length >= minimumLength) return array;
-return javajs.util.AU.arrayCopyByte (array, minimumLength);
-}, "~A,~N");
-c$.doubleLength = Clazz.defineMethod (c$, "doubleLength",
-function (array) {
-return javajs.util.AU.arrayCopyObject (array, (array == null ? 16 : 2 * javajs.util.AU.getLength (array)));
-}, "~O");
-c$.doubleLengthS = Clazz.defineMethod (c$, "doubleLengthS",
-function (array) {
-return javajs.util.AU.arrayCopyS (array, (array == null ? 16 : 2 * array.length));
-}, "~A");
-c$.doubleLengthF = Clazz.defineMethod (c$, "doubleLengthF",
-function (array) {
-return javajs.util.AU.arrayCopyF (array, (array == null ? 16 : 2 * array.length));
-}, "~A");
-c$.doubleLengthI = Clazz.defineMethod (c$, "doubleLengthI",
-function (array) {
-return javajs.util.AU.arrayCopyI (array, (array == null ? 16 : 2 * array.length));
-}, "~A");
-c$.doubleLengthShort = Clazz.defineMethod (c$, "doubleLengthShort",
-function (array) {
-return javajs.util.AU.arrayCopyShort (array, (array == null ? 16 : 2 * array.length));
-}, "~A");
-c$.doubleLengthByte = Clazz.defineMethod (c$, "doubleLengthByte",
-function (array) {
-return javajs.util.AU.arrayCopyByte (array, (array == null ? 16 : 2 * array.length));
-}, "~A");
-c$.doubleLengthBool = Clazz.defineMethod (c$, "doubleLengthBool",
-function (array) {
-return javajs.util.AU.arrayCopyBool (array, (array == null ? 16 : 2 * array.length));
-}, "~A");
-c$.deleteElements = Clazz.defineMethod (c$, "deleteElements",
-function (array, firstElement, nElements) {
-if (nElements == 0 || array == null) return array;
-var oldLength = javajs.util.AU.getLength (array);
-if (firstElement >= oldLength) return array;
-var n = oldLength - (firstElement + nElements);
-if (n < 0) n = 0;
-var t = javajs.util.AU.newInstanceO (array, firstElement + n);
-if (firstElement > 0) System.arraycopy (array, 0, t, 0, firstElement);
-if (n > 0) System.arraycopy (array, firstElement + nElements, t, firstElement, n);
-return t;
-}, "~O,~N,~N");
-c$.arrayCopyObject = Clazz.defineMethod (c$, "arrayCopyObject",
-function (array, newLength) {
-if (array == null) {
-return null;
-}var oldLength = javajs.util.AU.getLength (array);
-if (newLength == oldLength) return array;
-var t = javajs.util.AU.newInstanceO (array, newLength);
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-return t;
-}, "~O,~N");
-c$.newInstanceO = Clazz.defineMethod (c$, "newInstanceO",
-($fz = function (array, n) {
-{
-if (!array.getClass().getComponentType)
-return new Array(n);
-}}, $fz.isPrivate = true, $fz), "~O,~N");
-c$.getLength = Clazz.defineMethod (c$, "getLength",
-function (array) {
-{
-return array.length
-}}, "~O");
-c$.arrayCopyS = Clazz.defineMethod (c$, "arrayCopyS",
-function (array, newLength) {
-if (newLength < 0) newLength = array.length;
-var t = new Array (newLength);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.arrayCopyII = Clazz.defineMethod (c$, "arrayCopyII",
-function (array, newLength) {
-var t = javajs.util.AU.newInt2 (newLength);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.arrayCopyPt = Clazz.defineMethod (c$, "arrayCopyPt",
-function (array, newLength) {
-if (newLength < 0) newLength = array.length;
-var t = new Array (newLength);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.arrayCopyF = Clazz.defineMethod (c$, "arrayCopyF",
-function (array, newLength) {
-if (newLength < 0) newLength = array.length;
-var t = Clazz.newFloatArray (newLength, 0);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.arrayCopyI = Clazz.defineMethod (c$, "arrayCopyI",
-function (array, newLength) {
-if (newLength < 0) newLength = array.length;
-var t = Clazz.newIntArray (newLength, 0);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.arrayCopyRangeI = Clazz.defineMethod (c$, "arrayCopyRangeI",
-function (array, i0, n) {
-if (array == null) return null;
-var oldLength = array.length;
-if (n == -1) n = oldLength;
-if (n == -2) n = Clazz.doubleToInt (oldLength / 2);
-n = n - i0;
-var t = Clazz.newIntArray (n, 0);
-System.arraycopy (array, i0, t, 0, n);
-return t;
-}, "~A,~N,~N");
-c$.arrayCopyRangeRevI = Clazz.defineMethod (c$, "arrayCopyRangeRevI",
-function (array, i0, n) {
-if (array == null) return null;
-var t = javajs.util.AU.arrayCopyRangeI (array, i0, n);
-if (n < 0) n = array.length;
-for (var i = Clazz.doubleToInt (n / 2); --i >= 0; ) javajs.util.AU.swapInt (t, i, n - 1 - i);
-
-return t;
-}, "~A,~N,~N");
-c$.arrayCopyShort = Clazz.defineMethod (c$, "arrayCopyShort",
-function (array, newLength) {
-if (newLength < 0) newLength = array.length;
-var t = Clazz.newShortArray (newLength, 0);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.arrayCopyByte = Clazz.defineMethod (c$, "arrayCopyByte",
-function (array, newLength) {
-if (newLength < 0) newLength = array.length;
-var t = Clazz.newByteArray (newLength, 0);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.arrayCopyBool = Clazz.defineMethod (c$, "arrayCopyBool",
-function (array, newLength) {
-if (newLength < 0) newLength = array.length;
-var t = Clazz.newBooleanArray (newLength, false);
-if (array != null) {
-var oldLength = array.length;
-System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
-}return t;
-}, "~A,~N");
-c$.swapInt = Clazz.defineMethod (c$, "swapInt",
-function (array, indexA, indexB) {
-var t = array[indexA];
-array[indexA] = array[indexB];
-array[indexB] = t;
-}, "~A,~N,~N");
-c$.dumpArray = Clazz.defineMethod (c$, "dumpArray",
-function (msg, A, x1, x2, y1, y2) {
-var s = "dumpArray: " + msg + "\n";
-for (var x = x1; x <= x2; x++) s += "\t*" + x + "*";
-
-for (var y = y2; y >= y1; y--) {
-s += "\n*" + y + "*";
-for (var x = x1; x <= x2; x++) s += "\t" + (x < A.length && y < A[x].length ? A[x][y] : NaN);
-
-}
-return s;
-}, "~S,~A,~N,~N,~N,~N");
-c$.dumpIntArray = Clazz.defineMethod (c$, "dumpIntArray",
-function (A, n) {
-var str = "";
-for (var i = 0; i < n; i++) str += " " + A[i];
-
-return str;
-}, "~A,~N");
-c$.sortedItem = Clazz.defineMethod (c$, "sortedItem",
-function (v, n) {
-if (v.size () == 0) return null;
-if (v.size () == 1) return v.get (0);
-var keys = v.toArray ( new Array (v.size ()));
-java.util.Arrays.sort (keys);
-return keys[n % keys.length];
-}, "javajs.util.Lst,~N");
-c$.createArrayOfArrayList = Clazz.defineMethod (c$, "createArrayOfArrayList",
-function (size) {
-return new Array (size);
-}, "~N");
-c$.createArrayOfHashtable = Clazz.defineMethod (c$, "createArrayOfHashtable",
-function (size) {
-return new Array (size);
-}, "~N");
-c$.swap = Clazz.defineMethod (c$, "swap",
-function (o, i, j) {
-var oi = o[i];
-o[i] = o[j];
-o[j] = oi;
-}, "~A,~N,~N");
-c$.newFloat2 = Clazz.defineMethod (c$, "newFloat2",
-function (n) {
-{
-return Clazz.newArray(n, null);
-}}, "~N");
-c$.newInt2 = Clazz.defineMethod (c$, "newInt2",
-function (n) {
-{
-return Clazz.newArray(n, null);
-}}, "~N");
-c$.newInt3 = Clazz.defineMethod (c$, "newInt3",
-function (nx, ny) {
-{
-return Clazz.newArray(nx, null);
-}}, "~N,~N");
-c$.newFloat3 = Clazz.defineMethod (c$, "newFloat3",
-function (nx, ny) {
-{
-return Clazz.newArray(nx, null);
-}}, "~N,~N");
-c$.newInt4 = Clazz.defineMethod (c$, "newInt4",
-function (n) {
-{
-return Clazz.newArray(n, null);
-}}, "~N");
-c$.newShort2 = Clazz.defineMethod (c$, "newShort2",
-function (n) {
-{
-return Clazz.newArray(n, null);
-}}, "~N");
-c$.newByte2 = Clazz.defineMethod (c$, "newByte2",
-function (n) {
-{
-return Clazz.newArray(n, null);
-}}, "~N");
-c$.newDouble2 = Clazz.defineMethod (c$, "newDouble2",
-function (n) {
-{
-return Clazz.newArray(n, null);
-}}, "~N");
-c$.removeMapKeys = Clazz.defineMethod (c$, "removeMapKeys",
-function (map, root) {
-var list = new javajs.util.Lst ();
-for (var key, $key = map.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) if (key.startsWith (root)) list.addLast (key);
-
-for (var i = list.size (); --i >= 0; ) map.remove (list.get (i));
-
-return list.size ();
-}, "java.util.Map,~S");
-c$.isAS = Clazz.defineMethod (c$, "isAS",
-function (x) {
-{
-return Clazz.isAS(x);
-}}, "~O");
-c$.isASS = Clazz.defineMethod (c$, "isASS",
-function (x) {
-{
-return Clazz.isASS(x);
-}}, "~O");
-c$.isAP = Clazz.defineMethod (c$, "isAP",
-function (x) {
-{
-return Clazz.isAP(x);
-}}, "~O");
-c$.isAF = Clazz.defineMethod (c$, "isAF",
-function (x) {
-{
-return Clazz.isAF(x);
-}}, "~O");
-c$.isAFloat = Clazz.defineMethod (c$, "isAFloat",
-function (x) {
-{
-return Clazz.isAFloat(x);
-}}, "~O");
-c$.isAD = Clazz.defineMethod (c$, "isAD",
-function (x) {
-{
-return Clazz.isAF(x);
-}}, "~O");
-c$.isADD = Clazz.defineMethod (c$, "isADD",
-function (x) {
-{
-return Clazz.isAFF(x);
-}}, "~O");
-c$.isAB = Clazz.defineMethod (c$, "isAB",
-function (x) {
-{
-return Clazz.isAI(x);
-}}, "~O");
-c$.isAI = Clazz.defineMethod (c$, "isAI",
-function (x) {
-{
-return Clazz.isAI(x);
-}}, "~O");
-c$.isAII = Clazz.defineMethod (c$, "isAII",
-function (x) {
-{
-return Clazz.isAII(x);
-}}, "~O");
-c$.isAFF = Clazz.defineMethod (c$, "isAFF",
-function (x) {
-{
-return Clazz.isAFF(x);
-}}, "~O");
-c$.isAFFF = Clazz.defineMethod (c$, "isAFFF",
-function (x) {
-{
-return Clazz.isAFFF(x);
-}}, "~O");
-c$.ensureSignedBytes = Clazz.defineMethod (c$, "ensureSignedBytes",
-function (b) {
-{
-for (var i = b.length; --i >= 0;) {
-var j = b[i] & 0xFF;
-if (j >= 0x80) j -= 0x100;
-b[i] = j;
-}
-}}, "~A");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (null, "javajs.util.AU", ["java.util.Arrays", "javajs.util.Lst"], function () {
+c$ = Clazz.declareType (javajs.util, "AU");
+c$.ensureLength = Clazz.defineMethod (c$, "ensureLength",
+function (array, minimumLength) {
+if (array != null && javajs.util.AU.getLength (array) >= minimumLength) return array;
+return javajs.util.AU.arrayCopyObject (array, minimumLength);
+}, "~O,~N");
+c$.ensureLengthS = Clazz.defineMethod (c$, "ensureLengthS",
+function (array, minimumLength) {
+if (array != null && array.length >= minimumLength) return array;
+return javajs.util.AU.arrayCopyS (array, minimumLength);
+}, "~A,~N");
+c$.ensureLengthA = Clazz.defineMethod (c$, "ensureLengthA",
+function (array, minimumLength) {
+if (array != null && array.length >= minimumLength) return array;
+return javajs.util.AU.arrayCopyF (array, minimumLength);
+}, "~A,~N");
+c$.ensureLengthI = Clazz.defineMethod (c$, "ensureLengthI",
+function (array, minimumLength) {
+if (array != null && array.length >= minimumLength) return array;
+return javajs.util.AU.arrayCopyI (array, minimumLength);
+}, "~A,~N");
+c$.ensureLengthShort = Clazz.defineMethod (c$, "ensureLengthShort",
+function (array, minimumLength) {
+if (array != null && array.length >= minimumLength) return array;
+return javajs.util.AU.arrayCopyShort (array, minimumLength);
+}, "~A,~N");
+c$.ensureLengthByte = Clazz.defineMethod (c$, "ensureLengthByte",
+function (array, minimumLength) {
+if (array != null && array.length >= minimumLength) return array;
+return javajs.util.AU.arrayCopyByte (array, minimumLength);
+}, "~A,~N");
+c$.doubleLength = Clazz.defineMethod (c$, "doubleLength",
+function (array) {
+return javajs.util.AU.arrayCopyObject (array, (array == null ? 16 : 2 * javajs.util.AU.getLength (array)));
+}, "~O");
+c$.doubleLengthS = Clazz.defineMethod (c$, "doubleLengthS",
+function (array) {
+return javajs.util.AU.arrayCopyS (array, (array == null ? 16 : 2 * array.length));
+}, "~A");
+c$.doubleLengthF = Clazz.defineMethod (c$, "doubleLengthF",
+function (array) {
+return javajs.util.AU.arrayCopyF (array, (array == null ? 16 : 2 * array.length));
+}, "~A");
+c$.doubleLengthI = Clazz.defineMethod (c$, "doubleLengthI",
+function (array) {
+return javajs.util.AU.arrayCopyI (array, (array == null ? 16 : 2 * array.length));
+}, "~A");
+c$.doubleLengthShort = Clazz.defineMethod (c$, "doubleLengthShort",
+function (array) {
+return javajs.util.AU.arrayCopyShort (array, (array == null ? 16 : 2 * array.length));
+}, "~A");
+c$.doubleLengthByte = Clazz.defineMethod (c$, "doubleLengthByte",
+function (array) {
+return javajs.util.AU.arrayCopyByte (array, (array == null ? 16 : 2 * array.length));
+}, "~A");
+c$.doubleLengthBool = Clazz.defineMethod (c$, "doubleLengthBool",
+function (array) {
+return javajs.util.AU.arrayCopyBool (array, (array == null ? 16 : 2 * array.length));
+}, "~A");
+c$.deleteElements = Clazz.defineMethod (c$, "deleteElements",
+function (array, firstElement, nElements) {
+if (nElements == 0 || array == null) return array;
+var oldLength = javajs.util.AU.getLength (array);
+if (firstElement >= oldLength) return array;
+var n = oldLength - (firstElement + nElements);
+if (n < 0) n = 0;
+var t = javajs.util.AU.newInstanceO (array, firstElement + n);
+if (firstElement > 0) System.arraycopy (array, 0, t, 0, firstElement);
+if (n > 0) System.arraycopy (array, firstElement + nElements, t, firstElement, n);
+return t;
+}, "~O,~N,~N");
+c$.arrayCopyObject = Clazz.defineMethod (c$, "arrayCopyObject",
+function (array, newLength) {
+if (array == null) {
+return null;
+}var oldLength = javajs.util.AU.getLength (array);
+if (newLength == oldLength) return array;
+var t = javajs.util.AU.newInstanceO (array, newLength);
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+return t;
+}, "~O,~N");
+c$.newInstanceO = Clazz.defineMethod (c$, "newInstanceO",
+($fz = function (array, n) {
+{
+if (!array.getClass().getComponentType)
+return new Array(n);
+}}, $fz.isPrivate = true, $fz), "~O,~N");
+c$.getLength = Clazz.defineMethod (c$, "getLength",
+function (array) {
+{
+return array.length
+}}, "~O");
+c$.arrayCopyS = Clazz.defineMethod (c$, "arrayCopyS",
+function (array, newLength) {
+if (newLength < 0) newLength = array.length;
+var t = new Array (newLength);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.arrayCopyII = Clazz.defineMethod (c$, "arrayCopyII",
+function (array, newLength) {
+var t = javajs.util.AU.newInt2 (newLength);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.arrayCopyPt = Clazz.defineMethod (c$, "arrayCopyPt",
+function (array, newLength) {
+if (newLength < 0) newLength = array.length;
+var t = new Array (newLength);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.arrayCopyF = Clazz.defineMethod (c$, "arrayCopyF",
+function (array, newLength) {
+if (newLength < 0) newLength = array.length;
+var t = Clazz.newFloatArray (newLength, 0);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.arrayCopyI = Clazz.defineMethod (c$, "arrayCopyI",
+function (array, newLength) {
+if (newLength < 0) newLength = array.length;
+var t = Clazz.newIntArray (newLength, 0);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.arrayCopyRangeI = Clazz.defineMethod (c$, "arrayCopyRangeI",
+function (array, i0, n) {
+if (array == null) return null;
+var oldLength = array.length;
+if (n == -1) n = oldLength;
+if (n == -2) n = Clazz.doubleToInt (oldLength / 2);
+n = n - i0;
+var t = Clazz.newIntArray (n, 0);
+System.arraycopy (array, i0, t, 0, n);
+return t;
+}, "~A,~N,~N");
+c$.arrayCopyRangeRevI = Clazz.defineMethod (c$, "arrayCopyRangeRevI",
+function (array, i0, n) {
+if (array == null) return null;
+var t = javajs.util.AU.arrayCopyRangeI (array, i0, n);
+if (n < 0) n = array.length;
+for (var i = Clazz.doubleToInt (n / 2); --i >= 0; ) javajs.util.AU.swapInt (t, i, n - 1 - i);
+
+return t;
+}, "~A,~N,~N");
+c$.arrayCopyShort = Clazz.defineMethod (c$, "arrayCopyShort",
+function (array, newLength) {
+if (newLength < 0) newLength = array.length;
+var t = Clazz.newShortArray (newLength, 0);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.arrayCopyByte = Clazz.defineMethod (c$, "arrayCopyByte",
+function (array, newLength) {
+if (newLength < 0) newLength = array.length;
+var t = Clazz.newByteArray (newLength, 0);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.arrayCopyBool = Clazz.defineMethod (c$, "arrayCopyBool",
+function (array, newLength) {
+if (newLength < 0) newLength = array.length;
+var t = Clazz.newBooleanArray (newLength, false);
+if (array != null) {
+var oldLength = array.length;
+System.arraycopy (array, 0, t, 0, oldLength < newLength ? oldLength : newLength);
+}return t;
+}, "~A,~N");
+c$.swapInt = Clazz.defineMethod (c$, "swapInt",
+function (array, indexA, indexB) {
+var t = array[indexA];
+array[indexA] = array[indexB];
+array[indexB] = t;
+}, "~A,~N,~N");
+c$.dumpArray = Clazz.defineMethod (c$, "dumpArray",
+function (msg, A, x1, x2, y1, y2) {
+var s = "dumpArray: " + msg + "\n";
+for (var x = x1; x <= x2; x++) s += "\t*" + x + "*";
+
+for (var y = y2; y >= y1; y--) {
+s += "\n*" + y + "*";
+for (var x = x1; x <= x2; x++) s += "\t" + (x < A.length && y < A[x].length ? A[x][y] : NaN);
+
+}
+return s;
+}, "~S,~A,~N,~N,~N,~N");
+c$.dumpIntArray = Clazz.defineMethod (c$, "dumpIntArray",
+function (A, n) {
+var str = "";
+for (var i = 0; i < n; i++) str += " " + A[i];
+
+return str;
+}, "~A,~N");
+c$.sortedItem = Clazz.defineMethod (c$, "sortedItem",
+function (v, n) {
+if (v.size () == 0) return null;
+if (v.size () == 1) return v.get (0);
+var keys = v.toArray ( new Array (v.size ()));
+java.util.Arrays.sort (keys);
+return keys[n % keys.length];
+}, "javajs.util.Lst,~N");
+c$.createArrayOfArrayList = Clazz.defineMethod (c$, "createArrayOfArrayList",
+function (size) {
+return new Array (size);
+}, "~N");
+c$.createArrayOfHashtable = Clazz.defineMethod (c$, "createArrayOfHashtable",
+function (size) {
+return new Array (size);
+}, "~N");
+c$.swap = Clazz.defineMethod (c$, "swap",
+function (o, i, j) {
+var oi = o[i];
+o[i] = o[j];
+o[j] = oi;
+}, "~A,~N,~N");
+c$.newFloat2 = Clazz.defineMethod (c$, "newFloat2",
+function (n) {
+{
+return Clazz.newArray(n, null);
+}}, "~N");
+c$.newInt2 = Clazz.defineMethod (c$, "newInt2",
+function (n) {
+{
+return Clazz.newArray(n, null);
+}}, "~N");
+c$.newInt3 = Clazz.defineMethod (c$, "newInt3",
+function (nx, ny) {
+{
+return Clazz.newArray(nx, null);
+}}, "~N,~N");
+c$.newFloat3 = Clazz.defineMethod (c$, "newFloat3",
+function (nx, ny) {
+{
+return Clazz.newArray(nx, null);
+}}, "~N,~N");
+c$.newInt4 = Clazz.defineMethod (c$, "newInt4",
+function (n) {
+{
+return Clazz.newArray(n, null);
+}}, "~N");
+c$.newShort2 = Clazz.defineMethod (c$, "newShort2",
+function (n) {
+{
+return Clazz.newArray(n, null);
+}}, "~N");
+c$.newByte2 = Clazz.defineMethod (c$, "newByte2",
+function (n) {
+{
+return Clazz.newArray(n, null);
+}}, "~N");
+c$.newDouble2 = Clazz.defineMethod (c$, "newDouble2",
+function (n) {
+{
+return Clazz.newArray(n, null);
+}}, "~N");
+c$.removeMapKeys = Clazz.defineMethod (c$, "removeMapKeys",
+function (map, root) {
+var list = new javajs.util.Lst ();
+for (var key, $key = map.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) if (key.startsWith (root)) list.addLast (key);
+
+for (var i = list.size (); --i >= 0; ) map.remove (list.get (i));
+
+return list.size ();
+}, "java.util.Map,~S");
+c$.isAS = Clazz.defineMethod (c$, "isAS",
+function (x) {
+{
+return Clazz.isAS(x);
+}}, "~O");
+c$.isASS = Clazz.defineMethod (c$, "isASS",
+function (x) {
+{
+return Clazz.isASS(x);
+}}, "~O");
+c$.isAP = Clazz.defineMethod (c$, "isAP",
+function (x) {
+{
+return Clazz.isAP(x);
+}}, "~O");
+c$.isAF = Clazz.defineMethod (c$, "isAF",
+function (x) {
+{
+return Clazz.isAF(x);
+}}, "~O");
+c$.isAFloat = Clazz.defineMethod (c$, "isAFloat",
+function (x) {
+{
+return Clazz.isAFloat(x);
+}}, "~O");
+c$.isAD = Clazz.defineMethod (c$, "isAD",
+function (x) {
+{
+return Clazz.isAF(x);
+}}, "~O");
+c$.isADD = Clazz.defineMethod (c$, "isADD",
+function (x) {
+{
+return Clazz.isAFF(x);
+}}, "~O");
+c$.isAB = Clazz.defineMethod (c$, "isAB",
+function (x) {
+{
+return Clazz.isAI(x);
+}}, "~O");
+c$.isAI = Clazz.defineMethod (c$, "isAI",
+function (x) {
+{
+return Clazz.isAI(x);
+}}, "~O");
+c$.isAII = Clazz.defineMethod (c$, "isAII",
+function (x) {
+{
+return Clazz.isAII(x);
+}}, "~O");
+c$.isAFF = Clazz.defineMethod (c$, "isAFF",
+function (x) {
+{
+return Clazz.isAFF(x);
+}}, "~O");
+c$.isAFFF = Clazz.defineMethod (c$, "isAFFF",
+function (x) {
+{
+return Clazz.isAFFF(x);
+}}, "~O");
+c$.ensureSignedBytes = Clazz.defineMethod (c$, "ensureSignedBytes",
+function (b) {
+{
+for (var i = b.length; --i >= 0;) {
+var j = b[i] & 0xFF;
+if (j >= 0x80) j -= 0x100;
+b[i] = j;
+}
+}}, "~A");
+});
diff --git a/bin/javajs/util/AjaxURLConnection.js b/bin/javajs/util/AjaxURLConnection.js
index 41e35ef..50f227d 100644
--- a/bin/javajs/util/AjaxURLConnection.js
+++ b/bin/javajs/util/AjaxURLConnection.js
@@ -1,39 +1,39 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.net.URLConnection"], "javajs.util.AjaxURLConnection", ["javajs.util.AU", "$.Rdr", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.bytesOut = null;
-this.postOut = "";
-Clazz.instantialize (this, arguments);
-}, javajs.util, "AjaxURLConnection", java.net.URLConnection);
-Clazz.defineMethod (c$, "doAjax",
-($fz = function () {
-var jmol = null;
-{
-jmol = Jmol;
-}return jmol._doAjax (this.url, this.postOut, this.bytesOut);
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "connect",
-function () {
-});
-Clazz.defineMethod (c$, "outputBytes",
-function (bytes) {
-this.bytesOut = bytes;
-}, "~A");
-Clazz.defineMethod (c$, "outputString",
-function (post) {
-this.postOut = post;
-}, "~S");
-Clazz.overrideMethod (c$, "getInputStream",
-function () {
-var is = null;
-var o = this.doAjax ();
-if (javajs.util.AU.isAB (o)) is = javajs.util.Rdr.getBIS (o);
- else if (Clazz.instanceOf (o, javajs.util.SB)) is = javajs.util.Rdr.getBIS (javajs.util.Rdr.getBytesFromSB (o));
- else if (Clazz.instanceOf (o, String)) is = javajs.util.Rdr.getBIS ((o).getBytes ());
-return is;
-});
-Clazz.defineMethod (c$, "getContents",
-function () {
-return this.doAjax ();
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.net.URLConnection"], "javajs.util.AjaxURLConnection", ["javajs.util.AU", "$.Rdr", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.bytesOut = null;
+this.postOut = "";
+Clazz.instantialize (this, arguments);
+}, javajs.util, "AjaxURLConnection", java.net.URLConnection);
+Clazz.defineMethod (c$, "doAjax",
+($fz = function () {
+var jmol = null;
+{
+jmol = Jmol;
+}return jmol._doAjax (this.url, this.postOut, this.bytesOut);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "connect",
+function () {
+});
+Clazz.defineMethod (c$, "outputBytes",
+function (bytes) {
+this.bytesOut = bytes;
+}, "~A");
+Clazz.defineMethod (c$, "outputString",
+function (post) {
+this.postOut = post;
+}, "~S");
+Clazz.overrideMethod (c$, "getInputStream",
+function () {
+var is = null;
+var o = this.doAjax ();
+if (javajs.util.AU.isAB (o)) is = javajs.util.Rdr.getBIS (o);
+ else if (Clazz.instanceOf (o, javajs.util.SB)) is = javajs.util.Rdr.getBIS (javajs.util.Rdr.getBytesFromSB (o));
+ else if (Clazz.instanceOf (o, String)) is = javajs.util.Rdr.getBIS ((o).getBytes ());
+return is;
+});
+Clazz.defineMethod (c$, "getContents",
+function () {
+return this.doAjax ();
+});
+});
diff --git a/bin/javajs/util/AjaxURLStreamHandler.js b/bin/javajs/util/AjaxURLStreamHandler.js
index 600c417..59628d6 100644
--- a/bin/javajs/util/AjaxURLStreamHandler.js
+++ b/bin/javajs/util/AjaxURLStreamHandler.js
@@ -1,34 +1,34 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.net.URLStreamHandler"], "javajs.util.AjaxURLStreamHandler", ["javajs.util.AjaxURLConnection", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.protocol = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "AjaxURLStreamHandler", java.net.URLStreamHandler);
-Clazz.makeConstructor (c$,
-function (protocol) {
-Clazz.superConstructor (this, javajs.util.AjaxURLStreamHandler, []);
-this.protocol = protocol;
-}, "~S");
-Clazz.defineMethod (c$, "openConnection",
-function (url) {
-return new javajs.util.AjaxURLConnection (url);
-}, "java.net.URL");
-Clazz.overrideMethod (c$, "toExternalForm",
-function (u) {
-var result = new javajs.util.SB ();
-result.append (u.getProtocol ());
-result.append (":");
-if (u.getAuthority () != null && u.getAuthority ().length > 0) {
-result.append ("//");
-result.append (u.getAuthority ());
-}if (u.getPath () != null) {
-result.append (u.getPath ());
-}if (u.getQuery () != null) {
-result.append ("?");
-result.append (u.getQuery ());
-}if (u.getRef () != null) {
-result.append ("#");
-result.append (u.getRef ());
-}return result.toString ();
-}, "java.net.URL");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.net.URLStreamHandler"], "javajs.util.AjaxURLStreamHandler", ["javajs.util.AjaxURLConnection", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.protocol = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "AjaxURLStreamHandler", java.net.URLStreamHandler);
+Clazz.makeConstructor (c$,
+function (protocol) {
+Clazz.superConstructor (this, javajs.util.AjaxURLStreamHandler, []);
+this.protocol = protocol;
+}, "~S");
+Clazz.defineMethod (c$, "openConnection",
+function (url) {
+return new javajs.util.AjaxURLConnection (url);
+}, "java.net.URL");
+Clazz.overrideMethod (c$, "toExternalForm",
+function (u) {
+var result = new javajs.util.SB ();
+result.append (u.getProtocol ());
+result.append (":");
+if (u.getAuthority () != null && u.getAuthority ().length > 0) {
+result.append ("//");
+result.append (u.getAuthority ());
+}if (u.getPath () != null) {
+result.append (u.getPath ());
+}if (u.getQuery () != null) {
+result.append ("?");
+result.append (u.getQuery ());
+}if (u.getRef () != null) {
+result.append ("#");
+result.append (u.getRef ());
+}return result.toString ();
+}, "java.net.URL");
+});
diff --git a/bin/javajs/util/AjaxURLStreamHandlerFactory.js b/bin/javajs/util/AjaxURLStreamHandlerFactory.js
index 88452ce..e51bb4e 100644
--- a/bin/javajs/util/AjaxURLStreamHandlerFactory.js
+++ b/bin/javajs/util/AjaxURLStreamHandlerFactory.js
@@ -1,16 +1,16 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.net.URLStreamHandlerFactory", "java.util.Hashtable"], "javajs.util.AjaxURLStreamHandlerFactory", ["javajs.util.AjaxURLStreamHandler"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.htFactories = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "AjaxURLStreamHandlerFactory", null, java.net.URLStreamHandlerFactory);
-Clazz.prepareFields (c$, function () {
-this.htFactories = new java.util.Hashtable ();
-});
-Clazz.overrideMethod (c$, "createURLStreamHandler",
-function (protocol) {
-var fac = this.htFactories.get (protocol);
-if (fac == null) this.htFactories.put (protocol, fac = new javajs.util.AjaxURLStreamHandler (protocol));
-return (fac.protocol == null ? null : fac);
-}, "~S");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.net.URLStreamHandlerFactory", "java.util.Hashtable"], "javajs.util.AjaxURLStreamHandlerFactory", ["javajs.util.AjaxURLStreamHandler"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.htFactories = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "AjaxURLStreamHandlerFactory", null, java.net.URLStreamHandlerFactory);
+Clazz.prepareFields (c$, function () {
+this.htFactories = new java.util.Hashtable ();
+});
+Clazz.overrideMethod (c$, "createURLStreamHandler",
+function (protocol) {
+var fac = this.htFactories.get (protocol);
+if (fac == null) this.htFactories.put (protocol, fac = new javajs.util.AjaxURLStreamHandler (protocol));
+return (fac.protocol == null ? null : fac);
+}, "~S");
+});
diff --git a/bin/javajs/util/ArrayDataReader.js b/bin/javajs/util/ArrayDataReader.js
index 89f64c3..532e8a9 100644
--- a/bin/javajs/util/ArrayDataReader.js
+++ b/bin/javajs/util/ArrayDataReader.js
@@ -1,31 +1,31 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.DataReader"], "javajs.util.ArrayDataReader", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.data = null;
-this.pt = 0;
-this.len = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "ArrayDataReader", javajs.util.DataReader);
-Clazz.overrideMethod (c$, "setData",
-function (data) {
-this.data = data;
-this.len = this.data.length;
-return this;
-}, "~O");
-Clazz.defineMethod (c$, "read",
-function (buf, off, len) {
-return this.readBuf (buf, off, len);
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "readLine",
-function () {
-return (this.pt < this.len ? this.data[this.pt++] : null);
-});
-Clazz.defineMethod (c$, "mark",
-function (ptr) {
-this.ptMark = this.pt;
-}, "~N");
-Clazz.overrideMethod (c$, "reset",
-function () {
-this.pt = this.ptMark;
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.DataReader"], "javajs.util.ArrayDataReader", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.data = null;
+this.pt = 0;
+this.len = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "ArrayDataReader", javajs.util.DataReader);
+Clazz.overrideMethod (c$, "setData",
+function (data) {
+this.data = data;
+this.len = this.data.length;
+return this;
+}, "~O");
+Clazz.defineMethod (c$, "read",
+function (buf, off, len) {
+return this.readBuf (buf, off, len);
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "readLine",
+function () {
+return (this.pt < this.len ? this.data[this.pt++] : null);
+});
+Clazz.defineMethod (c$, "mark",
+function (ptr) {
+this.ptMark = this.pt;
+}, "~N");
+Clazz.overrideMethod (c$, "reset",
+function () {
+this.pt = this.ptMark;
+});
+});
diff --git a/bin/javajs/util/BArray.js b/bin/javajs/util/BArray.js
index 33ba55d..866e432 100644
--- a/bin/javajs/util/BArray.js
+++ b/bin/javajs/util/BArray.js
@@ -1,27 +1,27 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.decorateAsClass (function () {
-this.data = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "BArray");
-Clazz.makeConstructor (c$,
-function (data) {
-this.data = data;
-}, "~A");
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (Clazz.instanceOf (o, javajs.util.BArray)) {
-var d = (o).data;
-if (d.length == this.data.length) {
-for (var i = 0; i < d.length; i++) if (d[i] != this.data[i]) return false;
-
-return true;
-}}return false;
-}, "~O");
-Clazz.defineMethod (c$, "hashCode",
-function () {
-return this.data.hashCode ();
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return String.instantialize (this.data);
-});
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.decorateAsClass (function () {
+this.data = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "BArray");
+Clazz.makeConstructor (c$,
+function (data) {
+this.data = data;
+}, "~A");
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (Clazz.instanceOf (o, javajs.util.BArray)) {
+var d = (o).data;
+if (d.length == this.data.length) {
+for (var i = 0; i < d.length; i++) if (d[i] != this.data[i]) return false;
+
+return true;
+}}return false;
+}, "~O");
+Clazz.defineMethod (c$, "hashCode",
+function () {
+return this.data.hashCode ();
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return String.instantialize (this.data);
+});
diff --git a/bin/javajs/util/BC.js b/bin/javajs/util/BC.js
index ec20ff4..cc5ed5a 100644
--- a/bin/javajs/util/BC.js
+++ b/bin/javajs/util/BC.js
@@ -1,65 +1,65 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.declareType (javajs.util, "BC");
-Clazz.makeConstructor (c$,
-function () {
-});
-c$.bytesToFloat = Clazz.defineMethod (c$, "bytesToFloat",
-function (bytes, j, isBigEndian) {
-return javajs.util.BC.intToFloat (javajs.util.BC.bytesToInt (bytes, j, isBigEndian));
-}, "~A,~N,~B");
-c$.bytesToInt = Clazz.defineMethod (c$, "bytesToInt",
-function (bytes, j, isBigEndian) {
-var n = (isBigEndian ? (bytes[j + 3] & 0xff) | (bytes[j + 2] & 0xff) << 8 | (bytes[j + 1] & 0xff) << 16 | (bytes[j] & 0xff) << 24 : (bytes[j++] & 0xff) | (bytes[j++] & 0xff) << 8 | (bytes[j++] & 0xff) << 16 | (bytes[j++] & 0xff) << 24);
-{
-return (n > 0x7FFFFFFF ? n - 0x100000000 : n);
-}}, "~A,~N,~B");
-c$.intToFloat = Clazz.defineMethod (c$, "intToFloat",
-function (x) {
-{
-if (x == 0) return 0;
-var o = javajs.util.BC;
-if (o.fracIEEE == null)
-o.setFracIEEE();
-var m = ((x & 0x7F800000) >> 23);
-return ((x & 0x80000000) == 0 ? 1 : -1) * o.shiftIEEE((x & 0x7FFFFF) | 0x800000, m - 149);
-}}, "~N");
-c$.bytesToDoubleToFloat = Clazz.defineMethod (c$, "bytesToDoubleToFloat",
-function (bytes, j, isBigEndian) {
-{
-if (javajs.util.BC.fracIEEE == null) javajs.util.BC.setFracIEEE ();
-{
-var o = javajs.util.BC;
-var b1, b2, b3, b4, b5;
-if (isBigEndian) {
-b1 = bytes[j] & 0xFF;
-b2 = bytes[j + 1] & 0xFF;
-b3 = bytes[j + 2] & 0xFF;
-b4 = bytes[j + 3] & 0xFF;
-b5 = bytes[j + 4] & 0xFF;
-} else {
-b1 = bytes[j + 7] & 0xFF;
-b2 = bytes[j + 6] & 0xFF;
-b3 = bytes[j + 5] & 0xFF;
-b4 = bytes[j + 4] & 0xFF;
-b5 = bytes[j + 3] & 0xFF;
-}
-var s = ((b1 & 0x80) == 0 ? 1 : -1);
-var e = (((b1 & 0x7F) << 4) | (b2 >> 4)) - 1026;
-b2 = (b2 & 0xF) | 0x10;
-return s * (o.shiftIEEE(b2, e) + o.shiftIEEE(b3, e - 8) + o.shiftIEEE(b4, e - 16)
-+ o.shiftIEEE(b5, e - 24));
-}}}, "~A,~N,~B");
-c$.setFracIEEE = Clazz.defineMethod (c$, "setFracIEEE",
-($fz = function () {
-javajs.util.BC.fracIEEE = Clazz.newFloatArray (270, 0);
-for (var i = 0; i < 270; i++) javajs.util.BC.fracIEEE[i] = Math.pow (2, i - 141);
-
-}, $fz.isPrivate = true, $fz));
-c$.shiftIEEE = Clazz.defineMethod (c$, "shiftIEEE",
-function (f, i) {
-if (f == 0 || i < -140) return 0;
-if (i > 128) return 3.4028235E38;
-return f * javajs.util.BC.fracIEEE[i + 140];
-}, "~N,~N");
-Clazz.defineStatics (c$,
-"fracIEEE", null);
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.declareType (javajs.util, "BC");
+Clazz.makeConstructor (c$,
+function () {
+});
+c$.bytesToFloat = Clazz.defineMethod (c$, "bytesToFloat",
+function (bytes, j, isBigEndian) {
+return javajs.util.BC.intToFloat (javajs.util.BC.bytesToInt (bytes, j, isBigEndian));
+}, "~A,~N,~B");
+c$.bytesToInt = Clazz.defineMethod (c$, "bytesToInt",
+function (bytes, j, isBigEndian) {
+var n = (isBigEndian ? (bytes[j + 3] & 0xff) | (bytes[j + 2] & 0xff) << 8 | (bytes[j + 1] & 0xff) << 16 | (bytes[j] & 0xff) << 24 : (bytes[j++] & 0xff) | (bytes[j++] & 0xff) << 8 | (bytes[j++] & 0xff) << 16 | (bytes[j++] & 0xff) << 24);
+{
+return (n > 0x7FFFFFFF ? n - 0x100000000 : n);
+}}, "~A,~N,~B");
+c$.intToFloat = Clazz.defineMethod (c$, "intToFloat",
+function (x) {
+{
+if (x == 0) return 0;
+var o = javajs.util.BC;
+if (o.fracIEEE == null)
+o.setFracIEEE();
+var m = ((x & 0x7F800000) >> 23);
+return ((x & 0x80000000) == 0 ? 1 : -1) * o.shiftIEEE((x & 0x7FFFFF) | 0x800000, m - 149);
+}}, "~N");
+c$.bytesToDoubleToFloat = Clazz.defineMethod (c$, "bytesToDoubleToFloat",
+function (bytes, j, isBigEndian) {
+{
+if (javajs.util.BC.fracIEEE == null) javajs.util.BC.setFracIEEE ();
+{
+var o = javajs.util.BC;
+var b1, b2, b3, b4, b5;
+if (isBigEndian) {
+b1 = bytes[j] & 0xFF;
+b2 = bytes[j + 1] & 0xFF;
+b3 = bytes[j + 2] & 0xFF;
+b4 = bytes[j + 3] & 0xFF;
+b5 = bytes[j + 4] & 0xFF;
+} else {
+b1 = bytes[j + 7] & 0xFF;
+b2 = bytes[j + 6] & 0xFF;
+b3 = bytes[j + 5] & 0xFF;
+b4 = bytes[j + 4] & 0xFF;
+b5 = bytes[j + 3] & 0xFF;
+}
+var s = ((b1 & 0x80) == 0 ? 1 : -1);
+var e = (((b1 & 0x7F) << 4) | (b2 >> 4)) - 1026;
+b2 = (b2 & 0xF) | 0x10;
+return s * (o.shiftIEEE(b2, e) + o.shiftIEEE(b3, e - 8) + o.shiftIEEE(b4, e - 16)
++ o.shiftIEEE(b5, e - 24));
+}}}, "~A,~N,~B");
+c$.setFracIEEE = Clazz.defineMethod (c$, "setFracIEEE",
+($fz = function () {
+javajs.util.BC.fracIEEE = Clazz.newFloatArray (270, 0);
+for (var i = 0; i < 270; i++) javajs.util.BC.fracIEEE[i] = Math.pow (2, i - 141);
+
+}, $fz.isPrivate = true, $fz));
+c$.shiftIEEE = Clazz.defineMethod (c$, "shiftIEEE",
+function (f, i) {
+if (f == 0 || i < -140) return 0;
+if (i > 128) return 3.4028235E38;
+return f * javajs.util.BC.fracIEEE[i + 140];
+}, "~N,~N");
+Clazz.defineStatics (c$,
+"fracIEEE", null);
diff --git a/bin/javajs/util/BS.js b/bin/javajs/util/BS.js
index bc34911..5677631 100644
--- a/bin/javajs/util/BS.js
+++ b/bin/javajs/util/BS.js
@@ -1,357 +1,357 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.JSONEncodable"], "javajs.util.BS", ["java.lang.IndexOutOfBoundsException", "$.NegativeArraySizeException", "javajs.util.PT", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.words = null;
-this.wordsInUse = 0;
-this.sizeIsSticky = false;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "BS", null, [Cloneable, javajs.api.JSONEncodable]);
-c$.wordIndex = Clazz.defineMethod (c$, "wordIndex",
-($fz = function (bitIndex) {
-return bitIndex >> 5;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "recalculateWordsInUse",
-($fz = function () {
-var i;
-for (i = this.wordsInUse - 1; i >= 0; i--) if (this.words[i] != 0) break;
-
-this.wordsInUse = i + 1;
-}, $fz.isPrivate = true, $fz));
-Clazz.makeConstructor (c$,
-function () {
-this.initWords (32);
-this.sizeIsSticky = false;
-});
-c$.newN = Clazz.defineMethod (c$, "newN",
-function (nbits) {
-var bs = new javajs.util.BS ();
-bs.init (nbits);
-return bs;
-}, "~N");
-Clazz.defineMethod (c$, "init",
-($fz = function (nbits) {
-if (nbits < 0) throw new NegativeArraySizeException ("nbits < 0: " + nbits);
-this.initWords (nbits);
-this.sizeIsSticky = true;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "initWords",
-($fz = function (nbits) {
-this.words = Clazz.newIntArray (javajs.util.BS.wordIndex (nbits - 1) + 1, 0);
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "ensureCapacity",
-($fz = function (wordsRequired) {
-if (this.words.length < wordsRequired) {
-var request = Math.max (2 * this.words.length, wordsRequired);
-this.setLength (request);
-this.sizeIsSticky = false;
-}}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "expandTo",
-($fz = function (wordIndex) {
-var wordsRequired = wordIndex + 1;
-if (this.wordsInUse < wordsRequired) {
-this.ensureCapacity (wordsRequired);
-this.wordsInUse = wordsRequired;
-}}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "set",
-function (bitIndex) {
-if (bitIndex < 0) throw new IndexOutOfBoundsException ("bitIndex < 0: " + bitIndex);
-var wordIndex = javajs.util.BS.wordIndex (bitIndex);
-this.expandTo (wordIndex);
-this.words[wordIndex] |= (1 << bitIndex);
-}, "~N");
-Clazz.defineMethod (c$, "setBitTo",
-function (bitIndex, value) {
-if (value) this.set (bitIndex);
- else this.clear (bitIndex);
-}, "~N,~B");
-Clazz.defineMethod (c$, "setBits",
-function (fromIndex, toIndex) {
-if (fromIndex == toIndex) return;
-var startWordIndex = javajs.util.BS.wordIndex (fromIndex);
-var endWordIndex = javajs.util.BS.wordIndex (toIndex - 1);
-this.expandTo (endWordIndex);
-var firstWordMask = -1 << fromIndex;
-var lastWordMask = -1 >>> -toIndex;
-if (startWordIndex == endWordIndex) {
-this.words[startWordIndex] |= (firstWordMask & lastWordMask);
-} else {
-this.words[startWordIndex] |= firstWordMask;
-for (var i = startWordIndex + 1; i < endWordIndex; i++) this.words[i] = -1;
-
-this.words[endWordIndex] |= lastWordMask;
-}}, "~N,~N");
-Clazz.defineMethod (c$, "clear",
-function (bitIndex) {
-if (bitIndex < 0) throw new IndexOutOfBoundsException ("bitIndex < 0: " + bitIndex);
-var wordIndex = javajs.util.BS.wordIndex (bitIndex);
-if (wordIndex >= this.wordsInUse) return;
-this.words[wordIndex] &= ~(1 << bitIndex);
-this.recalculateWordsInUse ();
-}, "~N");
-Clazz.defineMethod (c$, "clearBits",
-function (fromIndex, toIndex) {
-if (fromIndex == toIndex) return;
-var startWordIndex = javajs.util.BS.wordIndex (fromIndex);
-if (startWordIndex >= this.wordsInUse) return;
-var endWordIndex = javajs.util.BS.wordIndex (toIndex - 1);
-if (endWordIndex >= this.wordsInUse) {
-toIndex = this.length ();
-endWordIndex = this.wordsInUse - 1;
-}var firstWordMask = -1 << fromIndex;
-var lastWordMask = -1 >>> -toIndex;
-if (startWordIndex == endWordIndex) {
-this.words[startWordIndex] &= ~(firstWordMask & lastWordMask);
-} else {
-this.words[startWordIndex] &= ~firstWordMask;
-for (var i = startWordIndex + 1; i < endWordIndex; i++) this.words[i] = 0;
-
-this.words[endWordIndex] &= ~lastWordMask;
-}this.recalculateWordsInUse ();
-}, "~N,~N");
-Clazz.defineMethod (c$, "clearAll",
-function () {
-while (this.wordsInUse > 0) this.words[--this.wordsInUse] = 0;
-
-});
-Clazz.defineMethod (c$, "get",
-function (bitIndex) {
-if (bitIndex < 0) throw new IndexOutOfBoundsException ("bitIndex < 0: " + bitIndex);
-var wordIndex = javajs.util.BS.wordIndex (bitIndex);
-return (wordIndex < this.wordsInUse) && ((this.words[wordIndex] & (1 << bitIndex)) != 0);
-}, "~N");
-Clazz.defineMethod (c$, "nextSetBit",
-function (fromIndex) {
-if (fromIndex < 0) throw new IndexOutOfBoundsException ("fromIndex < 0: " + fromIndex);
-var u = javajs.util.BS.wordIndex (fromIndex);
-if (u >= this.wordsInUse) return -1;
-var word = this.words[u] & (-1 << fromIndex);
-while (true) {
-if (word != 0) return (u * 32) + Integer.numberOfTrailingZeros (word);
-if (++u == this.wordsInUse) return -1;
-word = this.words[u];
-}
-}, "~N");
-Clazz.defineMethod (c$, "nextClearBit",
-function (fromIndex) {
-if (fromIndex < 0) throw new IndexOutOfBoundsException ("fromIndex < 0: " + fromIndex);
-var u = javajs.util.BS.wordIndex (fromIndex);
-if (u >= this.wordsInUse) return fromIndex;
-var word = ~this.words[u] & (-1 << fromIndex);
-while (true) {
-if (word != 0) return (u * 32) + Integer.numberOfTrailingZeros (word);
-if (++u == this.wordsInUse) return this.wordsInUse * 32;
-word = ~this.words[u];
-}
-}, "~N");
-Clazz.defineMethod (c$, "length",
-function () {
-if (this.wordsInUse == 0) return 0;
-return 32 * (this.wordsInUse - 1) + (32 - Integer.numberOfLeadingZeros (this.words[this.wordsInUse - 1]));
-});
-Clazz.defineMethod (c$, "isEmpty",
-function () {
-return this.wordsInUse == 0;
-});
-Clazz.defineMethod (c$, "intersects",
-function (set) {
-for (var i = Math.min (this.wordsInUse, set.wordsInUse) - 1; i >= 0; i--) if ((this.words[i] & set.words[i]) != 0) return true;
-
-return false;
-}, "javajs.util.BS");
-Clazz.defineMethod (c$, "cardinality",
-function () {
-var sum = 0;
-for (var i = 0; i < this.wordsInUse; i++) sum += Integer.bitCount (this.words[i]);
-
-return sum;
-});
-Clazz.defineMethod (c$, "and",
-function (set) {
-if (this === set) return;
-while (this.wordsInUse > set.wordsInUse) this.words[--this.wordsInUse] = 0;
-
-for (var i = 0; i < this.wordsInUse; i++) this.words[i] &= set.words[i];
-
-this.recalculateWordsInUse ();
-}, "javajs.util.BS");
-Clazz.defineMethod (c$, "or",
-function (set) {
-if (this === set) return;
-var wordsInCommon = Math.min (this.wordsInUse, set.wordsInUse);
-if (this.wordsInUse < set.wordsInUse) {
-this.ensureCapacity (set.wordsInUse);
-this.wordsInUse = set.wordsInUse;
-}for (var i = 0; i < wordsInCommon; i++) this.words[i] |= set.words[i];
-
-if (wordsInCommon < set.wordsInUse) System.arraycopy (set.words, wordsInCommon, this.words, wordsInCommon, this.wordsInUse - wordsInCommon);
-}, "javajs.util.BS");
-Clazz.defineMethod (c$, "xor",
-function (set) {
-var wordsInCommon = Math.min (this.wordsInUse, set.wordsInUse);
-if (this.wordsInUse < set.wordsInUse) {
-this.ensureCapacity (set.wordsInUse);
-this.wordsInUse = set.wordsInUse;
-}for (var i = 0; i < wordsInCommon; i++) this.words[i] ^= set.words[i];
-
-if (wordsInCommon < set.wordsInUse) System.arraycopy (set.words, wordsInCommon, this.words, wordsInCommon, set.wordsInUse - wordsInCommon);
-this.recalculateWordsInUse ();
-}, "javajs.util.BS");
-Clazz.defineMethod (c$, "andNot",
-function (set) {
-for (var i = Math.min (this.wordsInUse, set.wordsInUse) - 1; i >= 0; i--) this.words[i] &= ~set.words[i];
-
-this.recalculateWordsInUse ();
-}, "javajs.util.BS");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-var h = 1234;
-for (var i = this.wordsInUse; --i >= 0; ) h ^= this.words[i] * (i + 1);
-
-return ((h >> 32) ^ h);
-});
-Clazz.defineMethod (c$, "size",
-function () {
-return this.words.length * 32;
-});
-Clazz.overrideMethod (c$, "equals",
-function (obj) {
-if (!(Clazz.instanceOf (obj, javajs.util.BS))) return false;
-if (this === obj) return true;
-var set = obj;
-if (this.wordsInUse != set.wordsInUse) return false;
-for (var i = 0; i < this.wordsInUse; i++) if (this.words[i] != set.words[i]) return false;
-
-return true;
-}, "~O");
-Clazz.overrideMethod (c$, "clone",
-function () {
-if (!this.sizeIsSticky && this.wordsInUse != this.words.length) this.setLength (this.wordsInUse);
-return javajs.util.BS.copy (this);
-});
-Clazz.defineMethod (c$, "setLength",
-($fz = function (n) {
-var a = Clazz.newIntArray (n, 0);
-System.arraycopy (this.words, 0, a, 0, Math.min (this.wordsInUse, n));
-this.words = a;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return javajs.util.BS.escape (this, '{', '}');
-});
-c$.copy = Clazz.defineMethod (c$, "copy",
-function (bitsetToCopy) {
-var bs;
-{
-bs = Clazz.clone(bitsetToCopy);
-}var wordCount = bitsetToCopy.wordsInUse;
-if (wordCount == 0) {
-bs.words = javajs.util.BS.emptyBitmap;
-} else {
-bs.words = Clazz.newIntArray (bs.wordsInUse = wordCount, 0);
-System.arraycopy (bitsetToCopy.words, 0, bs.words, 0, wordCount);
-}return bs;
-}, "javajs.util.BS");
-Clazz.defineMethod (c$, "cardinalityN",
-function (max) {
-var n = this.cardinality ();
-for (var i = this.length (); --i >= max; ) if (this.get (i)) n--;
-
-return n;
-}, "~N");
-Clazz.overrideMethod (c$, "toJSON",
-function () {
-var numBits = (this.wordsInUse > 128) ? this.cardinality () : this.wordsInUse * 32;
-var b = javajs.util.SB.newN (6 * numBits + 2);
-b.appendC ('[');
-var i = this.nextSetBit (0);
-if (i != -1) {
-b.appendI (i);
-for (i = this.nextSetBit (i + 1); i >= 0; i = this.nextSetBit (i + 1)) {
-var endOfRun = this.nextClearBit (i);
-do {
-b.append (", ").appendI (i);
-} while (++i < endOfRun);
-}
-}b.appendC (']');
-return b.toString ();
-});
-c$.escape = Clazz.defineMethod (c$, "escape",
-function (bs, chOpen, chClose) {
-if (bs == null) return chOpen + "{}" + chClose;
-var s = new javajs.util.SB ();
-s.append (chOpen + "{");
-var imax = bs.length ();
-var iLast = -1;
-var iFirst = -2;
-var i = -1;
-while (++i <= imax) {
-var isSet = bs.get (i);
-if (i == imax || iLast >= 0 && !isSet) {
-if (iLast >= 0 && iFirst != iLast) s.append ((iFirst == iLast - 1 ? " " : ":") + iLast);
-if (i == imax) break;
-iLast = -1;
-}if (bs.get (i)) {
-if (iLast < 0) {
-s.append ((iFirst == -2 ? "" : " ") + i);
-iFirst = i;
-}iLast = i;
-}}
-s.append ("}").appendC (chClose);
-return s.toString ();
-}, "javajs.util.BS,~S,~S");
-c$.unescape = Clazz.defineMethod (c$, "unescape",
-function (str) {
-var ch;
-var len;
-if (str == null || (len = (str = str.trim ()).length) < 4 || str.equalsIgnoreCase ("({null})") || (ch = str.charAt (0)) != '(' && ch != '[' || str.charAt (len - 1) != (ch == '(' ? ')' : ']') || str.charAt (1) != '{' || str.indexOf ('}') != len - 2) return null;
-len -= 2;
-for (var i = len; --i >= 2; ) if (!javajs.util.PT.isDigit (ch = str.charAt (i)) && ch != ' ' && ch != '\t' && ch != ':') return null;
-
-var lastN = len;
-while (javajs.util.PT.isDigit (str.charAt (--lastN))) {
-}
-if (++lastN == len) lastN = 0;
- else try {
-lastN = Integer.parseInt (str.substring (lastN, len));
-} catch (e) {
-if (Clazz.exceptionOf (e, NumberFormatException)) {
-return null;
-} else {
-throw e;
-}
-}
-var bs = javajs.util.BS.newN (lastN);
-lastN = -1;
-var iPrev = -1;
-var iThis = -2;
-for (var i = 2; i <= len; i++) {
-switch (ch = str.charAt (i)) {
-case '\t':
-case ' ':
-case '}':
-if (iThis < 0) break;
-if (iThis < lastN) return null;
-lastN = iThis;
-if (iPrev < 0) iPrev = iThis;
-bs.setBits (iPrev, iThis + 1);
-iPrev = -1;
-iThis = -2;
-break;
-case ':':
-iPrev = lastN = iThis;
-iThis = -2;
-break;
-default:
-if (javajs.util.PT.isDigit (ch)) {
-if (iThis < 0) iThis = 0;
-iThis = (iThis * 10) + (ch.charCodeAt (0) - 48);
-}}
-}
-return (iPrev >= 0 ? null : bs);
-}, "~S");
-Clazz.defineStatics (c$,
-"ADDRESS_BITS_PER_WORD", 5,
-"BITS_PER_WORD", 32,
-"WORD_MASK", 0xffffffff,
-"emptyBitmap", Clazz.newIntArray (0, 0));
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.JSONEncodable"], "javajs.util.BS", ["java.lang.IndexOutOfBoundsException", "$.NegativeArraySizeException", "javajs.util.PT", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.words = null;
+this.wordsInUse = 0;
+this.sizeIsSticky = false;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "BS", null, [Cloneable, javajs.api.JSONEncodable]);
+c$.wordIndex = Clazz.defineMethod (c$, "wordIndex",
+($fz = function (bitIndex) {
+return bitIndex >> 5;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "recalculateWordsInUse",
+($fz = function () {
+var i;
+for (i = this.wordsInUse - 1; i >= 0; i--) if (this.words[i] != 0) break;
+
+this.wordsInUse = i + 1;
+}, $fz.isPrivate = true, $fz));
+Clazz.makeConstructor (c$,
+function () {
+this.initWords (32);
+this.sizeIsSticky = false;
+});
+c$.newN = Clazz.defineMethod (c$, "newN",
+function (nbits) {
+var bs = new javajs.util.BS ();
+bs.init (nbits);
+return bs;
+}, "~N");
+Clazz.defineMethod (c$, "init",
+($fz = function (nbits) {
+if (nbits < 0) throw new NegativeArraySizeException ("nbits < 0: " + nbits);
+this.initWords (nbits);
+this.sizeIsSticky = true;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "initWords",
+($fz = function (nbits) {
+this.words = Clazz.newIntArray (javajs.util.BS.wordIndex (nbits - 1) + 1, 0);
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "ensureCapacity",
+($fz = function (wordsRequired) {
+if (this.words.length < wordsRequired) {
+var request = Math.max (2 * this.words.length, wordsRequired);
+this.setLength (request);
+this.sizeIsSticky = false;
+}}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "expandTo",
+($fz = function (wordIndex) {
+var wordsRequired = wordIndex + 1;
+if (this.wordsInUse < wordsRequired) {
+this.ensureCapacity (wordsRequired);
+this.wordsInUse = wordsRequired;
+}}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "set",
+function (bitIndex) {
+if (bitIndex < 0) throw new IndexOutOfBoundsException ("bitIndex < 0: " + bitIndex);
+var wordIndex = javajs.util.BS.wordIndex (bitIndex);
+this.expandTo (wordIndex);
+this.words[wordIndex] |= (1 << bitIndex);
+}, "~N");
+Clazz.defineMethod (c$, "setBitTo",
+function (bitIndex, value) {
+if (value) this.set (bitIndex);
+ else this.clear (bitIndex);
+}, "~N,~B");
+Clazz.defineMethod (c$, "setBits",
+function (fromIndex, toIndex) {
+if (fromIndex == toIndex) return;
+var startWordIndex = javajs.util.BS.wordIndex (fromIndex);
+var endWordIndex = javajs.util.BS.wordIndex (toIndex - 1);
+this.expandTo (endWordIndex);
+var firstWordMask = -1 << fromIndex;
+var lastWordMask = -1 >>> -toIndex;
+if (startWordIndex == endWordIndex) {
+this.words[startWordIndex] |= (firstWordMask & lastWordMask);
+} else {
+this.words[startWordIndex] |= firstWordMask;
+for (var i = startWordIndex + 1; i < endWordIndex; i++) this.words[i] = -1;
+
+this.words[endWordIndex] |= lastWordMask;
+}}, "~N,~N");
+Clazz.defineMethod (c$, "clear",
+function (bitIndex) {
+if (bitIndex < 0) throw new IndexOutOfBoundsException ("bitIndex < 0: " + bitIndex);
+var wordIndex = javajs.util.BS.wordIndex (bitIndex);
+if (wordIndex >= this.wordsInUse) return;
+this.words[wordIndex] &= ~(1 << bitIndex);
+this.recalculateWordsInUse ();
+}, "~N");
+Clazz.defineMethod (c$, "clearBits",
+function (fromIndex, toIndex) {
+if (fromIndex == toIndex) return;
+var startWordIndex = javajs.util.BS.wordIndex (fromIndex);
+if (startWordIndex >= this.wordsInUse) return;
+var endWordIndex = javajs.util.BS.wordIndex (toIndex - 1);
+if (endWordIndex >= this.wordsInUse) {
+toIndex = this.length ();
+endWordIndex = this.wordsInUse - 1;
+}var firstWordMask = -1 << fromIndex;
+var lastWordMask = -1 >>> -toIndex;
+if (startWordIndex == endWordIndex) {
+this.words[startWordIndex] &= ~(firstWordMask & lastWordMask);
+} else {
+this.words[startWordIndex] &= ~firstWordMask;
+for (var i = startWordIndex + 1; i < endWordIndex; i++) this.words[i] = 0;
+
+this.words[endWordIndex] &= ~lastWordMask;
+}this.recalculateWordsInUse ();
+}, "~N,~N");
+Clazz.defineMethod (c$, "clearAll",
+function () {
+while (this.wordsInUse > 0) this.words[--this.wordsInUse] = 0;
+
+});
+Clazz.defineMethod (c$, "get",
+function (bitIndex) {
+if (bitIndex < 0) throw new IndexOutOfBoundsException ("bitIndex < 0: " + bitIndex);
+var wordIndex = javajs.util.BS.wordIndex (bitIndex);
+return (wordIndex < this.wordsInUse) && ((this.words[wordIndex] & (1 << bitIndex)) != 0);
+}, "~N");
+Clazz.defineMethod (c$, "nextSetBit",
+function (fromIndex) {
+if (fromIndex < 0) throw new IndexOutOfBoundsException ("fromIndex < 0: " + fromIndex);
+var u = javajs.util.BS.wordIndex (fromIndex);
+if (u >= this.wordsInUse) return -1;
+var word = this.words[u] & (-1 << fromIndex);
+while (true) {
+if (word != 0) return (u * 32) + Integer.numberOfTrailingZeros (word);
+if (++u == this.wordsInUse) return -1;
+word = this.words[u];
+}
+}, "~N");
+Clazz.defineMethod (c$, "nextClearBit",
+function (fromIndex) {
+if (fromIndex < 0) throw new IndexOutOfBoundsException ("fromIndex < 0: " + fromIndex);
+var u = javajs.util.BS.wordIndex (fromIndex);
+if (u >= this.wordsInUse) return fromIndex;
+var word = ~this.words[u] & (-1 << fromIndex);
+while (true) {
+if (word != 0) return (u * 32) + Integer.numberOfTrailingZeros (word);
+if (++u == this.wordsInUse) return this.wordsInUse * 32;
+word = ~this.words[u];
+}
+}, "~N");
+Clazz.defineMethod (c$, "length",
+function () {
+if (this.wordsInUse == 0) return 0;
+return 32 * (this.wordsInUse - 1) + (32 - Integer.numberOfLeadingZeros (this.words[this.wordsInUse - 1]));
+});
+Clazz.defineMethod (c$, "isEmpty",
+function () {
+return this.wordsInUse == 0;
+});
+Clazz.defineMethod (c$, "intersects",
+function (set) {
+for (var i = Math.min (this.wordsInUse, set.wordsInUse) - 1; i >= 0; i--) if ((this.words[i] & set.words[i]) != 0) return true;
+
+return false;
+}, "javajs.util.BS");
+Clazz.defineMethod (c$, "cardinality",
+function () {
+var sum = 0;
+for (var i = 0; i < this.wordsInUse; i++) sum += Integer.bitCount (this.words[i]);
+
+return sum;
+});
+Clazz.defineMethod (c$, "and",
+function (set) {
+if (this === set) return;
+while (this.wordsInUse > set.wordsInUse) this.words[--this.wordsInUse] = 0;
+
+for (var i = 0; i < this.wordsInUse; i++) this.words[i] &= set.words[i];
+
+this.recalculateWordsInUse ();
+}, "javajs.util.BS");
+Clazz.defineMethod (c$, "or",
+function (set) {
+if (this === set) return;
+var wordsInCommon = Math.min (this.wordsInUse, set.wordsInUse);
+if (this.wordsInUse < set.wordsInUse) {
+this.ensureCapacity (set.wordsInUse);
+this.wordsInUse = set.wordsInUse;
+}for (var i = 0; i < wordsInCommon; i++) this.words[i] |= set.words[i];
+
+if (wordsInCommon < set.wordsInUse) System.arraycopy (set.words, wordsInCommon, this.words, wordsInCommon, this.wordsInUse - wordsInCommon);
+}, "javajs.util.BS");
+Clazz.defineMethod (c$, "xor",
+function (set) {
+var wordsInCommon = Math.min (this.wordsInUse, set.wordsInUse);
+if (this.wordsInUse < set.wordsInUse) {
+this.ensureCapacity (set.wordsInUse);
+this.wordsInUse = set.wordsInUse;
+}for (var i = 0; i < wordsInCommon; i++) this.words[i] ^= set.words[i];
+
+if (wordsInCommon < set.wordsInUse) System.arraycopy (set.words, wordsInCommon, this.words, wordsInCommon, set.wordsInUse - wordsInCommon);
+this.recalculateWordsInUse ();
+}, "javajs.util.BS");
+Clazz.defineMethod (c$, "andNot",
+function (set) {
+for (var i = Math.min (this.wordsInUse, set.wordsInUse) - 1; i >= 0; i--) this.words[i] &= ~set.words[i];
+
+this.recalculateWordsInUse ();
+}, "javajs.util.BS");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+var h = 1234;
+for (var i = this.wordsInUse; --i >= 0; ) h ^= this.words[i] * (i + 1);
+
+return ((h >> 32) ^ h);
+});
+Clazz.defineMethod (c$, "size",
+function () {
+return this.words.length * 32;
+});
+Clazz.overrideMethod (c$, "equals",
+function (obj) {
+if (!(Clazz.instanceOf (obj, javajs.util.BS))) return false;
+if (this === obj) return true;
+var set = obj;
+if (this.wordsInUse != set.wordsInUse) return false;
+for (var i = 0; i < this.wordsInUse; i++) if (this.words[i] != set.words[i]) return false;
+
+return true;
+}, "~O");
+Clazz.overrideMethod (c$, "clone",
+function () {
+if (!this.sizeIsSticky && this.wordsInUse != this.words.length) this.setLength (this.wordsInUse);
+return javajs.util.BS.copy (this);
+});
+Clazz.defineMethod (c$, "setLength",
+($fz = function (n) {
+var a = Clazz.newIntArray (n, 0);
+System.arraycopy (this.words, 0, a, 0, Math.min (this.wordsInUse, n));
+this.words = a;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return javajs.util.BS.escape (this, '{', '}');
+});
+c$.copy = Clazz.defineMethod (c$, "copy",
+function (bitsetToCopy) {
+var bs;
+{
+bs = Clazz.clone(bitsetToCopy);
+}var wordCount = bitsetToCopy.wordsInUse;
+if (wordCount == 0) {
+bs.words = javajs.util.BS.emptyBitmap;
+} else {
+bs.words = Clazz.newIntArray (bs.wordsInUse = wordCount, 0);
+System.arraycopy (bitsetToCopy.words, 0, bs.words, 0, wordCount);
+}return bs;
+}, "javajs.util.BS");
+Clazz.defineMethod (c$, "cardinalityN",
+function (max) {
+var n = this.cardinality ();
+for (var i = this.length (); --i >= max; ) if (this.get (i)) n--;
+
+return n;
+}, "~N");
+Clazz.overrideMethod (c$, "toJSON",
+function () {
+var numBits = (this.wordsInUse > 128) ? this.cardinality () : this.wordsInUse * 32;
+var b = javajs.util.SB.newN (6 * numBits + 2);
+b.appendC ('[');
+var i = this.nextSetBit (0);
+if (i != -1) {
+b.appendI (i);
+for (i = this.nextSetBit (i + 1); i >= 0; i = this.nextSetBit (i + 1)) {
+var endOfRun = this.nextClearBit (i);
+do {
+b.append (", ").appendI (i);
+} while (++i < endOfRun);
+}
+}b.appendC (']');
+return b.toString ();
+});
+c$.escape = Clazz.defineMethod (c$, "escape",
+function (bs, chOpen, chClose) {
+if (bs == null) return chOpen + "{}" + chClose;
+var s = new javajs.util.SB ();
+s.append (chOpen + "{");
+var imax = bs.length ();
+var iLast = -1;
+var iFirst = -2;
+var i = -1;
+while (++i <= imax) {
+var isSet = bs.get (i);
+if (i == imax || iLast >= 0 && !isSet) {
+if (iLast >= 0 && iFirst != iLast) s.append ((iFirst == iLast - 1 ? " " : ":") + iLast);
+if (i == imax) break;
+iLast = -1;
+}if (bs.get (i)) {
+if (iLast < 0) {
+s.append ((iFirst == -2 ? "" : " ") + i);
+iFirst = i;
+}iLast = i;
+}}
+s.append ("}").appendC (chClose);
+return s.toString ();
+}, "javajs.util.BS,~S,~S");
+c$.unescape = Clazz.defineMethod (c$, "unescape",
+function (str) {
+var ch;
+var len;
+if (str == null || (len = (str = str.trim ()).length) < 4 || str.equalsIgnoreCase ("({null})") || (ch = str.charAt (0)) != '(' && ch != '[' || str.charAt (len - 1) != (ch == '(' ? ')' : ']') || str.charAt (1) != '{' || str.indexOf ('}') != len - 2) return null;
+len -= 2;
+for (var i = len; --i >= 2; ) if (!javajs.util.PT.isDigit (ch = str.charAt (i)) && ch != ' ' && ch != '\t' && ch != ':') return null;
+
+var lastN = len;
+while (javajs.util.PT.isDigit (str.charAt (--lastN))) {
+}
+if (++lastN == len) lastN = 0;
+ else try {
+lastN = Integer.parseInt (str.substring (lastN, len));
+} catch (e) {
+if (Clazz.exceptionOf (e, NumberFormatException)) {
+return null;
+} else {
+throw e;
+}
+}
+var bs = javajs.util.BS.newN (lastN);
+lastN = -1;
+var iPrev = -1;
+var iThis = -2;
+for (var i = 2; i <= len; i++) {
+switch (ch = str.charAt (i)) {
+case '\t':
+case ' ':
+case '}':
+if (iThis < 0) break;
+if (iThis < lastN) return null;
+lastN = iThis;
+if (iPrev < 0) iPrev = iThis;
+bs.setBits (iPrev, iThis + 1);
+iPrev = -1;
+iThis = -2;
+break;
+case ':':
+iPrev = lastN = iThis;
+iThis = -2;
+break;
+default:
+if (javajs.util.PT.isDigit (ch)) {
+if (iThis < 0) iThis = 0;
+iThis = (iThis * 10) + (ch.charCodeAt (0) - 48);
+}}
+}
+return (iPrev >= 0 ? null : bs);
+}, "~S");
+Clazz.defineStatics (c$,
+"ADDRESS_BITS_PER_WORD", 5,
+"BITS_PER_WORD", 32,
+"WORD_MASK", 0xffffffff,
+"emptyBitmap", Clazz.newIntArray (0, 0));
+});
diff --git a/bin/javajs/util/Base64.js b/bin/javajs/util/Base64.js
index 15f1a5f..e513e54 100644
--- a/bin/javajs/util/Base64.js
+++ b/bin/javajs/util/Base64.js
@@ -1,54 +1,54 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (null, "javajs.util.Base64", ["javajs.util.SB"], function () {
-c$ = Clazz.declareType (javajs.util, "Base64");
-c$.getBytes64 = Clazz.defineMethod (c$, "getBytes64",
-function (bytes) {
-return javajs.util.Base64.getBase64 (bytes).toBytes (0, -1);
-}, "~A");
-c$.getBase64 = Clazz.defineMethod (c$, "getBase64",
-function (bytes) {
-var nBytes = bytes.length;
-var sout = new javajs.util.SB ();
-if (nBytes == 0) return sout;
-for (var i = 0, nPad = 0; i < nBytes && nPad == 0; ) {
-if (i % 75 == 0 && i != 0) sout.append ("\r\n");
-nPad = (i + 2 == nBytes ? 1 : i + 1 == nBytes ? 2 : 0);
-var outbytes = ((bytes[i++] << 16) & 0xFF0000) | ((nPad == 2 ? 0 : bytes[i++] << 8) & 0x00FF00) | ((nPad >= 1 ? 0 : bytes[i++]) & 0x0000FF);
-sout.appendC (javajs.util.Base64.base64.charAt ((outbytes >> 18) & 0x3F));
-sout.appendC (javajs.util.Base64.base64.charAt ((outbytes >> 12) & 0x3F));
-sout.appendC (nPad == 2 ? '=' : javajs.util.Base64.base64.charAt ((outbytes >> 6) & 0x3F));
-sout.appendC (nPad >= 1 ? '=' : javajs.util.Base64.base64.charAt (outbytes & 0x3F));
-}
-return sout;
-}, "~A");
-c$.decodeBase64 = Clazz.defineMethod (c$, "decodeBase64",
-function (strBase64) {
-var nBytes = 0;
-var ch;
-var pt0 = strBase64.indexOf (";base64,") + 1;
-if (pt0 > 0) pt0 += 7;
-var chars64 = strBase64.toCharArray ();
-var len64 = chars64.length;
-if (len64 == 0) return Clazz.newByteArray (0, 0);
-for (var i = len64; --i >= pt0; ) nBytes += ((ch = (chars64[i]).charCodeAt (0) & 0x7F) == 65 || javajs.util.Base64.decode64[ch] > 0 ? 3 : 0);
-
-nBytes = nBytes >> 2;
-var bytes = Clazz.newByteArray (nBytes, 0);
-var offset = 18;
-for (var i = pt0, pt = 0, b = 0; i < len64; i++) {
-if (javajs.util.Base64.decode64[ch = (chars64[i]).charCodeAt (0) & 0x7F] > 0 || ch == 65 || ch == 61) {
-b |= javajs.util.Base64.decode64[ch] << offset;
-offset -= 6;
-if (offset < 0) {
-bytes[pt++] = ((b & 0xFF0000) >> 16);
-if (pt < nBytes) bytes[pt++] = ((b & 0xFF00) >> 8);
-if (pt < nBytes) bytes[pt++] = (b & 0xFF);
-offset = 18;
-b = 0;
-}}}
-return bytes;
-}, "~S");
-Clazz.defineStatics (c$,
-"base64", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
-"decode64", Clazz.newIntArray (-1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 62, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 63, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0]));
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (null, "javajs.util.Base64", ["javajs.util.SB"], function () {
+c$ = Clazz.declareType (javajs.util, "Base64");
+c$.getBytes64 = Clazz.defineMethod (c$, "getBytes64",
+function (bytes) {
+return javajs.util.Base64.getBase64 (bytes).toBytes (0, -1);
+}, "~A");
+c$.getBase64 = Clazz.defineMethod (c$, "getBase64",
+function (bytes) {
+var nBytes = bytes.length;
+var sout = new javajs.util.SB ();
+if (nBytes == 0) return sout;
+for (var i = 0, nPad = 0; i < nBytes && nPad == 0; ) {
+if (i % 75 == 0 && i != 0) sout.append ("\r\n");
+nPad = (i + 2 == nBytes ? 1 : i + 1 == nBytes ? 2 : 0);
+var outbytes = ((bytes[i++] << 16) & 0xFF0000) | ((nPad == 2 ? 0 : bytes[i++] << 8) & 0x00FF00) | ((nPad >= 1 ? 0 : bytes[i++]) & 0x0000FF);
+sout.appendC (javajs.util.Base64.base64.charAt ((outbytes >> 18) & 0x3F));
+sout.appendC (javajs.util.Base64.base64.charAt ((outbytes >> 12) & 0x3F));
+sout.appendC (nPad == 2 ? '=' : javajs.util.Base64.base64.charAt ((outbytes >> 6) & 0x3F));
+sout.appendC (nPad >= 1 ? '=' : javajs.util.Base64.base64.charAt (outbytes & 0x3F));
+}
+return sout;
+}, "~A");
+c$.decodeBase64 = Clazz.defineMethod (c$, "decodeBase64",
+function (strBase64) {
+var nBytes = 0;
+var ch;
+var pt0 = strBase64.indexOf (";base64,") + 1;
+if (pt0 > 0) pt0 += 7;
+var chars64 = strBase64.toCharArray ();
+var len64 = chars64.length;
+if (len64 == 0) return Clazz.newByteArray (0, 0);
+for (var i = len64; --i >= pt0; ) nBytes += ((ch = (chars64[i]).charCodeAt (0) & 0x7F) == 65 || javajs.util.Base64.decode64[ch] > 0 ? 3 : 0);
+
+nBytes = nBytes >> 2;
+var bytes = Clazz.newByteArray (nBytes, 0);
+var offset = 18;
+for (var i = pt0, pt = 0, b = 0; i < len64; i++) {
+if (javajs.util.Base64.decode64[ch = (chars64[i]).charCodeAt (0) & 0x7F] > 0 || ch == 65 || ch == 61) {
+b |= javajs.util.Base64.decode64[ch] << offset;
+offset -= 6;
+if (offset < 0) {
+bytes[pt++] = ((b & 0xFF0000) >> 16);
+if (pt < nBytes) bytes[pt++] = ((b & 0xFF00) >> 8);
+if (pt < nBytes) bytes[pt++] = (b & 0xFF);
+offset = 18;
+b = 0;
+}}}
+return bytes;
+}, "~S");
+Clazz.defineStatics (c$,
+"base64", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
+"decode64", Clazz.newIntArray (-1, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 62, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 63, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0]));
+});
diff --git a/bin/javajs/util/BinaryDocument.js b/bin/javajs/util/BinaryDocument.js
index 420db0b..a0edf33 100644
--- a/bin/javajs/util/BinaryDocument.js
+++ b/bin/javajs/util/BinaryDocument.js
@@ -1,218 +1,218 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.GenericBinaryDocument", "javajs.util.BC"], "javajs.util.BinaryDocument", ["java.io.DataInputStream", "java.lang.Double"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.stream = null;
-this.isRandom = false;
-this.isBigEndian = true;
-this.jzt = null;
-this.t8 = null;
-this.nBytes = 0;
-this.out = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "BinaryDocument", javajs.util.BC, javajs.api.GenericBinaryDocument);
-Clazz.prepareFields (c$, function () {
-this.t8 = Clazz.newByteArray (8, 0);
-});
-Clazz.overrideMethod (c$, "close",
-function () {
-if (this.stream != null) try {
-this.stream.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-if (this.out != null) this.out.closeChannel ();
-});
-Clazz.overrideMethod (c$, "setStream",
-function (jzt, bis, isBigEndian) {
-if (jzt != null) this.jzt = jzt;
-if (bis != null) this.stream = new java.io.DataInputStream (bis);
-this.isBigEndian = isBigEndian;
-}, "javajs.api.GenericZipTools,java.io.BufferedInputStream,~B");
-Clazz.overrideMethod (c$, "setStreamData",
-function (stream, isBigEndian) {
-if (stream != null) this.stream = stream;
-this.isBigEndian = isBigEndian;
-}, "java.io.DataInputStream,~B");
-Clazz.defineMethod (c$, "setRandom",
-function (TF) {
-this.isRandom = TF;
-}, "~B");
-Clazz.overrideMethod (c$, "readByte",
-function () {
-this.nBytes++;
-return this.ioReadByte ();
-});
-Clazz.defineMethod (c$, "ioReadByte",
-($fz = function () {
-var b = this.stream.readByte ();
-if (this.out != null) this.out.writeByteAsInt (b);
-return b;
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "readByteArray",
-function (b, off, len) {
-var n = this.ioRead (b, off, len);
-this.nBytes += n;
-return n;
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "ioRead",
-($fz = function (b, off, len) {
-var m = 0;
-while (len > 0) {
-var n = this.stream.read (b, off, len);
-m += n;
-if (n > 0 && this.out != null) this.writeBytes (b, off, n);
-if (n >= len) break;
-off += n;
-len -= n;
-}
-return m;
-}, $fz.isPrivate = true, $fz), "~A,~N,~N");
-Clazz.defineMethod (c$, "writeBytes",
-function (b, off, n) {
-this.out.write (b, off, n);
-}, "~A,~N,~N");
-Clazz.overrideMethod (c$, "readString",
-function (nChar) {
-var temp = Clazz.newByteArray (nChar, 0);
-var n = this.readByteArray (temp, 0, nChar);
-return String.instantialize (temp, 0, n, "UTF-8");
-}, "~N");
-Clazz.overrideMethod (c$, "readShort",
-function () {
-this.nBytes += 2;
-var n = (this.isBigEndian ? this.ioReadShort () : ((this.ioReadByte () & 0xff) | (this.ioReadByte () & 0xff) << 8));
-{
-return (n > 0x7FFF ? n - 0x10000 : n);
-}});
-Clazz.defineMethod (c$, "ioReadShort",
-($fz = function () {
-var b = this.stream.readShort ();
-if (this.out != null) this.writeShort (b);
-return b;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeShort",
-function (i) {
-this.out.writeByteAsInt (i >> 8);
-this.out.writeByteAsInt (i);
-}, "~N");
-Clazz.overrideMethod (c$, "readIntLE",
-function () {
-this.nBytes += 4;
-return this.readLEInt ();
-});
-Clazz.overrideMethod (c$, "readInt",
-function () {
-this.nBytes += 4;
-return (this.isBigEndian ? this.ioReadInt () : this.readLEInt ());
-});
-Clazz.defineMethod (c$, "ioReadInt",
-($fz = function () {
-var i = this.stream.readInt ();
-if (this.out != null) this.writeInt (i);
-return i;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeInt",
-function (i) {
-this.out.writeByteAsInt (i >> 24);
-this.out.writeByteAsInt (i >> 16);
-this.out.writeByteAsInt (i >> 8);
-this.out.writeByteAsInt (i);
-}, "~N");
-Clazz.overrideMethod (c$, "swapBytesI",
-function (n) {
-return (((n >> 24) & 0xff) | ((n >> 16) & 0xff) << 8 | ((n >> 8) & 0xff) << 16 | (n & 0xff) << 24);
-}, "~N");
-Clazz.overrideMethod (c$, "swapBytesS",
-function (n) {
-return ((((n >> 8) & 0xff) | (n & 0xff) << 8));
-}, "~N");
-Clazz.overrideMethod (c$, "readUnsignedShort",
-function () {
-this.nBytes += 2;
-var a = (this.ioReadByte () & 0xff);
-var b = (this.ioReadByte () & 0xff);
-return (this.isBigEndian ? (a << 8) + b : (b << 8) + a);
-});
-Clazz.overrideMethod (c$, "readLong",
-function () {
-this.nBytes += 8;
-return (this.isBigEndian ? this.ioReadLong () : (((this.ioReadByte ()) & 0xff) | ((this.ioReadByte ()) & 0xff) << 8 | ((this.ioReadByte ()) & 0xff) << 16 | ((this.ioReadByte ()) & 0xff) << 24 | ((this.ioReadByte ()) & 0xff) << 32 | ((this.ioReadByte ()) & 0xff) << 40 | ((this.ioReadByte ()) & 0xff) << 48 | ((this.ioReadByte ()) & 0xff) << 54));
-});
-Clazz.defineMethod (c$, "ioReadLong",
-($fz = function () {
-var b = this.stream.readLong ();
-if (this.out != null) this.writeLong (b);
-return b;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeLong",
-function (b) {
-this.writeInt (((b >> 32) & 0xFFFFFFFF));
-this.writeInt ((b & 0xFFFFFFFF));
-}, "~N");
-Clazz.defineMethod (c$, "readLEInt",
-($fz = function () {
-this.ioRead (this.t8, 0, 4);
-return javajs.util.BC.bytesToInt (this.t8, 0, false);
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "readFloat",
-function () {
-return javajs.util.BC.intToFloat (this.readInt ());
-});
-Clazz.overrideMethod (c$, "readDouble",
-function () {
-{
-this.readByteArray(this.t8, 0, 8);
-return this.bytesToDoubleToFloat(this.t8, 0, this.isBigEndian);
-}});
-Clazz.defineMethod (c$, "ioReadDouble",
-($fz = function () {
-var d = this.stream.readDouble ();
-if (this.out != null) this.writeLong (Double.doubleToRawLongBits (d));
-return d;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "readLELong",
-($fz = function () {
-return (((this.ioReadByte ()) & 0xff) | ((this.ioReadByte ()) & 0xff) << 8 | ((this.ioReadByte ()) & 0xff) << 16 | ((this.ioReadByte ()) & 0xff) << 24 | ((this.ioReadByte ()) & 0xff) << 32 | ((this.ioReadByte ()) & 0xff) << 40 | ((this.ioReadByte ()) & 0xff) << 48 | ((this.ioReadByte ()) & 0xff) << 56);
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "seek",
-function (offset) {
-try {
-if (offset == this.nBytes) return;
-if (offset < this.nBytes) {
-this.stream.reset ();
-if (this.out != null && this.nBytes != 0) this.out.reset ();
-this.nBytes = 0;
-} else {
-offset -= this.nBytes;
-}if (this.out == null) {
-this.stream.skipBytes (offset);
-} else {
-this.readByteArray ( Clazz.newByteArray (offset, 0), 0, offset);
-}this.nBytes += offset;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-}, "~N");
-Clazz.overrideMethod (c$, "getPosition",
-function () {
-return this.nBytes;
-});
-Clazz.overrideMethod (c$, "setOutputChannel",
-function (out) {
-this.out = out;
-}, "javajs.util.OC");
-Clazz.overrideMethod (c$, "getAllDataFiles",
-function (binaryFileList, firstFile) {
-return null;
-}, "~S,~S");
-Clazz.overrideMethod (c$, "getAllDataMapped",
-function (replace, string, fileData) {
-}, "~S,~S,java.util.Map");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.GenericBinaryDocument", "javajs.util.BC"], "javajs.util.BinaryDocument", ["java.io.DataInputStream", "java.lang.Double"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.stream = null;
+this.isRandom = false;
+this.isBigEndian = true;
+this.jzt = null;
+this.t8 = null;
+this.nBytes = 0;
+this.out = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "BinaryDocument", javajs.util.BC, javajs.api.GenericBinaryDocument);
+Clazz.prepareFields (c$, function () {
+this.t8 = Clazz.newByteArray (8, 0);
+});
+Clazz.overrideMethod (c$, "close",
+function () {
+if (this.stream != null) try {
+this.stream.close ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+if (this.out != null) this.out.closeChannel ();
+});
+Clazz.overrideMethod (c$, "setStream",
+function (jzt, bis, isBigEndian) {
+if (jzt != null) this.jzt = jzt;
+if (bis != null) this.stream = new java.io.DataInputStream (bis);
+this.isBigEndian = isBigEndian;
+}, "javajs.api.GenericZipTools,java.io.BufferedInputStream,~B");
+Clazz.overrideMethod (c$, "setStreamData",
+function (stream, isBigEndian) {
+if (stream != null) this.stream = stream;
+this.isBigEndian = isBigEndian;
+}, "java.io.DataInputStream,~B");
+Clazz.defineMethod (c$, "setRandom",
+function (TF) {
+this.isRandom = TF;
+}, "~B");
+Clazz.overrideMethod (c$, "readByte",
+function () {
+this.nBytes++;
+return this.ioReadByte ();
+});
+Clazz.defineMethod (c$, "ioReadByte",
+($fz = function () {
+var b = this.stream.readByte ();
+if (this.out != null) this.out.writeByteAsInt (b);
+return b;
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "readByteArray",
+function (b, off, len) {
+var n = this.ioRead (b, off, len);
+this.nBytes += n;
+return n;
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "ioRead",
+($fz = function (b, off, len) {
+var m = 0;
+while (len > 0) {
+var n = this.stream.read (b, off, len);
+m += n;
+if (n > 0 && this.out != null) this.writeBytes (b, off, n);
+if (n >= len) break;
+off += n;
+len -= n;
+}
+return m;
+}, $fz.isPrivate = true, $fz), "~A,~N,~N");
+Clazz.defineMethod (c$, "writeBytes",
+function (b, off, n) {
+this.out.write (b, off, n);
+}, "~A,~N,~N");
+Clazz.overrideMethod (c$, "readString",
+function (nChar) {
+var temp = Clazz.newByteArray (nChar, 0);
+var n = this.readByteArray (temp, 0, nChar);
+return String.instantialize (temp, 0, n, "UTF-8");
+}, "~N");
+Clazz.overrideMethod (c$, "readShort",
+function () {
+this.nBytes += 2;
+var n = (this.isBigEndian ? this.ioReadShort () : ((this.ioReadByte () & 0xff) | (this.ioReadByte () & 0xff) << 8));
+{
+return (n > 0x7FFF ? n - 0x10000 : n);
+}});
+Clazz.defineMethod (c$, "ioReadShort",
+($fz = function () {
+var b = this.stream.readShort ();
+if (this.out != null) this.writeShort (b);
+return b;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeShort",
+function (i) {
+this.out.writeByteAsInt (i >> 8);
+this.out.writeByteAsInt (i);
+}, "~N");
+Clazz.overrideMethod (c$, "readIntLE",
+function () {
+this.nBytes += 4;
+return this.readLEInt ();
+});
+Clazz.overrideMethod (c$, "readInt",
+function () {
+this.nBytes += 4;
+return (this.isBigEndian ? this.ioReadInt () : this.readLEInt ());
+});
+Clazz.defineMethod (c$, "ioReadInt",
+($fz = function () {
+var i = this.stream.readInt ();
+if (this.out != null) this.writeInt (i);
+return i;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeInt",
+function (i) {
+this.out.writeByteAsInt (i >> 24);
+this.out.writeByteAsInt (i >> 16);
+this.out.writeByteAsInt (i >> 8);
+this.out.writeByteAsInt (i);
+}, "~N");
+Clazz.overrideMethod (c$, "swapBytesI",
+function (n) {
+return (((n >> 24) & 0xff) | ((n >> 16) & 0xff) << 8 | ((n >> 8) & 0xff) << 16 | (n & 0xff) << 24);
+}, "~N");
+Clazz.overrideMethod (c$, "swapBytesS",
+function (n) {
+return ((((n >> 8) & 0xff) | (n & 0xff) << 8));
+}, "~N");
+Clazz.overrideMethod (c$, "readUnsignedShort",
+function () {
+this.nBytes += 2;
+var a = (this.ioReadByte () & 0xff);
+var b = (this.ioReadByte () & 0xff);
+return (this.isBigEndian ? (a << 8) + b : (b << 8) + a);
+});
+Clazz.overrideMethod (c$, "readLong",
+function () {
+this.nBytes += 8;
+return (this.isBigEndian ? this.ioReadLong () : (((this.ioReadByte ()) & 0xff) | ((this.ioReadByte ()) & 0xff) << 8 | ((this.ioReadByte ()) & 0xff) << 16 | ((this.ioReadByte ()) & 0xff) << 24 | ((this.ioReadByte ()) & 0xff) << 32 | ((this.ioReadByte ()) & 0xff) << 40 | ((this.ioReadByte ()) & 0xff) << 48 | ((this.ioReadByte ()) & 0xff) << 54));
+});
+Clazz.defineMethod (c$, "ioReadLong",
+($fz = function () {
+var b = this.stream.readLong ();
+if (this.out != null) this.writeLong (b);
+return b;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "writeLong",
+function (b) {
+this.writeInt (((b >> 32) & 0xFFFFFFFF));
+this.writeInt ((b & 0xFFFFFFFF));
+}, "~N");
+Clazz.defineMethod (c$, "readLEInt",
+($fz = function () {
+this.ioRead (this.t8, 0, 4);
+return javajs.util.BC.bytesToInt (this.t8, 0, false);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "readFloat",
+function () {
+return javajs.util.BC.intToFloat (this.readInt ());
+});
+Clazz.overrideMethod (c$, "readDouble",
+function () {
+{
+this.readByteArray(this.t8, 0, 8);
+return this.bytesToDoubleToFloat(this.t8, 0, this.isBigEndian);
+}});
+Clazz.defineMethod (c$, "ioReadDouble",
+($fz = function () {
+var d = this.stream.readDouble ();
+if (this.out != null) this.writeLong (Double.doubleToRawLongBits (d));
+return d;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "readLELong",
+($fz = function () {
+return (((this.ioReadByte ()) & 0xff) | ((this.ioReadByte ()) & 0xff) << 8 | ((this.ioReadByte ()) & 0xff) << 16 | ((this.ioReadByte ()) & 0xff) << 24 | ((this.ioReadByte ()) & 0xff) << 32 | ((this.ioReadByte ()) & 0xff) << 40 | ((this.ioReadByte ()) & 0xff) << 48 | ((this.ioReadByte ()) & 0xff) << 56);
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "seek",
+function (offset) {
+try {
+if (offset == this.nBytes) return;
+if (offset < this.nBytes) {
+this.stream.reset ();
+if (this.out != null && this.nBytes != 0) this.out.reset ();
+this.nBytes = 0;
+} else {
+offset -= this.nBytes;
+}if (this.out == null) {
+this.stream.skipBytes (offset);
+} else {
+this.readByteArray ( Clazz.newByteArray (offset, 0), 0, offset);
+}this.nBytes += offset;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+}, "~N");
+Clazz.overrideMethod (c$, "getPosition",
+function () {
+return this.nBytes;
+});
+Clazz.overrideMethod (c$, "setOutputChannel",
+function (out) {
+this.out = out;
+}, "javajs.util.OC");
+Clazz.overrideMethod (c$, "getAllDataFiles",
+function (binaryFileList, firstFile) {
+return null;
+}, "~S,~S");
+Clazz.overrideMethod (c$, "getAllDataMapped",
+function (replace, string, fileData) {
+}, "~S,~S,java.util.Map");
+});
diff --git a/bin/javajs/util/CU.js b/bin/javajs/util/CU.js
index f6b3020..edd8bdd 100644
--- a/bin/javajs/util/CU.js
+++ b/bin/javajs/util/CU.js
@@ -1,135 +1,135 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.util.Hashtable"], "javajs.util.CU", ["javajs.util.P3", "$.PT"], function () {
-c$ = Clazz.declareType (javajs.util, "CU");
-c$.toRGBHexString = Clazz.defineMethod (c$, "toRGBHexString",
-function (c) {
-var rgb = c.getRGB ();
-if (rgb == 0) return "000000";
-var r = "00" + Integer.toHexString ((rgb >> 16) & 0xFF);
-r = r.substring (r.length - 2);
-var g = "00" + Integer.toHexString ((rgb >> 8) & 0xFF);
-g = g.substring (g.length - 2);
-var b = "00" + Integer.toHexString (rgb & 0xFF);
-b = b.substring (b.length - 2);
-return r + g + b;
-}, "javajs.api.GenericColor");
-c$.toCSSString = Clazz.defineMethod (c$, "toCSSString",
-function (c) {
-var opacity = c.getOpacity255 ();
-if (opacity == 255) return "#" + javajs.util.CU.toRGBHexString (c);
-var rgb = c.getRGB ();
-return "rgba(" + ((rgb >> 16) & 0xFF) + "," + ((rgb >> 8) & 0xff) + "," + (rgb & 0xff) + "," + opacity / 255 + ")";
-}, "javajs.api.GenericColor");
-c$.getArgbFromString = Clazz.defineMethod (c$, "getArgbFromString",
-function (strColor) {
-var len = 0;
-if (strColor == null || (len = strColor.length) == 0) return 0;
-if (strColor.charAt (0) == '[' && strColor.charAt (len - 1) == ']') {
-var check;
-if (strColor.indexOf (",") >= 0) {
-var tokens = javajs.util.PT.split (strColor.substring (1, strColor.length - 1), ",");
-if (tokens.length != 3) return 0;
-var red = javajs.util.PT.parseFloat (tokens[0]);
-var grn = javajs.util.PT.parseFloat (tokens[1]);
-var blu = javajs.util.PT.parseFloat (tokens[2]);
-return javajs.util.CU.colorTriadToFFRGB (red, grn, blu);
-}switch (len) {
-case 9:
-check = "x";
-break;
-case 10:
-check = "0x";
-break;
-default:
-return 0;
-}
-if (strColor.indexOf (check) != 1) return 0;
-strColor = "#" + strColor.substring (len - 7, len - 1);
-len = 7;
-}if (len == 7 && strColor.charAt (0) == '#') {
-try {
-return javajs.util.PT.parseIntRadix (strColor.substring (1, 7), 16) | 0xFF000000;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-return 0;
-} else {
-throw e;
-}
-}
-}var boxedArgb = javajs.util.CU.mapJavaScriptColors.get (strColor.toLowerCase ());
-return (boxedArgb == null ? 0 : boxedArgb.intValue ());
-}, "~S");
-c$.colorTriadToFFRGB = Clazz.defineMethod (c$, "colorTriadToFFRGB",
-function (x, y, z) {
-if (x <= 1 && y <= 1 && z <= 1) {
-if (x > 0) x = x * 256 - 1;
-if (y > 0) y = y * 256 - 1;
-if (z > 0) z = z * 256 - 1;
-}return javajs.util.CU.rgb (Clazz.floatToInt (x), Clazz.floatToInt (y), Clazz.floatToInt (z));
-}, "~N,~N,~N");
-c$.rgb = Clazz.defineMethod (c$, "rgb",
-function (red, grn, blu) {
-return 0xFF000000 | (red << 16) | (grn << 8) | blu;
-}, "~N,~N,~N");
-c$.colorPtFromString = Clazz.defineMethod (c$, "colorPtFromString",
-function (colorName) {
-return javajs.util.CU.colorPtFromInt (javajs.util.CU.getArgbFromString (colorName), null);
-}, "~S");
-c$.colorPtFromInt = Clazz.defineMethod (c$, "colorPtFromInt",
-function (color, pt) {
-if (pt == null) pt = new javajs.util.P3 ();
-pt.set ((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF);
-return pt;
-}, "~N,javajs.util.P3");
-c$.colorPtToFFRGB = Clazz.defineMethod (c$, "colorPtToFFRGB",
-function (pt) {
-return javajs.util.CU.colorTriadToFFRGB (pt.x, pt.y, pt.z);
-}, "javajs.util.T3");
-c$.toRGB3f = Clazz.defineMethod (c$, "toRGB3f",
-function (c, f) {
-f[0] = ((c >> 16) & 0xFF) / 255;
-f[1] = ((c >> 8) & 0xFF) / 255;
-f[2] = (c & 0xFF) / 255;
-}, "~N,~A");
-c$.toFFGGGfromRGB = Clazz.defineMethod (c$, "toFFGGGfromRGB",
-function (rgb) {
-var grey = (Clazz.doubleToInt (((2989 * ((rgb >> 16) & 0xFF)) + (5870 * ((rgb >> 8) & 0xFF)) + (1140 * (rgb & 0xFF)) + 5000) / 10000)) & 0xFFFFFF;
-return javajs.util.CU.rgb (grey, grey, grey);
-}, "~N");
-c$.rgbToHSL = Clazz.defineMethod (c$, "rgbToHSL",
-function (rgb, doRound) {
-var r = rgb.x / 255;
-var g = rgb.y / 255;
-var b = rgb.z / 255;
-var min = Math.min (r, Math.min (g, b));
-var max = Math.max (r, Math.max (g, b));
-var p = (max + min);
-var q = (max - min);
-var h = (60 * ((q == 0 ? 0 : max == r ? ((g - b) / q + 6) : max == g ? (b - r) / q + 2 : (r - g) / q + 4))) % 360;
-var s = q / (q == 0 ? 1 : p <= 1 ? p : 2 - p);
-return (doRound ? javajs.util.P3.new3 (Math.round (h * 10) / 10, Math.round (s * 1000) / 10, Math.round (p * 500) / 10) : javajs.util.P3.new3 (h, s * 100, p * 50));
-}, "javajs.util.P3,~B");
-c$.hslToRGB = Clazz.defineMethod (c$, "hslToRGB",
-function (hsl) {
-var h = Math.max (0, Math.min (360, hsl.x)) / 60;
-var s = Math.max (0, Math.min (100, hsl.y)) / 100;
-var l = Math.max (0, Math.min (100, hsl.z)) / 100;
-var p = l - (l < 0.5 ? l : 1 - l) * s;
-var q = 2 * (l - p);
-var r = javajs.util.CU.toRGB (p, q, h + 2);
-var g = javajs.util.CU.toRGB (p, q, h);
-var b = javajs.util.CU.toRGB (p, q, h - 2);
-return javajs.util.P3.new3 (Math.round (r * 255), Math.round (g * 255), Math.round (b * 255));
-}, "javajs.util.P3");
-c$.toRGB = Clazz.defineMethod (c$, "toRGB",
-($fz = function (p, q, h) {
-return ((h = (h + (h < 0 ? 6 : h > 6 ? -6 : 0))) < 1 ? p + q * h : h < 3 ? p + q : h < 4 ? p + q * (4 - h) : p);
-}, $fz.isPrivate = true, $fz), "~N,~N,~N");
-Clazz.defineStatics (c$,
-"colorNames", Clazz.newArray (-1, ["black", "pewhite", "pecyan", "pepurple", "pegreen", "peblue", "peviolet", "pebrown", "pepink", "peyellow", "pedarkgreen", "peorange", "pelightblue", "pedarkcyan", "pedarkgray", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", "bluetint", "greenblue", "greentint", "grey", "pinktint", "redorange", "yellowtint"]),
-"colorArgbs", Clazz.newIntArray (-1, [0xFF000000, 0xFFffffff, 0xFF00ffff, 0xFFd020ff, 0xFF00ff00, 0xFF6060ff, 0xFFff80c0, 0xFFa42028, 0xFFffd8d8, 0xFFffff00, 0xFF00c000, 0xFFffb000, 0xFFb0b0ff, 0xFF00a0a0, 0xFF606060, 0xFFF0F8FF, 0xFFFAEBD7, 0xFF00FFFF, 0xFF7FFFD4, 0xFFF0FFFF, 0xFFF5F5DC, 0xFFFFE4C4, 0xFFFFEBCD, 0xFF0000FF, 0xFF8A2BE2, 0xFFA52A2A, 0xFFDEB887, 0xFF5F9EA0, 0xFF7FFF00, 0xFFD2691E, 0xFFFF7F50, 0xFF6495ED, 0xFFFFF8DC, 0xFFDC143C, 0xFF00FFFF, 0xFF00008B, 0xFF008B8B, 0xFFB8860B, 0xFFA9A9A9, 0xFF006400, 0xFFBDB76B, 0xFF8B008B, 0xFF556B2F, 0xFFFF8C00, 0xFF9932CC, 0xFF8B0000, 0xFFE9967A, 0xFF8FBC8F, 0xFF483D8B, 0xFF2F4F4F, 0xFF00CED1, 0xFF9400D3, 0xFFFF1493, 0xFF00BFFF, 0xFF696969, 0xFF1E90FF, 0xFFB22222, 0xFFFFFAF0, 0xFF228B22, 0xFFFF00FF, 0xFFDCDCDC, 0xFFF8F8FF, 0xFFFFD700, 0xFFDAA520, 0xFF808080, 0xFF008000, 0xFFADFF2F, 0xFFF0FFF0, 0xFFFF69B4, 0xFFCD5C5C, 0xFF4B0082, 0xFFFFFFF0, 0xFFF0E68C, 0xFFE6E6FA, 0xFFFFF0F5, 0xFF7CFC00, 0xFFFFFACD, 0xFFADD8E6, 0xFFF08080, 0xFFE0FFFF, 0xFFFAFAD2, 0xFF90EE90, 0xFFD3D3D3, 0xFFFFB6C1, 0xFFFFA07A, 0xFF20B2AA, 0xFF87CEFA, 0xFF778899, 0xFFB0C4DE, 0xFFFFFFE0, 0xFF00FF00, 0xFF32CD32, 0xFFFAF0E6, 0xFFFF00FF, 0xFF800000, 0xFF66CDAA, 0xFF0000CD, 0xFFBA55D3, 0xFF9370DB, 0xFF3CB371, 0xFF7B68EE, 0xFF00FA9A, 0xFF48D1CC, 0xFFC71585, 0xFF191970, 0xFFF5FFFA, 0xFFFFE4E1, 0xFFFFE4B5, 0xFFFFDEAD, 0xFF000080, 0xFFFDF5E6, 0xFF808000, 0xFF6B8E23, 0xFFFFA500, 0xFFFF4500, 0xFFDA70D6, 0xFFEEE8AA, 0xFF98FB98, 0xFFAFEEEE, 0xFFDB7093, 0xFFFFEFD5, 0xFFFFDAB9, 0xFFCD853F, 0xFFFFC0CB, 0xFFDDA0DD, 0xFFB0E0E6, 0xFF800080, 0xFFFF0000, 0xFFBC8F8F, 0xFF4169E1, 0xFF8B4513, 0xFFFA8072, 0xFFF4A460, 0xFF2E8B57, 0xFFFFF5EE, 0xFFA0522D, 0xFFC0C0C0, 0xFF87CEEB, 0xFF6A5ACD, 0xFF708090, 0xFFFFFAFA, 0xFF00FF7F, 0xFF4682B4, 0xFFD2B48C, 0xFF008080, 0xFFD8BFD8, 0xFFFF6347, 0xFF40E0D0, 0xFFEE82EE, 0xFFF5DEB3, 0xFFFFFFFF, 0xFFF5F5F5, 0xFFFFFF00, 0xFF9ACD32, 0xFFAFD7FF, 0xFF2E8B57, 0xFF98FFB3, 0xFF808080, 0xFFFFABBB, 0xFFFF4500, 0xFFF6F675]));
-c$.mapJavaScriptColors = c$.prototype.mapJavaScriptColors = new java.util.Hashtable ();
-{
-for (var i = javajs.util.CU.colorNames.length; --i >= 0; ) javajs.util.CU.mapJavaScriptColors.put (javajs.util.CU.colorNames[i], Integer.$valueOf (javajs.util.CU.colorArgbs[i]));
-
-}});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.util.Hashtable"], "javajs.util.CU", ["javajs.util.P3", "$.PT"], function () {
+c$ = Clazz.declareType (javajs.util, "CU");
+c$.toRGBHexString = Clazz.defineMethod (c$, "toRGBHexString",
+function (c) {
+var rgb = c.getRGB ();
+if (rgb == 0) return "000000";
+var r = "00" + Integer.toHexString ((rgb >> 16) & 0xFF);
+r = r.substring (r.length - 2);
+var g = "00" + Integer.toHexString ((rgb >> 8) & 0xFF);
+g = g.substring (g.length - 2);
+var b = "00" + Integer.toHexString (rgb & 0xFF);
+b = b.substring (b.length - 2);
+return r + g + b;
+}, "javajs.api.GenericColor");
+c$.toCSSString = Clazz.defineMethod (c$, "toCSSString",
+function (c) {
+var opacity = c.getOpacity255 ();
+if (opacity == 255) return "#" + javajs.util.CU.toRGBHexString (c);
+var rgb = c.getRGB ();
+return "rgba(" + ((rgb >> 16) & 0xFF) + "," + ((rgb >> 8) & 0xff) + "," + (rgb & 0xff) + "," + opacity / 255 + ")";
+}, "javajs.api.GenericColor");
+c$.getArgbFromString = Clazz.defineMethod (c$, "getArgbFromString",
+function (strColor) {
+var len = 0;
+if (strColor == null || (len = strColor.length) == 0) return 0;
+if (strColor.charAt (0) == '[' && strColor.charAt (len - 1) == ']') {
+var check;
+if (strColor.indexOf (",") >= 0) {
+var tokens = javajs.util.PT.split (strColor.substring (1, strColor.length - 1), ",");
+if (tokens.length != 3) return 0;
+var red = javajs.util.PT.parseFloat (tokens[0]);
+var grn = javajs.util.PT.parseFloat (tokens[1]);
+var blu = javajs.util.PT.parseFloat (tokens[2]);
+return javajs.util.CU.colorTriadToFFRGB (red, grn, blu);
+}switch (len) {
+case 9:
+check = "x";
+break;
+case 10:
+check = "0x";
+break;
+default:
+return 0;
+}
+if (strColor.indexOf (check) != 1) return 0;
+strColor = "#" + strColor.substring (len - 7, len - 1);
+len = 7;
+}if (len == 7 && strColor.charAt (0) == '#') {
+try {
+return javajs.util.PT.parseIntRadix (strColor.substring (1, 7), 16) | 0xFF000000;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+return 0;
+} else {
+throw e;
+}
+}
+}var boxedArgb = javajs.util.CU.mapJavaScriptColors.get (strColor.toLowerCase ());
+return (boxedArgb == null ? 0 : boxedArgb.intValue ());
+}, "~S");
+c$.colorTriadToFFRGB = Clazz.defineMethod (c$, "colorTriadToFFRGB",
+function (x, y, z) {
+if (x <= 1 && y <= 1 && z <= 1) {
+if (x > 0) x = x * 256 - 1;
+if (y > 0) y = y * 256 - 1;
+if (z > 0) z = z * 256 - 1;
+}return javajs.util.CU.rgb (Clazz.floatToInt (x), Clazz.floatToInt (y), Clazz.floatToInt (z));
+}, "~N,~N,~N");
+c$.rgb = Clazz.defineMethod (c$, "rgb",
+function (red, grn, blu) {
+return 0xFF000000 | (red << 16) | (grn << 8) | blu;
+}, "~N,~N,~N");
+c$.colorPtFromString = Clazz.defineMethod (c$, "colorPtFromString",
+function (colorName) {
+return javajs.util.CU.colorPtFromInt (javajs.util.CU.getArgbFromString (colorName), null);
+}, "~S");
+c$.colorPtFromInt = Clazz.defineMethod (c$, "colorPtFromInt",
+function (color, pt) {
+if (pt == null) pt = new javajs.util.P3 ();
+pt.set ((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF);
+return pt;
+}, "~N,javajs.util.P3");
+c$.colorPtToFFRGB = Clazz.defineMethod (c$, "colorPtToFFRGB",
+function (pt) {
+return javajs.util.CU.colorTriadToFFRGB (pt.x, pt.y, pt.z);
+}, "javajs.util.T3");
+c$.toRGB3f = Clazz.defineMethod (c$, "toRGB3f",
+function (c, f) {
+f[0] = ((c >> 16) & 0xFF) / 255;
+f[1] = ((c >> 8) & 0xFF) / 255;
+f[2] = (c & 0xFF) / 255;
+}, "~N,~A");
+c$.toFFGGGfromRGB = Clazz.defineMethod (c$, "toFFGGGfromRGB",
+function (rgb) {
+var grey = (Clazz.doubleToInt (((2989 * ((rgb >> 16) & 0xFF)) + (5870 * ((rgb >> 8) & 0xFF)) + (1140 * (rgb & 0xFF)) + 5000) / 10000)) & 0xFFFFFF;
+return javajs.util.CU.rgb (grey, grey, grey);
+}, "~N");
+c$.rgbToHSL = Clazz.defineMethod (c$, "rgbToHSL",
+function (rgb, doRound) {
+var r = rgb.x / 255;
+var g = rgb.y / 255;
+var b = rgb.z / 255;
+var min = Math.min (r, Math.min (g, b));
+var max = Math.max (r, Math.max (g, b));
+var p = (max + min);
+var q = (max - min);
+var h = (60 * ((q == 0 ? 0 : max == r ? ((g - b) / q + 6) : max == g ? (b - r) / q + 2 : (r - g) / q + 4))) % 360;
+var s = q / (q == 0 ? 1 : p <= 1 ? p : 2 - p);
+return (doRound ? javajs.util.P3.new3 (Math.round (h * 10) / 10, Math.round (s * 1000) / 10, Math.round (p * 500) / 10) : javajs.util.P3.new3 (h, s * 100, p * 50));
+}, "javajs.util.P3,~B");
+c$.hslToRGB = Clazz.defineMethod (c$, "hslToRGB",
+function (hsl) {
+var h = Math.max (0, Math.min (360, hsl.x)) / 60;
+var s = Math.max (0, Math.min (100, hsl.y)) / 100;
+var l = Math.max (0, Math.min (100, hsl.z)) / 100;
+var p = l - (l < 0.5 ? l : 1 - l) * s;
+var q = 2 * (l - p);
+var r = javajs.util.CU.toRGB (p, q, h + 2);
+var g = javajs.util.CU.toRGB (p, q, h);
+var b = javajs.util.CU.toRGB (p, q, h - 2);
+return javajs.util.P3.new3 (Math.round (r * 255), Math.round (g * 255), Math.round (b * 255));
+}, "javajs.util.P3");
+c$.toRGB = Clazz.defineMethod (c$, "toRGB",
+($fz = function (p, q, h) {
+return ((h = (h + (h < 0 ? 6 : h > 6 ? -6 : 0))) < 1 ? p + q * h : h < 3 ? p + q : h < 4 ? p + q * (4 - h) : p);
+}, $fz.isPrivate = true, $fz), "~N,~N,~N");
+Clazz.defineStatics (c$,
+"colorNames", Clazz.newArray (-1, ["black", "pewhite", "pecyan", "pepurple", "pegreen", "peblue", "peviolet", "pebrown", "pepink", "peyellow", "pedarkgreen", "peorange", "pelightblue", "pedarkcyan", "pedarkgray", "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen", "bluetint", "greenblue", "greentint", "grey", "pinktint", "redorange", "yellowtint"]),
+"colorArgbs", Clazz.newIntArray (-1, [0xFF000000, 0xFFffffff, 0xFF00ffff, 0xFFd020ff, 0xFF00ff00, 0xFF6060ff, 0xFFff80c0, 0xFFa42028, 0xFFffd8d8, 0xFFffff00, 0xFF00c000, 0xFFffb000, 0xFFb0b0ff, 0xFF00a0a0, 0xFF606060, 0xFFF0F8FF, 0xFFFAEBD7, 0xFF00FFFF, 0xFF7FFFD4, 0xFFF0FFFF, 0xFFF5F5DC, 0xFFFFE4C4, 0xFFFFEBCD, 0xFF0000FF, 0xFF8A2BE2, 0xFFA52A2A, 0xFFDEB887, 0xFF5F9EA0, 0xFF7FFF00, 0xFFD2691E, 0xFFFF7F50, 0xFF6495ED, 0xFFFFF8DC, 0xFFDC143C, 0xFF00FFFF, 0xFF00008B, 0xFF008B8B, 0xFFB8860B, 0xFFA9A9A9, 0xFF006400, 0xFFBDB76B, 0xFF8B008B, 0xFF556B2F, 0xFFFF8C00, 0xFF9932CC, 0xFF8B0000, 0xFFE9967A, 0xFF8FBC8F, 0xFF483D8B, 0xFF2F4F4F, 0xFF00CED1, 0xFF9400D3, 0xFFFF1493, 0xFF00BFFF, 0xFF696969, 0xFF1E90FF, 0xFFB22222, 0xFFFFFAF0, 0xFF228B22, 0xFFFF00FF, 0xFFDCDCDC, 0xFFF8F8FF, 0xFFFFD700, 0xFFDAA520, 0xFF808080, 0xFF008000, 0xFFADFF2F, 0xFFF0FFF0, 0xFFFF69B4, 0xFFCD5C5C, 0xFF4B0082, 0xFFFFFFF0, 0xFFF0E68C, 0xFFE6E6FA, 0xFFFFF0F5, 0xFF7CFC00, 0xFFFFFACD, 0xFFADD8E6, 0xFFF08080, 0xFFE0FFFF, 0xFFFAFAD2, 0xFF90EE90, 0xFFD3D3D3, 0xFFFFB6C1, 0xFFFFA07A, 0xFF20B2AA, 0xFF87CEFA, 0xFF778899, 0xFFB0C4DE, 0xFFFFFFE0, 0xFF00FF00, 0xFF32CD32, 0xFFFAF0E6, 0xFFFF00FF, 0xFF800000, 0xFF66CDAA, 0xFF0000CD, 0xFFBA55D3, 0xFF9370DB, 0xFF3CB371, 0xFF7B68EE, 0xFF00FA9A, 0xFF48D1CC, 0xFFC71585, 0xFF191970, 0xFFF5FFFA, 0xFFFFE4E1, 0xFFFFE4B5, 0xFFFFDEAD, 0xFF000080, 0xFFFDF5E6, 0xFF808000, 0xFF6B8E23, 0xFFFFA500, 0xFFFF4500, 0xFFDA70D6, 0xFFEEE8AA, 0xFF98FB98, 0xFFAFEEEE, 0xFFDB7093, 0xFFFFEFD5, 0xFFFFDAB9, 0xFFCD853F, 0xFFFFC0CB, 0xFFDDA0DD, 0xFFB0E0E6, 0xFF800080, 0xFFFF0000, 0xFFBC8F8F, 0xFF4169E1, 0xFF8B4513, 0xFFFA8072, 0xFFF4A460, 0xFF2E8B57, 0xFFFFF5EE, 0xFFA0522D, 0xFFC0C0C0, 0xFF87CEEB, 0xFF6A5ACD, 0xFF708090, 0xFFFFFAFA, 0xFF00FF7F, 0xFF4682B4, 0xFFD2B48C, 0xFF008080, 0xFFD8BFD8, 0xFFFF6347, 0xFF40E0D0, 0xFFEE82EE, 0xFFF5DEB3, 0xFFFFFFFF, 0xFFF5F5F5, 0xFFFFFF00, 0xFF9ACD32, 0xFFAFD7FF, 0xFF2E8B57, 0xFF98FFB3, 0xFF808080, 0xFFFFABBB, 0xFFFF4500, 0xFFF6F675]));
+c$.mapJavaScriptColors = c$.prototype.mapJavaScriptColors = new java.util.Hashtable ();
+{
+for (var i = javajs.util.CU.colorNames.length; --i >= 0; ) javajs.util.CU.mapJavaScriptColors.put (javajs.util.CU.colorNames[i], Integer.$valueOf (javajs.util.CU.colorArgbs[i]));
+
+}});
diff --git a/bin/javajs/util/CifDataParser.class b/bin/javajs/util/CifDataParser.class
index cf79e99..56f6075 100644
Binary files a/bin/javajs/util/CifDataParser.class and b/bin/javajs/util/CifDataParser.class differ
diff --git a/bin/javajs/util/CifDataParser.js b/bin/javajs/util/CifDataParser.js
index c00c5e1..07e1495 100644
--- a/bin/javajs/util/CifDataParser.js
+++ b/bin/javajs/util/CifDataParser.js
@@ -1,303 +1,303 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.GenericCifDataParser", "java.util.Hashtable", "javajs.util.SB"], "javajs.util.CifDataParser", ["javajs.util.Lst", "$.PT"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.reader = null;
-this.br = null;
-this.line = null;
-this.str = null;
-this.ich = 0;
-this.cch = 0;
-this.wasUnQuoted = false;
-this.strPeeked = null;
-this.ichPeeked = 0;
-this.fieldCount = 0;
-this.loopData = null;
-this.fileHeader = null;
-this.isHeader = true;
-this.nullString = "\0";
-this.fields = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "CifDataParser", null, javajs.api.GenericCifDataParser);
-Clazz.prepareFields (c$, function () {
-this.fileHeader = new javajs.util.SB ();
-});
-Clazz.defineMethod (c$, "setNullValue",
-function (nullString) {
-this.nullString = nullString;
-}, "~S");
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.overrideMethod (c$, "getLoopData",
-function (i) {
-return this.loopData[i];
-}, "~N");
-Clazz.overrideMethod (c$, "getFieldCount",
-function () {
-return this.fieldCount;
-});
-Clazz.overrideMethod (c$, "getField",
-function (i) {
-return this.fields[i];
-}, "~N");
-Clazz.overrideMethod (c$, "set",
-function (reader, br) {
-this.reader = reader;
-this.br = br;
-return this;
-}, "javajs.api.GenericLineReader,java.io.BufferedReader");
-Clazz.overrideMethod (c$, "getFileHeader",
-function () {
-return this.fileHeader.toString ();
-});
-Clazz.overrideMethod (c$, "getAllCifData",
-function () {
-this.line = "";
-var key;
-var data = null;
-var allData = new java.util.Hashtable ();
-var models = new javajs.util.Lst ();
-allData.put ("models", models);
-try {
-while ((key = this.getNextToken ()) != null) {
-if (key.startsWith ("global_") || key.startsWith ("data_")) {
-models.addLast (data = new java.util.Hashtable ());
-data.put ("name", key);
-continue;
-}if (key.startsWith ("loop_")) {
-this.getAllCifLoopData (data);
-continue;
-}if (key.charAt (0) != '_') {
-System.out.println ("CIF ERROR ? should be an underscore: " + key);
-} else {
-var value = this.getNextToken ();
-if (value == null) {
-System.out.println ("CIF ERROR ? end of file; data missing: " + key);
-} else {
-data.put (this.fixKey (key), value);
-}}}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-try {
-if (this.br != null) this.br.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-return allData;
-});
-Clazz.defineMethod (c$, "getAllCifLoopData",
-($fz = function (data) {
-var key;
-var keyWords = new javajs.util.Lst ();
-while ((key = this.peekToken ()) != null && key.charAt (0) == '_') {
-key = this.fixKey (this.getTokenPeeked ());
-keyWords.addLast (key);
-data.put (key, new javajs.util.Lst ());
-}
-this.fieldCount = keyWords.size ();
-if (this.fieldCount == 0) return;
-this.loopData = new Array (this.fieldCount);
-while (this.getData ()) for (var i = 0; i < this.fieldCount; i++) (data.get (keyWords.get (i))).addLast (this.loopData[i]);
-
-
-}, $fz.isPrivate = true, $fz), "java.util.Map");
-Clazz.overrideMethod (c$, "readLine",
-function () {
-try {
-this.line = (this.reader == null ? this.br.readLine () : this.reader.readNextLine ());
-if (this.line == null) return null;
-if (this.isHeader) {
-if (this.line.startsWith ("#")) this.fileHeader.append (this.line).appendC ('\n');
- else this.isHeader = false;
-}return this.line;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-return null;
-} else {
-throw e;
-}
-}
-});
-Clazz.overrideMethod (c$, "getData",
-function () {
-for (var i = 0; i < this.fieldCount; ++i) if ((this.loopData[i] = this.getNextDataToken ()) == null) return false;
-
-return (this.fieldCount > 0);
-});
-Clazz.overrideMethod (c$, "skipLoop",
-function (doReport) {
-var str;
-var ret = (doReport ? new javajs.util.SB () : null);
-var n = 0;
-while ((str = this.peekToken ()) != null && str.charAt (0) == '_') {
-if (ret != null) ret.append (str).append ("\n");
-this.getTokenPeeked ();
-n++;
-}
-var m = 0;
-while ((str = this.getNextDataToken ()) != null) {
-if (ret == null) continue;
-ret.append (str).append (" ");
-if ((++m % n) == 0) ret.append ("\n");
-}
-return (ret == null ? null : ret.toString ());
-}, "~B");
-Clazz.overrideMethod (c$, "getNextToken",
-function () {
-while (!this.strHasMoreTokens ()) if (this.setStringNextLine () == null) return null;
-
-return this.nextStrToken ();
-});
-Clazz.overrideMethod (c$, "getNextDataToken",
-function () {
-var str = this.peekToken ();
-if (str == null) return null;
-if (this.wasUnQuoted) if (str.charAt (0) == '_' || str.startsWith ("loop_") || str.startsWith ("data_") || str.startsWith ("stop_") || str.startsWith ("global_")) return null;
-return this.getTokenPeeked ();
-});
-Clazz.overrideMethod (c$, "peekToken",
-function () {
-while (!this.strHasMoreTokens ()) if (this.setStringNextLine () == null) return null;
-
-var ich = this.ich;
-this.strPeeked = this.nextStrToken ();
-this.ichPeeked = this.ich;
-this.ich = ich;
-return this.strPeeked;
-});
-Clazz.overrideMethod (c$, "getTokenPeeked",
-function () {
-this.ich = this.ichPeeked;
-return this.strPeeked;
-});
-Clazz.overrideMethod (c$, "fullTrim",
-function (str) {
-var pt0 = -1;
-var pt1 = str.length;
-while (++pt0 < pt1 && javajs.util.PT.isWhitespace (str.charAt (pt0))) {
-}
-while (--pt1 > pt0 && javajs.util.PT.isWhitespace (str.charAt (pt1))) {
-}
-return str.substring (pt0, pt1 + 1);
-}, "~S");
-Clazz.overrideMethod (c$, "toUnicode",
-function (data) {
-var pt;
-try {
-while ((pt = data.indexOf ('\\')) >= 0) {
-var c = data.charCodeAt (pt + 1);
-var ch = (c >= 65 && c <= 90 ? "ABX\u0394E\u03a6\u0393HI_K\u039bMNO\u03a0\u0398P\u03a3TY_\u03a9\u039e\u03a5Z".substring (c - 65, c - 64) : c >= 97 && c <= 122 ? "\u03b1\u03b2\u03c7\u03a4\u03a5\u03c6\u03b3\u03b7\u03b9_\u03ba\u03bb\u03bc\u03bd\u03bf\u03c0\u03b8\u03c1\u03c3\u03c4\u03c5_\u03c9\u03be\u03c5\u03b6".substring (c - 97, c - 96) : "_");
-data = data.substring (0, pt) + ch + data.substring (pt + 2);
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-return data;
-}, "~S");
-Clazz.overrideMethod (c$, "parseLoopParameters",
-function (fields, fieldOf, propertyOf) {
-var propertyCount = 0;
-if (fields == null) {
-this.fields = new Array (100);
-} else {
-if (!javajs.util.CifDataParser.htFields.containsKey (fields[0])) for (var i = fields.length; --i >= 0; ) javajs.util.CifDataParser.htFields.put (fields[i], Integer.$valueOf (i));
-
-for (var i = fields.length; --i >= 0; ) fieldOf[i] = -1;
-
-propertyCount = fields.length;
-}this.fieldCount = 0;
-while (true) {
-var str = this.peekToken ();
-if (str == null) {
-this.fieldCount = 0;
-break;
-}if (str.charAt (0) != '_') break;
-var pt = this.fieldCount++;
-str = this.fixKey (this.getTokenPeeked ());
-if (fields == null) {
-this.fields[propertyOf[pt] = fieldOf[pt] = pt] = str;
-continue;
-}var iField = javajs.util.CifDataParser.htFields.get (str);
-var i = (iField == null ? -1 : iField.intValue ());
-if ((propertyOf[pt] = i) != -1) fieldOf[i] = pt;
-}
-if (this.fieldCount > 0) this.loopData = new Array (this.fieldCount);
-return propertyCount;
-}, "~A,~A,~A");
-Clazz.overrideMethod (c$, "fixKey",
-function (key) {
-return (javajs.util.PT.rep (key.startsWith ("_magnetic") ? key.substring (9) : key.startsWith ("_jana") ? key.substring (5) : key, ".", "_").toLowerCase ());
-}, "~S");
-Clazz.defineMethod (c$, "setString",
-($fz = function (str) {
-this.str = this.line = str;
-this.cch = (str == null ? 0 : str.length);
-this.ich = 0;
-}, $fz.isPrivate = true, $fz), "~S");
-Clazz.defineMethod (c$, "setStringNextLine",
-($fz = function () {
-this.setString (this.readLine ());
-if (this.line == null || this.line.length == 0) return this.line;
-if (this.line.charAt (0) != ';') {
-if (this.str.startsWith ("###non-st#")) this.ich = 10;
-return this.line;
-}this.ich = 1;
-var str = '\1' + this.line.substring (1) + '\n';
-while (this.readLine () != null) {
-if (this.line.startsWith (";")) {
-str = str.substring (0, str.length - 1) + '\1' + this.line.substring (1);
-break;
-}str += this.line + '\n';
-}
-this.setString (str);
-return str;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "strHasMoreTokens",
-($fz = function () {
-if (this.str == null) return false;
-var ch = '#';
-while (this.ich < this.cch && ((ch = this.str.charAt (this.ich)) == ' ' || ch == '\t')) ++this.ich;
-
-return (this.ich < this.cch && ch != '#');
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "nextStrToken",
-($fz = function () {
-if (this.ich == this.cch) return null;
-var ichStart = this.ich;
-var ch = this.str.charAt (ichStart);
-if (ch != '\'' && ch != '"' && ch != '\1') {
-this.wasUnQuoted = true;
-while (this.ich < this.cch && (ch = this.str.charAt (this.ich)) != ' ' && ch != '\t') ++this.ich;
-
-if (this.ich == ichStart + 1) if (this.nullString != null && (this.str.charAt (ichStart) == '.' || this.str.charAt (ichStart) == '?')) return this.nullString;
-var s = this.str.substring (ichStart, this.ich);
-return s;
-}this.wasUnQuoted = false;
-var chOpeningQuote = ch;
-var previousCharacterWasQuote = false;
-while (++this.ich < this.cch) {
-ch = this.str.charAt (this.ich);
-if (previousCharacterWasQuote && (ch == ' ' || ch == '\t')) break;
-previousCharacterWasQuote = (ch == chOpeningQuote);
-}
-if (this.ich == this.cch) {
-if (previousCharacterWasQuote) return this.str.substring (ichStart + 1, this.ich - 1);
-return this.str.substring (ichStart, this.ich);
-}++this.ich;
-return this.str.substring (ichStart + 1, this.ich - 2);
-}, $fz.isPrivate = true, $fz));
-c$.htFields = c$.prototype.htFields = new java.util.Hashtable ();
-Clazz.defineStatics (c$,
-"grABC", "ABX\u0394E\u03a6\u0393HI_K\u039bMNO\u03a0\u0398P\u03a3TY_\u03a9\u039e\u03a5Z",
-"grabc", "\u03b1\u03b2\u03c7\u03a4\u03a5\u03c6\u03b3\u03b7\u03b9_\u03ba\u03bb\u03bc\u03bd\u03bf\u03c0\u03b8\u03c1\u03c3\u03c4\u03c5_\u03c9\u03be\u03c5\u03b6");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.GenericCifDataParser", "java.util.Hashtable", "javajs.util.SB"], "javajs.util.CifDataParser", ["javajs.util.Lst", "$.PT"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.reader = null;
+this.br = null;
+this.line = null;
+this.str = null;
+this.ich = 0;
+this.cch = 0;
+this.wasUnQuoted = false;
+this.strPeeked = null;
+this.ichPeeked = 0;
+this.fieldCount = 0;
+this.loopData = null;
+this.fileHeader = null;
+this.isHeader = true;
+this.nullString = "\0";
+this.fields = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "CifDataParser", null, javajs.api.GenericCifDataParser);
+Clazz.prepareFields (c$, function () {
+this.fileHeader = new javajs.util.SB ();
+});
+Clazz.defineMethod (c$, "setNullValue",
+function (nullString) {
+this.nullString = nullString;
+}, "~S");
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.overrideMethod (c$, "getLoopData",
+function (i) {
+return this.loopData[i];
+}, "~N");
+Clazz.overrideMethod (c$, "getFieldCount",
+function () {
+return this.fieldCount;
+});
+Clazz.overrideMethod (c$, "getField",
+function (i) {
+return this.fields[i];
+}, "~N");
+Clazz.overrideMethod (c$, "set",
+function (reader, br) {
+this.reader = reader;
+this.br = br;
+return this;
+}, "javajs.api.GenericLineReader,java.io.BufferedReader");
+Clazz.overrideMethod (c$, "getFileHeader",
+function () {
+return this.fileHeader.toString ();
+});
+Clazz.overrideMethod (c$, "getAllCifData",
+function () {
+this.line = "";
+var key;
+var data = null;
+var allData = new java.util.Hashtable ();
+var models = new javajs.util.Lst ();
+allData.put ("models", models);
+try {
+while ((key = this.getNextToken ()) != null) {
+if (key.startsWith ("global_") || key.startsWith ("data_")) {
+models.addLast (data = new java.util.Hashtable ());
+data.put ("name", key);
+continue;
+}if (key.startsWith ("loop_")) {
+this.getAllCifLoopData (data);
+continue;
+}if (key.charAt (0) != '_') {
+System.out.println ("CIF ERROR ? should be an underscore: " + key);
+} else {
+var value = this.getNextToken ();
+if (value == null) {
+System.out.println ("CIF ERROR ? end of file; data missing: " + key);
+} else {
+data.put (this.fixKey (key), value);
+}}}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+try {
+if (this.br != null) this.br.close ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+return allData;
+});
+Clazz.defineMethod (c$, "getAllCifLoopData",
+($fz = function (data) {
+var key;
+var keyWords = new javajs.util.Lst ();
+while ((key = this.peekToken ()) != null && key.charAt (0) == '_') {
+key = this.fixKey (this.getTokenPeeked ());
+keyWords.addLast (key);
+data.put (key, new javajs.util.Lst ());
+}
+this.fieldCount = keyWords.size ();
+if (this.fieldCount == 0) return;
+this.loopData = new Array (this.fieldCount);
+while (this.getData ()) for (var i = 0; i < this.fieldCount; i++) (data.get (keyWords.get (i))).addLast (this.loopData[i]);
+
+
+}, $fz.isPrivate = true, $fz), "java.util.Map");
+Clazz.overrideMethod (c$, "readLine",
+function () {
+try {
+this.line = (this.reader == null ? this.br.readLine () : this.reader.readNextLine ());
+if (this.line == null) return null;
+if (this.isHeader) {
+if (this.line.startsWith ("#")) this.fileHeader.append (this.line).appendC ('\n');
+ else this.isHeader = false;
+}return this.line;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+return null;
+} else {
+throw e;
+}
+}
+});
+Clazz.overrideMethod (c$, "getData",
+function () {
+for (var i = 0; i < this.fieldCount; ++i) if ((this.loopData[i] = this.getNextDataToken ()) == null) return false;
+
+return (this.fieldCount > 0);
+});
+Clazz.overrideMethod (c$, "skipLoop",
+function (doReport) {
+var str;
+var ret = (doReport ? new javajs.util.SB () : null);
+var n = 0;
+while ((str = this.peekToken ()) != null && str.charAt (0) == '_') {
+if (ret != null) ret.append (str).append ("\n");
+this.getTokenPeeked ();
+n++;
+}
+var m = 0;
+while ((str = this.getNextDataToken ()) != null) {
+if (ret == null) continue;
+ret.append (str).append (" ");
+if ((++m % n) == 0) ret.append ("\n");
+}
+return (ret == null ? null : ret.toString ());
+}, "~B");
+Clazz.overrideMethod (c$, "getNextToken",
+function () {
+while (!this.strHasMoreTokens ()) if (this.setStringNextLine () == null) return null;
+
+return this.nextStrToken ();
+});
+Clazz.overrideMethod (c$, "getNextDataToken",
+function () {
+var str = this.peekToken ();
+if (str == null) return null;
+if (this.wasUnQuoted) if (str.charAt (0) == '_' || str.startsWith ("loop_") || str.startsWith ("data_") || str.startsWith ("stop_") || str.startsWith ("global_")) return null;
+return this.getTokenPeeked ();
+});
+Clazz.overrideMethod (c$, "peekToken",
+function () {
+while (!this.strHasMoreTokens ()) if (this.setStringNextLine () == null) return null;
+
+var ich = this.ich;
+this.strPeeked = this.nextStrToken ();
+this.ichPeeked = this.ich;
+this.ich = ich;
+return this.strPeeked;
+});
+Clazz.overrideMethod (c$, "getTokenPeeked",
+function () {
+this.ich = this.ichPeeked;
+return this.strPeeked;
+});
+Clazz.overrideMethod (c$, "fullTrim",
+function (str) {
+var pt0 = -1;
+var pt1 = str.length;
+while (++pt0 < pt1 && javajs.util.PT.isWhitespace (str.charAt (pt0))) {
+}
+while (--pt1 > pt0 && javajs.util.PT.isWhitespace (str.charAt (pt1))) {
+}
+return str.substring (pt0, pt1 + 1);
+}, "~S");
+Clazz.overrideMethod (c$, "toUnicode",
+function (data) {
+var pt;
+try {
+while ((pt = data.indexOf ('\\')) >= 0) {
+var c = data.charCodeAt (pt + 1);
+var ch = (c >= 65 && c <= 90 ? "ABX\u0394E\u03a6\u0393HI_K\u039bMNO\u03a0\u0398P\u03a3TY_\u03a9\u039e\u03a5Z".substring (c - 65, c - 64) : c >= 97 && c <= 122 ? "\u03b1\u03b2\u03c7\u03a4\u03a5\u03c6\u03b3\u03b7\u03b9_\u03ba\u03bb\u03bc\u03bd\u03bf\u03c0\u03b8\u03c1\u03c3\u03c4\u03c5_\u03c9\u03be\u03c5\u03b6".substring (c - 97, c - 96) : "_");
+data = data.substring (0, pt) + ch + data.substring (pt + 2);
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+return data;
+}, "~S");
+Clazz.overrideMethod (c$, "parseLoopParameters",
+function (fields, fieldOf, propertyOf) {
+var propertyCount = 0;
+if (fields == null) {
+this.fields = new Array (100);
+} else {
+if (!javajs.util.CifDataParser.htFields.containsKey (fields[0])) for (var i = fields.length; --i >= 0; ) javajs.util.CifDataParser.htFields.put (fields[i], Integer.$valueOf (i));
+
+for (var i = fields.length; --i >= 0; ) fieldOf[i] = -1;
+
+propertyCount = fields.length;
+}this.fieldCount = 0;
+while (true) {
+var str = this.peekToken ();
+if (str == null) {
+this.fieldCount = 0;
+break;
+}if (str.charAt (0) != '_') break;
+var pt = this.fieldCount++;
+str = this.fixKey (this.getTokenPeeked ());
+if (fields == null) {
+this.fields[propertyOf[pt] = fieldOf[pt] = pt] = str;
+continue;
+}var iField = javajs.util.CifDataParser.htFields.get (str);
+var i = (iField == null ? -1 : iField.intValue ());
+if ((propertyOf[pt] = i) != -1) fieldOf[i] = pt;
+}
+if (this.fieldCount > 0) this.loopData = new Array (this.fieldCount);
+return propertyCount;
+}, "~A,~A,~A");
+Clazz.overrideMethod (c$, "fixKey",
+function (key) {
+return (javajs.util.PT.rep (key.startsWith ("_magnetic") ? key.substring (9) : key.startsWith ("_jana") ? key.substring (5) : key, ".", "_").toLowerCase ());
+}, "~S");
+Clazz.defineMethod (c$, "setString",
+($fz = function (str) {
+this.str = this.line = str;
+this.cch = (str == null ? 0 : str.length);
+this.ich = 0;
+}, $fz.isPrivate = true, $fz), "~S");
+Clazz.defineMethod (c$, "setStringNextLine",
+($fz = function () {
+this.setString (this.readLine ());
+if (this.line == null || this.line.length == 0) return this.line;
+if (this.line.charAt (0) != ';') {
+if (this.str.startsWith ("###non-st#")) this.ich = 10;
+return this.line;
+}this.ich = 1;
+var str = '\1' + this.line.substring (1) + '\n';
+while (this.readLine () != null) {
+if (this.line.startsWith (";")) {
+str = str.substring (0, str.length - 1) + '\1' + this.line.substring (1);
+break;
+}str += this.line + '\n';
+}
+this.setString (str);
+return str;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "strHasMoreTokens",
+($fz = function () {
+if (this.str == null) return false;
+var ch = '#';
+while (this.ich < this.cch && ((ch = this.str.charAt (this.ich)) == ' ' || ch == '\t')) ++this.ich;
+
+return (this.ich < this.cch && ch != '#');
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "nextStrToken",
+($fz = function () {
+if (this.ich == this.cch) return null;
+var ichStart = this.ich;
+var ch = this.str.charAt (ichStart);
+if (ch != '\'' && ch != '"' && ch != '\1') {
+this.wasUnQuoted = true;
+while (this.ich < this.cch && (ch = this.str.charAt (this.ich)) != ' ' && ch != '\t') ++this.ich;
+
+if (this.ich == ichStart + 1) if (this.nullString != null && (this.str.charAt (ichStart) == '.' || this.str.charAt (ichStart) == '?')) return this.nullString;
+var s = this.str.substring (ichStart, this.ich);
+return s;
+}this.wasUnQuoted = false;
+var chOpeningQuote = ch;
+var previousCharacterWasQuote = false;
+while (++this.ich < this.cch) {
+ch = this.str.charAt (this.ich);
+if (previousCharacterWasQuote && (ch == ' ' || ch == '\t')) break;
+previousCharacterWasQuote = (ch == chOpeningQuote);
+}
+if (this.ich == this.cch) {
+if (previousCharacterWasQuote) return this.str.substring (ichStart + 1, this.ich - 1);
+return this.str.substring (ichStart, this.ich);
+}++this.ich;
+return this.str.substring (ichStart + 1, this.ich - 2);
+}, $fz.isPrivate = true, $fz));
+c$.htFields = c$.prototype.htFields = new java.util.Hashtable ();
+Clazz.defineStatics (c$,
+"grABC", "ABX\u0394E\u03a6\u0393HI_K\u039bMNO\u03a0\u0398P\u03a3TY_\u03a9\u039e\u03a5Z",
+"grabc", "\u03b1\u03b2\u03c7\u03a4\u03a5\u03c6\u03b3\u03b7\u03b9_\u03ba\u03bb\u03bc\u03bd\u03bf\u03c0\u03b8\u03c1\u03c3\u03c4\u03c5_\u03c9\u03be\u03c5\u03b6");
+});
diff --git a/bin/javajs/util/CompoundDocDirEntry.js b/bin/javajs/util/CompoundDocDirEntry.js
index d792190..5c3ab43 100644
--- a/bin/javajs/util/CompoundDocDirEntry.js
+++ b/bin/javajs/util/CompoundDocDirEntry.js
@@ -1,58 +1,58 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.decorateAsClass (function () {
-this.cd = null;
-this.unicodeName64 = null;
-this.nBytesUnicodeName = 0;
-this.entryType = 0;
-this.uniqueID16 = null;
-this.userflags4 = null;
-this.SIDfirstSector = 0;
-this.lenStream = 0;
-this.unused = null;
-this.entryName = null;
-this.isStandard = false;
-this.isEmpty = false;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "CompoundDocDirEntry");
-Clazz.prepareFields (c$, function () {
-this.unicodeName64 = Clazz.newByteArray (64, 0);
-this.uniqueID16 = Clazz.newByteArray (16, 0);
-this.userflags4 = Clazz.newByteArray (4, 0);
-this.unused = Clazz.newByteArray (8, 0);
-});
-Clazz.makeConstructor (c$,
-function (compoundDocument) {
-this.cd = compoundDocument;
-}, "javajs.util.CompoundDocument");
-Clazz.defineMethod (c$, "readData",
-function () {
-try {
-this.cd.readByteArray (this.unicodeName64, 0, 64);
-this.nBytesUnicodeName = this.cd.readShort ();
-this.entryType = this.cd.readByte ();
-this.cd.readByte ();
-this.cd.readInt ();
-this.cd.readInt ();
-this.cd.readInt ();
-this.cd.readByteArray (this.uniqueID16, 0, 16);
-this.cd.readByteArray (this.userflags4, 0, 4);
-this.cd.readByteArray (this.unused, 0, 8);
-this.cd.readByteArray (this.unused, 0, 8);
-this.SIDfirstSector = this.cd.readInt ();
-this.lenStream = this.cd.readInt ();
-this.cd.readByteArray (this.unused, 0, 4);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-return false;
-} else {
-throw e;
-}
-}
-this.entryName = "";
-for (var i = 0; i < this.nBytesUnicodeName - 2; i += 2) this.entryName += String.fromCharCode (this.unicodeName64[i]);
-
-this.isStandard = (this.entryType == 5 || this.lenStream >= this.cd.header.minBytesStandardStream);
-this.isEmpty = (this.entryType == 0 || this.lenStream <= 0);
-return true;
-});
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.decorateAsClass (function () {
+this.cd = null;
+this.unicodeName64 = null;
+this.nBytesUnicodeName = 0;
+this.entryType = 0;
+this.uniqueID16 = null;
+this.userflags4 = null;
+this.SIDfirstSector = 0;
+this.lenStream = 0;
+this.unused = null;
+this.entryName = null;
+this.isStandard = false;
+this.isEmpty = false;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "CompoundDocDirEntry");
+Clazz.prepareFields (c$, function () {
+this.unicodeName64 = Clazz.newByteArray (64, 0);
+this.uniqueID16 = Clazz.newByteArray (16, 0);
+this.userflags4 = Clazz.newByteArray (4, 0);
+this.unused = Clazz.newByteArray (8, 0);
+});
+Clazz.makeConstructor (c$,
+function (compoundDocument) {
+this.cd = compoundDocument;
+}, "javajs.util.CompoundDocument");
+Clazz.defineMethod (c$, "readData",
+function () {
+try {
+this.cd.readByteArray (this.unicodeName64, 0, 64);
+this.nBytesUnicodeName = this.cd.readShort ();
+this.entryType = this.cd.readByte ();
+this.cd.readByte ();
+this.cd.readInt ();
+this.cd.readInt ();
+this.cd.readInt ();
+this.cd.readByteArray (this.uniqueID16, 0, 16);
+this.cd.readByteArray (this.userflags4, 0, 4);
+this.cd.readByteArray (this.unused, 0, 8);
+this.cd.readByteArray (this.unused, 0, 8);
+this.SIDfirstSector = this.cd.readInt ();
+this.lenStream = this.cd.readInt ();
+this.cd.readByteArray (this.unused, 0, 4);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+return false;
+} else {
+throw e;
+}
+}
+this.entryName = "";
+for (var i = 0; i < this.nBytesUnicodeName - 2; i += 2) this.entryName += String.fromCharCode (this.unicodeName64[i]);
+
+this.isStandard = (this.entryType == 5 || this.lenStream >= this.cd.header.minBytesStandardStream);
+this.isEmpty = (this.entryType == 0 || this.lenStream <= 0);
+return true;
+});
diff --git a/bin/javajs/util/CompoundDocHeader.js b/bin/javajs/util/CompoundDocHeader.js
index 14d9c45..30d7fd1 100644
--- a/bin/javajs/util/CompoundDocHeader.js
+++ b/bin/javajs/util/CompoundDocHeader.js
@@ -1,66 +1,66 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.decorateAsClass (function () {
-this.cd = null;
-this.magicNumbers = null;
-this.uniqueID16 = null;
-this.revNumber = 0;
-this.verNumber = 0;
-this.sectorPower = 0;
-this.shortSectorPower = 0;
-this.unused = null;
-this.nSATsectors = 0;
-this.SID_DIR_start = 0;
-this.minBytesStandardStream = 0;
-this.SID_SSAT_start = 0;
-this.nSSATsectors = 0;
-this.SID_MSAT_next = 0;
-this.nAdditionalMATsectors = 0;
-this.MSAT0 = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "CompoundDocHeader");
-Clazz.prepareFields (c$, function () {
-this.magicNumbers = Clazz.newByteArray (8, 0);
-this.uniqueID16 = Clazz.newByteArray (16, 0);
-this.unused = Clazz.newByteArray (10, 0);
-this.MSAT0 = Clazz.newIntArray (109, 0);
-});
-Clazz.makeConstructor (c$,
-function (compoundDocument) {
-this.cd = compoundDocument;
-}, "javajs.util.CompoundDocument");
-Clazz.defineMethod (c$, "readData",
-function () {
-try {
-this.cd.readByteArray (this.magicNumbers, 0, 8);
-if (this.magicNumbers[0] != 0xD0 || this.magicNumbers[1] != 0xCF || this.magicNumbers[2] != 0x11 || this.magicNumbers[3] != 0xE0 || this.magicNumbers[4] != 0xA1 || this.magicNumbers[5] != 0xB1 || this.magicNumbers[6] != 0x1A || this.magicNumbers[7] != 0xE1) return false;
-this.cd.readByteArray (this.uniqueID16, 0, 16);
-this.revNumber = this.cd.readByte ();
-this.cd.readByte ();
-this.verNumber = this.cd.readByte ();
-this.cd.readByte ();
-var b1 = this.cd.readByte ();
-var b2 = this.cd.readByte ();
-this.cd.isBigEndian = (b1 == -1 && b2 == -2);
-this.sectorPower = this.cd.readShort ();
-this.shortSectorPower = this.cd.readShort ();
-this.cd.readByteArray (this.unused, 0, 10);
-this.nSATsectors = this.cd.readInt ();
-this.SID_DIR_start = this.cd.readInt ();
-this.cd.readByteArray (this.unused, 0, 4);
-this.minBytesStandardStream = this.cd.readInt ();
-this.SID_SSAT_start = this.cd.readInt ();
-this.nSSATsectors = this.cd.readInt ();
-this.SID_MSAT_next = this.cd.readInt ();
-this.nAdditionalMATsectors = this.cd.readInt ();
-for (var i = 0; i < 109; i++) this.MSAT0[i] = this.cd.readInt ();
-
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-return false;
-} else {
-throw e;
-}
-}
-return true;
-});
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.decorateAsClass (function () {
+this.cd = null;
+this.magicNumbers = null;
+this.uniqueID16 = null;
+this.revNumber = 0;
+this.verNumber = 0;
+this.sectorPower = 0;
+this.shortSectorPower = 0;
+this.unused = null;
+this.nSATsectors = 0;
+this.SID_DIR_start = 0;
+this.minBytesStandardStream = 0;
+this.SID_SSAT_start = 0;
+this.nSSATsectors = 0;
+this.SID_MSAT_next = 0;
+this.nAdditionalMATsectors = 0;
+this.MSAT0 = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "CompoundDocHeader");
+Clazz.prepareFields (c$, function () {
+this.magicNumbers = Clazz.newByteArray (8, 0);
+this.uniqueID16 = Clazz.newByteArray (16, 0);
+this.unused = Clazz.newByteArray (10, 0);
+this.MSAT0 = Clazz.newIntArray (109, 0);
+});
+Clazz.makeConstructor (c$,
+function (compoundDocument) {
+this.cd = compoundDocument;
+}, "javajs.util.CompoundDocument");
+Clazz.defineMethod (c$, "readData",
+function () {
+try {
+this.cd.readByteArray (this.magicNumbers, 0, 8);
+if (this.magicNumbers[0] != 0xD0 || this.magicNumbers[1] != 0xCF || this.magicNumbers[2] != 0x11 || this.magicNumbers[3] != 0xE0 || this.magicNumbers[4] != 0xA1 || this.magicNumbers[5] != 0xB1 || this.magicNumbers[6] != 0x1A || this.magicNumbers[7] != 0xE1) return false;
+this.cd.readByteArray (this.uniqueID16, 0, 16);
+this.revNumber = this.cd.readByte ();
+this.cd.readByte ();
+this.verNumber = this.cd.readByte ();
+this.cd.readByte ();
+var b1 = this.cd.readByte ();
+var b2 = this.cd.readByte ();
+this.cd.isBigEndian = (b1 == -1 && b2 == -2);
+this.sectorPower = this.cd.readShort ();
+this.shortSectorPower = this.cd.readShort ();
+this.cd.readByteArray (this.unused, 0, 10);
+this.nSATsectors = this.cd.readInt ();
+this.SID_DIR_start = this.cd.readInt ();
+this.cd.readByteArray (this.unused, 0, 4);
+this.minBytesStandardStream = this.cd.readInt ();
+this.SID_SSAT_start = this.cd.readInt ();
+this.nSSATsectors = this.cd.readInt ();
+this.SID_MSAT_next = this.cd.readInt ();
+this.nAdditionalMATsectors = this.cd.readInt ();
+for (var i = 0; i < 109; i++) this.MSAT0[i] = this.cd.readInt ();
+
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+return false;
+} else {
+throw e;
+}
+}
+return true;
+});
diff --git a/bin/javajs/util/CompoundDocument.class b/bin/javajs/util/CompoundDocument.class
index ef31fcf..d2a24d4 100644
Binary files a/bin/javajs/util/CompoundDocument.class and b/bin/javajs/util/CompoundDocument.class differ
diff --git a/bin/javajs/util/CompoundDocument.js b/bin/javajs/util/CompoundDocument.js
index 7e480bc..a37c69e 100644
--- a/bin/javajs/util/CompoundDocument.js
+++ b/bin/javajs/util/CompoundDocument.js
@@ -1,286 +1,286 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.BinaryDocument", "$.CompoundDocHeader", "$.Lst"], "javajs.util.CompoundDocument", ["java.io.DataInputStream", "javajs.util.CompoundDocDirEntry", "$.SB", "$.ZipData"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.header = null;
-this.directory = null;
-this.rootEntry = null;
-this.SAT = null;
-this.SSAT = null;
-this.sectorSize = 0;
-this.shortSectorSize = 0;
-this.nShortSectorsPerStandardSector = 0;
-this.nIntPerSector = 0;
-this.nDirEntriesperSector = 0;
-this.data = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "CompoundDocument", javajs.util.BinaryDocument);
-Clazz.prepareFields (c$, function () {
-this.header = new javajs.util.CompoundDocHeader (this);
-this.directory = new javajs.util.Lst ();
-});
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.util.CompoundDocument);
-this.isBigEndian = true;
-});
-Clazz.overrideMethod (c$, "setStream",
-function (jzt, bis, isBigEndian) {
-this.jzt = jzt;
-if (!this.isRandom) {
-this.stream = new java.io.DataInputStream (bis);
-}this.stream.mark (2147483647);
-if (!this.readHeader ()) return;
-this.getSectorAllocationTable ();
-this.getShortSectorAllocationTable ();
-this.getDirectoryTable ();
-}, "javajs.api.GenericZipTools,java.io.BufferedInputStream,~B");
-Clazz.defineMethod (c$, "getDirectory",
-function () {
-return this.directory;
-});
-Clazz.defineMethod (c$, "getDirectoryListing",
-function (separator) {
-var str = "";
-for (var i = 0; i < this.directory.size (); i++) {
-var thisEntry = this.directory.get (i);
-if (!thisEntry.isEmpty) str += separator + thisEntry.entryName + "\tlen=" + thisEntry.lenStream + "\tSID=" + thisEntry.SIDfirstSector + (thisEntry.isStandard ? "\tfileOffset=" + this.getOffset (thisEntry.SIDfirstSector) : "");
-}
-return str;
-}, "~S");
-Clazz.defineMethod (c$, "getAllData",
-function () {
-return this.getAllDataFiles (null, null);
-});
-Clazz.overrideMethod (c$, "getAllDataMapped",
-function (prefix, binaryFileList, fileData) {
-fileData.put ("#Directory_Listing", this.getDirectoryListing ("|"));
-binaryFileList = "|" + binaryFileList + "|";
-for (var i = 0; i < this.directory.size (); i++) {
-var thisEntry = this.directory.get (i);
-if (!thisEntry.isEmpty && thisEntry.entryType != 5) {
-var name = thisEntry.entryName;
-System.out.println ("CompoundDocument file " + name);
-var isBinary = (binaryFileList.indexOf ("|" + name + "|") >= 0);
-if (isBinary) name += ":asBinaryString";
-var data = new javajs.util.SB ();
-data.append ("BEGIN Directory Entry ").append (name).append ("\n");
-data.appendSB (this.getEntryAsString (thisEntry, isBinary));
-data.append ("\nEND Directory Entry ").append (name).append ("\n");
-fileData.put (prefix + "/" + name, data.toString ());
-}}
-this.close ();
-}, "~S,~S,java.util.Map");
-Clazz.overrideMethod (c$, "getAllDataFiles",
-function (binaryFileList, firstFile) {
-if (firstFile != null) {
-for (var i = 0; i < this.directory.size (); i++) {
-var thisEntry = this.directory.get (i);
-if (thisEntry.entryName.equals (firstFile)) {
-this.directory.remove (i);
-this.directory.add (1, thisEntry);
-break;
-}}
-}this.data = new javajs.util.SB ();
-this.data.append ("Compound Document File Directory: ");
-this.data.append (this.getDirectoryListing ("|"));
-this.data.append ("\n");
-binaryFileList = "|" + binaryFileList + "|";
-for (var i = 0; i < this.directory.size (); i++) {
-var thisEntry = this.directory.get (i);
-if (!thisEntry.isEmpty && thisEntry.entryType != 5) {
-var name = thisEntry.entryName;
-if (name.endsWith (".gz")) name = name.substring (0, name.length - 3);
-this.data.append ("BEGIN Directory Entry ").append (name).append ("\n");
-this.data.appendSB (this.getEntryAsString (thisEntry, binaryFileList.indexOf ("|" + thisEntry.entryName + "|") >= 0));
-this.data.append ("\n");
-this.data.append ("END Directory Entry ").append (thisEntry.entryName).append ("\n");
-}}
-this.close ();
-return this.data;
-}, "~S,~S");
-Clazz.defineMethod (c$, "getFileAsString",
-function (entryName) {
-for (var i = 0; i < this.directory.size (); i++) {
-var thisEntry = this.directory.get (i);
-if (thisEntry.entryName.equals (entryName)) return this.getEntryAsString (thisEntry, false);
-}
-return new javajs.util.SB ();
-}, "~S");
-Clazz.defineMethod (c$, "getOffset",
-($fz = function (SID) {
-return (SID + 1) * this.sectorSize;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "gotoSector",
-($fz = function (SID) {
-this.seek (this.getOffset (SID));
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "readHeader",
-($fz = function () {
-if (!this.header.readData ()) return false;
-this.sectorSize = 1 << this.header.sectorPower;
-this.shortSectorSize = 1 << this.header.shortSectorPower;
-this.nShortSectorsPerStandardSector = Clazz.doubleToInt (this.sectorSize / this.shortSectorSize);
-this.nIntPerSector = Clazz.doubleToInt (this.sectorSize / 4);
-this.nDirEntriesperSector = Clazz.doubleToInt (this.sectorSize / 128);
-return true;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getSectorAllocationTable",
-($fz = function () {
-var nSID = 0;
-var thisSID;
-this.SAT = Clazz.newIntArray (this.header.nSATsectors * this.nIntPerSector + 109, 0);
-try {
-for (var i = 0; i < 109; i++) {
-thisSID = this.header.MSAT0[i];
-if (thisSID < 0) break;
-this.gotoSector (thisSID);
-for (var j = 0; j < this.nIntPerSector; j++) {
-this.SAT[nSID++] = this.readInt ();
-}
-}
-var nMaster = this.header.nAdditionalMATsectors;
-thisSID = this.header.SID_MSAT_next;
-var MSAT = Clazz.newIntArray (this.nIntPerSector, 0);
-out : while (nMaster-- > 0 && thisSID >= 0) {
-this.gotoSector (thisSID);
-for (var i = 0; i < this.nIntPerSector; i++) MSAT[i] = this.readInt ();
-
-for (var i = 0; i < this.nIntPerSector - 1; i++) {
-thisSID = MSAT[i];
-if (thisSID < 0) break out;
-this.gotoSector (thisSID);
-for (var j = this.nIntPerSector; --j >= 0; ) this.SAT[nSID++] = this.readInt ();
-
-}
-thisSID = MSAT[this.nIntPerSector - 1];
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getShortSectorAllocationTable",
-($fz = function () {
-var nSSID = 0;
-var thisSID = this.header.SID_SSAT_start;
-var nMax = this.header.nSSATsectors * this.nIntPerSector;
-this.SSAT = Clazz.newIntArray (nMax, 0);
-try {
-while (thisSID > 0 && nSSID < nMax) {
-this.gotoSector (thisSID);
-for (var j = 0; j < this.nIntPerSector; j++) {
-this.SSAT[nSSID++] = this.readInt ();
-}
-thisSID = this.SAT[thisSID];
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getDirectoryTable",
-($fz = function () {
-var thisSID = this.header.SID_DIR_start;
-var thisEntry;
-this.rootEntry = null;
-try {
-while (thisSID > 0) {
-this.gotoSector (thisSID);
-for (var j = this.nDirEntriesperSector; --j >= 0; ) {
-thisEntry = new javajs.util.CompoundDocDirEntry (this);
-thisEntry.readData ();
-if (thisEntry.lenStream > 0) {
-this.directory.addLast (thisEntry);
-}if (thisEntry.entryType == 5) this.rootEntry = thisEntry;
-}
-thisSID = this.SAT[thisSID];
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getEntryAsString",
-($fz = function (thisEntry, asBinaryString) {
-if (thisEntry.isEmpty) return new javajs.util.SB ();
-return (thisEntry.isStandard ? this.getStandardStringData (thisEntry.SIDfirstSector, thisEntry.lenStream, asBinaryString) : this.getShortStringData (thisEntry.SIDfirstSector, thisEntry.lenStream, asBinaryString));
-}, $fz.isPrivate = true, $fz), "javajs.util.CompoundDocDirEntry,~B");
-Clazz.defineMethod (c$, "getStandardStringData",
-($fz = function (thisSID, nBytes, asBinaryString) {
-var data = new javajs.util.SB ();
-var byteBuf = Clazz.newByteArray (this.sectorSize, 0);
-var gzipData = new javajs.util.ZipData (nBytes);
-try {
-while (thisSID > 0 && nBytes > 0) {
-this.gotoSector (thisSID);
-nBytes = this.getSectorData (data, byteBuf, this.sectorSize, nBytes, asBinaryString, gzipData);
-thisSID = this.SAT[thisSID];
-}
-if (nBytes == -9999) return new javajs.util.SB ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-if (gzipData.isEnabled) gzipData.addTo (this.jzt, data);
-return data;
-}, $fz.isPrivate = true, $fz), "~N,~N,~B");
-Clazz.defineMethod (c$, "getSectorData",
-($fz = function (data, byteBuf, nSectorBytes, nBytes, asBinaryString, gzipData) {
-this.readByteArray (byteBuf, 0, byteBuf.length);
-var n = gzipData.addBytes (byteBuf, nSectorBytes, nBytes);
-if (n >= 0) return n;
-if (asBinaryString) {
-for (var i = 0; i < nSectorBytes; i++) {
-data.append (Integer.toHexString (byteBuf[i] & 0xFF)).appendC (' ');
-if (--nBytes < 1) break;
-}
-} else {
-for (var i = 0; i < nSectorBytes; i++) {
-if (byteBuf[i] == 0) return -9999;
-data.appendC (String.fromCharCode (byteBuf[i]));
-if (--nBytes < 1) break;
-}
-}return nBytes;
-}, $fz.isPrivate = true, $fz), "javajs.util.SB,~A,~N,~N,~B,javajs.util.ZipData");
-Clazz.defineMethod (c$, "getShortStringData",
-($fz = function (shortSID, nBytes, asBinaryString) {
-var data = new javajs.util.SB ();
-if (this.rootEntry == null) return data;
-var thisSID = this.rootEntry.SIDfirstSector;
-var ptShort = 0;
-var byteBuf = Clazz.newByteArray (this.shortSectorSize, 0);
-var gzipData = new javajs.util.ZipData (nBytes);
-try {
-while (thisSID >= 0 && shortSID >= 0 && nBytes > 0) {
-while (shortSID - ptShort >= this.nShortSectorsPerStandardSector) {
-ptShort += this.nShortSectorsPerStandardSector;
-thisSID = this.SAT[thisSID];
-}
-this.seek (this.getOffset (thisSID) + (shortSID - ptShort) * this.shortSectorSize);
-nBytes = this.getSectorData (data, byteBuf, this.shortSectorSize, nBytes, asBinaryString, gzipData);
-shortSID = this.SSAT[shortSID];
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (data.toString ());
-System.out.println ("reader error in CompoundDocument " + e.toString ());
-} else {
-throw e;
-}
-}
-if (gzipData.isEnabled) gzipData.addTo (this.jzt, data);
-return data;
-}, $fz.isPrivate = true, $fz), "~N,~N,~B");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.BinaryDocument", "$.CompoundDocHeader", "$.Lst"], "javajs.util.CompoundDocument", ["java.io.DataInputStream", "javajs.util.CompoundDocDirEntry", "$.SB", "$.ZipData"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.header = null;
+this.directory = null;
+this.rootEntry = null;
+this.SAT = null;
+this.SSAT = null;
+this.sectorSize = 0;
+this.shortSectorSize = 0;
+this.nShortSectorsPerStandardSector = 0;
+this.nIntPerSector = 0;
+this.nDirEntriesperSector = 0;
+this.data = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "CompoundDocument", javajs.util.BinaryDocument);
+Clazz.prepareFields (c$, function () {
+this.header = new javajs.util.CompoundDocHeader (this);
+this.directory = new javajs.util.Lst ();
+});
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.util.CompoundDocument);
+this.isBigEndian = true;
+});
+Clazz.overrideMethod (c$, "setStream",
+function (jzt, bis, isBigEndian) {
+this.jzt = jzt;
+if (!this.isRandom) {
+this.stream = new java.io.DataInputStream (bis);
+}this.stream.mark (2147483647);
+if (!this.readHeader ()) return;
+this.getSectorAllocationTable ();
+this.getShortSectorAllocationTable ();
+this.getDirectoryTable ();
+}, "javajs.api.GenericZipTools,java.io.BufferedInputStream,~B");
+Clazz.defineMethod (c$, "getDirectory",
+function () {
+return this.directory;
+});
+Clazz.defineMethod (c$, "getDirectoryListing",
+function (separator) {
+var str = "";
+for (var i = 0; i < this.directory.size (); i++) {
+var thisEntry = this.directory.get (i);
+if (!thisEntry.isEmpty) str += separator + thisEntry.entryName + "\tlen=" + thisEntry.lenStream + "\tSID=" + thisEntry.SIDfirstSector + (thisEntry.isStandard ? "\tfileOffset=" + this.getOffset (thisEntry.SIDfirstSector) : "");
+}
+return str;
+}, "~S");
+Clazz.defineMethod (c$, "getAllData",
+function () {
+return this.getAllDataFiles (null, null);
+});
+Clazz.overrideMethod (c$, "getAllDataMapped",
+function (prefix, binaryFileList, fileData) {
+fileData.put ("#Directory_Listing", this.getDirectoryListing ("|"));
+binaryFileList = "|" + binaryFileList + "|";
+for (var i = 0; i < this.directory.size (); i++) {
+var thisEntry = this.directory.get (i);
+if (!thisEntry.isEmpty && thisEntry.entryType != 5) {
+var name = thisEntry.entryName;
+System.out.println ("CompoundDocument file " + name);
+var isBinary = (binaryFileList.indexOf ("|" + name + "|") >= 0);
+if (isBinary) name += ":asBinaryString";
+var data = new javajs.util.SB ();
+data.append ("BEGIN Directory Entry ").append (name).append ("\n");
+data.appendSB (this.getEntryAsString (thisEntry, isBinary));
+data.append ("\nEND Directory Entry ").append (name).append ("\n");
+fileData.put (prefix + "/" + name, data.toString ());
+}}
+this.close ();
+}, "~S,~S,java.util.Map");
+Clazz.overrideMethod (c$, "getAllDataFiles",
+function (binaryFileList, firstFile) {
+if (firstFile != null) {
+for (var i = 0; i < this.directory.size (); i++) {
+var thisEntry = this.directory.get (i);
+if (thisEntry.entryName.equals (firstFile)) {
+this.directory.remove (i);
+this.directory.add (1, thisEntry);
+break;
+}}
+}this.data = new javajs.util.SB ();
+this.data.append ("Compound Document File Directory: ");
+this.data.append (this.getDirectoryListing ("|"));
+this.data.append ("\n");
+binaryFileList = "|" + binaryFileList + "|";
+for (var i = 0; i < this.directory.size (); i++) {
+var thisEntry = this.directory.get (i);
+if (!thisEntry.isEmpty && thisEntry.entryType != 5) {
+var name = thisEntry.entryName;
+if (name.endsWith (".gz")) name = name.substring (0, name.length - 3);
+this.data.append ("BEGIN Directory Entry ").append (name).append ("\n");
+this.data.appendSB (this.getEntryAsString (thisEntry, binaryFileList.indexOf ("|" + thisEntry.entryName + "|") >= 0));
+this.data.append ("\n");
+this.data.append ("END Directory Entry ").append (thisEntry.entryName).append ("\n");
+}}
+this.close ();
+return this.data;
+}, "~S,~S");
+Clazz.defineMethod (c$, "getFileAsString",
+function (entryName) {
+for (var i = 0; i < this.directory.size (); i++) {
+var thisEntry = this.directory.get (i);
+if (thisEntry.entryName.equals (entryName)) return this.getEntryAsString (thisEntry, false);
+}
+return new javajs.util.SB ();
+}, "~S");
+Clazz.defineMethod (c$, "getOffset",
+($fz = function (SID) {
+return (SID + 1) * this.sectorSize;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "gotoSector",
+($fz = function (SID) {
+this.seek (this.getOffset (SID));
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "readHeader",
+($fz = function () {
+if (!this.header.readData ()) return false;
+this.sectorSize = 1 << this.header.sectorPower;
+this.shortSectorSize = 1 << this.header.shortSectorPower;
+this.nShortSectorsPerStandardSector = Clazz.doubleToInt (this.sectorSize / this.shortSectorSize);
+this.nIntPerSector = Clazz.doubleToInt (this.sectorSize / 4);
+this.nDirEntriesperSector = Clazz.doubleToInt (this.sectorSize / 128);
+return true;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getSectorAllocationTable",
+($fz = function () {
+var nSID = 0;
+var thisSID;
+this.SAT = Clazz.newIntArray (this.header.nSATsectors * this.nIntPerSector + 109, 0);
+try {
+for (var i = 0; i < 109; i++) {
+thisSID = this.header.MSAT0[i];
+if (thisSID < 0) break;
+this.gotoSector (thisSID);
+for (var j = 0; j < this.nIntPerSector; j++) {
+this.SAT[nSID++] = this.readInt ();
+}
+}
+var nMaster = this.header.nAdditionalMATsectors;
+thisSID = this.header.SID_MSAT_next;
+var MSAT = Clazz.newIntArray (this.nIntPerSector, 0);
+out : while (nMaster-- > 0 && thisSID >= 0) {
+this.gotoSector (thisSID);
+for (var i = 0; i < this.nIntPerSector; i++) MSAT[i] = this.readInt ();
+
+for (var i = 0; i < this.nIntPerSector - 1; i++) {
+thisSID = MSAT[i];
+if (thisSID < 0) break out;
+this.gotoSector (thisSID);
+for (var j = this.nIntPerSector; --j >= 0; ) this.SAT[nSID++] = this.readInt ();
+
+}
+thisSID = MSAT[this.nIntPerSector - 1];
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getShortSectorAllocationTable",
+($fz = function () {
+var nSSID = 0;
+var thisSID = this.header.SID_SSAT_start;
+var nMax = this.header.nSSATsectors * this.nIntPerSector;
+this.SSAT = Clazz.newIntArray (nMax, 0);
+try {
+while (thisSID > 0 && nSSID < nMax) {
+this.gotoSector (thisSID);
+for (var j = 0; j < this.nIntPerSector; j++) {
+this.SSAT[nSSID++] = this.readInt ();
+}
+thisSID = this.SAT[thisSID];
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getDirectoryTable",
+($fz = function () {
+var thisSID = this.header.SID_DIR_start;
+var thisEntry;
+this.rootEntry = null;
+try {
+while (thisSID > 0) {
+this.gotoSector (thisSID);
+for (var j = this.nDirEntriesperSector; --j >= 0; ) {
+thisEntry = new javajs.util.CompoundDocDirEntry (this);
+thisEntry.readData ();
+if (thisEntry.lenStream > 0) {
+this.directory.addLast (thisEntry);
+}if (thisEntry.entryType == 5) this.rootEntry = thisEntry;
+}
+thisSID = this.SAT[thisSID];
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getEntryAsString",
+($fz = function (thisEntry, asBinaryString) {
+if (thisEntry.isEmpty) return new javajs.util.SB ();
+return (thisEntry.isStandard ? this.getStandardStringData (thisEntry.SIDfirstSector, thisEntry.lenStream, asBinaryString) : this.getShortStringData (thisEntry.SIDfirstSector, thisEntry.lenStream, asBinaryString));
+}, $fz.isPrivate = true, $fz), "javajs.util.CompoundDocDirEntry,~B");
+Clazz.defineMethod (c$, "getStandardStringData",
+($fz = function (thisSID, nBytes, asBinaryString) {
+var data = new javajs.util.SB ();
+var byteBuf = Clazz.newByteArray (this.sectorSize, 0);
+var gzipData = new javajs.util.ZipData (nBytes);
+try {
+while (thisSID > 0 && nBytes > 0) {
+this.gotoSector (thisSID);
+nBytes = this.getSectorData (data, byteBuf, this.sectorSize, nBytes, asBinaryString, gzipData);
+thisSID = this.SAT[thisSID];
+}
+if (nBytes == -9999) return new javajs.util.SB ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+if (gzipData.isEnabled) gzipData.addTo (this.jzt, data);
+return data;
+}, $fz.isPrivate = true, $fz), "~N,~N,~B");
+Clazz.defineMethod (c$, "getSectorData",
+($fz = function (data, byteBuf, nSectorBytes, nBytes, asBinaryString, gzipData) {
+this.readByteArray (byteBuf, 0, byteBuf.length);
+var n = gzipData.addBytes (byteBuf, nSectorBytes, nBytes);
+if (n >= 0) return n;
+if (asBinaryString) {
+for (var i = 0; i < nSectorBytes; i++) {
+data.append (Integer.toHexString (byteBuf[i] & 0xFF)).appendC (' ');
+if (--nBytes < 1) break;
+}
+} else {
+for (var i = 0; i < nSectorBytes; i++) {
+if (byteBuf[i] == 0) return -9999;
+data.appendC (String.fromCharCode (byteBuf[i]));
+if (--nBytes < 1) break;
+}
+}return nBytes;
+}, $fz.isPrivate = true, $fz), "javajs.util.SB,~A,~N,~N,~B,javajs.util.ZipData");
+Clazz.defineMethod (c$, "getShortStringData",
+($fz = function (shortSID, nBytes, asBinaryString) {
+var data = new javajs.util.SB ();
+if (this.rootEntry == null) return data;
+var thisSID = this.rootEntry.SIDfirstSector;
+var ptShort = 0;
+var byteBuf = Clazz.newByteArray (this.shortSectorSize, 0);
+var gzipData = new javajs.util.ZipData (nBytes);
+try {
+while (thisSID >= 0 && shortSID >= 0 && nBytes > 0) {
+while (shortSID - ptShort >= this.nShortSectorsPerStandardSector) {
+ptShort += this.nShortSectorsPerStandardSector;
+thisSID = this.SAT[thisSID];
+}
+this.seek (this.getOffset (thisSID) + (shortSID - ptShort) * this.shortSectorSize);
+nBytes = this.getSectorData (data, byteBuf, this.shortSectorSize, nBytes, asBinaryString, gzipData);
+shortSID = this.SSAT[shortSID];
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (data.toString ());
+System.out.println ("reader error in CompoundDocument " + e.toString ());
+} else {
+throw e;
+}
+}
+if (gzipData.isEnabled) gzipData.addTo (this.jzt, data);
+return data;
+}, $fz.isPrivate = true, $fz), "~N,~N,~B");
+});
diff --git a/bin/javajs/util/DF.js b/bin/javajs/util/DF.js
index 9247146..6122352 100644
--- a/bin/javajs/util/DF.js
+++ b/bin/javajs/util/DF.js
@@ -1,78 +1,78 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.lang.Boolean"], "javajs.util.DF", ["java.lang.Double", "$.Float", "javajs.util.PT", "$.SB"], function () {
-c$ = Clazz.declareType (javajs.util, "DF");
-c$.setUseNumberLocalization = Clazz.defineMethod (c$, "setUseNumberLocalization",
-function (TF) {
-javajs.util.DF.useNumberLocalization[0] = (TF ? Boolean.TRUE : Boolean.FALSE);
-}, "~B");
-c$.formatDecimalDbl = Clazz.defineMethod (c$, "formatDecimalDbl",
-function (value, decimalDigits) {
-if (decimalDigits == 2147483647 || value == -Infinity || value == Infinity || Double.isNaN (value)) return "" + value;
-return javajs.util.DF.formatDecimal (value, decimalDigits);
-}, "~N,~N");
-c$.formatDecimal = Clazz.defineMethod (c$, "formatDecimal",
-function (value, decimalDigits) {
-if (decimalDigits == 2147483647 || value == -Infinity || value == Infinity || Float.isNaN (value)) return "" + value;
-var n;
-if (decimalDigits < 0) {
-decimalDigits = -decimalDigits;
-if (decimalDigits > javajs.util.DF.formattingStrings.length) decimalDigits = javajs.util.DF.formattingStrings.length;
-if (value == 0) return javajs.util.DF.formattingStrings[decimalDigits] + "E+0";
-n = 0;
-var d;
-if (Math.abs (value) < 1) {
-n = 10;
-d = value * 1e-10;
-} else {
-n = -10;
-d = value * 1e10;
-}var s = ("" + d).toUpperCase ();
-var i = s.indexOf ("E");
-n = javajs.util.PT.parseInt (s.substring (i + 1)) + n;
-return (i < 0 ? "" + value : javajs.util.DF.formatDecimal (javajs.util.PT.parseFloat (s.substring (0, i)), decimalDigits - 1) + "E" + (n >= 0 ? "+" : "") + n);
-}if (decimalDigits >= javajs.util.DF.formattingStrings.length) decimalDigits = javajs.util.DF.formattingStrings.length - 1;
-var s1 = ("" + value).toUpperCase ();
-var pt = s1.indexOf (".");
-if (pt < 0) return s1 + javajs.util.DF.formattingStrings[decimalDigits].substring (1);
-var isNeg = s1.startsWith ("-");
-if (isNeg) {
-s1 = s1.substring (1);
-pt--;
-}var pt1 = s1.indexOf ("E-");
-if (pt1 > 0) {
-n = javajs.util.PT.parseInt (s1.substring (pt1 + 1));
-s1 = "0." + "0000000000000000000000000000000000000000".substring (0, -n - 1) + s1.substring (0, 1) + s1.substring (2, pt1);
-pt = 1;
-}pt1 = s1.indexOf ("E");
-if (pt1 > 0) {
-n = javajs.util.PT.parseInt (s1.substring (pt1 + 1));
-s1 = s1.substring (0, 1) + s1.substring (2, pt1) + "0000000000000000000000000000000000000000";
-s1 = s1.substring (0, n + 1) + "." + s1.substring (n + 1);
-pt = s1.indexOf (".");
-}var len = s1.length;
-var pt2 = decimalDigits + pt + 1;
-if (pt2 < len && s1.charAt (pt2) >= '5') {
-return javajs.util.DF.formatDecimal (value + (isNeg ? -1 : 1) * javajs.util.DF.formatAdds[decimalDigits], decimalDigits);
-}var sb = javajs.util.SB.newS (s1.substring (0, (decimalDigits == 0 ? pt : ++pt)));
-for (var i = 0; i < decimalDigits; i++, pt++) {
-if (pt < len) sb.appendC (s1.charAt (pt));
- else sb.appendC ('0');
-}
-s1 = (isNeg ? "-" : "") + sb;
-return (Boolean.TRUE.equals (javajs.util.DF.useNumberLocalization[0]) ? s1 : s1.$replace (',', '.'));
-}, "~N,~N");
-c$.formatDecimalTrimmed = Clazz.defineMethod (c$, "formatDecimalTrimmed",
-function (x, precision) {
-var str = javajs.util.DF.formatDecimalDbl (x, precision);
-var m = str.length - 1;
-var zero = '0';
-while (m >= 0 && str.charAt (m) == zero) m--;
-
-return str.substring (0, m + 1);
-}, "~N,~N");
-Clazz.defineStatics (c$,
-"formattingStrings", Clazz.newArray (-1, ["0", "0.0", "0.00", "0.000", "0.0000", "0.00000", "0.000000", "0.0000000", "0.00000000", "0.000000000"]),
-"zeros", "0000000000000000000000000000000000000000",
-"formatAdds", Clazz.newFloatArray (-1, [0.5, 0.05, 0.005, 0.0005, 0.00005, 0.000005, 0.0000005, 0.00000005, 0.000000005, 0.0000000005]));
-c$.useNumberLocalization = c$.prototype.useNumberLocalization = Clazz.newArray (-1, [Boolean.TRUE]);
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.lang.Boolean"], "javajs.util.DF", ["java.lang.Double", "$.Float", "javajs.util.PT", "$.SB"], function () {
+c$ = Clazz.declareType (javajs.util, "DF");
+c$.setUseNumberLocalization = Clazz.defineMethod (c$, "setUseNumberLocalization",
+function (TF) {
+javajs.util.DF.useNumberLocalization[0] = (TF ? Boolean.TRUE : Boolean.FALSE);
+}, "~B");
+c$.formatDecimalDbl = Clazz.defineMethod (c$, "formatDecimalDbl",
+function (value, decimalDigits) {
+if (decimalDigits == 2147483647 || value == -Infinity || value == Infinity || Double.isNaN (value)) return "" + value;
+return javajs.util.DF.formatDecimal (value, decimalDigits);
+}, "~N,~N");
+c$.formatDecimal = Clazz.defineMethod (c$, "formatDecimal",
+function (value, decimalDigits) {
+if (decimalDigits == 2147483647 || value == -Infinity || value == Infinity || Float.isNaN (value)) return "" + value;
+var n;
+if (decimalDigits < 0) {
+decimalDigits = -decimalDigits;
+if (decimalDigits > javajs.util.DF.formattingStrings.length) decimalDigits = javajs.util.DF.formattingStrings.length;
+if (value == 0) return javajs.util.DF.formattingStrings[decimalDigits] + "E+0";
+n = 0;
+var d;
+if (Math.abs (value) < 1) {
+n = 10;
+d = value * 1e-10;
+} else {
+n = -10;
+d = value * 1e10;
+}var s = ("" + d).toUpperCase ();
+var i = s.indexOf ("E");
+n = javajs.util.PT.parseInt (s.substring (i + 1)) + n;
+return (i < 0 ? "" + value : javajs.util.DF.formatDecimal (javajs.util.PT.parseFloat (s.substring (0, i)), decimalDigits - 1) + "E" + (n >= 0 ? "+" : "") + n);
+}if (decimalDigits >= javajs.util.DF.formattingStrings.length) decimalDigits = javajs.util.DF.formattingStrings.length - 1;
+var s1 = ("" + value).toUpperCase ();
+var pt = s1.indexOf (".");
+if (pt < 0) return s1 + javajs.util.DF.formattingStrings[decimalDigits].substring (1);
+var isNeg = s1.startsWith ("-");
+if (isNeg) {
+s1 = s1.substring (1);
+pt--;
+}var pt1 = s1.indexOf ("E-");
+if (pt1 > 0) {
+n = javajs.util.PT.parseInt (s1.substring (pt1 + 1));
+s1 = "0." + "0000000000000000000000000000000000000000".substring (0, -n - 1) + s1.substring (0, 1) + s1.substring (2, pt1);
+pt = 1;
+}pt1 = s1.indexOf ("E");
+if (pt1 > 0) {
+n = javajs.util.PT.parseInt (s1.substring (pt1 + 1));
+s1 = s1.substring (0, 1) + s1.substring (2, pt1) + "0000000000000000000000000000000000000000";
+s1 = s1.substring (0, n + 1) + "." + s1.substring (n + 1);
+pt = s1.indexOf (".");
+}var len = s1.length;
+var pt2 = decimalDigits + pt + 1;
+if (pt2 < len && s1.charAt (pt2) >= '5') {
+return javajs.util.DF.formatDecimal (value + (isNeg ? -1 : 1) * javajs.util.DF.formatAdds[decimalDigits], decimalDigits);
+}var sb = javajs.util.SB.newS (s1.substring (0, (decimalDigits == 0 ? pt : ++pt)));
+for (var i = 0; i < decimalDigits; i++, pt++) {
+if (pt < len) sb.appendC (s1.charAt (pt));
+ else sb.appendC ('0');
+}
+s1 = (isNeg ? "-" : "") + sb;
+return (Boolean.TRUE.equals (javajs.util.DF.useNumberLocalization[0]) ? s1 : s1.$replace (',', '.'));
+}, "~N,~N");
+c$.formatDecimalTrimmed = Clazz.defineMethod (c$, "formatDecimalTrimmed",
+function (x, precision) {
+var str = javajs.util.DF.formatDecimalDbl (x, precision);
+var m = str.length - 1;
+var zero = '0';
+while (m >= 0 && str.charAt (m) == zero) m--;
+
+return str.substring (0, m + 1);
+}, "~N,~N");
+Clazz.defineStatics (c$,
+"formattingStrings", Clazz.newArray (-1, ["0", "0.0", "0.00", "0.000", "0.0000", "0.00000", "0.000000", "0.0000000", "0.00000000", "0.000000000"]),
+"zeros", "0000000000000000000000000000000000000000",
+"formatAdds", Clazz.newFloatArray (-1, [0.5, 0.05, 0.005, 0.0005, 0.00005, 0.000005, 0.0000005, 0.00000005, 0.000000005, 0.0000000005]));
+c$.useNumberLocalization = c$.prototype.useNumberLocalization = Clazz.newArray (-1, [Boolean.TRUE]);
+});
diff --git a/bin/javajs/util/DataReader.js b/bin/javajs/util/DataReader.js
index 3be547c..ea8774f 100644
--- a/bin/javajs/util/DataReader.js
+++ b/bin/javajs/util/DataReader.js
@@ -1,34 +1,34 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.io.BufferedReader"], "javajs.util.DataReader", ["java.io.StringReader"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.ptMark = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "DataReader", java.io.BufferedReader);
-Clazz.makeConstructor (c$,
-function () {
-Clazz.superConstructor (this, javajs.util.DataReader, [ new java.io.StringReader ("")]);
-});
-Clazz.defineMethod (c$, "getBufferedReader",
-function () {
-return this;
-});
-Clazz.defineMethod (c$, "readBuf",
-function (buf, off, len) {
-var nRead = 0;
-var line = this.readLine ();
-if (line == null) return 0;
-var linept = 0;
-var linelen = line.length;
-for (var i = off; i < len && linelen >= 0; i++) {
-if (linept >= linelen) {
-linept = 0;
-buf[i] = '\n';
-line = this.readLine ();
-linelen = (line == null ? -1 : line.length);
-} else {
-buf[i] = line.charAt (linept++);
-}nRead++;
-}
-return nRead;
-}, "~A,~N,~N");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.io.BufferedReader"], "javajs.util.DataReader", ["java.io.StringReader"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.ptMark = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "DataReader", java.io.BufferedReader);
+Clazz.makeConstructor (c$,
+function () {
+Clazz.superConstructor (this, javajs.util.DataReader, [ new java.io.StringReader ("")]);
+});
+Clazz.defineMethod (c$, "getBufferedReader",
+function () {
+return this;
+});
+Clazz.defineMethod (c$, "readBuf",
+function (buf, off, len) {
+var nRead = 0;
+var line = this.readLine ();
+if (line == null) return 0;
+var linept = 0;
+var linelen = line.length;
+for (var i = off; i < len && linelen >= 0; i++) {
+if (linept >= linelen) {
+linept = 0;
+buf[i] = '\n';
+line = this.readLine ();
+linelen = (line == null ? -1 : line.length);
+} else {
+buf[i] = line.charAt (linept++);
+}nRead++;
+}
+return nRead;
+}, "~A,~N,~N");
+});
diff --git a/bin/javajs/util/Eigen.js b/bin/javajs/util/Eigen.js
index b08955b..4d28a61 100644
--- a/bin/javajs/util/Eigen.js
+++ b/bin/javajs/util/Eigen.js
@@ -1,254 +1,254 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.EigenInterface"], "javajs.util.Eigen", ["javajs.util.V3"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.n = 3;
-this.d = null;
-this.e = null;
-this.V = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "Eigen", null, javajs.api.EigenInterface);
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "set",
-function (n) {
-this.n = n;
-this.V = Clazz.newDoubleArray (n, n, 0);
-this.d = Clazz.newDoubleArray (n, 0);
-this.e = Clazz.newDoubleArray (n, 0);
-return this;
-}, "~N");
-Clazz.overrideMethod (c$, "setM",
-function (m) {
-this.set (m.length);
-this.calc (m);
-return this;
-}, "~A");
-Clazz.overrideMethod (c$, "getEigenvalues",
-function () {
-return this.d;
-});
-Clazz.overrideMethod (c$, "fillFloatArrays",
-function (eigenVectors, eigenValues) {
-for (var i = 0; i < 3; i++) {
-if (eigenVectors != null) {
-if (eigenVectors[i] == null) eigenVectors[i] = new javajs.util.V3 ();
-eigenVectors[i].set (this.V[0][i], this.V[1][i], this.V[2][i]);
-}if (eigenValues != null) eigenValues[i] = this.d[i];
-}
-}, "~A,~A");
-Clazz.overrideMethod (c$, "getEigenvectorsFloatTransposed",
-function () {
-var f = Clazz.newFloatArray (this.n, this.n, 0);
-for (var i = this.n; --i >= 0; ) for (var j = this.n; --j >= 0; ) f[j][i] = this.V[i][j];
-
-
-return f;
-});
-Clazz.defineMethod (c$, "calc",
-function (A) {
-for (var i = 0; i < this.n; i++) {
-for (var j = 0; j < this.n; j++) {
-this.V[i][j] = A[i][j];
-}
-}
-this.tred2 ();
-this.tql2 ();
-}, "~A");
-Clazz.defineMethod (c$, "getRealEigenvalues",
-function () {
-return this.d;
-});
-Clazz.defineMethod (c$, "getImagEigenvalues",
-function () {
-return this.e;
-});
-Clazz.defineMethod (c$, "tred2",
-($fz = function () {
-for (var j = 0; j < this.n; j++) {
-this.d[j] = this.V[this.n - 1][j];
-}
-for (var i = this.n - 1; i > 0; i--) {
-var scale = 0.0;
-var h = 0.0;
-for (var k = 0; k < i; k++) {
-scale = scale + Math.abs (this.d[k]);
-}
-if (scale == 0.0) {
-this.e[i] = this.d[i - 1];
-for (var j = 0; j < i; j++) {
-this.d[j] = this.V[i - 1][j];
-this.V[i][j] = 0.0;
-this.V[j][i] = 0.0;
-}
-} else {
-for (var k = 0; k < i; k++) {
-this.d[k] /= scale;
-h += this.d[k] * this.d[k];
-}
-var f = this.d[i - 1];
-var g = Math.sqrt (h);
-if (f > 0) {
-g = -g;
-}this.e[i] = scale * g;
-h = h - f * g;
-this.d[i - 1] = f - g;
-for (var j = 0; j < i; j++) {
-this.e[j] = 0.0;
-}
-for (var j = 0; j < i; j++) {
-f = this.d[j];
-this.V[j][i] = f;
-g = this.e[j] + this.V[j][j] * f;
-for (var k = j + 1; k <= i - 1; k++) {
-g += this.V[k][j] * this.d[k];
-this.e[k] += this.V[k][j] * f;
-}
-this.e[j] = g;
-}
-f = 0.0;
-for (var j = 0; j < i; j++) {
-this.e[j] /= h;
-f += this.e[j] * this.d[j];
-}
-var hh = f / (h + h);
-for (var j = 0; j < i; j++) {
-this.e[j] -= hh * this.d[j];
-}
-for (var j = 0; j < i; j++) {
-f = this.d[j];
-g = this.e[j];
-for (var k = j; k <= i - 1; k++) {
-this.V[k][j] -= (f * this.e[k] + g * this.d[k]);
-}
-this.d[j] = this.V[i - 1][j];
-this.V[i][j] = 0.0;
-}
-}this.d[i] = h;
-}
-for (var i = 0; i < this.n - 1; i++) {
-this.V[this.n - 1][i] = this.V[i][i];
-this.V[i][i] = 1.0;
-var h = this.d[i + 1];
-if (h != 0.0) {
-for (var k = 0; k <= i; k++) {
-this.d[k] = this.V[k][i + 1] / h;
-}
-for (var j = 0; j <= i; j++) {
-var g = 0.0;
-for (var k = 0; k <= i; k++) {
-g += this.V[k][i + 1] * this.V[k][j];
-}
-for (var k = 0; k <= i; k++) {
-this.V[k][j] -= g * this.d[k];
-}
-}
-}for (var k = 0; k <= i; k++) {
-this.V[k][i + 1] = 0.0;
-}
-}
-for (var j = 0; j < this.n; j++) {
-this.d[j] = this.V[this.n - 1][j];
-this.V[this.n - 1][j] = 0.0;
-}
-this.V[this.n - 1][this.n - 1] = 1.0;
-this.e[0] = 0.0;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "tql2",
-($fz = function () {
-for (var i = 1; i < this.n; i++) {
-this.e[i - 1] = this.e[i];
-}
-this.e[this.n - 1] = 0.0;
-var f = 0.0;
-var tst1 = 0.0;
-var eps = Math.pow (2.0, -52.0);
-for (var l = 0; l < this.n; l++) {
-tst1 = Math.max (tst1, Math.abs (this.d[l]) + Math.abs (this.e[l]));
-var m = l;
-while (m < this.n) {
-if (Math.abs (this.e[m]) <= eps * tst1) {
-break;
-}m++;
-}
-if (m > l) {
-var iter = 0;
-do {
-iter = iter + 1;
-var g = this.d[l];
-var p = (this.d[l + 1] - g) / (2.0 * this.e[l]);
-var r = javajs.util.Eigen.hypot (p, 1.0);
-if (p < 0) {
-r = -r;
-}this.d[l] = this.e[l] / (p + r);
-this.d[l + 1] = this.e[l] * (p + r);
-var dl1 = this.d[l + 1];
-var h = g - this.d[l];
-for (var i = l + 2; i < this.n; i++) {
-this.d[i] -= h;
-}
-f = f + h;
-p = this.d[m];
-var c = 1.0;
-var c2 = c;
-var c3 = c;
-var el1 = this.e[l + 1];
-var s = 0.0;
-var s2 = 0.0;
-for (var i = m - 1; i >= l; i--) {
-c3 = c2;
-c2 = c;
-s2 = s;
-g = c * this.e[i];
-h = c * p;
-r = javajs.util.Eigen.hypot (p, this.e[i]);
-this.e[i + 1] = s * r;
-s = this.e[i] / r;
-c = p / r;
-p = c * this.d[i] - s * g;
-this.d[i + 1] = h + s * (c * g + s * this.d[i]);
-for (var k = 0; k < this.n; k++) {
-h = this.V[k][i + 1];
-this.V[k][i + 1] = s * this.V[k][i] + c * h;
-this.V[k][i] = c * this.V[k][i] - s * h;
-}
-}
-p = -s * s2 * c3 * el1 * this.e[l] / dl1;
-this.e[l] = s * p;
-this.d[l] = c * p;
-} while (Math.abs (this.e[l]) > eps * tst1);
-}this.d[l] = this.d[l] + f;
-this.e[l] = 0.0;
-}
-for (var i = 0; i < this.n - 1; i++) {
-var k = i;
-var p = this.d[i];
-for (var j = i + 1; j < this.n; j++) {
-if (this.d[j] < p) {
-k = j;
-p = this.d[j];
-}}
-if (k != i) {
-this.d[k] = this.d[i];
-this.d[i] = p;
-for (var j = 0; j < this.n; j++) {
-p = this.V[j][i];
-this.V[j][i] = this.V[j][k];
-this.V[j][k] = p;
-}
-}}
-}, $fz.isPrivate = true, $fz));
-c$.hypot = Clazz.defineMethod (c$, "hypot",
-($fz = function (a, b) {
-var r;
-if (Math.abs (a) > Math.abs (b)) {
-r = b / a;
-r = Math.abs (a) * Math.sqrt (1 + r * r);
-} else if (b != 0) {
-r = a / b;
-r = Math.abs (b) * Math.sqrt (1 + r * r);
-} else {
-r = 0.0;
-}return r;
-}, $fz.isPrivate = true, $fz), "~N,~N");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.EigenInterface"], "javajs.util.Eigen", ["javajs.util.V3"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.n = 3;
+this.d = null;
+this.e = null;
+this.V = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "Eigen", null, javajs.api.EigenInterface);
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "set",
+function (n) {
+this.n = n;
+this.V = Clazz.newDoubleArray (n, n, 0);
+this.d = Clazz.newDoubleArray (n, 0);
+this.e = Clazz.newDoubleArray (n, 0);
+return this;
+}, "~N");
+Clazz.overrideMethod (c$, "setM",
+function (m) {
+this.set (m.length);
+this.calc (m);
+return this;
+}, "~A");
+Clazz.overrideMethod (c$, "getEigenvalues",
+function () {
+return this.d;
+});
+Clazz.overrideMethod (c$, "fillFloatArrays",
+function (eigenVectors, eigenValues) {
+for (var i = 0; i < 3; i++) {
+if (eigenVectors != null) {
+if (eigenVectors[i] == null) eigenVectors[i] = new javajs.util.V3 ();
+eigenVectors[i].set (this.V[0][i], this.V[1][i], this.V[2][i]);
+}if (eigenValues != null) eigenValues[i] = this.d[i];
+}
+}, "~A,~A");
+Clazz.overrideMethod (c$, "getEigenvectorsFloatTransposed",
+function () {
+var f = Clazz.newFloatArray (this.n, this.n, 0);
+for (var i = this.n; --i >= 0; ) for (var j = this.n; --j >= 0; ) f[j][i] = this.V[i][j];
+
+
+return f;
+});
+Clazz.defineMethod (c$, "calc",
+function (A) {
+for (var i = 0; i < this.n; i++) {
+for (var j = 0; j < this.n; j++) {
+this.V[i][j] = A[i][j];
+}
+}
+this.tred2 ();
+this.tql2 ();
+}, "~A");
+Clazz.defineMethod (c$, "getRealEigenvalues",
+function () {
+return this.d;
+});
+Clazz.defineMethod (c$, "getImagEigenvalues",
+function () {
+return this.e;
+});
+Clazz.defineMethod (c$, "tred2",
+($fz = function () {
+for (var j = 0; j < this.n; j++) {
+this.d[j] = this.V[this.n - 1][j];
+}
+for (var i = this.n - 1; i > 0; i--) {
+var scale = 0.0;
+var h = 0.0;
+for (var k = 0; k < i; k++) {
+scale = scale + Math.abs (this.d[k]);
+}
+if (scale == 0.0) {
+this.e[i] = this.d[i - 1];
+for (var j = 0; j < i; j++) {
+this.d[j] = this.V[i - 1][j];
+this.V[i][j] = 0.0;
+this.V[j][i] = 0.0;
+}
+} else {
+for (var k = 0; k < i; k++) {
+this.d[k] /= scale;
+h += this.d[k] * this.d[k];
+}
+var f = this.d[i - 1];
+var g = Math.sqrt (h);
+if (f > 0) {
+g = -g;
+}this.e[i] = scale * g;
+h = h - f * g;
+this.d[i - 1] = f - g;
+for (var j = 0; j < i; j++) {
+this.e[j] = 0.0;
+}
+for (var j = 0; j < i; j++) {
+f = this.d[j];
+this.V[j][i] = f;
+g = this.e[j] + this.V[j][j] * f;
+for (var k = j + 1; k <= i - 1; k++) {
+g += this.V[k][j] * this.d[k];
+this.e[k] += this.V[k][j] * f;
+}
+this.e[j] = g;
+}
+f = 0.0;
+for (var j = 0; j < i; j++) {
+this.e[j] /= h;
+f += this.e[j] * this.d[j];
+}
+var hh = f / (h + h);
+for (var j = 0; j < i; j++) {
+this.e[j] -= hh * this.d[j];
+}
+for (var j = 0; j < i; j++) {
+f = this.d[j];
+g = this.e[j];
+for (var k = j; k <= i - 1; k++) {
+this.V[k][j] -= (f * this.e[k] + g * this.d[k]);
+}
+this.d[j] = this.V[i - 1][j];
+this.V[i][j] = 0.0;
+}
+}this.d[i] = h;
+}
+for (var i = 0; i < this.n - 1; i++) {
+this.V[this.n - 1][i] = this.V[i][i];
+this.V[i][i] = 1.0;
+var h = this.d[i + 1];
+if (h != 0.0) {
+for (var k = 0; k <= i; k++) {
+this.d[k] = this.V[k][i + 1] / h;
+}
+for (var j = 0; j <= i; j++) {
+var g = 0.0;
+for (var k = 0; k <= i; k++) {
+g += this.V[k][i + 1] * this.V[k][j];
+}
+for (var k = 0; k <= i; k++) {
+this.V[k][j] -= g * this.d[k];
+}
+}
+}for (var k = 0; k <= i; k++) {
+this.V[k][i + 1] = 0.0;
+}
+}
+for (var j = 0; j < this.n; j++) {
+this.d[j] = this.V[this.n - 1][j];
+this.V[this.n - 1][j] = 0.0;
+}
+this.V[this.n - 1][this.n - 1] = 1.0;
+this.e[0] = 0.0;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "tql2",
+($fz = function () {
+for (var i = 1; i < this.n; i++) {
+this.e[i - 1] = this.e[i];
+}
+this.e[this.n - 1] = 0.0;
+var f = 0.0;
+var tst1 = 0.0;
+var eps = Math.pow (2.0, -52.0);
+for (var l = 0; l < this.n; l++) {
+tst1 = Math.max (tst1, Math.abs (this.d[l]) + Math.abs (this.e[l]));
+var m = l;
+while (m < this.n) {
+if (Math.abs (this.e[m]) <= eps * tst1) {
+break;
+}m++;
+}
+if (m > l) {
+var iter = 0;
+do {
+iter = iter + 1;
+var g = this.d[l];
+var p = (this.d[l + 1] - g) / (2.0 * this.e[l]);
+var r = javajs.util.Eigen.hypot (p, 1.0);
+if (p < 0) {
+r = -r;
+}this.d[l] = this.e[l] / (p + r);
+this.d[l + 1] = this.e[l] * (p + r);
+var dl1 = this.d[l + 1];
+var h = g - this.d[l];
+for (var i = l + 2; i < this.n; i++) {
+this.d[i] -= h;
+}
+f = f + h;
+p = this.d[m];
+var c = 1.0;
+var c2 = c;
+var c3 = c;
+var el1 = this.e[l + 1];
+var s = 0.0;
+var s2 = 0.0;
+for (var i = m - 1; i >= l; i--) {
+c3 = c2;
+c2 = c;
+s2 = s;
+g = c * this.e[i];
+h = c * p;
+r = javajs.util.Eigen.hypot (p, this.e[i]);
+this.e[i + 1] = s * r;
+s = this.e[i] / r;
+c = p / r;
+p = c * this.d[i] - s * g;
+this.d[i + 1] = h + s * (c * g + s * this.d[i]);
+for (var k = 0; k < this.n; k++) {
+h = this.V[k][i + 1];
+this.V[k][i + 1] = s * this.V[k][i] + c * h;
+this.V[k][i] = c * this.V[k][i] - s * h;
+}
+}
+p = -s * s2 * c3 * el1 * this.e[l] / dl1;
+this.e[l] = s * p;
+this.d[l] = c * p;
+} while (Math.abs (this.e[l]) > eps * tst1);
+}this.d[l] = this.d[l] + f;
+this.e[l] = 0.0;
+}
+for (var i = 0; i < this.n - 1; i++) {
+var k = i;
+var p = this.d[i];
+for (var j = i + 1; j < this.n; j++) {
+if (this.d[j] < p) {
+k = j;
+p = this.d[j];
+}}
+if (k != i) {
+this.d[k] = this.d[i];
+this.d[i] = p;
+for (var j = 0; j < this.n; j++) {
+p = this.V[j][i];
+this.V[j][i] = this.V[j][k];
+this.V[j][k] = p;
+}
+}}
+}, $fz.isPrivate = true, $fz));
+c$.hypot = Clazz.defineMethod (c$, "hypot",
+($fz = function (a, b) {
+var r;
+if (Math.abs (a) > Math.abs (b)) {
+r = b / a;
+r = Math.abs (a) * Math.sqrt (1 + r * r);
+} else if (b != 0) {
+r = a / b;
+r = Math.abs (b) * Math.sqrt (1 + r * r);
+} else {
+r = 0.0;
+}return r;
+}, $fz.isPrivate = true, $fz), "~N,~N");
+});
diff --git a/bin/javajs/util/Encoding.js b/bin/javajs/util/Encoding.js
index aecf019..d7abfc0 100644
--- a/bin/javajs/util/Encoding.js
+++ b/bin/javajs/util/Encoding.js
@@ -1,10 +1,10 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.lang.Enum"], "javajs.util.Encoding", null, function () {
-c$ = Clazz.declareType (javajs.util, "Encoding", Enum);
-Clazz.defineEnumConstant (c$, "NONE", 0, []);
-Clazz.defineEnumConstant (c$, "UTF8", 1, []);
-Clazz.defineEnumConstant (c$, "UTF_16BE", 2, []);
-Clazz.defineEnumConstant (c$, "UTF_16LE", 3, []);
-Clazz.defineEnumConstant (c$, "UTF_32BE", 4, []);
-Clazz.defineEnumConstant (c$, "UTF_32LE", 5, []);
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.lang.Enum"], "javajs.util.Encoding", null, function () {
+c$ = Clazz.declareType (javajs.util, "Encoding", Enum);
+Clazz.defineEnumConstant (c$, "NONE", 0, []);
+Clazz.defineEnumConstant (c$, "UTF8", 1, []);
+Clazz.defineEnumConstant (c$, "UTF_16BE", 2, []);
+Clazz.defineEnumConstant (c$, "UTF_16LE", 3, []);
+Clazz.defineEnumConstant (c$, "UTF_32BE", 4, []);
+Clazz.defineEnumConstant (c$, "UTF_32LE", 5, []);
+});
diff --git a/bin/javajs/util/LimitedLineReader.js b/bin/javajs/util/LimitedLineReader.js
index c8c7764..95d0741 100644
--- a/bin/javajs/util/LimitedLineReader.js
+++ b/bin/javajs/util/LimitedLineReader.js
@@ -1,33 +1,33 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.decorateAsClass (function () {
-this.buf = null;
-this.cchBuf = 0;
-this.ichCurrent = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "LimitedLineReader");
-Clazz.makeConstructor (c$,
-function (bufferedReader, readLimit) {
-bufferedReader.mark (readLimit + 1);
-this.buf = Clazz.newCharArray (readLimit, '\0');
-this.cchBuf = Math.max (bufferedReader.read (this.buf, 0, readLimit), 0);
-this.ichCurrent = 0;
-bufferedReader.reset ();
-}, "java.io.BufferedReader,~N");
-Clazz.defineMethod (c$, "getHeader",
-function (n) {
-return (n == 0 ? String.instantialize (this.buf) : String.instantialize (this.buf, 0, Math.min (this.cchBuf, n)));
-}, "~N");
-Clazz.defineMethod (c$, "readLineWithNewline",
-function () {
-while (this.ichCurrent < this.cchBuf) {
-var ichBeginningOfLine = this.ichCurrent;
-var ch = String.fromCharCode (0);
-while (this.ichCurrent < this.cchBuf && (ch = this.buf[this.ichCurrent++]) != '\r' && ch != '\n') {
-}
-if (ch == '\r' && this.ichCurrent < this.cchBuf && this.buf[this.ichCurrent] == '\n') ++this.ichCurrent;
-var cchLine = this.ichCurrent - ichBeginningOfLine;
-if (this.buf[ichBeginningOfLine] == '#') continue;
-return String.instantialize (this.buf, ichBeginningOfLine, cchLine);
-}
-return "";
-});
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.decorateAsClass (function () {
+this.buf = null;
+this.cchBuf = 0;
+this.ichCurrent = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "LimitedLineReader");
+Clazz.makeConstructor (c$,
+function (bufferedReader, readLimit) {
+bufferedReader.mark (readLimit + 1);
+this.buf = Clazz.newCharArray (readLimit, '\0');
+this.cchBuf = Math.max (bufferedReader.read (this.buf, 0, readLimit), 0);
+this.ichCurrent = 0;
+bufferedReader.reset ();
+}, "java.io.BufferedReader,~N");
+Clazz.defineMethod (c$, "getHeader",
+function (n) {
+return (n == 0 ? String.instantialize (this.buf) : String.instantialize (this.buf, 0, Math.min (this.cchBuf, n)));
+}, "~N");
+Clazz.defineMethod (c$, "readLineWithNewline",
+function () {
+while (this.ichCurrent < this.cchBuf) {
+var ichBeginningOfLine = this.ichCurrent;
+var ch = String.fromCharCode (0);
+while (this.ichCurrent < this.cchBuf && (ch = this.buf[this.ichCurrent++]) != '\r' && ch != '\n') {
+}
+if (ch == '\r' && this.ichCurrent < this.cchBuf && this.buf[this.ichCurrent] == '\n') ++this.ichCurrent;
+var cchLine = this.ichCurrent - ichBeginningOfLine;
+if (this.buf[ichBeginningOfLine] == '#') continue;
+return String.instantialize (this.buf, ichBeginningOfLine, cchLine);
+}
+return "";
+});
diff --git a/bin/javajs/util/ListDataReader.js b/bin/javajs/util/ListDataReader.js
index 54d8d69..dbd859d 100644
--- a/bin/javajs/util/ListDataReader.js
+++ b/bin/javajs/util/ListDataReader.js
@@ -1,31 +1,31 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.DataReader"], "javajs.util.ListDataReader", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.data = null;
-this.pt = 0;
-this.len = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "ListDataReader", javajs.util.DataReader);
-Clazz.overrideMethod (c$, "setData",
-function (data) {
-this.data = data;
-this.len = this.data.size ();
-return this;
-}, "~O");
-Clazz.defineMethod (c$, "read",
-function (buf, off, len) {
-return this.readBuf (buf, off, len);
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "readLine",
-function () {
-return (this.pt < this.len ? this.data.get (this.pt++) : null);
-});
-Clazz.defineMethod (c$, "mark",
-function (ptr) {
-this.ptMark = this.pt;
-}, "~N");
-Clazz.overrideMethod (c$, "reset",
-function () {
-this.pt = this.ptMark;
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.DataReader"], "javajs.util.ListDataReader", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.data = null;
+this.pt = 0;
+this.len = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "ListDataReader", javajs.util.DataReader);
+Clazz.overrideMethod (c$, "setData",
+function (data) {
+this.data = data;
+this.len = this.data.size ();
+return this;
+}, "~O");
+Clazz.defineMethod (c$, "read",
+function (buf, off, len) {
+return this.readBuf (buf, off, len);
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "readLine",
+function () {
+return (this.pt < this.len ? this.data.get (this.pt++) : null);
+});
+Clazz.defineMethod (c$, "mark",
+function (ptr) {
+this.ptMark = this.pt;
+}, "~N");
+Clazz.overrideMethod (c$, "reset",
+function () {
+this.pt = this.ptMark;
+});
+});
diff --git a/bin/javajs/util/Lst.js b/bin/javajs/util/Lst.js
index 414e59d..f809b5a 100644
--- a/bin/javajs/util/Lst.js
+++ b/bin/javajs/util/Lst.js
@@ -1,14 +1,14 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.util.ArrayList"], "javajs.util.Lst", null, function () {
-c$ = Clazz.declareType (javajs.util, "Lst", java.util.ArrayList);
-Clazz.defineMethod (c$, "addLast",
-function (v) {
-{
-return this.add1(v);
-}}, "~O");
-Clazz.defineMethod (c$, "removeObj",
-function (v) {
-{
-return this.removeObject(v);
-}}, "~O");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.util.ArrayList"], "javajs.util.Lst", null, function () {
+c$ = Clazz.declareType (javajs.util, "Lst", java.util.ArrayList);
+Clazz.defineMethod (c$, "addLast",
+function (v) {
+{
+return this.add1(v);
+}}, "~O");
+Clazz.defineMethod (c$, "removeObj",
+function (v) {
+{
+return this.removeObject(v);
+}}, "~O");
+});
diff --git a/bin/javajs/util/M3.js b/bin/javajs/util/M3.js
index a395f3f..8461118 100644
--- a/bin/javajs/util/M3.js
+++ b/bin/javajs/util/M3.js
@@ -1,298 +1,298 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.M34"], "javajs.util.M3", ["javajs.util.T3"], function () {
-c$ = Clazz.declareType (javajs.util, "M3", javajs.util.M34, java.io.Serializable);
-c$.newA9 = Clazz.defineMethod (c$, "newA9",
-function (v) {
-var m = new javajs.util.M3 ();
-m.setA (v);
-return m;
-}, "~A");
-c$.newM3 = Clazz.defineMethod (c$, "newM3",
-function (m1) {
-var m = new javajs.util.M3 ();
-if (m1 == null) {
-m.setScale (1);
-return m;
-}m.m00 = m1.m00;
-m.m01 = m1.m01;
-m.m02 = m1.m02;
-m.m10 = m1.m10;
-m.m11 = m1.m11;
-m.m12 = m1.m12;
-m.m20 = m1.m20;
-m.m21 = m1.m21;
-m.m22 = m1.m22;
-return m;
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "setScale",
-function (scale) {
-this.clear33 ();
-this.m00 = this.m11 = this.m22 = scale;
-}, "~N");
-Clazz.defineMethod (c$, "setM3",
-function (m1) {
-this.setM33 (m1);
-}, "javajs.util.M34");
-Clazz.defineMethod (c$, "setA",
-function (m) {
-this.m00 = m[0];
-this.m01 = m[1];
-this.m02 = m[2];
-this.m10 = m[3];
-this.m11 = m[4];
-this.m12 = m[5];
-this.m20 = m[6];
-this.m21 = m[7];
-this.m22 = m[8];
-}, "~A");
-Clazz.defineMethod (c$, "setElement",
-function (row, col, v) {
-this.set33 (row, col, v);
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "getElement",
-function (row, col) {
-return this.get33 (row, col);
-}, "~N,~N");
-Clazz.defineMethod (c$, "setRow",
-function (row, x, y, z) {
-switch (row) {
-case 0:
-this.m00 = x;
-this.m01 = y;
-this.m02 = z;
-return;
-case 1:
-this.m10 = x;
-this.m11 = y;
-this.m12 = z;
-return;
-case 2:
-this.m20 = x;
-this.m21 = y;
-this.m22 = z;
-return;
-default:
-this.err ();
-}
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "setRowV",
-function (row, v) {
-switch (row) {
-case 0:
-this.m00 = v.x;
-this.m01 = v.y;
-this.m02 = v.z;
-return;
-case 1:
-this.m10 = v.x;
-this.m11 = v.y;
-this.m12 = v.z;
-return;
-case 2:
-this.m20 = v.x;
-this.m21 = v.y;
-this.m22 = v.z;
-return;
-default:
-this.err ();
-}
-}, "~N,javajs.util.T3");
-Clazz.defineMethod (c$, "setRowA",
-function (row, v) {
-this.setRow33 (row, v);
-}, "~N,~A");
-Clazz.overrideMethod (c$, "getRow",
-function (row, v) {
-this.getRow33 (row, v);
-}, "~N,~A");
-Clazz.defineMethod (c$, "setColumn3",
-function (column, x, y, z) {
-switch (column) {
-case 0:
-this.m00 = x;
-this.m10 = y;
-this.m20 = z;
-break;
-case 1:
-this.m01 = x;
-this.m11 = y;
-this.m21 = z;
-break;
-case 2:
-this.m02 = x;
-this.m12 = y;
-this.m22 = z;
-break;
-default:
-this.err ();
-}
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "setColumnV",
-function (column, v) {
-switch (column) {
-case 0:
-this.m00 = v.x;
-this.m10 = v.y;
-this.m20 = v.z;
-break;
-case 1:
-this.m01 = v.x;
-this.m11 = v.y;
-this.m21 = v.z;
-break;
-case 2:
-this.m02 = v.x;
-this.m12 = v.y;
-this.m22 = v.z;
-break;
-default:
-this.err ();
-}
-}, "~N,javajs.util.T3");
-Clazz.defineMethod (c$, "getColumnV",
-function (column, v) {
-switch (column) {
-case 0:
-v.x = this.m00;
-v.y = this.m10;
-v.z = this.m20;
-break;
-case 1:
-v.x = this.m01;
-v.y = this.m11;
-v.z = this.m21;
-break;
-case 2:
-v.x = this.m02;
-v.y = this.m12;
-v.z = this.m22;
-break;
-default:
-this.err ();
-}
-}, "~N,javajs.util.T3");
-Clazz.defineMethod (c$, "setColumnA",
-function (column, v) {
-this.setColumn33 (column, v);
-}, "~N,~A");
-Clazz.defineMethod (c$, "getColumn",
-function (column, v) {
-this.getColumn33 (column, v);
-}, "~N,~A");
-Clazz.defineMethod (c$, "add",
-function (m1) {
-this.add33 (m1);
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "sub",
-function (m1) {
-this.sub33 (m1);
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "transpose",
-function () {
-this.transpose33 ();
-});
-Clazz.defineMethod (c$, "transposeM",
-function (m1) {
-this.setM33 (m1);
-this.transpose33 ();
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "invertM",
-function (m1) {
-this.setM33 (m1);
-this.invert ();
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "invert",
-function () {
-var s = this.determinant3 ();
-if (s == 0.0) return;
-s = 1 / s;
-this.set9 (this.m11 * this.m22 - this.m12 * this.m21, this.m02 * this.m21 - this.m01 * this.m22, this.m01 * this.m12 - this.m02 * this.m11, this.m12 * this.m20 - this.m10 * this.m22, this.m00 * this.m22 - this.m02 * this.m20, this.m02 * this.m10 - this.m00 * this.m12, this.m10 * this.m21 - this.m11 * this.m20, this.m01 * this.m20 - this.m00 * this.m21, this.m00 * this.m11 - this.m01 * this.m10);
-this.scale (s);
-});
-Clazz.defineMethod (c$, "setAsXRotation",
-function (angle) {
-this.setXRot (angle);
-return this;
-}, "~N");
-Clazz.defineMethod (c$, "setAsYRotation",
-function (angle) {
-this.setYRot (angle);
-return this;
-}, "~N");
-Clazz.defineMethod (c$, "setAsZRotation",
-function (angle) {
-this.setZRot (angle);
-return this;
-}, "~N");
-Clazz.defineMethod (c$, "scale",
-function (scalar) {
-this.mul33 (scalar);
-}, "~N");
-Clazz.defineMethod (c$, "mul",
-function (m1) {
-this.mul2 (this, m1);
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "mul2",
-function (m1, m2) {
-this.set9 (m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20, m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21, m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22, m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20, m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21, m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22, m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20, m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21, m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22);
-}, "javajs.util.M3,javajs.util.M3");
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (!(Clazz.instanceOf (o, javajs.util.M3))) return false;
-var m = o;
-return this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02 && this.m10 == m.m10 && this.m11 == m.m11 && this.m12 == m.m12 && this.m20 == m.m20 && this.m21 == m.m21 && this.m22 == m.m22;
-}, "~O");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-return javajs.util.T3.floatToIntBits0 (this.m00) ^ javajs.util.T3.floatToIntBits0 (this.m01) ^ javajs.util.T3.floatToIntBits0 (this.m02) ^ javajs.util.T3.floatToIntBits0 (this.m10) ^ javajs.util.T3.floatToIntBits0 (this.m11) ^ javajs.util.T3.floatToIntBits0 (this.m12) ^ javajs.util.T3.floatToIntBits0 (this.m20) ^ javajs.util.T3.floatToIntBits0 (this.m21) ^ javajs.util.T3.floatToIntBits0 (this.m22);
-});
-Clazz.defineMethod (c$, "setZero",
-function () {
-this.clear33 ();
-});
-Clazz.defineMethod (c$, "set9",
-($fz = function (m00, m01, m02, m10, m11, m12, m20, m21, m22) {
-this.m00 = m00;
-this.m01 = m01;
-this.m02 = m02;
-this.m10 = m10;
-this.m11 = m11;
-this.m12 = m12;
-this.m20 = m20;
-this.m21 = m21;
-this.m22 = m22;
-}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "[\n [" + this.m00 + "\t" + this.m01 + "\t" + this.m02 + "]" + "\n [" + this.m10 + "\t" + this.m11 + "\t" + this.m12 + "]" + "\n [" + this.m20 + "\t" + this.m21 + "\t" + this.m22 + "] ]";
-});
-Clazz.defineMethod (c$, "setAA",
-function (a) {
-this.setAA33 (a);
-return this;
-}, "javajs.util.A4");
-Clazz.defineMethod (c$, "setAsBallRotation",
-function (responseFactor, dx, dy) {
-var r = Math.sqrt (dx * dx + dy * dy);
-var th = r * responseFactor;
-if (th == 0) {
-this.setScale (1);
-return false;
-}var c = Math.cos (th);
-var s = Math.sin (th);
-var nx = -dy / r;
-var ny = dx / r;
-var c1 = c - 1;
-this.m00 = 1 + c1 * nx * nx;
-this.m01 = this.m10 = c1 * nx * ny;
-this.m20 = -(this.m02 = s * nx);
-this.m11 = 1 + c1 * ny * ny;
-this.m21 = -(this.m12 = s * ny);
-this.m22 = c;
-return true;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "isRotation",
-function () {
-return (Math.abs (this.determinant3 () - 1) < 0.001);
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.M34"], "javajs.util.M3", ["javajs.util.T3"], function () {
+c$ = Clazz.declareType (javajs.util, "M3", javajs.util.M34, java.io.Serializable);
+c$.newA9 = Clazz.defineMethod (c$, "newA9",
+function (v) {
+var m = new javajs.util.M3 ();
+m.setA (v);
+return m;
+}, "~A");
+c$.newM3 = Clazz.defineMethod (c$, "newM3",
+function (m1) {
+var m = new javajs.util.M3 ();
+if (m1 == null) {
+m.setScale (1);
+return m;
+}m.m00 = m1.m00;
+m.m01 = m1.m01;
+m.m02 = m1.m02;
+m.m10 = m1.m10;
+m.m11 = m1.m11;
+m.m12 = m1.m12;
+m.m20 = m1.m20;
+m.m21 = m1.m21;
+m.m22 = m1.m22;
+return m;
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "setScale",
+function (scale) {
+this.clear33 ();
+this.m00 = this.m11 = this.m22 = scale;
+}, "~N");
+Clazz.defineMethod (c$, "setM3",
+function (m1) {
+this.setM33 (m1);
+}, "javajs.util.M34");
+Clazz.defineMethod (c$, "setA",
+function (m) {
+this.m00 = m[0];
+this.m01 = m[1];
+this.m02 = m[2];
+this.m10 = m[3];
+this.m11 = m[4];
+this.m12 = m[5];
+this.m20 = m[6];
+this.m21 = m[7];
+this.m22 = m[8];
+}, "~A");
+Clazz.defineMethod (c$, "setElement",
+function (row, col, v) {
+this.set33 (row, col, v);
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "getElement",
+function (row, col) {
+return this.get33 (row, col);
+}, "~N,~N");
+Clazz.defineMethod (c$, "setRow",
+function (row, x, y, z) {
+switch (row) {
+case 0:
+this.m00 = x;
+this.m01 = y;
+this.m02 = z;
+return;
+case 1:
+this.m10 = x;
+this.m11 = y;
+this.m12 = z;
+return;
+case 2:
+this.m20 = x;
+this.m21 = y;
+this.m22 = z;
+return;
+default:
+this.err ();
+}
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "setRowV",
+function (row, v) {
+switch (row) {
+case 0:
+this.m00 = v.x;
+this.m01 = v.y;
+this.m02 = v.z;
+return;
+case 1:
+this.m10 = v.x;
+this.m11 = v.y;
+this.m12 = v.z;
+return;
+case 2:
+this.m20 = v.x;
+this.m21 = v.y;
+this.m22 = v.z;
+return;
+default:
+this.err ();
+}
+}, "~N,javajs.util.T3");
+Clazz.defineMethod (c$, "setRowA",
+function (row, v) {
+this.setRow33 (row, v);
+}, "~N,~A");
+Clazz.overrideMethod (c$, "getRow",
+function (row, v) {
+this.getRow33 (row, v);
+}, "~N,~A");
+Clazz.defineMethod (c$, "setColumn3",
+function (column, x, y, z) {
+switch (column) {
+case 0:
+this.m00 = x;
+this.m10 = y;
+this.m20 = z;
+break;
+case 1:
+this.m01 = x;
+this.m11 = y;
+this.m21 = z;
+break;
+case 2:
+this.m02 = x;
+this.m12 = y;
+this.m22 = z;
+break;
+default:
+this.err ();
+}
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "setColumnV",
+function (column, v) {
+switch (column) {
+case 0:
+this.m00 = v.x;
+this.m10 = v.y;
+this.m20 = v.z;
+break;
+case 1:
+this.m01 = v.x;
+this.m11 = v.y;
+this.m21 = v.z;
+break;
+case 2:
+this.m02 = v.x;
+this.m12 = v.y;
+this.m22 = v.z;
+break;
+default:
+this.err ();
+}
+}, "~N,javajs.util.T3");
+Clazz.defineMethod (c$, "getColumnV",
+function (column, v) {
+switch (column) {
+case 0:
+v.x = this.m00;
+v.y = this.m10;
+v.z = this.m20;
+break;
+case 1:
+v.x = this.m01;
+v.y = this.m11;
+v.z = this.m21;
+break;
+case 2:
+v.x = this.m02;
+v.y = this.m12;
+v.z = this.m22;
+break;
+default:
+this.err ();
+}
+}, "~N,javajs.util.T3");
+Clazz.defineMethod (c$, "setColumnA",
+function (column, v) {
+this.setColumn33 (column, v);
+}, "~N,~A");
+Clazz.defineMethod (c$, "getColumn",
+function (column, v) {
+this.getColumn33 (column, v);
+}, "~N,~A");
+Clazz.defineMethod (c$, "add",
+function (m1) {
+this.add33 (m1);
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "sub",
+function (m1) {
+this.sub33 (m1);
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "transpose",
+function () {
+this.transpose33 ();
+});
+Clazz.defineMethod (c$, "transposeM",
+function (m1) {
+this.setM33 (m1);
+this.transpose33 ();
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "invertM",
+function (m1) {
+this.setM33 (m1);
+this.invert ();
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "invert",
+function () {
+var s = this.determinant3 ();
+if (s == 0.0) return;
+s = 1 / s;
+this.set9 (this.m11 * this.m22 - this.m12 * this.m21, this.m02 * this.m21 - this.m01 * this.m22, this.m01 * this.m12 - this.m02 * this.m11, this.m12 * this.m20 - this.m10 * this.m22, this.m00 * this.m22 - this.m02 * this.m20, this.m02 * this.m10 - this.m00 * this.m12, this.m10 * this.m21 - this.m11 * this.m20, this.m01 * this.m20 - this.m00 * this.m21, this.m00 * this.m11 - this.m01 * this.m10);
+this.scale (s);
+});
+Clazz.defineMethod (c$, "setAsXRotation",
+function (angle) {
+this.setXRot (angle);
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "setAsYRotation",
+function (angle) {
+this.setYRot (angle);
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "setAsZRotation",
+function (angle) {
+this.setZRot (angle);
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "scale",
+function (scalar) {
+this.mul33 (scalar);
+}, "~N");
+Clazz.defineMethod (c$, "mul",
+function (m1) {
+this.mul2 (this, m1);
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "mul2",
+function (m1, m2) {
+this.set9 (m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20, m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21, m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22, m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20, m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21, m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22, m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20, m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21, m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22);
+}, "javajs.util.M3,javajs.util.M3");
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (!(Clazz.instanceOf (o, javajs.util.M3))) return false;
+var m = o;
+return this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02 && this.m10 == m.m10 && this.m11 == m.m11 && this.m12 == m.m12 && this.m20 == m.m20 && this.m21 == m.m21 && this.m22 == m.m22;
+}, "~O");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+return javajs.util.T3.floatToIntBits0 (this.m00) ^ javajs.util.T3.floatToIntBits0 (this.m01) ^ javajs.util.T3.floatToIntBits0 (this.m02) ^ javajs.util.T3.floatToIntBits0 (this.m10) ^ javajs.util.T3.floatToIntBits0 (this.m11) ^ javajs.util.T3.floatToIntBits0 (this.m12) ^ javajs.util.T3.floatToIntBits0 (this.m20) ^ javajs.util.T3.floatToIntBits0 (this.m21) ^ javajs.util.T3.floatToIntBits0 (this.m22);
+});
+Clazz.defineMethod (c$, "setZero",
+function () {
+this.clear33 ();
+});
+Clazz.defineMethod (c$, "set9",
+($fz = function (m00, m01, m02, m10, m11, m12, m20, m21, m22) {
+this.m00 = m00;
+this.m01 = m01;
+this.m02 = m02;
+this.m10 = m10;
+this.m11 = m11;
+this.m12 = m12;
+this.m20 = m20;
+this.m21 = m21;
+this.m22 = m22;
+}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "[\n [" + this.m00 + "\t" + this.m01 + "\t" + this.m02 + "]" + "\n [" + this.m10 + "\t" + this.m11 + "\t" + this.m12 + "]" + "\n [" + this.m20 + "\t" + this.m21 + "\t" + this.m22 + "] ]";
+});
+Clazz.defineMethod (c$, "setAA",
+function (a) {
+this.setAA33 (a);
+return this;
+}, "javajs.util.A4");
+Clazz.defineMethod (c$, "setAsBallRotation",
+function (responseFactor, dx, dy) {
+var r = Math.sqrt (dx * dx + dy * dy);
+var th = r * responseFactor;
+if (th == 0) {
+this.setScale (1);
+return false;
+}var c = Math.cos (th);
+var s = Math.sin (th);
+var nx = -dy / r;
+var ny = dx / r;
+var c1 = c - 1;
+this.m00 = 1 + c1 * nx * nx;
+this.m01 = this.m10 = c1 * nx * ny;
+this.m20 = -(this.m02 = s * nx);
+this.m11 = 1 + c1 * ny * ny;
+this.m21 = -(this.m12 = s * ny);
+this.m22 = c;
+return true;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "isRotation",
+function () {
+return (Math.abs (this.determinant3 () - 1) < 0.001);
+});
+});
diff --git a/bin/javajs/util/M34.js b/bin/javajs/util/M34.js
index 47c6a34..ae3f33d 100644
--- a/bin/javajs/util/M34.js
+++ b/bin/javajs/util/M34.js
@@ -1,336 +1,336 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (null, "javajs.util.M34", ["java.lang.ArrayIndexOutOfBoundsException"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.m00 = 0;
-this.m01 = 0;
-this.m02 = 0;
-this.m10 = 0;
-this.m11 = 0;
-this.m12 = 0;
-this.m20 = 0;
-this.m21 = 0;
-this.m22 = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "M34");
-Clazz.defineMethod (c$, "setAA33",
-function (a) {
-var x = a.x;
-var y = a.y;
-var z = a.z;
-var angle = a.angle;
-var n = Math.sqrt (x * x + y * y + z * z);
-n = 1 / n;
-x *= n;
-y *= n;
-z *= n;
-var c = Math.cos (angle);
-var s = Math.sin (angle);
-var omc = 1.0 - c;
-this.m00 = (c + x * x * omc);
-this.m11 = (c + y * y * omc);
-this.m22 = (c + z * z * omc);
-var tmp1 = x * y * omc;
-var tmp2 = z * s;
-this.m01 = (tmp1 - tmp2);
-this.m10 = (tmp1 + tmp2);
-tmp1 = x * z * omc;
-tmp2 = y * s;
-this.m02 = (tmp1 + tmp2);
-this.m20 = (tmp1 - tmp2);
-tmp1 = y * z * omc;
-tmp2 = x * s;
-this.m12 = (tmp1 - tmp2);
-this.m21 = (tmp1 + tmp2);
-}, "javajs.util.A4");
-Clazz.defineMethod (c$, "rotate",
-function (t) {
-this.rotate2 (t, t);
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "rotate2",
-function (t, result) {
-result.set (this.m00 * t.x + this.m01 * t.y + this.m02 * t.z, this.m10 * t.x + this.m11 * t.y + this.m12 * t.z, this.m20 * t.x + this.m21 * t.y + this.m22 * t.z);
-}, "javajs.util.T3,javajs.util.T3");
-Clazz.defineMethod (c$, "setM33",
-function (m1) {
-this.m00 = m1.m00;
-this.m01 = m1.m01;
-this.m02 = m1.m02;
-this.m10 = m1.m10;
-this.m11 = m1.m11;
-this.m12 = m1.m12;
-this.m20 = m1.m20;
-this.m21 = m1.m21;
-this.m22 = m1.m22;
-}, "javajs.util.M34");
-Clazz.defineMethod (c$, "clear33",
-function () {
-this.m00 = this.m01 = this.m02 = this.m10 = this.m11 = this.m12 = this.m20 = this.m21 = this.m22 = 0.0;
-});
-Clazz.defineMethod (c$, "set33",
-function (row, col, v) {
-switch (row) {
-case 0:
-switch (col) {
-case 0:
-this.m00 = v;
-return;
-case 1:
-this.m01 = v;
-return;
-case 2:
-this.m02 = v;
-return;
-}
-break;
-case 1:
-switch (col) {
-case 0:
-this.m10 = v;
-return;
-case 1:
-this.m11 = v;
-return;
-case 2:
-this.m12 = v;
-return;
-}
-break;
-case 2:
-switch (col) {
-case 0:
-this.m20 = v;
-return;
-case 1:
-this.m21 = v;
-return;
-case 2:
-this.m22 = v;
-return;
-}
-break;
-}
-this.err ();
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "get33",
-function (row, col) {
-switch (row) {
-case 0:
-switch (col) {
-case 0:
-return this.m00;
-case 1:
-return this.m01;
-case 2:
-return this.m02;
-}
-break;
-case 1:
-switch (col) {
-case 0:
-return this.m10;
-case 1:
-return this.m11;
-case 2:
-return this.m12;
-}
-break;
-case 2:
-switch (col) {
-case 0:
-return this.m20;
-case 1:
-return this.m21;
-case 2:
-return this.m22;
-}
-break;
-}
-this.err ();
-return 0;
-}, "~N,~N");
-Clazz.defineMethod (c$, "setRow33",
-function (row, v) {
-switch (row) {
-case 0:
-this.m00 = v[0];
-this.m01 = v[1];
-this.m02 = v[2];
-return;
-case 1:
-this.m10 = v[0];
-this.m11 = v[1];
-this.m12 = v[2];
-return;
-case 2:
-this.m20 = v[0];
-this.m21 = v[1];
-this.m22 = v[2];
-return;
-default:
-this.err ();
-}
-}, "~N,~A");
-Clazz.defineMethod (c$, "getRow33",
-function (row, v) {
-switch (row) {
-case 0:
-v[0] = this.m00;
-v[1] = this.m01;
-v[2] = this.m02;
-return;
-case 1:
-v[0] = this.m10;
-v[1] = this.m11;
-v[2] = this.m12;
-return;
-case 2:
-v[0] = this.m20;
-v[1] = this.m21;
-v[2] = this.m22;
-return;
-}
-this.err ();
-}, "~N,~A");
-Clazz.defineMethod (c$, "setColumn33",
-function (column, v) {
-switch (column) {
-case 0:
-this.m00 = v[0];
-this.m10 = v[1];
-this.m20 = v[2];
-break;
-case 1:
-this.m01 = v[0];
-this.m11 = v[1];
-this.m21 = v[2];
-break;
-case 2:
-this.m02 = v[0];
-this.m12 = v[1];
-this.m22 = v[2];
-break;
-default:
-this.err ();
-}
-}, "~N,~A");
-Clazz.defineMethod (c$, "getColumn33",
-function (column, v) {
-switch (column) {
-case 0:
-v[0] = this.m00;
-v[1] = this.m10;
-v[2] = this.m20;
-break;
-case 1:
-v[0] = this.m01;
-v[1] = this.m11;
-v[2] = this.m21;
-break;
-case 2:
-v[0] = this.m02;
-v[1] = this.m12;
-v[2] = this.m22;
-break;
-default:
-this.err ();
-}
-}, "~N,~A");
-Clazz.defineMethod (c$, "add33",
-function (m1) {
-this.m00 += m1.m00;
-this.m01 += m1.m01;
-this.m02 += m1.m02;
-this.m10 += m1.m10;
-this.m11 += m1.m11;
-this.m12 += m1.m12;
-this.m20 += m1.m20;
-this.m21 += m1.m21;
-this.m22 += m1.m22;
-}, "javajs.util.M34");
-Clazz.defineMethod (c$, "sub33",
-function (m1) {
-this.m00 -= m1.m00;
-this.m01 -= m1.m01;
-this.m02 -= m1.m02;
-this.m10 -= m1.m10;
-this.m11 -= m1.m11;
-this.m12 -= m1.m12;
-this.m20 -= m1.m20;
-this.m21 -= m1.m21;
-this.m22 -= m1.m22;
-}, "javajs.util.M34");
-Clazz.defineMethod (c$, "mul33",
-function (x) {
-this.m00 *= x;
-this.m01 *= x;
-this.m02 *= x;
-this.m10 *= x;
-this.m11 *= x;
-this.m12 *= x;
-this.m20 *= x;
-this.m21 *= x;
-this.m22 *= x;
-}, "~N");
-Clazz.defineMethod (c$, "transpose33",
-function () {
-var tmp = this.m01;
-this.m01 = this.m10;
-this.m10 = tmp;
-tmp = this.m02;
-this.m02 = this.m20;
-this.m20 = tmp;
-tmp = this.m12;
-this.m12 = this.m21;
-this.m21 = tmp;
-});
-Clazz.defineMethod (c$, "setXRot",
-function (angle) {
-var c = Math.cos (angle);
-var s = Math.sin (angle);
-this.m00 = 1.0;
-this.m01 = 0.0;
-this.m02 = 0.0;
-this.m10 = 0.0;
-this.m11 = c;
-this.m12 = -s;
-this.m20 = 0.0;
-this.m21 = s;
-this.m22 = c;
-}, "~N");
-Clazz.defineMethod (c$, "setYRot",
-function (angle) {
-var c = Math.cos (angle);
-var s = Math.sin (angle);
-this.m00 = c;
-this.m01 = 0.0;
-this.m02 = s;
-this.m10 = 0.0;
-this.m11 = 1.0;
-this.m12 = 0.0;
-this.m20 = -s;
-this.m21 = 0.0;
-this.m22 = c;
-}, "~N");
-Clazz.defineMethod (c$, "setZRot",
-function (angle) {
-var c = Math.cos (angle);
-var s = Math.sin (angle);
-this.m00 = c;
-this.m01 = -s;
-this.m02 = 0.0;
-this.m10 = s;
-this.m11 = c;
-this.m12 = 0.0;
-this.m20 = 0.0;
-this.m21 = 0.0;
-this.m22 = 1.0;
-}, "~N");
-Clazz.defineMethod (c$, "determinant3",
-function () {
-return this.m00 * (this.m11 * this.m22 - this.m21 * this.m12) - this.m01 * (this.m10 * this.m22 - this.m20 * this.m12) + this.m02 * (this.m10 * this.m21 - this.m20 * this.m11);
-});
-Clazz.defineMethod (c$, "err",
-function () {
-throw new ArrayIndexOutOfBoundsException ("matrix column/row out of bounds");
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (null, "javajs.util.M34", ["java.lang.ArrayIndexOutOfBoundsException"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.m00 = 0;
+this.m01 = 0;
+this.m02 = 0;
+this.m10 = 0;
+this.m11 = 0;
+this.m12 = 0;
+this.m20 = 0;
+this.m21 = 0;
+this.m22 = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "M34");
+Clazz.defineMethod (c$, "setAA33",
+function (a) {
+var x = a.x;
+var y = a.y;
+var z = a.z;
+var angle = a.angle;
+var n = Math.sqrt (x * x + y * y + z * z);
+n = 1 / n;
+x *= n;
+y *= n;
+z *= n;
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+var omc = 1.0 - c;
+this.m00 = (c + x * x * omc);
+this.m11 = (c + y * y * omc);
+this.m22 = (c + z * z * omc);
+var tmp1 = x * y * omc;
+var tmp2 = z * s;
+this.m01 = (tmp1 - tmp2);
+this.m10 = (tmp1 + tmp2);
+tmp1 = x * z * omc;
+tmp2 = y * s;
+this.m02 = (tmp1 + tmp2);
+this.m20 = (tmp1 - tmp2);
+tmp1 = y * z * omc;
+tmp2 = x * s;
+this.m12 = (tmp1 - tmp2);
+this.m21 = (tmp1 + tmp2);
+}, "javajs.util.A4");
+Clazz.defineMethod (c$, "rotate",
+function (t) {
+this.rotate2 (t, t);
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "rotate2",
+function (t, result) {
+result.set (this.m00 * t.x + this.m01 * t.y + this.m02 * t.z, this.m10 * t.x + this.m11 * t.y + this.m12 * t.z, this.m20 * t.x + this.m21 * t.y + this.m22 * t.z);
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "setM33",
+function (m1) {
+this.m00 = m1.m00;
+this.m01 = m1.m01;
+this.m02 = m1.m02;
+this.m10 = m1.m10;
+this.m11 = m1.m11;
+this.m12 = m1.m12;
+this.m20 = m1.m20;
+this.m21 = m1.m21;
+this.m22 = m1.m22;
+}, "javajs.util.M34");
+Clazz.defineMethod (c$, "clear33",
+function () {
+this.m00 = this.m01 = this.m02 = this.m10 = this.m11 = this.m12 = this.m20 = this.m21 = this.m22 = 0.0;
+});
+Clazz.defineMethod (c$, "set33",
+function (row, col, v) {
+switch (row) {
+case 0:
+switch (col) {
+case 0:
+this.m00 = v;
+return;
+case 1:
+this.m01 = v;
+return;
+case 2:
+this.m02 = v;
+return;
+}
+break;
+case 1:
+switch (col) {
+case 0:
+this.m10 = v;
+return;
+case 1:
+this.m11 = v;
+return;
+case 2:
+this.m12 = v;
+return;
+}
+break;
+case 2:
+switch (col) {
+case 0:
+this.m20 = v;
+return;
+case 1:
+this.m21 = v;
+return;
+case 2:
+this.m22 = v;
+return;
+}
+break;
+}
+this.err ();
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "get33",
+function (row, col) {
+switch (row) {
+case 0:
+switch (col) {
+case 0:
+return this.m00;
+case 1:
+return this.m01;
+case 2:
+return this.m02;
+}
+break;
+case 1:
+switch (col) {
+case 0:
+return this.m10;
+case 1:
+return this.m11;
+case 2:
+return this.m12;
+}
+break;
+case 2:
+switch (col) {
+case 0:
+return this.m20;
+case 1:
+return this.m21;
+case 2:
+return this.m22;
+}
+break;
+}
+this.err ();
+return 0;
+}, "~N,~N");
+Clazz.defineMethod (c$, "setRow33",
+function (row, v) {
+switch (row) {
+case 0:
+this.m00 = v[0];
+this.m01 = v[1];
+this.m02 = v[2];
+return;
+case 1:
+this.m10 = v[0];
+this.m11 = v[1];
+this.m12 = v[2];
+return;
+case 2:
+this.m20 = v[0];
+this.m21 = v[1];
+this.m22 = v[2];
+return;
+default:
+this.err ();
+}
+}, "~N,~A");
+Clazz.defineMethod (c$, "getRow33",
+function (row, v) {
+switch (row) {
+case 0:
+v[0] = this.m00;
+v[1] = this.m01;
+v[2] = this.m02;
+return;
+case 1:
+v[0] = this.m10;
+v[1] = this.m11;
+v[2] = this.m12;
+return;
+case 2:
+v[0] = this.m20;
+v[1] = this.m21;
+v[2] = this.m22;
+return;
+}
+this.err ();
+}, "~N,~A");
+Clazz.defineMethod (c$, "setColumn33",
+function (column, v) {
+switch (column) {
+case 0:
+this.m00 = v[0];
+this.m10 = v[1];
+this.m20 = v[2];
+break;
+case 1:
+this.m01 = v[0];
+this.m11 = v[1];
+this.m21 = v[2];
+break;
+case 2:
+this.m02 = v[0];
+this.m12 = v[1];
+this.m22 = v[2];
+break;
+default:
+this.err ();
+}
+}, "~N,~A");
+Clazz.defineMethod (c$, "getColumn33",
+function (column, v) {
+switch (column) {
+case 0:
+v[0] = this.m00;
+v[1] = this.m10;
+v[2] = this.m20;
+break;
+case 1:
+v[0] = this.m01;
+v[1] = this.m11;
+v[2] = this.m21;
+break;
+case 2:
+v[0] = this.m02;
+v[1] = this.m12;
+v[2] = this.m22;
+break;
+default:
+this.err ();
+}
+}, "~N,~A");
+Clazz.defineMethod (c$, "add33",
+function (m1) {
+this.m00 += m1.m00;
+this.m01 += m1.m01;
+this.m02 += m1.m02;
+this.m10 += m1.m10;
+this.m11 += m1.m11;
+this.m12 += m1.m12;
+this.m20 += m1.m20;
+this.m21 += m1.m21;
+this.m22 += m1.m22;
+}, "javajs.util.M34");
+Clazz.defineMethod (c$, "sub33",
+function (m1) {
+this.m00 -= m1.m00;
+this.m01 -= m1.m01;
+this.m02 -= m1.m02;
+this.m10 -= m1.m10;
+this.m11 -= m1.m11;
+this.m12 -= m1.m12;
+this.m20 -= m1.m20;
+this.m21 -= m1.m21;
+this.m22 -= m1.m22;
+}, "javajs.util.M34");
+Clazz.defineMethod (c$, "mul33",
+function (x) {
+this.m00 *= x;
+this.m01 *= x;
+this.m02 *= x;
+this.m10 *= x;
+this.m11 *= x;
+this.m12 *= x;
+this.m20 *= x;
+this.m21 *= x;
+this.m22 *= x;
+}, "~N");
+Clazz.defineMethod (c$, "transpose33",
+function () {
+var tmp = this.m01;
+this.m01 = this.m10;
+this.m10 = tmp;
+tmp = this.m02;
+this.m02 = this.m20;
+this.m20 = tmp;
+tmp = this.m12;
+this.m12 = this.m21;
+this.m21 = tmp;
+});
+Clazz.defineMethod (c$, "setXRot",
+function (angle) {
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m00 = 1.0;
+this.m01 = 0.0;
+this.m02 = 0.0;
+this.m10 = 0.0;
+this.m11 = c;
+this.m12 = -s;
+this.m20 = 0.0;
+this.m21 = s;
+this.m22 = c;
+}, "~N");
+Clazz.defineMethod (c$, "setYRot",
+function (angle) {
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m00 = c;
+this.m01 = 0.0;
+this.m02 = s;
+this.m10 = 0.0;
+this.m11 = 1.0;
+this.m12 = 0.0;
+this.m20 = -s;
+this.m21 = 0.0;
+this.m22 = c;
+}, "~N");
+Clazz.defineMethod (c$, "setZRot",
+function (angle) {
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m00 = c;
+this.m01 = -s;
+this.m02 = 0.0;
+this.m10 = s;
+this.m11 = c;
+this.m12 = 0.0;
+this.m20 = 0.0;
+this.m21 = 0.0;
+this.m22 = 1.0;
+}, "~N");
+Clazz.defineMethod (c$, "determinant3",
+function () {
+return this.m00 * (this.m11 * this.m22 - this.m21 * this.m12) - this.m01 * (this.m10 * this.m22 - this.m20 * this.m12) + this.m02 * (this.m10 * this.m21 - this.m20 * this.m11);
+});
+Clazz.defineMethod (c$, "err",
+function () {
+throw new ArrayIndexOutOfBoundsException ("matrix column/row out of bounds");
+});
+});
diff --git a/bin/javajs/util/M4.js b/bin/javajs/util/M4.js
index 211ae5d..59c23db 100644
--- a/bin/javajs/util/M4.js
+++ b/bin/javajs/util/M4.js
@@ -1,486 +1,486 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.M34"], "javajs.util.M4", ["javajs.util.T3"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.m03 = 0;
-this.m13 = 0;
-this.m23 = 0;
-this.m30 = 0;
-this.m31 = 0;
-this.m32 = 0;
-this.m33 = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "M4", javajs.util.M34);
-c$.newA16 = Clazz.defineMethod (c$, "newA16",
-function (v) {
-var m = new javajs.util.M4 ();
-m.m00 = v[0];
-m.m01 = v[1];
-m.m02 = v[2];
-m.m03 = v[3];
-m.m10 = v[4];
-m.m11 = v[5];
-m.m12 = v[6];
-m.m13 = v[7];
-m.m20 = v[8];
-m.m21 = v[9];
-m.m22 = v[10];
-m.m23 = v[11];
-m.m30 = v[12];
-m.m31 = v[13];
-m.m32 = v[14];
-m.m33 = v[15];
-return m;
-}, "~A");
-c$.newM4 = Clazz.defineMethod (c$, "newM4",
-function (m1) {
-var m = new javajs.util.M4 ();
-if (m1 == null) {
-m.setIdentity ();
-return m;
-}m.setToM3 (m1);
-m.m03 = m1.m03;
-m.m13 = m1.m13;
-m.m23 = m1.m23;
-m.m30 = m1.m30;
-m.m31 = m1.m31;
-m.m32 = m1.m32;
-m.m33 = m1.m33;
-return m;
-}, "javajs.util.M4");
-c$.newMV = Clazz.defineMethod (c$, "newMV",
-function (m1, t) {
-var m = new javajs.util.M4 ();
-m.setMV (m1, t);
-return m;
-}, "javajs.util.M3,javajs.util.T3");
-Clazz.defineMethod (c$, "setZero",
-function () {
-this.clear33 ();
-this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = this.m33 = 0.0;
-});
-Clazz.defineMethod (c$, "setIdentity",
-function () {
-this.setZero ();
-this.m00 = this.m11 = this.m22 = this.m33 = 1.0;
-});
-Clazz.defineMethod (c$, "setM4",
-function (m1) {
-this.setM33 (m1);
-this.m03 = m1.m03;
-this.m13 = m1.m13;
-this.m23 = m1.m23;
-this.m30 = m1.m30;
-this.m31 = m1.m31;
-this.m32 = m1.m32;
-this.m33 = m1.m33;
-return this;
-}, "javajs.util.M4");
-Clazz.defineMethod (c$, "setMV",
-function (m1, t) {
-this.setM33 (m1);
-this.setTranslation (t);
-this.m33 = 1;
-}, "javajs.util.M3,javajs.util.T3");
-Clazz.defineMethod (c$, "setToM3",
-function (m1) {
-this.setM33 (m1);
-this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = 0.0;
-this.m33 = 1.0;
-}, "javajs.util.M34");
-Clazz.defineMethod (c$, "setToAA",
-function (a) {
-this.setIdentity ();
-this.setAA33 (a);
-}, "javajs.util.A4");
-Clazz.defineMethod (c$, "setA",
-function (m) {
-this.m00 = m[0];
-this.m01 = m[1];
-this.m02 = m[2];
-this.m03 = m[3];
-this.m10 = m[4];
-this.m11 = m[5];
-this.m12 = m[6];
-this.m13 = m[7];
-this.m20 = m[8];
-this.m21 = m[9];
-this.m22 = m[10];
-this.m23 = m[11];
-this.m30 = m[12];
-this.m31 = m[13];
-this.m32 = m[14];
-this.m33 = m[15];
-}, "~A");
-Clazz.defineMethod (c$, "setTranslation",
-function (trans) {
-this.m03 = trans.x;
-this.m13 = trans.y;
-this.m23 = trans.z;
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "setElement",
-function (row, col, v) {
-if (row < 3 && col < 3) {
-this.set33 (row, col, v);
-return;
-}if (row > 3 || col > 3) this.err ();
-switch (row) {
-case 0:
-this.m03 = v;
-return;
-case 1:
-this.m13 = v;
-return;
-case 2:
-this.m23 = v;
-return;
-}
-switch (col) {
-case 0:
-this.m30 = v;
-return;
-case 1:
-this.m31 = v;
-return;
-case 2:
-this.m32 = v;
-return;
-case 3:
-this.m33 = v;
-return;
-}
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "getElement",
-function (row, col) {
-if (row < 3 && col < 3) return this.get33 (row, col);
-if (row > 3 || col > 3) {
-this.err ();
-return 0;
-}switch (row) {
-case 0:
-return this.m03;
-case 1:
-return this.m13;
-case 2:
-return this.m23;
-default:
-switch (col) {
-case 0:
-return this.m30;
-case 1:
-return this.m31;
-case 2:
-return this.m32;
-default:
-return this.m33;
-}
-}
-}, "~N,~N");
-Clazz.defineMethod (c$, "getTranslation",
-function (trans) {
-trans.x = this.m03;
-trans.y = this.m13;
-trans.z = this.m23;
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "getRotationScale",
-function (m1) {
-m1.m00 = this.m00;
-m1.m01 = this.m01;
-m1.m02 = this.m02;
-m1.m10 = this.m10;
-m1.m11 = this.m11;
-m1.m12 = this.m12;
-m1.m20 = this.m20;
-m1.m21 = this.m21;
-m1.m22 = this.m22;
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "setRotationScale",
-function (m1) {
-this.m00 = m1.m00;
-this.m01 = m1.m01;
-this.m02 = m1.m02;
-this.m10 = m1.m10;
-this.m11 = m1.m11;
-this.m12 = m1.m12;
-this.m20 = m1.m20;
-this.m21 = m1.m21;
-this.m22 = m1.m22;
-}, "javajs.util.M3");
-Clazz.defineMethod (c$, "setRowA",
-function (row, v) {
-if (row < 3) this.setRow33 (row, v);
-switch (row) {
-case 0:
-this.m03 = v[3];
-return;
-case 1:
-this.m13 = v[3];
-return;
-case 2:
-this.m23 = v[3];
-return;
-case 3:
-this.m30 = v[0];
-this.m31 = v[1];
-this.m32 = v[2];
-this.m33 = v[3];
-return;
-}
-this.err ();
-}, "~N,~A");
-Clazz.overrideMethod (c$, "getRow",
-function (row, v) {
-if (row < 3) this.getRow33 (row, v);
-switch (row) {
-case 0:
-v[3] = this.m03;
-return;
-case 1:
-v[3] = this.m13;
-return;
-case 2:
-v[3] = this.m23;
-return;
-case 3:
-v[0] = this.m30;
-v[1] = this.m31;
-v[2] = this.m32;
-v[3] = this.m33;
-return;
-}
-this.err ();
-}, "~N,~A");
-Clazz.defineMethod (c$, "setColumn4",
-function (column, x, y, z, w) {
-if (column == 0) {
-this.m00 = x;
-this.m10 = y;
-this.m20 = z;
-this.m30 = w;
-} else if (column == 1) {
-this.m01 = x;
-this.m11 = y;
-this.m21 = z;
-this.m31 = w;
-} else if (column == 2) {
-this.m02 = x;
-this.m12 = y;
-this.m22 = z;
-this.m32 = w;
-} else if (column == 3) {
-this.m03 = x;
-this.m13 = y;
-this.m23 = z;
-this.m33 = w;
-} else {
-this.err ();
-}}, "~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "setColumnA",
-function (column, v) {
-if (column < 3) this.setColumn33 (column, v);
-switch (column) {
-case 0:
-this.m30 = v[3];
-return;
-case 1:
-this.m31 = v[3];
-return;
-case 2:
-this.m32 = v[3];
-return;
-case 3:
-this.m03 = v[0];
-this.m13 = v[1];
-this.m23 = v[2];
-this.m33 = v[3];
-return;
-default:
-this.err ();
-}
-}, "~N,~A");
-Clazz.defineMethod (c$, "getColumn",
-function (column, v) {
-if (column < 3) this.getColumn33 (column, v);
-switch (column) {
-case 0:
-v[3] = this.m30;
-return;
-case 1:
-v[3] = this.m31;
-return;
-case 2:
-v[3] = this.m32;
-return;
-case 3:
-v[0] = this.m03;
-v[1] = this.m13;
-v[2] = this.m23;
-v[3] = this.m33;
-return;
-default:
-this.err ();
-}
-}, "~N,~A");
-Clazz.defineMethod (c$, "sub",
-function (m1) {
-this.sub33 (m1);
-this.m03 -= m1.m03;
-this.m13 -= m1.m13;
-this.m23 -= m1.m23;
-this.m30 -= m1.m30;
-this.m31 -= m1.m31;
-this.m32 -= m1.m32;
-this.m33 -= m1.m33;
-}, "javajs.util.M4");
-Clazz.defineMethod (c$, "transpose",
-function () {
-this.transpose33 ();
-var tmp = this.m03;
-this.m03 = this.m30;
-this.m30 = tmp;
-tmp = this.m13;
-this.m13 = this.m31;
-this.m31 = tmp;
-tmp = this.m23;
-this.m23 = this.m32;
-this.m32 = tmp;
-});
-Clazz.defineMethod (c$, "invert",
-function () {
-var s = this.determinant4 ();
-if (s == 0.0) return this;
-s = 1 / s;
-this.set (this.m11 * (this.m22 * this.m33 - this.m23 * this.m32) + this.m12 * (this.m23 * this.m31 - this.m21 * this.m33) + this.m13 * (this.m21 * this.m32 - this.m22 * this.m31), this.m21 * (this.m02 * this.m33 - this.m03 * this.m32) + this.m22 * (this.m03 * this.m31 - this.m01 * this.m33) + this.m23 * (this.m01 * this.m32 - this.m02 * this.m31), this.m31 * (this.m02 * this.m13 - this.m03 * this.m12) + this.m32 * (this.m03 * this.m11 - this.m01 * this.m13) + this.m33 * (this.m01 * this.m12 - this.m02 * this.m11), this.m01 * (this.m13 * this.m22 - this.m12 * this.m23) + this.m02 * (this.m11 * this.m23 - this.m13 * this.m21) + this.m03 * (this.m12 * this.m21 - this.m11 * this.m22), this.m12 * (this.m20 * this.m33 - this.m23 * this.m30) + this.m13 * (this.m22 * this.m30 - this.m20 * this.m32) + this.m10 * (this.m23 * this.m32 - this.m22 * this.m33), this.m22 * (this.m00 * this.m33 - this.m03 * this.m30) + this.m23 * (this.m02 * this.m30 - this.m00 * this.m32) + this.m20 * (this.m03 * this.m32 - this.m02 * this.m33), this.m32 * (this.m00 * this.m13 - this.m03 * this.m10) + this.m33 * (this.m02 * this.m10 - this.m00 * this.m12) + this.m30 * (this.m03 * this.m12 - this.m02 * this.m13), this.m02 * (this.m13 * this.m20 - this.m10 * this.m23) + this.m03 * (this.m10 * this.m22 - this.m12 * this.m20) + this.m00 * (this.m12 * this.m23 - this.m13 * this.m22), this.m13 * (this.m20 * this.m31 - this.m21 * this.m30) + this.m10 * (this.m21 * this.m33 - this.m23 * this.m31) + this.m11 * (this.m23 * this.m30 - this.m20 * this.m33), this.m23 * (this.m00 * this.m31 - this.m01 * this.m30) + this.m20 * (this.m01 * this.m33 - this.m03 * this.m31) + this.m21 * (this.m03 * this.m30 - this.m00 * this.m33), this.m33 * (this.m00 * this.m11 - this.m01 * this.m10) + this.m30 * (this.m01 * this.m13 - this.m03 * this.m11) + this.m31 * (this.m03 * this.m10 - this.m00 * this.m13), this.m03 * (this.m11 * this.m20 - this.m10 * this.m21) + this.m00 * (this.m13 * this.m21 - this.m11 * this.m23) + this.m01 * (this.m10 * this.m23 - this.m13 * this.m20), this.m10 * (this.m22 * this.m31 - this.m21 * this.m32) + this.m11 * (this.m20 * this.m32 - this.m22 * this.m30) + this.m12 * (this.m21 * this.m30 - this.m20 * this.m31), this.m20 * (this.m02 * this.m31 - this.m01 * this.m32) + this.m21 * (this.m00 * this.m32 - this.m02 * this.m30) + this.m22 * (this.m01 * this.m30 - this.m00 * this.m31), this.m30 * (this.m02 * this.m11 - this.m01 * this.m12) + this.m31 * (this.m00 * this.m12 - this.m02 * this.m10) + this.m32 * (this.m01 * this.m10 - this.m00 * this.m11), this.m00 * (this.m11 * this.m22 - this.m12 * this.m21) + this.m01 * (this.m12 * this.m20 - this.m10 * this.m22) + this.m02 * (this.m10 * this.m21 - this.m11 * this.m20));
-this.scale (s);
-return this;
-});
-Clazz.defineMethod (c$, "set",
-($fz = function (m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
-this.m00 = m00;
-this.m01 = m01;
-this.m02 = m02;
-this.m03 = m03;
-this.m10 = m10;
-this.m11 = m11;
-this.m12 = m12;
-this.m13 = m13;
-this.m20 = m20;
-this.m21 = m21;
-this.m22 = m22;
-this.m23 = m23;
-this.m30 = m30;
-this.m31 = m31;
-this.m32 = m32;
-this.m33 = m33;
-}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N");
-Clazz.defineMethod (c$, "determinant4",
-function () {
-return (this.m00 * this.m11 - this.m01 * this.m10) * (this.m22 * this.m33 - this.m23 * this.m32) - (this.m00 * this.m12 - this.m02 * this.m10) * (this.m21 * this.m33 - this.m23 * this.m31) + (this.m00 * this.m13 - this.m03 * this.m10) * (this.m21 * this.m32 - this.m22 * this.m31) + (this.m01 * this.m12 - this.m02 * this.m11) * (this.m20 * this.m33 - this.m23 * this.m30) - (this.m01 * this.m13 - this.m03 * this.m11) * (this.m20 * this.m32 - this.m22 * this.m30) + (this.m02 * this.m13 - this.m03 * this.m12) * (this.m20 * this.m31 - this.m21 * this.m30);
-});
-Clazz.defineMethod (c$, "scale",
-($fz = function (scalar) {
-this.mul33 (scalar);
-this.m03 *= scalar;
-this.m13 *= scalar;
-this.m23 *= scalar;
-this.m30 *= scalar;
-this.m31 *= scalar;
-this.m32 *= scalar;
-this.m33 *= scalar;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "mul",
-function (m1) {
-this.mul2 (this, m1);
-}, "javajs.util.M4");
-Clazz.defineMethod (c$, "mul2",
-function (m1, m2) {
-this.set (m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20 + m1.m03 * m2.m30, m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21 + m1.m03 * m2.m31, m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22 + m1.m03 * m2.m32, m1.m00 * m2.m03 + m1.m01 * m2.m13 + m1.m02 * m2.m23 + m1.m03 * m2.m33, m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20 + m1.m13 * m2.m30, m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21 + m1.m13 * m2.m31, m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22 + m1.m13 * m2.m32, m1.m10 * m2.m03 + m1.m11 * m2.m13 + m1.m12 * m2.m23 + m1.m13 * m2.m33, m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20 + m1.m23 * m2.m30, m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21 + m1.m23 * m2.m31, m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22 + m1.m23 * m2.m32, m1.m20 * m2.m03 + m1.m21 * m2.m13 + m1.m22 * m2.m23 + m1.m23 * m2.m33, m1.m30 * m2.m00 + m1.m31 * m2.m10 + m1.m32 * m2.m20 + m1.m33 * m2.m30, m1.m30 * m2.m01 + m1.m31 * m2.m11 + m1.m32 * m2.m21 + m1.m33 * m2.m31, m1.m30 * m2.m02 + m1.m31 * m2.m12 + m1.m32 * m2.m22 + m1.m33 * m2.m32, m1.m30 * m2.m03 + m1.m31 * m2.m13 + m1.m32 * m2.m23 + m1.m33 * m2.m33);
-}, "javajs.util.M4,javajs.util.M4");
-Clazz.defineMethod (c$, "transform",
-function (vec) {
-this.transform2 (vec, vec);
-}, "javajs.util.T4");
-Clazz.defineMethod (c$, "transform2",
-function (vec, vecOut) {
-vecOut.set4 (this.m00 * vec.x + this.m01 * vec.y + this.m02 * vec.z + this.m03 * vec.w, this.m10 * vec.x + this.m11 * vec.y + this.m12 * vec.z + this.m13 * vec.w, this.m20 * vec.x + this.m21 * vec.y + this.m22 * vec.z + this.m23 * vec.w, this.m30 * vec.x + this.m31 * vec.y + this.m32 * vec.z + this.m33 * vec.w);
-}, "javajs.util.T4,javajs.util.T4");
-Clazz.defineMethod (c$, "rotTrans",
-function (point) {
-this.rotTrans2 (point, point);
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "rotTrans2",
-function (point, pointOut) {
-pointOut.set (this.m00 * point.x + this.m01 * point.y + this.m02 * point.z + this.m03, this.m10 * point.x + this.m11 * point.y + this.m12 * point.z + this.m13, this.m20 * point.x + this.m21 * point.y + this.m22 * point.z + this.m23);
-return pointOut;
-}, "javajs.util.T3,javajs.util.T3");
-Clazz.defineMethod (c$, "setAsXYRotation",
-function (angle) {
-this.setIdentity ();
-var c = Math.cos (angle);
-var s = Math.sin (angle);
-this.m22 = c;
-this.m23 = -s;
-this.m32 = s;
-this.m33 = c;
-return this;
-}, "~N");
-Clazz.defineMethod (c$, "setAsYZRotation",
-function (angle) {
-this.setIdentity ();
-var c = Math.cos (angle);
-var s = Math.sin (angle);
-this.m00 = c;
-this.m03 = -s;
-this.m30 = s;
-this.m33 = c;
-return this;
-}, "~N");
-Clazz.defineMethod (c$, "setAsXZRotation",
-function (angle) {
-this.setIdentity ();
-var c = Math.cos (angle);
-var s = Math.sin (angle);
-this.m11 = c;
-this.m13 = -s;
-this.m31 = s;
-this.m33 = c;
-return this;
-}, "~N");
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (!(Clazz.instanceOf (o, javajs.util.M4))) return false;
-var m = o;
-return (this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02 && this.m03 == m.m03 && this.m10 == m.m10 && this.m11 == m.m11 && this.m12 == m.m12 && this.m13 == m.m13 && this.m20 == m.m20 && this.m21 == m.m21 && this.m22 == m.m22 && this.m23 == m.m23 && this.m30 == m.m30 && this.m31 == m.m31 && this.m32 == m.m32 && this.m33 == m.m33);
-}, "~O");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-return javajs.util.T3.floatToIntBits0 (this.m00) ^ javajs.util.T3.floatToIntBits0 (this.m01) ^ javajs.util.T3.floatToIntBits0 (this.m02) ^ javajs.util.T3.floatToIntBits0 (this.m03) ^ javajs.util.T3.floatToIntBits0 (this.m10) ^ javajs.util.T3.floatToIntBits0 (this.m11) ^ javajs.util.T3.floatToIntBits0 (this.m12) ^ javajs.util.T3.floatToIntBits0 (this.m13) ^ javajs.util.T3.floatToIntBits0 (this.m20) ^ javajs.util.T3.floatToIntBits0 (this.m21) ^ javajs.util.T3.floatToIntBits0 (this.m22) ^ javajs.util.T3.floatToIntBits0 (this.m23) ^ javajs.util.T3.floatToIntBits0 (this.m30) ^ javajs.util.T3.floatToIntBits0 (this.m31) ^ javajs.util.T3.floatToIntBits0 (this.m32) ^ javajs.util.T3.floatToIntBits0 (this.m33);
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "[\n [" + this.m00 + "\t" + this.m01 + "\t" + this.m02 + "\t" + this.m03 + "]" + "\n [" + this.m10 + "\t" + this.m11 + "\t" + this.m12 + "\t" + this.m13 + "]" + "\n [" + this.m20 + "\t" + this.m21 + "\t" + this.m22 + "\t" + this.m23 + "]" + "\n [" + this.m30 + "\t" + this.m31 + "\t" + this.m32 + "\t" + this.m33 + "] ]";
-});
-Clazz.defineMethod (c$, "round",
-function (f) {
-this.m00 = this.rnd (this.m00, f);
-this.m01 = this.rnd (this.m01, f);
-this.m02 = this.rnd (this.m02, f);
-this.m03 = this.rnd (this.m03, f);
-this.m10 = this.rnd (this.m10, f);
-this.m11 = this.rnd (this.m11, f);
-this.m12 = this.rnd (this.m12, f);
-this.m13 = this.rnd (this.m13, f);
-this.m20 = this.rnd (this.m20, f);
-this.m21 = this.rnd (this.m21, f);
-this.m22 = this.rnd (this.m22, f);
-this.m23 = this.rnd (this.m23, f);
-this.m30 = this.rnd (this.m30, f);
-this.m31 = this.rnd (this.m31, f);
-this.m32 = this.rnd (this.m32, f);
-this.m33 = this.rnd (this.m33, f);
-return this;
-}, "~N");
-Clazz.defineMethod (c$, "rnd",
-($fz = function (n, f) {
-return (Math.abs (n) < f ? 0 : n);
-}, $fz.isPrivate = true, $fz), "~N,~N");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.M34"], "javajs.util.M4", ["javajs.util.T3"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.m03 = 0;
+this.m13 = 0;
+this.m23 = 0;
+this.m30 = 0;
+this.m31 = 0;
+this.m32 = 0;
+this.m33 = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "M4", javajs.util.M34);
+c$.newA16 = Clazz.defineMethod (c$, "newA16",
+function (v) {
+var m = new javajs.util.M4 ();
+m.m00 = v[0];
+m.m01 = v[1];
+m.m02 = v[2];
+m.m03 = v[3];
+m.m10 = v[4];
+m.m11 = v[5];
+m.m12 = v[6];
+m.m13 = v[7];
+m.m20 = v[8];
+m.m21 = v[9];
+m.m22 = v[10];
+m.m23 = v[11];
+m.m30 = v[12];
+m.m31 = v[13];
+m.m32 = v[14];
+m.m33 = v[15];
+return m;
+}, "~A");
+c$.newM4 = Clazz.defineMethod (c$, "newM4",
+function (m1) {
+var m = new javajs.util.M4 ();
+if (m1 == null) {
+m.setIdentity ();
+return m;
+}m.setToM3 (m1);
+m.m03 = m1.m03;
+m.m13 = m1.m13;
+m.m23 = m1.m23;
+m.m30 = m1.m30;
+m.m31 = m1.m31;
+m.m32 = m1.m32;
+m.m33 = m1.m33;
+return m;
+}, "javajs.util.M4");
+c$.newMV = Clazz.defineMethod (c$, "newMV",
+function (m1, t) {
+var m = new javajs.util.M4 ();
+m.setMV (m1, t);
+return m;
+}, "javajs.util.M3,javajs.util.T3");
+Clazz.defineMethod (c$, "setZero",
+function () {
+this.clear33 ();
+this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = this.m33 = 0.0;
+});
+Clazz.defineMethod (c$, "setIdentity",
+function () {
+this.setZero ();
+this.m00 = this.m11 = this.m22 = this.m33 = 1.0;
+});
+Clazz.defineMethod (c$, "setM4",
+function (m1) {
+this.setM33 (m1);
+this.m03 = m1.m03;
+this.m13 = m1.m13;
+this.m23 = m1.m23;
+this.m30 = m1.m30;
+this.m31 = m1.m31;
+this.m32 = m1.m32;
+this.m33 = m1.m33;
+return this;
+}, "javajs.util.M4");
+Clazz.defineMethod (c$, "setMV",
+function (m1, t) {
+this.setM33 (m1);
+this.setTranslation (t);
+this.m33 = 1;
+}, "javajs.util.M3,javajs.util.T3");
+Clazz.defineMethod (c$, "setToM3",
+function (m1) {
+this.setM33 (m1);
+this.m03 = this.m13 = this.m23 = this.m30 = this.m31 = this.m32 = 0.0;
+this.m33 = 1.0;
+}, "javajs.util.M34");
+Clazz.defineMethod (c$, "setToAA",
+function (a) {
+this.setIdentity ();
+this.setAA33 (a);
+}, "javajs.util.A4");
+Clazz.defineMethod (c$, "setA",
+function (m) {
+this.m00 = m[0];
+this.m01 = m[1];
+this.m02 = m[2];
+this.m03 = m[3];
+this.m10 = m[4];
+this.m11 = m[5];
+this.m12 = m[6];
+this.m13 = m[7];
+this.m20 = m[8];
+this.m21 = m[9];
+this.m22 = m[10];
+this.m23 = m[11];
+this.m30 = m[12];
+this.m31 = m[13];
+this.m32 = m[14];
+this.m33 = m[15];
+}, "~A");
+Clazz.defineMethod (c$, "setTranslation",
+function (trans) {
+this.m03 = trans.x;
+this.m13 = trans.y;
+this.m23 = trans.z;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "setElement",
+function (row, col, v) {
+if (row < 3 && col < 3) {
+this.set33 (row, col, v);
+return;
+}if (row > 3 || col > 3) this.err ();
+switch (row) {
+case 0:
+this.m03 = v;
+return;
+case 1:
+this.m13 = v;
+return;
+case 2:
+this.m23 = v;
+return;
+}
+switch (col) {
+case 0:
+this.m30 = v;
+return;
+case 1:
+this.m31 = v;
+return;
+case 2:
+this.m32 = v;
+return;
+case 3:
+this.m33 = v;
+return;
+}
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "getElement",
+function (row, col) {
+if (row < 3 && col < 3) return this.get33 (row, col);
+if (row > 3 || col > 3) {
+this.err ();
+return 0;
+}switch (row) {
+case 0:
+return this.m03;
+case 1:
+return this.m13;
+case 2:
+return this.m23;
+default:
+switch (col) {
+case 0:
+return this.m30;
+case 1:
+return this.m31;
+case 2:
+return this.m32;
+default:
+return this.m33;
+}
+}
+}, "~N,~N");
+Clazz.defineMethod (c$, "getTranslation",
+function (trans) {
+trans.x = this.m03;
+trans.y = this.m13;
+trans.z = this.m23;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "getRotationScale",
+function (m1) {
+m1.m00 = this.m00;
+m1.m01 = this.m01;
+m1.m02 = this.m02;
+m1.m10 = this.m10;
+m1.m11 = this.m11;
+m1.m12 = this.m12;
+m1.m20 = this.m20;
+m1.m21 = this.m21;
+m1.m22 = this.m22;
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "setRotationScale",
+function (m1) {
+this.m00 = m1.m00;
+this.m01 = m1.m01;
+this.m02 = m1.m02;
+this.m10 = m1.m10;
+this.m11 = m1.m11;
+this.m12 = m1.m12;
+this.m20 = m1.m20;
+this.m21 = m1.m21;
+this.m22 = m1.m22;
+}, "javajs.util.M3");
+Clazz.defineMethod (c$, "setRowA",
+function (row, v) {
+if (row < 3) this.setRow33 (row, v);
+switch (row) {
+case 0:
+this.m03 = v[3];
+return;
+case 1:
+this.m13 = v[3];
+return;
+case 2:
+this.m23 = v[3];
+return;
+case 3:
+this.m30 = v[0];
+this.m31 = v[1];
+this.m32 = v[2];
+this.m33 = v[3];
+return;
+}
+this.err ();
+}, "~N,~A");
+Clazz.overrideMethod (c$, "getRow",
+function (row, v) {
+if (row < 3) this.getRow33 (row, v);
+switch (row) {
+case 0:
+v[3] = this.m03;
+return;
+case 1:
+v[3] = this.m13;
+return;
+case 2:
+v[3] = this.m23;
+return;
+case 3:
+v[0] = this.m30;
+v[1] = this.m31;
+v[2] = this.m32;
+v[3] = this.m33;
+return;
+}
+this.err ();
+}, "~N,~A");
+Clazz.defineMethod (c$, "setColumn4",
+function (column, x, y, z, w) {
+if (column == 0) {
+this.m00 = x;
+this.m10 = y;
+this.m20 = z;
+this.m30 = w;
+} else if (column == 1) {
+this.m01 = x;
+this.m11 = y;
+this.m21 = z;
+this.m31 = w;
+} else if (column == 2) {
+this.m02 = x;
+this.m12 = y;
+this.m22 = z;
+this.m32 = w;
+} else if (column == 3) {
+this.m03 = x;
+this.m13 = y;
+this.m23 = z;
+this.m33 = w;
+} else {
+this.err ();
+}}, "~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "setColumnA",
+function (column, v) {
+if (column < 3) this.setColumn33 (column, v);
+switch (column) {
+case 0:
+this.m30 = v[3];
+return;
+case 1:
+this.m31 = v[3];
+return;
+case 2:
+this.m32 = v[3];
+return;
+case 3:
+this.m03 = v[0];
+this.m13 = v[1];
+this.m23 = v[2];
+this.m33 = v[3];
+return;
+default:
+this.err ();
+}
+}, "~N,~A");
+Clazz.defineMethod (c$, "getColumn",
+function (column, v) {
+if (column < 3) this.getColumn33 (column, v);
+switch (column) {
+case 0:
+v[3] = this.m30;
+return;
+case 1:
+v[3] = this.m31;
+return;
+case 2:
+v[3] = this.m32;
+return;
+case 3:
+v[0] = this.m03;
+v[1] = this.m13;
+v[2] = this.m23;
+v[3] = this.m33;
+return;
+default:
+this.err ();
+}
+}, "~N,~A");
+Clazz.defineMethod (c$, "sub",
+function (m1) {
+this.sub33 (m1);
+this.m03 -= m1.m03;
+this.m13 -= m1.m13;
+this.m23 -= m1.m23;
+this.m30 -= m1.m30;
+this.m31 -= m1.m31;
+this.m32 -= m1.m32;
+this.m33 -= m1.m33;
+}, "javajs.util.M4");
+Clazz.defineMethod (c$, "transpose",
+function () {
+this.transpose33 ();
+var tmp = this.m03;
+this.m03 = this.m30;
+this.m30 = tmp;
+tmp = this.m13;
+this.m13 = this.m31;
+this.m31 = tmp;
+tmp = this.m23;
+this.m23 = this.m32;
+this.m32 = tmp;
+});
+Clazz.defineMethod (c$, "invert",
+function () {
+var s = this.determinant4 ();
+if (s == 0.0) return this;
+s = 1 / s;
+this.set (this.m11 * (this.m22 * this.m33 - this.m23 * this.m32) + this.m12 * (this.m23 * this.m31 - this.m21 * this.m33) + this.m13 * (this.m21 * this.m32 - this.m22 * this.m31), this.m21 * (this.m02 * this.m33 - this.m03 * this.m32) + this.m22 * (this.m03 * this.m31 - this.m01 * this.m33) + this.m23 * (this.m01 * this.m32 - this.m02 * this.m31), this.m31 * (this.m02 * this.m13 - this.m03 * this.m12) + this.m32 * (this.m03 * this.m11 - this.m01 * this.m13) + this.m33 * (this.m01 * this.m12 - this.m02 * this.m11), this.m01 * (this.m13 * this.m22 - this.m12 * this.m23) + this.m02 * (this.m11 * this.m23 - this.m13 * this.m21) + this.m03 * (this.m12 * this.m21 - this.m11 * this.m22), this.m12 * (this.m20 * this.m33 - this.m23 * this.m30) + this.m13 * (this.m22 * this.m30 - this.m20 * this.m32) + this.m10 * (this.m23 * this.m32 - this.m22 * this.m33), this.m22 * (this.m00 * this.m33 - this.m03 * this.m30) + this.m23 * (this.m02 * this.m30 - this.m00 * this.m32) + this.m20 * (this.m03 * this.m32 - this.m02 * this.m33), this.m32 * (this.m00 * this.m13 - this.m03 * this.m10) + this.m33 * (this.m02 * this.m10 - this.m00 * this.m12) + this.m30 * (this.m03 * this.m12 - this.m02 * this.m13), this.m02 * (this.m13 * this.m20 - this.m10 * this.m23) + this.m03 * (this.m10 * this.m22 - this.m12 * this.m20) + this.m00 * (this.m12 * this.m23 - this.m13 * this.m22), this.m13 * (this.m20 * this.m31 - this.m21 * this.m30) + this.m10 * (this.m21 * this.m33 - this.m23 * this.m31) + this.m11 * (this.m23 * this.m30 - this.m20 * this.m33), this.m23 * (this.m00 * this.m31 - this.m01 * this.m30) + this.m20 * (this.m01 * this.m33 - this.m03 * this.m31) + this.m21 * (this.m03 * this.m30 - this.m00 * this.m33), this.m33 * (this.m00 * this.m11 - this.m01 * this.m10) + this.m30 * (this.m01 * this.m13 - this.m03 * this.m11) + this.m31 * (this.m03 * this.m10 - this.m00 * this.m13), this.m03 * (this.m11 * this.m20 - this.m10 * this.m21) + this.m00 * (this.m13 * this.m21 - this.m11 * this.m23) + this.m01 * (this.m10 * this.m23 - this.m13 * this.m20), this.m10 * (this.m22 * this.m31 - this.m21 * this.m32) + this.m11 * (this.m20 * this.m32 - this.m22 * this.m30) + this.m12 * (this.m21 * this.m30 - this.m20 * this.m31), this.m20 * (this.m02 * this.m31 - this.m01 * this.m32) + this.m21 * (this.m00 * this.m32 - this.m02 * this.m30) + this.m22 * (this.m01 * this.m30 - this.m00 * this.m31), this.m30 * (this.m02 * this.m11 - this.m01 * this.m12) + this.m31 * (this.m00 * this.m12 - this.m02 * this.m10) + this.m32 * (this.m01 * this.m10 - this.m00 * this.m11), this.m00 * (this.m11 * this.m22 - this.m12 * this.m21) + this.m01 * (this.m12 * this.m20 - this.m10 * this.m22) + this.m02 * (this.m10 * this.m21 - this.m11 * this.m20));
+this.scale (s);
+return this;
+});
+Clazz.defineMethod (c$, "set",
+($fz = function (m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {
+this.m00 = m00;
+this.m01 = m01;
+this.m02 = m02;
+this.m03 = m03;
+this.m10 = m10;
+this.m11 = m11;
+this.m12 = m12;
+this.m13 = m13;
+this.m20 = m20;
+this.m21 = m21;
+this.m22 = m22;
+this.m23 = m23;
+this.m30 = m30;
+this.m31 = m31;
+this.m32 = m32;
+this.m33 = m33;
+}, $fz.isPrivate = true, $fz), "~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N,~N");
+Clazz.defineMethod (c$, "determinant4",
+function () {
+return (this.m00 * this.m11 - this.m01 * this.m10) * (this.m22 * this.m33 - this.m23 * this.m32) - (this.m00 * this.m12 - this.m02 * this.m10) * (this.m21 * this.m33 - this.m23 * this.m31) + (this.m00 * this.m13 - this.m03 * this.m10) * (this.m21 * this.m32 - this.m22 * this.m31) + (this.m01 * this.m12 - this.m02 * this.m11) * (this.m20 * this.m33 - this.m23 * this.m30) - (this.m01 * this.m13 - this.m03 * this.m11) * (this.m20 * this.m32 - this.m22 * this.m30) + (this.m02 * this.m13 - this.m03 * this.m12) * (this.m20 * this.m31 - this.m21 * this.m30);
+});
+Clazz.defineMethod (c$, "scale",
+($fz = function (scalar) {
+this.mul33 (scalar);
+this.m03 *= scalar;
+this.m13 *= scalar;
+this.m23 *= scalar;
+this.m30 *= scalar;
+this.m31 *= scalar;
+this.m32 *= scalar;
+this.m33 *= scalar;
+}, $fz.isPrivate = true, $fz), "~N");
+Clazz.defineMethod (c$, "mul",
+function (m1) {
+this.mul2 (this, m1);
+}, "javajs.util.M4");
+Clazz.defineMethod (c$, "mul2",
+function (m1, m2) {
+this.set (m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20 + m1.m03 * m2.m30, m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21 + m1.m03 * m2.m31, m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22 + m1.m03 * m2.m32, m1.m00 * m2.m03 + m1.m01 * m2.m13 + m1.m02 * m2.m23 + m1.m03 * m2.m33, m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20 + m1.m13 * m2.m30, m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21 + m1.m13 * m2.m31, m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22 + m1.m13 * m2.m32, m1.m10 * m2.m03 + m1.m11 * m2.m13 + m1.m12 * m2.m23 + m1.m13 * m2.m33, m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20 + m1.m23 * m2.m30, m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21 + m1.m23 * m2.m31, m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22 + m1.m23 * m2.m32, m1.m20 * m2.m03 + m1.m21 * m2.m13 + m1.m22 * m2.m23 + m1.m23 * m2.m33, m1.m30 * m2.m00 + m1.m31 * m2.m10 + m1.m32 * m2.m20 + m1.m33 * m2.m30, m1.m30 * m2.m01 + m1.m31 * m2.m11 + m1.m32 * m2.m21 + m1.m33 * m2.m31, m1.m30 * m2.m02 + m1.m31 * m2.m12 + m1.m32 * m2.m22 + m1.m33 * m2.m32, m1.m30 * m2.m03 + m1.m31 * m2.m13 + m1.m32 * m2.m23 + m1.m33 * m2.m33);
+}, "javajs.util.M4,javajs.util.M4");
+Clazz.defineMethod (c$, "transform",
+function (vec) {
+this.transform2 (vec, vec);
+}, "javajs.util.T4");
+Clazz.defineMethod (c$, "transform2",
+function (vec, vecOut) {
+vecOut.set4 (this.m00 * vec.x + this.m01 * vec.y + this.m02 * vec.z + this.m03 * vec.w, this.m10 * vec.x + this.m11 * vec.y + this.m12 * vec.z + this.m13 * vec.w, this.m20 * vec.x + this.m21 * vec.y + this.m22 * vec.z + this.m23 * vec.w, this.m30 * vec.x + this.m31 * vec.y + this.m32 * vec.z + this.m33 * vec.w);
+}, "javajs.util.T4,javajs.util.T4");
+Clazz.defineMethod (c$, "rotTrans",
+function (point) {
+this.rotTrans2 (point, point);
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "rotTrans2",
+function (point, pointOut) {
+pointOut.set (this.m00 * point.x + this.m01 * point.y + this.m02 * point.z + this.m03, this.m10 * point.x + this.m11 * point.y + this.m12 * point.z + this.m13, this.m20 * point.x + this.m21 * point.y + this.m22 * point.z + this.m23);
+return pointOut;
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "setAsXYRotation",
+function (angle) {
+this.setIdentity ();
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m22 = c;
+this.m23 = -s;
+this.m32 = s;
+this.m33 = c;
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "setAsYZRotation",
+function (angle) {
+this.setIdentity ();
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m00 = c;
+this.m03 = -s;
+this.m30 = s;
+this.m33 = c;
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "setAsXZRotation",
+function (angle) {
+this.setIdentity ();
+var c = Math.cos (angle);
+var s = Math.sin (angle);
+this.m11 = c;
+this.m13 = -s;
+this.m31 = s;
+this.m33 = c;
+return this;
+}, "~N");
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (!(Clazz.instanceOf (o, javajs.util.M4))) return false;
+var m = o;
+return (this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02 && this.m03 == m.m03 && this.m10 == m.m10 && this.m11 == m.m11 && this.m12 == m.m12 && this.m13 == m.m13 && this.m20 == m.m20 && this.m21 == m.m21 && this.m22 == m.m22 && this.m23 == m.m23 && this.m30 == m.m30 && this.m31 == m.m31 && this.m32 == m.m32 && this.m33 == m.m33);
+}, "~O");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+return javajs.util.T3.floatToIntBits0 (this.m00) ^ javajs.util.T3.floatToIntBits0 (this.m01) ^ javajs.util.T3.floatToIntBits0 (this.m02) ^ javajs.util.T3.floatToIntBits0 (this.m03) ^ javajs.util.T3.floatToIntBits0 (this.m10) ^ javajs.util.T3.floatToIntBits0 (this.m11) ^ javajs.util.T3.floatToIntBits0 (this.m12) ^ javajs.util.T3.floatToIntBits0 (this.m13) ^ javajs.util.T3.floatToIntBits0 (this.m20) ^ javajs.util.T3.floatToIntBits0 (this.m21) ^ javajs.util.T3.floatToIntBits0 (this.m22) ^ javajs.util.T3.floatToIntBits0 (this.m23) ^ javajs.util.T3.floatToIntBits0 (this.m30) ^ javajs.util.T3.floatToIntBits0 (this.m31) ^ javajs.util.T3.floatToIntBits0 (this.m32) ^ javajs.util.T3.floatToIntBits0 (this.m33);
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "[\n [" + this.m00 + "\t" + this.m01 + "\t" + this.m02 + "\t" + this.m03 + "]" + "\n [" + this.m10 + "\t" + this.m11 + "\t" + this.m12 + "\t" + this.m13 + "]" + "\n [" + this.m20 + "\t" + this.m21 + "\t" + this.m22 + "\t" + this.m23 + "]" + "\n [" + this.m30 + "\t" + this.m31 + "\t" + this.m32 + "\t" + this.m33 + "] ]";
+});
+Clazz.defineMethod (c$, "round",
+function (f) {
+this.m00 = this.rnd (this.m00, f);
+this.m01 = this.rnd (this.m01, f);
+this.m02 = this.rnd (this.m02, f);
+this.m03 = this.rnd (this.m03, f);
+this.m10 = this.rnd (this.m10, f);
+this.m11 = this.rnd (this.m11, f);
+this.m12 = this.rnd (this.m12, f);
+this.m13 = this.rnd (this.m13, f);
+this.m20 = this.rnd (this.m20, f);
+this.m21 = this.rnd (this.m21, f);
+this.m22 = this.rnd (this.m22, f);
+this.m23 = this.rnd (this.m23, f);
+this.m30 = this.rnd (this.m30, f);
+this.m31 = this.rnd (this.m31, f);
+this.m32 = this.rnd (this.m32, f);
+this.m33 = this.rnd (this.m33, f);
+return this;
+}, "~N");
+Clazz.defineMethod (c$, "rnd",
+($fz = function (n, f) {
+return (Math.abs (n) < f ? 0 : n);
+}, $fz.isPrivate = true, $fz), "~N,~N");
+});
diff --git a/bin/javajs/util/Matrix.js b/bin/javajs/util/Matrix.js
index 50972a4..cadc683 100644
--- a/bin/javajs/util/Matrix.js
+++ b/bin/javajs/util/Matrix.js
@@ -1,223 +1,223 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.decorateAsClass (function () {
-this.a = null;
-this.m = 0;
-this.n = 0;
-if (!Clazz.isClassDefined ("javajs.util.Matrix.LUDecomp")) {
-javajs.util.Matrix.$Matrix$LUDecomp$ ();
-}
-Clazz.instantialize (this, arguments);
-}, javajs.util, "Matrix", null, Cloneable);
-Clazz.makeConstructor (c$,
-function (a, m, n) {
-this.a = (a == null ? Clazz.newDoubleArray (m, n, 0) : a);
-this.m = m;
-this.n = n;
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "getRowDimension",
-function () {
-return this.m;
-});
-Clazz.defineMethod (c$, "getColumnDimension",
-function () {
-return this.n;
-});
-Clazz.defineMethod (c$, "getArray",
-function () {
-return this.a;
-});
-Clazz.defineMethod (c$, "getArrayCopy",
-function () {
-var x = Clazz.newDoubleArray (this.m, this.n, 0);
-for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) x[i][j] = this.a[i][j];
-
-
-return x;
-});
-Clazz.defineMethod (c$, "copy",
-function () {
-var x = new javajs.util.Matrix (null, this.m, this.n);
-var c = x.a;
-for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) c[i][j] = this.a[i][j];
-
-
-return x;
-});
-Clazz.overrideMethod (c$, "clone",
-function () {
-return this.copy ();
-});
-Clazz.defineMethod (c$, "getSubmatrix",
-function (i0, j0, nrows, ncols) {
-var x = new javajs.util.Matrix (null, nrows, ncols);
-var xa = x.a;
-for (var i = nrows; --i >= 0; ) for (var j = ncols; --j >= 0; ) xa[i][j] = this.a[i0 + i][j0 + j];
-
-
-return x;
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "getMatrixSelected",
-function (r, n) {
-var x = new javajs.util.Matrix (null, r.length, n);
-var xa = x.a;
-for (var i = r.length; --i >= 0; ) {
-var b = this.a[r[i]];
-for (var j = n; --j >= 0; ) xa[i][j] = b[j];
-
-}
-return x;
-}, "~A,~N");
-Clazz.defineMethod (c$, "transpose",
-function () {
-var x = new javajs.util.Matrix (null, this.n, this.m);
-var c = x.a;
-for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) c[j][i] = this.a[i][j];
-
-
-return x;
-});
-Clazz.defineMethod (c$, "add",
-function (b) {
-return this.scaleAdd (b, 1);
-}, "javajs.util.Matrix");
-Clazz.defineMethod (c$, "sub",
-function (b) {
-return this.scaleAdd (b, -1);
-}, "javajs.util.Matrix");
-Clazz.defineMethod (c$, "scaleAdd",
-function (b, scale) {
-var x = new javajs.util.Matrix (null, this.m, this.n);
-var xa = x.a;
-var ba = b.a;
-for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) xa[i][j] = ba[i][j] * scale + this.a[i][j];
-
-
-return x;
-}, "javajs.util.Matrix,~N");
-Clazz.defineMethod (c$, "mul",
-function (b) {
-if (b.m != this.n) return null;
-var x = new javajs.util.Matrix (null, this.m, b.n);
-var xa = x.a;
-var ba = b.a;
-for (var j = b.n; --j >= 0; ) for (var i = this.m; --i >= 0; ) {
-var arowi = this.a[i];
-var s = 0;
-for (var k = this.n; --k >= 0; ) s += arowi[k] * ba[k][j];
-
-xa[i][j] = s;
-}
-
-return x;
-}, "javajs.util.Matrix");
-Clazz.defineMethod (c$, "inverse",
-function () {
-return Clazz.innerTypeInstance (javajs.util.Matrix.LUDecomp, this, null, this.m, this.n).solve (javajs.util.Matrix.identity (this.m, this.m), this.n);
-});
-Clazz.defineMethod (c$, "trace",
-function () {
-var t = 0;
-for (var i = Math.min (this.m, this.n); --i >= 0; ) t += this.a[i][i];
-
-return t;
-});
-c$.identity = Clazz.defineMethod (c$, "identity",
-function (m, n) {
-var x = new javajs.util.Matrix (null, m, n);
-var xa = x.a;
-for (var i = Math.min (m, n); --i >= 0; ) xa[i][i] = 1;
-
-return x;
-}, "~N,~N");
-Clazz.defineMethod (c$, "getRotation",
-function () {
-return this.getSubmatrix (0, 0, this.m - 1, this.n - 1);
-});
-Clazz.defineMethod (c$, "getTranslation",
-function () {
-return this.getSubmatrix (0, this.n - 1, this.m - 1, 1);
-});
-c$.newT = Clazz.defineMethod (c$, "newT",
-function (r, asColumn) {
-return (asColumn ? new javajs.util.Matrix ( Clazz.newArray (-1, [ Clazz.newDoubleArray (-1, [r.x]), Clazz.newDoubleArray (-1, [r.y]), Clazz.newDoubleArray (-1, [r.z])]), 3, 1) : new javajs.util.Matrix ( Clazz.newArray (-1, [ Clazz.newDoubleArray (-1, [r.x, r.y, r.z])]), 1, 3));
-}, "javajs.util.T3,~B");
-Clazz.overrideMethod (c$, "toString",
-function () {
-var s = "[\n";
-for (var i = 0; i < this.m; i++) {
-s += " [";
-for (var j = 0; j < this.n; j++) s += " " + this.a[i][j];
-
-s += "]\n";
-}
-s += "]";
-return s;
-});
-c$.$Matrix$LUDecomp$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.LU = null;
-this.piv = null;
-this.pivsign = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util.Matrix, "LUDecomp");
-Clazz.makeConstructor (c$,
-function (a, b) {
-this.LU = this.b$["javajs.util.Matrix"].getArrayCopy ();
-this.piv = Clazz.newIntArray (a, 0);
-for (var c = a; --c >= 0; ) this.piv[c] = c;
-
-this.pivsign = 1;
-var d;
-var e = Clazz.newDoubleArray (a, 0);
-for (var f = 0; f < b; f++) {
-for (var g = a; --g >= 0; ) e[g] = this.LU[g][f];
-
-for (var h = a; --h >= 0; ) {
-d = this.LU[h];
-var i = Math.min (h, f);
-var j = 0.0;
-for (var k = i; --k >= 0; ) j += d[k] * e[k];
-
-d[f] = e[h] -= j;
-}
-var i = f;
-for (var j = a; --j > f; ) if (Math.abs (e[j]) > Math.abs (e[i])) i = j;
-
-if (i != f) {
-for (var k = b; --k >= 0; ) {
-var l = this.LU[i][k];
-this.LU[i][k] = this.LU[f][k];
-this.LU[f][k] = l;
-}
-var l = this.piv[i];
-this.piv[i] = this.piv[f];
-this.piv[f] = l;
-this.pivsign = -this.pivsign;
-}if ( new Boolean (f < a & this.LU[f][f] != 0.0).valueOf ()) for (var k = a; --k > f; ) this.LU[k][f] /= this.LU[f][f];
-
-}
-}, "~N,~N");
-Clazz.defineMethod (c$, "solve",
-function (a, b) {
-for (var c = 0; c < b; c++) if (this.LU[c][c] == 0) return null;
-
-var d = a.n;
-var e = a.getMatrixSelected (this.piv, d);
-var f = e.a;
-for (var g = 0; g < b; g++) for (var h = g + 1; h < b; h++) for (var i = 0; i < d; i++) f[h][i] -= f[g][i] * this.LU[h][g];
-
-
-
-for (var j = b; --j >= 0; ) {
-for (var k = d; --k >= 0; ) f[j][k] /= this.LU[j][j];
-
-for (var l = j; --l >= 0; ) for (var m = d; --m >= 0; ) f[l][m] -= f[j][m] * this.LU[l][j];
-
-
-}
-return e;
-}, "javajs.util.Matrix,~N");
-c$ = Clazz.p0p ();
-};
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.decorateAsClass (function () {
+this.a = null;
+this.m = 0;
+this.n = 0;
+if (!Clazz.isClassDefined ("javajs.util.Matrix.LUDecomp")) {
+javajs.util.Matrix.$Matrix$LUDecomp$ ();
+}
+Clazz.instantialize (this, arguments);
+}, javajs.util, "Matrix", null, Cloneable);
+Clazz.makeConstructor (c$,
+function (a, m, n) {
+this.a = (a == null ? Clazz.newDoubleArray (m, n, 0) : a);
+this.m = m;
+this.n = n;
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "getRowDimension",
+function () {
+return this.m;
+});
+Clazz.defineMethod (c$, "getColumnDimension",
+function () {
+return this.n;
+});
+Clazz.defineMethod (c$, "getArray",
+function () {
+return this.a;
+});
+Clazz.defineMethod (c$, "getArrayCopy",
+function () {
+var x = Clazz.newDoubleArray (this.m, this.n, 0);
+for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) x[i][j] = this.a[i][j];
+
+
+return x;
+});
+Clazz.defineMethod (c$, "copy",
+function () {
+var x = new javajs.util.Matrix (null, this.m, this.n);
+var c = x.a;
+for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) c[i][j] = this.a[i][j];
+
+
+return x;
+});
+Clazz.overrideMethod (c$, "clone",
+function () {
+return this.copy ();
+});
+Clazz.defineMethod (c$, "getSubmatrix",
+function (i0, j0, nrows, ncols) {
+var x = new javajs.util.Matrix (null, nrows, ncols);
+var xa = x.a;
+for (var i = nrows; --i >= 0; ) for (var j = ncols; --j >= 0; ) xa[i][j] = this.a[i0 + i][j0 + j];
+
+
+return x;
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "getMatrixSelected",
+function (r, n) {
+var x = new javajs.util.Matrix (null, r.length, n);
+var xa = x.a;
+for (var i = r.length; --i >= 0; ) {
+var b = this.a[r[i]];
+for (var j = n; --j >= 0; ) xa[i][j] = b[j];
+
+}
+return x;
+}, "~A,~N");
+Clazz.defineMethod (c$, "transpose",
+function () {
+var x = new javajs.util.Matrix (null, this.n, this.m);
+var c = x.a;
+for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) c[j][i] = this.a[i][j];
+
+
+return x;
+});
+Clazz.defineMethod (c$, "add",
+function (b) {
+return this.scaleAdd (b, 1);
+}, "javajs.util.Matrix");
+Clazz.defineMethod (c$, "sub",
+function (b) {
+return this.scaleAdd (b, -1);
+}, "javajs.util.Matrix");
+Clazz.defineMethod (c$, "scaleAdd",
+function (b, scale) {
+var x = new javajs.util.Matrix (null, this.m, this.n);
+var xa = x.a;
+var ba = b.a;
+for (var i = this.m; --i >= 0; ) for (var j = this.n; --j >= 0; ) xa[i][j] = ba[i][j] * scale + this.a[i][j];
+
+
+return x;
+}, "javajs.util.Matrix,~N");
+Clazz.defineMethod (c$, "mul",
+function (b) {
+if (b.m != this.n) return null;
+var x = new javajs.util.Matrix (null, this.m, b.n);
+var xa = x.a;
+var ba = b.a;
+for (var j = b.n; --j >= 0; ) for (var i = this.m; --i >= 0; ) {
+var arowi = this.a[i];
+var s = 0;
+for (var k = this.n; --k >= 0; ) s += arowi[k] * ba[k][j];
+
+xa[i][j] = s;
+}
+
+return x;
+}, "javajs.util.Matrix");
+Clazz.defineMethod (c$, "inverse",
+function () {
+return Clazz.innerTypeInstance (javajs.util.Matrix.LUDecomp, this, null, this.m, this.n).solve (javajs.util.Matrix.identity (this.m, this.m), this.n);
+});
+Clazz.defineMethod (c$, "trace",
+function () {
+var t = 0;
+for (var i = Math.min (this.m, this.n); --i >= 0; ) t += this.a[i][i];
+
+return t;
+});
+c$.identity = Clazz.defineMethod (c$, "identity",
+function (m, n) {
+var x = new javajs.util.Matrix (null, m, n);
+var xa = x.a;
+for (var i = Math.min (m, n); --i >= 0; ) xa[i][i] = 1;
+
+return x;
+}, "~N,~N");
+Clazz.defineMethod (c$, "getRotation",
+function () {
+return this.getSubmatrix (0, 0, this.m - 1, this.n - 1);
+});
+Clazz.defineMethod (c$, "getTranslation",
+function () {
+return this.getSubmatrix (0, this.n - 1, this.m - 1, 1);
+});
+c$.newT = Clazz.defineMethod (c$, "newT",
+function (r, asColumn) {
+return (asColumn ? new javajs.util.Matrix ( Clazz.newArray (-1, [ Clazz.newDoubleArray (-1, [r.x]), Clazz.newDoubleArray (-1, [r.y]), Clazz.newDoubleArray (-1, [r.z])]), 3, 1) : new javajs.util.Matrix ( Clazz.newArray (-1, [ Clazz.newDoubleArray (-1, [r.x, r.y, r.z])]), 1, 3));
+}, "javajs.util.T3,~B");
+Clazz.overrideMethod (c$, "toString",
+function () {
+var s = "[\n";
+for (var i = 0; i < this.m; i++) {
+s += " [";
+for (var j = 0; j < this.n; j++) s += " " + this.a[i][j];
+
+s += "]\n";
+}
+s += "]";
+return s;
+});
+c$.$Matrix$LUDecomp$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.LU = null;
+this.piv = null;
+this.pivsign = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util.Matrix, "LUDecomp");
+Clazz.makeConstructor (c$,
+function (a, b) {
+this.LU = this.b$["javajs.util.Matrix"].getArrayCopy ();
+this.piv = Clazz.newIntArray (a, 0);
+for (var c = a; --c >= 0; ) this.piv[c] = c;
+
+this.pivsign = 1;
+var d;
+var e = Clazz.newDoubleArray (a, 0);
+for (var f = 0; f < b; f++) {
+for (var g = a; --g >= 0; ) e[g] = this.LU[g][f];
+
+for (var h = a; --h >= 0; ) {
+d = this.LU[h];
+var i = Math.min (h, f);
+var j = 0.0;
+for (var k = i; --k >= 0; ) j += d[k] * e[k];
+
+d[f] = e[h] -= j;
+}
+var i = f;
+for (var j = a; --j > f; ) if (Math.abs (e[j]) > Math.abs (e[i])) i = j;
+
+if (i != f) {
+for (var k = b; --k >= 0; ) {
+var l = this.LU[i][k];
+this.LU[i][k] = this.LU[f][k];
+this.LU[f][k] = l;
+}
+var l = this.piv[i];
+this.piv[i] = this.piv[f];
+this.piv[f] = l;
+this.pivsign = -this.pivsign;
+}if ( new Boolean (f < a & this.LU[f][f] != 0.0).valueOf ()) for (var k = a; --k > f; ) this.LU[k][f] /= this.LU[f][f];
+
+}
+}, "~N,~N");
+Clazz.defineMethod (c$, "solve",
+function (a, b) {
+for (var c = 0; c < b; c++) if (this.LU[c][c] == 0) return null;
+
+var d = a.n;
+var e = a.getMatrixSelected (this.piv, d);
+var f = e.a;
+for (var g = 0; g < b; g++) for (var h = g + 1; h < b; h++) for (var i = 0; i < d; i++) f[h][i] -= f[g][i] * this.LU[h][g];
+
+
+
+for (var j = b; --j >= 0; ) {
+for (var k = d; --k >= 0; ) f[j][k] /= this.LU[j][j];
+
+for (var l = j; --l >= 0; ) for (var m = d; --m >= 0; ) f[l][m] -= f[j][m] * this.LU[l][j];
+
+
+}
+return e;
+}, "javajs.util.Matrix,~N");
+c$ = Clazz.p0p ();
+};
diff --git a/bin/javajs/util/Measure.class b/bin/javajs/util/Measure.class
index 9d2f979..e478913 100644
Binary files a/bin/javajs/util/Measure.class and b/bin/javajs/util/Measure.class differ
diff --git a/bin/javajs/util/Measure.js b/bin/javajs/util/Measure.js
index 14e6410..bbcd327 100644
--- a/bin/javajs/util/Measure.js
+++ b/bin/javajs/util/Measure.js
@@ -1,394 +1,394 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.V3"], "javajs.util.Measure", ["java.lang.Float", "javajs.api.Interface", "javajs.util.Lst", "$.P3", "$.P4", "$.Quat"], function () {
-c$ = Clazz.declareType (javajs.util, "Measure");
-c$.computeAngle = Clazz.defineMethod (c$, "computeAngle",
-function (pointA, pointB, pointC, vectorBA, vectorBC, asDegrees) {
-vectorBA.sub2 (pointA, pointB);
-vectorBC.sub2 (pointC, pointB);
-var angle = vectorBA.angle (vectorBC);
-return (asDegrees ? angle / 0.017453292 : angle);
-}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3,~B");
-c$.computeAngleABC = Clazz.defineMethod (c$, "computeAngleABC",
-function (pointA, pointB, pointC, asDegrees) {
-var vectorBA = new javajs.util.V3 ();
-var vectorBC = new javajs.util.V3 ();
-return javajs.util.Measure.computeAngle (pointA, pointB, pointC, vectorBA, vectorBC, asDegrees);
-}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,~B");
-c$.computeTorsion = Clazz.defineMethod (c$, "computeTorsion",
-function (p1, p2, p3, p4, asDegrees) {
-var ijx = p1.x - p2.x;
-var ijy = p1.y - p2.y;
-var ijz = p1.z - p2.z;
-var kjx = p3.x - p2.x;
-var kjy = p3.y - p2.y;
-var kjz = p3.z - p2.z;
-var klx = p3.x - p4.x;
-var kly = p3.y - p4.y;
-var klz = p3.z - p4.z;
-var ax = ijy * kjz - ijz * kjy;
-var ay = ijz * kjx - ijx * kjz;
-var az = ijx * kjy - ijy * kjx;
-var cx = kjy * klz - kjz * kly;
-var cy = kjz * klx - kjx * klz;
-var cz = kjx * kly - kjy * klx;
-var ai2 = 1 / (ax * ax + ay * ay + az * az);
-var ci2 = 1 / (cx * cx + cy * cy + cz * cz);
-var ai = Math.sqrt (ai2);
-var ci = Math.sqrt (ci2);
-var denom = ai * ci;
-var cross = ax * cx + ay * cy + az * cz;
-var cosang = cross * denom;
-if (cosang > 1) {
-cosang = 1;
-}if (cosang < -1) {
-cosang = -1;
-}var torsion = Math.acos (cosang);
-var dot = ijx * cx + ijy * cy + ijz * cz;
-var absDot = Math.abs (dot);
-torsion = (dot / absDot > 0) ? torsion : -torsion;
-return (asDegrees ? torsion / 0.017453292 : torsion);
-}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.T3,~B");
-c$.computeHelicalAxis = Clazz.defineMethod (c$, "computeHelicalAxis",
-function (a, b, dq) {
-var vab = new javajs.util.V3 ();
-vab.sub2 (b, a);
-var theta = dq.getTheta ();
-var n = dq.getNormal ();
-var v_dot_n = vab.dot (n);
-if (Math.abs (v_dot_n) < 0.0001) v_dot_n = 0;
-var va_prime_d = new javajs.util.V3 ();
-va_prime_d.cross (vab, n);
-if (va_prime_d.dot (va_prime_d) != 0) va_prime_d.normalize ();
-var vda = new javajs.util.V3 ();
-var vcb = javajs.util.V3.newV (n);
-if (v_dot_n == 0) v_dot_n = 1.4E-45;
-vcb.scale (v_dot_n);
-vda.sub2 (vcb, vab);
-vda.scale (0.5);
-va_prime_d.scale (theta == 0 ? 0 : (vda.length () / Math.tan (theta / 2 / 180 * 3.141592653589793)));
-var r = javajs.util.V3.newV (va_prime_d);
-if (theta != 0) r.add (vda);
-var pt_a_prime = javajs.util.P3.newP (a);
-pt_a_prime.sub (r);
-if (v_dot_n != 1.4E-45) n.scale (v_dot_n);
-var pt_b_prime = javajs.util.P3.newP (pt_a_prime);
-pt_b_prime.add (n);
-theta = javajs.util.Measure.computeTorsion (a, pt_a_prime, pt_b_prime, b, true);
-if (Float.isNaN (theta) || r.length () < 0.0001) theta = dq.getThetaDirectedV (n);
-var residuesPerTurn = Math.abs (theta == 0 ? 0 : 360 / theta);
-var pitch = Math.abs (v_dot_n == 1.4E-45 ? 0 : n.length () * (theta == 0 ? 1 : 360 / theta));
-return Clazz.newArray (-1, [pt_a_prime, n, r, javajs.util.P3.new3 (theta, pitch, residuesPerTurn), pt_b_prime]);
-}, "javajs.util.P3,javajs.util.P3,javajs.util.Quat");
-c$.getPlaneThroughPoints = Clazz.defineMethod (c$, "getPlaneThroughPoints",
-function (pointA, pointB, pointC, vNorm, vAB, plane) {
-var w = javajs.util.Measure.getNormalThroughPoints (pointA, pointB, pointC, vNorm, vAB);
-plane.set4 (vNorm.x, vNorm.y, vNorm.z, w);
-return plane;
-}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3,javajs.util.P4");
-c$.getPlaneThroughPoint = Clazz.defineMethod (c$, "getPlaneThroughPoint",
-function (pt, normal, plane) {
-plane.set4 (normal.x, normal.y, normal.z, -normal.dot (pt));
-}, "javajs.util.T3,javajs.util.V3,javajs.util.P4");
-c$.distanceToPlane = Clazz.defineMethod (c$, "distanceToPlane",
-function (plane, pt) {
-return (plane == null ? NaN : (plane.dot (pt) + plane.w) / Math.sqrt (plane.dot (plane)));
-}, "javajs.util.P4,javajs.util.T3");
-c$.directedDistanceToPlane = Clazz.defineMethod (c$, "directedDistanceToPlane",
-function (pt, plane, ptref) {
-var f = plane.dot (pt) + plane.w;
-var f1 = plane.dot (ptref) + plane.w;
-return Math.signum (f1) * f / Math.sqrt (plane.dot (plane));
-}, "javajs.util.P3,javajs.util.P4,javajs.util.P3");
-c$.distanceToPlaneD = Clazz.defineMethod (c$, "distanceToPlaneD",
-function (plane, d, pt) {
-return (plane == null ? NaN : (plane.dot (pt) + plane.w) / d);
-}, "javajs.util.P4,~N,javajs.util.P3");
-c$.distanceToPlaneV = Clazz.defineMethod (c$, "distanceToPlaneV",
-function (norm, w, pt) {
-return (norm == null ? NaN : (norm.dot (pt) + w) / Math.sqrt (norm.dot (norm)));
-}, "javajs.util.V3,~N,javajs.util.P3");
-c$.calcNormalizedNormal = Clazz.defineMethod (c$, "calcNormalizedNormal",
-function (pointA, pointB, pointC, vNormNorm, vAB) {
-vAB.sub2 (pointB, pointA);
-vNormNorm.sub2 (pointC, pointA);
-vNormNorm.cross (vAB, vNormNorm);
-vNormNorm.normalize ();
-}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3");
-c$.getDirectedNormalThroughPoints = Clazz.defineMethod (c$, "getDirectedNormalThroughPoints",
-function (pointA, pointB, pointC, ptRef, vNorm, vAB) {
-var nd = javajs.util.Measure.getNormalThroughPoints (pointA, pointB, pointC, vNorm, vAB);
-if (ptRef != null) {
-var pt0 = javajs.util.P3.newP (pointA);
-pt0.add (vNorm);
-var d = pt0.distance (ptRef);
-pt0.sub2 (pointA, vNorm);
-if (d > pt0.distance (ptRef)) {
-vNorm.scale (-1);
-nd = -nd;
-}}return nd;
-}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3");
-c$.getNormalThroughPoints = Clazz.defineMethod (c$, "getNormalThroughPoints",
-function (pointA, pointB, pointC, vNorm, vTemp) {
-javajs.util.Measure.calcNormalizedNormal (pointA, pointB, pointC, vNorm, vTemp);
-vTemp.setT (pointA);
-return -vTemp.dot (vNorm);
-}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3");
-c$.getPlaneProjection = Clazz.defineMethod (c$, "getPlaneProjection",
-function (pt, plane, ptProj, vNorm) {
-var dist = javajs.util.Measure.distanceToPlane (plane, pt);
-vNorm.set (plane.x, plane.y, plane.z);
-vNorm.normalize ();
-vNorm.scale (-dist);
-ptProj.add2 (pt, vNorm);
-}, "javajs.util.P3,javajs.util.P4,javajs.util.P3,javajs.util.V3");
-c$.getNormalToLine = Clazz.defineMethod (c$, "getNormalToLine",
-function (pointA, pointB, vNormNorm) {
-vNormNorm.sub2 (pointA, pointB);
-vNormNorm.cross (vNormNorm, javajs.util.Measure.axisY);
-vNormNorm.normalize ();
-if (Float.isNaN (vNormNorm.x)) vNormNorm.set (1, 0, 0);
-}, "javajs.util.P3,javajs.util.P3,javajs.util.V3");
-c$.getBisectingPlane = Clazz.defineMethod (c$, "getBisectingPlane",
-function (pointA, vAB, ptTemp, vTemp, plane) {
-ptTemp.scaleAdd2 (0.5, vAB, pointA);
-vTemp.setT (vAB);
-vTemp.normalize ();
-javajs.util.Measure.getPlaneThroughPoint (ptTemp, vTemp, plane);
-}, "javajs.util.P3,javajs.util.V3,javajs.util.T3,javajs.util.V3,javajs.util.P4");
-c$.projectOntoAxis = Clazz.defineMethod (c$, "projectOntoAxis",
-function (point, axisA, axisUnitVector, vectorProjection) {
-vectorProjection.sub2 (point, axisA);
-var projectedLength = vectorProjection.dot (axisUnitVector);
-point.scaleAdd2 (projectedLength, axisUnitVector, axisA);
-vectorProjection.sub2 (point, axisA);
-}, "javajs.util.P3,javajs.util.P3,javajs.util.V3,javajs.util.V3");
-c$.calcBestAxisThroughPoints = Clazz.defineMethod (c$, "calcBestAxisThroughPoints",
-function (points, axisA, axisUnitVector, vectorProjection, nTriesMax) {
-var nPoints = points.length;
-axisA.setT (points[0]);
-axisUnitVector.sub2 (points[nPoints - 1], axisA);
-axisUnitVector.normalize ();
-javajs.util.Measure.calcAveragePointN (points, nPoints, axisA);
-var nTries = 0;
-while (nTries++ < nTriesMax && javajs.util.Measure.findAxis (points, nPoints, axisA, axisUnitVector, vectorProjection) > 0.001) {
-}
-var tempA = javajs.util.P3.newP (points[0]);
-javajs.util.Measure.projectOntoAxis (tempA, axisA, axisUnitVector, vectorProjection);
-axisA.setT (tempA);
-}, "~A,javajs.util.P3,javajs.util.V3,javajs.util.V3,~N");
-c$.findAxis = Clazz.defineMethod (c$, "findAxis",
-function (points, nPoints, axisA, axisUnitVector, vectorProjection) {
-var sumXiYi = new javajs.util.V3 ();
-var vTemp = new javajs.util.V3 ();
-var pt = new javajs.util.P3 ();
-var ptProj = new javajs.util.P3 ();
-var a = javajs.util.V3.newV (axisUnitVector);
-var sum_Xi2 = 0;
-for (var i = nPoints; --i >= 0; ) {
-pt.setT (points[i]);
-ptProj.setT (pt);
-javajs.util.Measure.projectOntoAxis (ptProj, axisA, axisUnitVector, vectorProjection);
-vTemp.sub2 (pt, ptProj);
-vTemp.cross (vectorProjection, vTemp);
-sumXiYi.add (vTemp);
-sum_Xi2 += vectorProjection.lengthSquared ();
-}
-var m = javajs.util.V3.newV (sumXiYi);
-m.scale (1 / sum_Xi2);
-vTemp.cross (m, axisUnitVector);
-axisUnitVector.add (vTemp);
-axisUnitVector.normalize ();
-vTemp.sub2 (axisUnitVector, a);
-return vTemp.length ();
-}, "~A,~N,javajs.util.P3,javajs.util.V3,javajs.util.V3");
-c$.calcAveragePoint = Clazz.defineMethod (c$, "calcAveragePoint",
-function (pointA, pointB, pointC) {
-pointC.set ((pointA.x + pointB.x) / 2, (pointA.y + pointB.y) / 2, (pointA.z + pointB.z) / 2);
-}, "javajs.util.P3,javajs.util.P3,javajs.util.P3");
-c$.calcAveragePointN = Clazz.defineMethod (c$, "calcAveragePointN",
-function (points, nPoints, averagePoint) {
-averagePoint.setT (points[0]);
-for (var i = 1; i < nPoints; i++) averagePoint.add (points[i]);
-
-averagePoint.scale (1 / nPoints);
-}, "~A,~N,javajs.util.P3");
-c$.transformPoints = Clazz.defineMethod (c$, "transformPoints",
-function (vPts, m4, center) {
-var v = new javajs.util.Lst ();
-for (var i = 0; i < vPts.size (); i++) {
-var pt = javajs.util.P3.newP (vPts.get (i));
-pt.sub (center);
-m4.rotTrans (pt);
-pt.add (center);
-v.addLast (pt);
-}
-return v;
-}, "javajs.util.Lst,javajs.util.M4,javajs.util.P3");
-c$.isInTetrahedron = Clazz.defineMethod (c$, "isInTetrahedron",
-function (pt, ptA, ptB, ptC, ptD, plane, vTemp, vTemp2, fullyEnclosed) {
-var b = (javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptC, ptD, ptA, vTemp, vTemp2, plane), pt) >= 0);
-if (b != (javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptA, ptD, ptB, vTemp, vTemp2, plane), pt) >= 0)) return false;
-if (b != (javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptB, ptD, ptC, vTemp, vTemp2, plane), pt) >= 0)) return false;
-var d = javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptA, ptB, ptC, vTemp, vTemp2, plane), pt);
-if (fullyEnclosed) return (b == (d >= 0));
-var d1 = javajs.util.Measure.distanceToPlane (plane, ptD);
-return d1 * d <= 0 || Math.abs (d1) > Math.abs (d);
-}, "javajs.util.P3,javajs.util.P3,javajs.util.P3,javajs.util.P3,javajs.util.P3,javajs.util.P4,javajs.util.V3,javajs.util.V3,~B");
-c$.getIntersectionPP = Clazz.defineMethod (c$, "getIntersectionPP",
-function (plane1, plane2) {
-var a1 = plane1.x;
-var b1 = plane1.y;
-var c1 = plane1.z;
-var d1 = plane1.w;
-var a2 = plane2.x;
-var b2 = plane2.y;
-var c2 = plane2.z;
-var d2 = plane2.w;
-var norm1 = javajs.util.V3.new3 (a1, b1, c1);
-var norm2 = javajs.util.V3.new3 (a2, b2, c2);
-var nxn = new javajs.util.V3 ();
-nxn.cross (norm1, norm2);
-var ax = Math.abs (nxn.x);
-var ay = Math.abs (nxn.y);
-var az = Math.abs (nxn.z);
-var x;
-var y;
-var z;
-var diff;
-var type = (ax > ay ? (ax > az ? 1 : 3) : ay > az ? 2 : 3);
-switch (type) {
-case 1:
-x = 0;
-diff = (b1 * c2 - b2 * c1);
-if (Math.abs (diff) < 0.01) return null;
-y = (c1 * d2 - c2 * d1) / diff;
-z = (b2 * d1 - d2 * b1) / diff;
-break;
-case 2:
-diff = (a1 * c2 - a2 * c1);
-if (Math.abs (diff) < 0.01) return null;
-x = (c1 * d2 - c2 * d1) / diff;
-y = 0;
-z = (a2 * d1 - d2 * a1) / diff;
-break;
-case 3:
-default:
-diff = (a1 * b2 - a2 * b1);
-if (Math.abs (diff) < 0.01) return null;
-x = (b1 * d2 - b2 * d1) / diff;
-y = (a2 * d1 - d2 * a1) / diff;
-z = 0;
-}
-var list = new javajs.util.Lst ();
-list.addLast (javajs.util.P3.new3 (x, y, z));
-nxn.normalize ();
-list.addLast (nxn);
-return list;
-}, "javajs.util.P4,javajs.util.P4");
-c$.getIntersection = Clazz.defineMethod (c$, "getIntersection",
-function (pt1, v, plane, ptRet, tempNorm, vTemp) {
-javajs.util.Measure.getPlaneProjection (pt1, plane, ptRet, tempNorm);
-tempNorm.set (plane.x, plane.y, plane.z);
-tempNorm.normalize ();
-if (v == null) v = javajs.util.V3.newV (tempNorm);
-var l_dot_n = v.dot (tempNorm);
-if (Math.abs (l_dot_n) < 0.01) return null;
-vTemp.sub2 (ptRet, pt1);
-ptRet.scaleAdd2 (vTemp.dot (tempNorm) / l_dot_n, v, pt1);
-return ptRet;
-}, "javajs.util.P3,javajs.util.V3,javajs.util.P4,javajs.util.P3,javajs.util.V3,javajs.util.V3");
-c$.calculateQuaternionRotation = Clazz.defineMethod (c$, "calculateQuaternionRotation",
-function (centerAndPoints, retStddev) {
-retStddev[1] = NaN;
-var q = new javajs.util.Quat ();
-if (centerAndPoints[0].length == 1 || centerAndPoints[0].length != centerAndPoints[1].length) return q;
-var n = centerAndPoints[0].length - 1;
-if (n < 2) return q;
-var Sxx = 0;
-var Sxy = 0;
-var Sxz = 0;
-var Syx = 0;
-var Syy = 0;
-var Syz = 0;
-var Szx = 0;
-var Szy = 0;
-var Szz = 0;
-var ptA = new javajs.util.P3 ();
-var ptB = new javajs.util.P3 ();
-for (var i = n + 1; --i >= 1; ) {
-var aij = centerAndPoints[0][i];
-var bij = centerAndPoints[1][i];
-ptA.sub2 (aij, centerAndPoints[0][0]);
-ptB.sub2 (bij, centerAndPoints[0][1]);
-Sxx += ptA.x * ptB.x;
-Sxy += ptA.x * ptB.y;
-Sxz += ptA.x * ptB.z;
-Syx += ptA.y * ptB.x;
-Syy += ptA.y * ptB.y;
-Syz += ptA.y * ptB.z;
-Szx += ptA.z * ptB.x;
-Szy += ptA.z * ptB.y;
-Szz += ptA.z * ptB.z;
-}
-retStddev[0] = javajs.util.Measure.getRmsd (centerAndPoints, q);
-var N = Clazz.newDoubleArray (4, 4, 0);
-N[0][0] = Sxx + Syy + Szz;
-N[0][1] = N[1][0] = Syz - Szy;
-N[0][2] = N[2][0] = Szx - Sxz;
-N[0][3] = N[3][0] = Sxy - Syx;
-N[1][1] = Sxx - Syy - Szz;
-N[1][2] = N[2][1] = Sxy + Syx;
-N[1][3] = N[3][1] = Szx + Sxz;
-N[2][2] = -Sxx + Syy - Szz;
-N[2][3] = N[3][2] = Syz + Szy;
-N[3][3] = -Sxx - Syy + Szz;
-var v = (javajs.api.Interface.getInterface ("javajs.util.Eigen")).setM (N).getEigenvectorsFloatTransposed ()[3];
-q = javajs.util.Quat.newP4 (javajs.util.P4.new4 (v[1], v[2], v[3], v[0]));
-retStddev[1] = javajs.util.Measure.getRmsd (centerAndPoints, q);
-return q;
-}, "~A,~A");
-c$.getTransformMatrix4 = Clazz.defineMethod (c$, "getTransformMatrix4",
-function (ptsA, ptsB, m, centerA) {
-var cptsA = javajs.util.Measure.getCenterAndPoints (ptsA);
-var cptsB = javajs.util.Measure.getCenterAndPoints (ptsB);
-var retStddev = Clazz.newFloatArray (2, 0);
-var q = javajs.util.Measure.calculateQuaternionRotation ( Clazz.newArray (-1, [cptsA, cptsB]), retStddev);
-var r = q.getMatrix ();
-if (centerA == null) r.rotate (cptsA[0]);
- else centerA.setT (cptsA[0]);
-var t = javajs.util.V3.newVsub (cptsB[0], cptsA[0]);
-m.setMV (r, t);
-return retStddev[1];
-}, "javajs.util.Lst,javajs.util.Lst,javajs.util.M4,javajs.util.P3");
-c$.getCenterAndPoints = Clazz.defineMethod (c$, "getCenterAndPoints",
-function (vPts) {
-var n = vPts.size ();
-var pts = new Array (n + 1);
-pts[0] = new javajs.util.P3 ();
-if (n > 0) {
-for (var i = 0; i < n; i++) {
-pts[0].add (pts[i + 1] = vPts.get (i));
-}
-pts[0].scale (1 / n);
-}return pts;
-}, "javajs.util.Lst");
-c$.getRmsd = Clazz.defineMethod (c$, "getRmsd",
-function (centerAndPoints, q) {
-var sum2 = 0;
-var ptsA = centerAndPoints[0];
-var ptsB = centerAndPoints[1];
-var cA = ptsA[0];
-var cB = ptsB[0];
-var n = ptsA.length - 1;
-var ptAnew = new javajs.util.P3 ();
-for (var i = n + 1; --i >= 1; ) {
-ptAnew.sub2 (ptsA[i], cA);
-q.transform2 (ptAnew, ptAnew).add (cB);
-sum2 += ptAnew.distanceSquared (ptsB[i]);
-}
-return Math.sqrt (sum2 / n);
-}, "~A,javajs.util.Quat");
-Clazz.defineStatics (c$,
-"radiansPerDegree", (0.017453292519943295));
-c$.axisY = c$.prototype.axisY = javajs.util.V3.new3 (0, 1, 0);
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.V3"], "javajs.util.Measure", ["java.lang.Float", "javajs.api.Interface", "javajs.util.Lst", "$.P3", "$.P4", "$.Quat"], function () {
+c$ = Clazz.declareType (javajs.util, "Measure");
+c$.computeAngle = Clazz.defineMethod (c$, "computeAngle",
+function (pointA, pointB, pointC, vectorBA, vectorBC, asDegrees) {
+vectorBA.sub2 (pointA, pointB);
+vectorBC.sub2 (pointC, pointB);
+var angle = vectorBA.angle (vectorBC);
+return (asDegrees ? angle / 0.017453292 : angle);
+}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3,~B");
+c$.computeAngleABC = Clazz.defineMethod (c$, "computeAngleABC",
+function (pointA, pointB, pointC, asDegrees) {
+var vectorBA = new javajs.util.V3 ();
+var vectorBC = new javajs.util.V3 ();
+return javajs.util.Measure.computeAngle (pointA, pointB, pointC, vectorBA, vectorBC, asDegrees);
+}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,~B");
+c$.computeTorsion = Clazz.defineMethod (c$, "computeTorsion",
+function (p1, p2, p3, p4, asDegrees) {
+var ijx = p1.x - p2.x;
+var ijy = p1.y - p2.y;
+var ijz = p1.z - p2.z;
+var kjx = p3.x - p2.x;
+var kjy = p3.y - p2.y;
+var kjz = p3.z - p2.z;
+var klx = p3.x - p4.x;
+var kly = p3.y - p4.y;
+var klz = p3.z - p4.z;
+var ax = ijy * kjz - ijz * kjy;
+var ay = ijz * kjx - ijx * kjz;
+var az = ijx * kjy - ijy * kjx;
+var cx = kjy * klz - kjz * kly;
+var cy = kjz * klx - kjx * klz;
+var cz = kjx * kly - kjy * klx;
+var ai2 = 1 / (ax * ax + ay * ay + az * az);
+var ci2 = 1 / (cx * cx + cy * cy + cz * cz);
+var ai = Math.sqrt (ai2);
+var ci = Math.sqrt (ci2);
+var denom = ai * ci;
+var cross = ax * cx + ay * cy + az * cz;
+var cosang = cross * denom;
+if (cosang > 1) {
+cosang = 1;
+}if (cosang < -1) {
+cosang = -1;
+}var torsion = Math.acos (cosang);
+var dot = ijx * cx + ijy * cy + ijz * cz;
+var absDot = Math.abs (dot);
+torsion = (dot / absDot > 0) ? torsion : -torsion;
+return (asDegrees ? torsion / 0.017453292 : torsion);
+}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.T3,~B");
+c$.computeHelicalAxis = Clazz.defineMethod (c$, "computeHelicalAxis",
+function (a, b, dq) {
+var vab = new javajs.util.V3 ();
+vab.sub2 (b, a);
+var theta = dq.getTheta ();
+var n = dq.getNormal ();
+var v_dot_n = vab.dot (n);
+if (Math.abs (v_dot_n) < 0.0001) v_dot_n = 0;
+var va_prime_d = new javajs.util.V3 ();
+va_prime_d.cross (vab, n);
+if (va_prime_d.dot (va_prime_d) != 0) va_prime_d.normalize ();
+var vda = new javajs.util.V3 ();
+var vcb = javajs.util.V3.newV (n);
+if (v_dot_n == 0) v_dot_n = 1.4E-45;
+vcb.scale (v_dot_n);
+vda.sub2 (vcb, vab);
+vda.scale (0.5);
+va_prime_d.scale (theta == 0 ? 0 : (vda.length () / Math.tan (theta / 2 / 180 * 3.141592653589793)));
+var r = javajs.util.V3.newV (va_prime_d);
+if (theta != 0) r.add (vda);
+var pt_a_prime = javajs.util.P3.newP (a);
+pt_a_prime.sub (r);
+if (v_dot_n != 1.4E-45) n.scale (v_dot_n);
+var pt_b_prime = javajs.util.P3.newP (pt_a_prime);
+pt_b_prime.add (n);
+theta = javajs.util.Measure.computeTorsion (a, pt_a_prime, pt_b_prime, b, true);
+if (Float.isNaN (theta) || r.length () < 0.0001) theta = dq.getThetaDirectedV (n);
+var residuesPerTurn = Math.abs (theta == 0 ? 0 : 360 / theta);
+var pitch = Math.abs (v_dot_n == 1.4E-45 ? 0 : n.length () * (theta == 0 ? 1 : 360 / theta));
+return Clazz.newArray (-1, [pt_a_prime, n, r, javajs.util.P3.new3 (theta, pitch, residuesPerTurn), pt_b_prime]);
+}, "javajs.util.P3,javajs.util.P3,javajs.util.Quat");
+c$.getPlaneThroughPoints = Clazz.defineMethod (c$, "getPlaneThroughPoints",
+function (pointA, pointB, pointC, vNorm, vAB, plane) {
+var w = javajs.util.Measure.getNormalThroughPoints (pointA, pointB, pointC, vNorm, vAB);
+plane.set4 (vNorm.x, vNorm.y, vNorm.z, w);
+return plane;
+}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3,javajs.util.P4");
+c$.getPlaneThroughPoint = Clazz.defineMethod (c$, "getPlaneThroughPoint",
+function (pt, normal, plane) {
+plane.set4 (normal.x, normal.y, normal.z, -normal.dot (pt));
+}, "javajs.util.T3,javajs.util.V3,javajs.util.P4");
+c$.distanceToPlane = Clazz.defineMethod (c$, "distanceToPlane",
+function (plane, pt) {
+return (plane == null ? NaN : (plane.dot (pt) + plane.w) / Math.sqrt (plane.dot (plane)));
+}, "javajs.util.P4,javajs.util.T3");
+c$.directedDistanceToPlane = Clazz.defineMethod (c$, "directedDistanceToPlane",
+function (pt, plane, ptref) {
+var f = plane.dot (pt) + plane.w;
+var f1 = plane.dot (ptref) + plane.w;
+return Math.signum (f1) * f / Math.sqrt (plane.dot (plane));
+}, "javajs.util.P3,javajs.util.P4,javajs.util.P3");
+c$.distanceToPlaneD = Clazz.defineMethod (c$, "distanceToPlaneD",
+function (plane, d, pt) {
+return (plane == null ? NaN : (plane.dot (pt) + plane.w) / d);
+}, "javajs.util.P4,~N,javajs.util.P3");
+c$.distanceToPlaneV = Clazz.defineMethod (c$, "distanceToPlaneV",
+function (norm, w, pt) {
+return (norm == null ? NaN : (norm.dot (pt) + w) / Math.sqrt (norm.dot (norm)));
+}, "javajs.util.V3,~N,javajs.util.P3");
+c$.calcNormalizedNormal = Clazz.defineMethod (c$, "calcNormalizedNormal",
+function (pointA, pointB, pointC, vNormNorm, vAB) {
+vAB.sub2 (pointB, pointA);
+vNormNorm.sub2 (pointC, pointA);
+vNormNorm.cross (vAB, vNormNorm);
+vNormNorm.normalize ();
+}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3");
+c$.getDirectedNormalThroughPoints = Clazz.defineMethod (c$, "getDirectedNormalThroughPoints",
+function (pointA, pointB, pointC, ptRef, vNorm, vAB) {
+var nd = javajs.util.Measure.getNormalThroughPoints (pointA, pointB, pointC, vNorm, vAB);
+if (ptRef != null) {
+var pt0 = javajs.util.P3.newP (pointA);
+pt0.add (vNorm);
+var d = pt0.distance (ptRef);
+pt0.sub2 (pointA, vNorm);
+if (d > pt0.distance (ptRef)) {
+vNorm.scale (-1);
+nd = -nd;
+}}return nd;
+}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3");
+c$.getNormalThroughPoints = Clazz.defineMethod (c$, "getNormalThroughPoints",
+function (pointA, pointB, pointC, vNorm, vTemp) {
+javajs.util.Measure.calcNormalizedNormal (pointA, pointB, pointC, vNorm, vTemp);
+vTemp.setT (pointA);
+return -vTemp.dot (vNorm);
+}, "javajs.util.T3,javajs.util.T3,javajs.util.T3,javajs.util.V3,javajs.util.V3");
+c$.getPlaneProjection = Clazz.defineMethod (c$, "getPlaneProjection",
+function (pt, plane, ptProj, vNorm) {
+var dist = javajs.util.Measure.distanceToPlane (plane, pt);
+vNorm.set (plane.x, plane.y, plane.z);
+vNorm.normalize ();
+vNorm.scale (-dist);
+ptProj.add2 (pt, vNorm);
+}, "javajs.util.P3,javajs.util.P4,javajs.util.P3,javajs.util.V3");
+c$.getNormalToLine = Clazz.defineMethod (c$, "getNormalToLine",
+function (pointA, pointB, vNormNorm) {
+vNormNorm.sub2 (pointA, pointB);
+vNormNorm.cross (vNormNorm, javajs.util.Measure.axisY);
+vNormNorm.normalize ();
+if (Float.isNaN (vNormNorm.x)) vNormNorm.set (1, 0, 0);
+}, "javajs.util.P3,javajs.util.P3,javajs.util.V3");
+c$.getBisectingPlane = Clazz.defineMethod (c$, "getBisectingPlane",
+function (pointA, vAB, ptTemp, vTemp, plane) {
+ptTemp.scaleAdd2 (0.5, vAB, pointA);
+vTemp.setT (vAB);
+vTemp.normalize ();
+javajs.util.Measure.getPlaneThroughPoint (ptTemp, vTemp, plane);
+}, "javajs.util.P3,javajs.util.V3,javajs.util.T3,javajs.util.V3,javajs.util.P4");
+c$.projectOntoAxis = Clazz.defineMethod (c$, "projectOntoAxis",
+function (point, axisA, axisUnitVector, vectorProjection) {
+vectorProjection.sub2 (point, axisA);
+var projectedLength = vectorProjection.dot (axisUnitVector);
+point.scaleAdd2 (projectedLength, axisUnitVector, axisA);
+vectorProjection.sub2 (point, axisA);
+}, "javajs.util.P3,javajs.util.P3,javajs.util.V3,javajs.util.V3");
+c$.calcBestAxisThroughPoints = Clazz.defineMethod (c$, "calcBestAxisThroughPoints",
+function (points, axisA, axisUnitVector, vectorProjection, nTriesMax) {
+var nPoints = points.length;
+axisA.setT (points[0]);
+axisUnitVector.sub2 (points[nPoints - 1], axisA);
+axisUnitVector.normalize ();
+javajs.util.Measure.calcAveragePointN (points, nPoints, axisA);
+var nTries = 0;
+while (nTries++ < nTriesMax && javajs.util.Measure.findAxis (points, nPoints, axisA, axisUnitVector, vectorProjection) > 0.001) {
+}
+var tempA = javajs.util.P3.newP (points[0]);
+javajs.util.Measure.projectOntoAxis (tempA, axisA, axisUnitVector, vectorProjection);
+axisA.setT (tempA);
+}, "~A,javajs.util.P3,javajs.util.V3,javajs.util.V3,~N");
+c$.findAxis = Clazz.defineMethod (c$, "findAxis",
+function (points, nPoints, axisA, axisUnitVector, vectorProjection) {
+var sumXiYi = new javajs.util.V3 ();
+var vTemp = new javajs.util.V3 ();
+var pt = new javajs.util.P3 ();
+var ptProj = new javajs.util.P3 ();
+var a = javajs.util.V3.newV (axisUnitVector);
+var sum_Xi2 = 0;
+for (var i = nPoints; --i >= 0; ) {
+pt.setT (points[i]);
+ptProj.setT (pt);
+javajs.util.Measure.projectOntoAxis (ptProj, axisA, axisUnitVector, vectorProjection);
+vTemp.sub2 (pt, ptProj);
+vTemp.cross (vectorProjection, vTemp);
+sumXiYi.add (vTemp);
+sum_Xi2 += vectorProjection.lengthSquared ();
+}
+var m = javajs.util.V3.newV (sumXiYi);
+m.scale (1 / sum_Xi2);
+vTemp.cross (m, axisUnitVector);
+axisUnitVector.add (vTemp);
+axisUnitVector.normalize ();
+vTemp.sub2 (axisUnitVector, a);
+return vTemp.length ();
+}, "~A,~N,javajs.util.P3,javajs.util.V3,javajs.util.V3");
+c$.calcAveragePoint = Clazz.defineMethod (c$, "calcAveragePoint",
+function (pointA, pointB, pointC) {
+pointC.set ((pointA.x + pointB.x) / 2, (pointA.y + pointB.y) / 2, (pointA.z + pointB.z) / 2);
+}, "javajs.util.P3,javajs.util.P3,javajs.util.P3");
+c$.calcAveragePointN = Clazz.defineMethod (c$, "calcAveragePointN",
+function (points, nPoints, averagePoint) {
+averagePoint.setT (points[0]);
+for (var i = 1; i < nPoints; i++) averagePoint.add (points[i]);
+
+averagePoint.scale (1 / nPoints);
+}, "~A,~N,javajs.util.P3");
+c$.transformPoints = Clazz.defineMethod (c$, "transformPoints",
+function (vPts, m4, center) {
+var v = new javajs.util.Lst ();
+for (var i = 0; i < vPts.size (); i++) {
+var pt = javajs.util.P3.newP (vPts.get (i));
+pt.sub (center);
+m4.rotTrans (pt);
+pt.add (center);
+v.addLast (pt);
+}
+return v;
+}, "javajs.util.Lst,javajs.util.M4,javajs.util.P3");
+c$.isInTetrahedron = Clazz.defineMethod (c$, "isInTetrahedron",
+function (pt, ptA, ptB, ptC, ptD, plane, vTemp, vTemp2, fullyEnclosed) {
+var b = (javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptC, ptD, ptA, vTemp, vTemp2, plane), pt) >= 0);
+if (b != (javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptA, ptD, ptB, vTemp, vTemp2, plane), pt) >= 0)) return false;
+if (b != (javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptB, ptD, ptC, vTemp, vTemp2, plane), pt) >= 0)) return false;
+var d = javajs.util.Measure.distanceToPlane (javajs.util.Measure.getPlaneThroughPoints (ptA, ptB, ptC, vTemp, vTemp2, plane), pt);
+if (fullyEnclosed) return (b == (d >= 0));
+var d1 = javajs.util.Measure.distanceToPlane (plane, ptD);
+return d1 * d <= 0 || Math.abs (d1) > Math.abs (d);
+}, "javajs.util.P3,javajs.util.P3,javajs.util.P3,javajs.util.P3,javajs.util.P3,javajs.util.P4,javajs.util.V3,javajs.util.V3,~B");
+c$.getIntersectionPP = Clazz.defineMethod (c$, "getIntersectionPP",
+function (plane1, plane2) {
+var a1 = plane1.x;
+var b1 = plane1.y;
+var c1 = plane1.z;
+var d1 = plane1.w;
+var a2 = plane2.x;
+var b2 = plane2.y;
+var c2 = plane2.z;
+var d2 = plane2.w;
+var norm1 = javajs.util.V3.new3 (a1, b1, c1);
+var norm2 = javajs.util.V3.new3 (a2, b2, c2);
+var nxn = new javajs.util.V3 ();
+nxn.cross (norm1, norm2);
+var ax = Math.abs (nxn.x);
+var ay = Math.abs (nxn.y);
+var az = Math.abs (nxn.z);
+var x;
+var y;
+var z;
+var diff;
+var type = (ax > ay ? (ax > az ? 1 : 3) : ay > az ? 2 : 3);
+switch (type) {
+case 1:
+x = 0;
+diff = (b1 * c2 - b2 * c1);
+if (Math.abs (diff) < 0.01) return null;
+y = (c1 * d2 - c2 * d1) / diff;
+z = (b2 * d1 - d2 * b1) / diff;
+break;
+case 2:
+diff = (a1 * c2 - a2 * c1);
+if (Math.abs (diff) < 0.01) return null;
+x = (c1 * d2 - c2 * d1) / diff;
+y = 0;
+z = (a2 * d1 - d2 * a1) / diff;
+break;
+case 3:
+default:
+diff = (a1 * b2 - a2 * b1);
+if (Math.abs (diff) < 0.01) return null;
+x = (b1 * d2 - b2 * d1) / diff;
+y = (a2 * d1 - d2 * a1) / diff;
+z = 0;
+}
+var list = new javajs.util.Lst ();
+list.addLast (javajs.util.P3.new3 (x, y, z));
+nxn.normalize ();
+list.addLast (nxn);
+return list;
+}, "javajs.util.P4,javajs.util.P4");
+c$.getIntersection = Clazz.defineMethod (c$, "getIntersection",
+function (pt1, v, plane, ptRet, tempNorm, vTemp) {
+javajs.util.Measure.getPlaneProjection (pt1, plane, ptRet, tempNorm);
+tempNorm.set (plane.x, plane.y, plane.z);
+tempNorm.normalize ();
+if (v == null) v = javajs.util.V3.newV (tempNorm);
+var l_dot_n = v.dot (tempNorm);
+if (Math.abs (l_dot_n) < 0.01) return null;
+vTemp.sub2 (ptRet, pt1);
+ptRet.scaleAdd2 (vTemp.dot (tempNorm) / l_dot_n, v, pt1);
+return ptRet;
+}, "javajs.util.P3,javajs.util.V3,javajs.util.P4,javajs.util.P3,javajs.util.V3,javajs.util.V3");
+c$.calculateQuaternionRotation = Clazz.defineMethod (c$, "calculateQuaternionRotation",
+function (centerAndPoints, retStddev) {
+retStddev[1] = NaN;
+var q = new javajs.util.Quat ();
+if (centerAndPoints[0].length == 1 || centerAndPoints[0].length != centerAndPoints[1].length) return q;
+var n = centerAndPoints[0].length - 1;
+if (n < 2) return q;
+var Sxx = 0;
+var Sxy = 0;
+var Sxz = 0;
+var Syx = 0;
+var Syy = 0;
+var Syz = 0;
+var Szx = 0;
+var Szy = 0;
+var Szz = 0;
+var ptA = new javajs.util.P3 ();
+var ptB = new javajs.util.P3 ();
+for (var i = n + 1; --i >= 1; ) {
+var aij = centerAndPoints[0][i];
+var bij = centerAndPoints[1][i];
+ptA.sub2 (aij, centerAndPoints[0][0]);
+ptB.sub2 (bij, centerAndPoints[0][1]);
+Sxx += ptA.x * ptB.x;
+Sxy += ptA.x * ptB.y;
+Sxz += ptA.x * ptB.z;
+Syx += ptA.y * ptB.x;
+Syy += ptA.y * ptB.y;
+Syz += ptA.y * ptB.z;
+Szx += ptA.z * ptB.x;
+Szy += ptA.z * ptB.y;
+Szz += ptA.z * ptB.z;
+}
+retStddev[0] = javajs.util.Measure.getRmsd (centerAndPoints, q);
+var N = Clazz.newDoubleArray (4, 4, 0);
+N[0][0] = Sxx + Syy + Szz;
+N[0][1] = N[1][0] = Syz - Szy;
+N[0][2] = N[2][0] = Szx - Sxz;
+N[0][3] = N[3][0] = Sxy - Syx;
+N[1][1] = Sxx - Syy - Szz;
+N[1][2] = N[2][1] = Sxy + Syx;
+N[1][3] = N[3][1] = Szx + Sxz;
+N[2][2] = -Sxx + Syy - Szz;
+N[2][3] = N[3][2] = Syz + Szy;
+N[3][3] = -Sxx - Syy + Szz;
+var v = (javajs.api.Interface.getInterface ("javajs.util.Eigen")).setM (N).getEigenvectorsFloatTransposed ()[3];
+q = javajs.util.Quat.newP4 (javajs.util.P4.new4 (v[1], v[2], v[3], v[0]));
+retStddev[1] = javajs.util.Measure.getRmsd (centerAndPoints, q);
+return q;
+}, "~A,~A");
+c$.getTransformMatrix4 = Clazz.defineMethod (c$, "getTransformMatrix4",
+function (ptsA, ptsB, m, centerA) {
+var cptsA = javajs.util.Measure.getCenterAndPoints (ptsA);
+var cptsB = javajs.util.Measure.getCenterAndPoints (ptsB);
+var retStddev = Clazz.newFloatArray (2, 0);
+var q = javajs.util.Measure.calculateQuaternionRotation ( Clazz.newArray (-1, [cptsA, cptsB]), retStddev);
+var r = q.getMatrix ();
+if (centerA == null) r.rotate (cptsA[0]);
+ else centerA.setT (cptsA[0]);
+var t = javajs.util.V3.newVsub (cptsB[0], cptsA[0]);
+m.setMV (r, t);
+return retStddev[1];
+}, "javajs.util.Lst,javajs.util.Lst,javajs.util.M4,javajs.util.P3");
+c$.getCenterAndPoints = Clazz.defineMethod (c$, "getCenterAndPoints",
+function (vPts) {
+var n = vPts.size ();
+var pts = new Array (n + 1);
+pts[0] = new javajs.util.P3 ();
+if (n > 0) {
+for (var i = 0; i < n; i++) {
+pts[0].add (pts[i + 1] = vPts.get (i));
+}
+pts[0].scale (1 / n);
+}return pts;
+}, "javajs.util.Lst");
+c$.getRmsd = Clazz.defineMethod (c$, "getRmsd",
+function (centerAndPoints, q) {
+var sum2 = 0;
+var ptsA = centerAndPoints[0];
+var ptsB = centerAndPoints[1];
+var cA = ptsA[0];
+var cB = ptsB[0];
+var n = ptsA.length - 1;
+var ptAnew = new javajs.util.P3 ();
+for (var i = n + 1; --i >= 1; ) {
+ptAnew.sub2 (ptsA[i], cA);
+q.transform2 (ptAnew, ptAnew).add (cB);
+sum2 += ptAnew.distanceSquared (ptsB[i]);
+}
+return Math.sqrt (sum2 / n);
+}, "~A,javajs.util.Quat");
+Clazz.defineStatics (c$,
+"radiansPerDegree", (0.017453292519943295));
+c$.axisY = c$.prototype.axisY = javajs.util.V3.new3 (0, 1, 0);
+});
diff --git a/bin/javajs/util/OC.class b/bin/javajs/util/OC.class
index 962e240..1ff4f42 100644
Binary files a/bin/javajs/util/OC.class and b/bin/javajs/util/OC.class differ
diff --git a/bin/javajs/util/OC.js b/bin/javajs/util/OC.js
index 76f148a..f720165 100644
--- a/bin/javajs/util/OC.js
+++ b/bin/javajs/util/OC.js
@@ -1,236 +1,236 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["java.io.OutputStream"], "javajs.util.OC", ["java.io.BufferedWriter", "$.ByteArrayOutputStream", "$.OutputStreamWriter", "javajs.util.Base64", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.bytePoster = null;
-this.fileName = null;
-this.bw = null;
-this.isLocalFile = false;
-this.byteCount = 0;
-this.isCanceled = false;
-this.closed = false;
-this.os = null;
-this.sb = null;
-this.type = null;
-this.$isBase64 = false;
-this.os0 = null;
-this.bytes = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "OC", java.io.OutputStream);
-Clazz.defineMethod (c$, "setParams",
-function (bytePoster, fileName, asWriter, os) {
-this.bytePoster = bytePoster;
-this.fileName = fileName;
-this.$isBase64 = ";base64,".equals (fileName);
-if (this.$isBase64) {
-fileName = null;
-this.os0 = os;
-os = null;
-}this.os = os;
-this.isLocalFile = (fileName != null && !javajs.util.OC.isRemote (fileName));
-if (asWriter && !this.$isBase64 && os != null) this.bw = new java.io.BufferedWriter ( new java.io.OutputStreamWriter (os));
-return this;
-}, "javajs.api.BytePoster,~S,~B,java.io.OutputStream");
-Clazz.defineMethod (c$, "setBytes",
-function (b) {
-this.bytes = b;
-return this;
-}, "~A");
-Clazz.defineMethod (c$, "getFileName",
-function () {
-return this.fileName;
-});
-Clazz.defineMethod (c$, "getName",
-function () {
-return (this.fileName == null ? null : this.fileName.substring (this.fileName.lastIndexOf ("/") + 1));
-});
-Clazz.defineMethod (c$, "getByteCount",
-function () {
-return this.byteCount;
-});
-Clazz.defineMethod (c$, "setType",
-function (type) {
-this.type = type;
-}, "~S");
-Clazz.defineMethod (c$, "getType",
-function () {
-return this.type;
-});
-Clazz.defineMethod (c$, "append",
-function (s) {
-try {
-if (this.bw != null) {
-this.bw.write (s);
-} else if (this.os == null) {
-if (this.sb == null) this.sb = new javajs.util.SB ();
-this.sb.append (s);
-} else {
-var b = s.getBytes ();
-this.os.write (b, 0, b.length);
-this.byteCount += b.length;
-return this;
-}} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-} else {
-throw e;
-}
-}
-this.byteCount += s.length;
-return this;
-}, "~S");
-Clazz.defineMethod (c$, "reset",
-function () {
-this.sb = null;
-this.initOS ();
-});
-Clazz.defineMethod (c$, "initOS",
-($fz = function () {
-if (this.sb != null) {
-var s = this.sb.toString ();
-this.reset ();
-this.append (s);
-return;
-}try {
-{
-this.os = null;
-}if (this.os == null) this.os = new java.io.ByteArrayOutputStream ();
-if (this.bw != null) {
-this.bw.close ();
-this.bw = new java.io.BufferedWriter ( new java.io.OutputStreamWriter (this.os));
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-this.byteCount = 0;
-}, $fz.isPrivate = true, $fz));
-Clazz.overrideMethod (c$, "write",
-function (buf, i, len) {
-if (this.os == null) this.initOS ();
-try {
-this.os.write (buf, i, len);
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-} else {
-throw e;
-}
-}
-this.byteCount += len;
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "writeByteAsInt",
-function (b) {
-if (this.os == null) this.initOS ();
-{
-this.os.writeByteAsInt(b);
-}this.byteCount++;
-}, "~N");
-Clazz.defineMethod (c$, "cancel",
-function () {
-this.isCanceled = true;
-this.closeChannel ();
-});
-Clazz.defineMethod (c$, "closeChannel",
-function () {
-if (this.closed) return null;
-try {
-if (this.bw != null) {
-this.bw.flush ();
-this.bw.close ();
-} else if (this.os != null) {
-this.os.flush ();
-this.os.close ();
-}if (this.os0 != null && this.isCanceled) {
-this.os0.flush ();
-this.os0.close ();
-}} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-if (this.isCanceled) {
-this.closed = true;
-return null;
-}if (this.fileName == null) {
-if (this.$isBase64) {
-var s = this.getBase64 ();
-if (this.os0 != null) {
-this.os = this.os0;
-this.append (s);
-}this.sb = new javajs.util.SB ();
-this.sb.append (s);
-this.$isBase64 = false;
-return this.closeChannel ();
-}return (this.sb == null ? null : this.sb.toString ());
-}this.closed = true;
-var jmol = null;
-var _function = null;
-{
-jmol = Jmol; _function = (typeof this.fileName == "function" ?
-this.fileName : null);
-}if (jmol != null) {
-var data = (this.sb == null ? this.toByteArray () : this.sb.toString ());
-if (_function == null) jmol._doAjax (this.fileName, null, data);
- else jmol._apply (this.fileName, data);
-}return null;
-});
-Clazz.defineMethod (c$, "isBase64",
-function () {
-return this.$isBase64;
-});
-Clazz.defineMethod (c$, "getBase64",
-function () {
-return javajs.util.Base64.getBase64 (this.toByteArray ()).toString ();
-});
-Clazz.defineMethod (c$, "toByteArray",
-function () {
-return (this.bytes != null ? this.bytes : Clazz.instanceOf (this.os, java.io.ByteArrayOutputStream) ? (this.os).toByteArray () : null);
-});
-Clazz.defineMethod (c$, "close",
-function () {
-this.closeChannel ();
-});
-Clazz.overrideMethod (c$, "toString",
-function () {
-if (this.bw != null) try {
-this.bw.flush ();
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-} else {
-throw e;
-}
-}
-if (this.sb != null) return this.closeChannel ();
-return this.byteCount + " bytes";
-});
-Clazz.defineMethod (c$, "postByteArray",
-($fz = function () {
-var bytes = (this.sb == null ? this.toByteArray () : this.sb.toString ().getBytes ());
-return this.bytePoster.postByteArray (this.fileName, bytes);
-}, $fz.isPrivate = true, $fz));
-c$.isRemote = Clazz.defineMethod (c$, "isRemote",
-function (fileName) {
-if (fileName == null) return false;
-var itype = javajs.util.OC.urlTypeIndex (fileName);
-return (itype >= 0 && itype != 4);
-}, "~S");
-c$.isLocal = Clazz.defineMethod (c$, "isLocal",
-function (fileName) {
-if (fileName == null) return false;
-var itype = javajs.util.OC.urlTypeIndex (fileName);
-return (itype < 0 || itype == 4);
-}, "~S");
-c$.urlTypeIndex = Clazz.defineMethod (c$, "urlTypeIndex",
-function (name) {
-if (name == null) return -2;
-for (var i = 0; i < javajs.util.OC.urlPrefixes.length; ++i) {
-if (name.startsWith (javajs.util.OC.urlPrefixes[i])) {
-return i;
-}}
-return -1;
-}, "~S");
-Clazz.defineStatics (c$,
-"urlPrefixes", Clazz.newArray (-1, ["http:", "https:", "sftp:", "ftp:", "file:"]),
-"URL_LOCAL", 4);
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["java.io.OutputStream"], "javajs.util.OC", ["java.io.BufferedWriter", "$.ByteArrayOutputStream", "$.OutputStreamWriter", "javajs.util.Base64", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.bytePoster = null;
+this.fileName = null;
+this.bw = null;
+this.isLocalFile = false;
+this.byteCount = 0;
+this.isCanceled = false;
+this.closed = false;
+this.os = null;
+this.sb = null;
+this.type = null;
+this.$isBase64 = false;
+this.os0 = null;
+this.bytes = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "OC", java.io.OutputStream);
+Clazz.defineMethod (c$, "setParams",
+function (bytePoster, fileName, asWriter, os) {
+this.bytePoster = bytePoster;
+this.fileName = fileName;
+this.$isBase64 = ";base64,".equals (fileName);
+if (this.$isBase64) {
+fileName = null;
+this.os0 = os;
+os = null;
+}this.os = os;
+this.isLocalFile = (fileName != null && !javajs.util.OC.isRemote (fileName));
+if (asWriter && !this.$isBase64 && os != null) this.bw = new java.io.BufferedWriter ( new java.io.OutputStreamWriter (os));
+return this;
+}, "javajs.api.BytePoster,~S,~B,java.io.OutputStream");
+Clazz.defineMethod (c$, "setBytes",
+function (b) {
+this.bytes = b;
+return this;
+}, "~A");
+Clazz.defineMethod (c$, "getFileName",
+function () {
+return this.fileName;
+});
+Clazz.defineMethod (c$, "getName",
+function () {
+return (this.fileName == null ? null : this.fileName.substring (this.fileName.lastIndexOf ("/") + 1));
+});
+Clazz.defineMethod (c$, "getByteCount",
+function () {
+return this.byteCount;
+});
+Clazz.defineMethod (c$, "setType",
+function (type) {
+this.type = type;
+}, "~S");
+Clazz.defineMethod (c$, "getType",
+function () {
+return this.type;
+});
+Clazz.defineMethod (c$, "append",
+function (s) {
+try {
+if (this.bw != null) {
+this.bw.write (s);
+} else if (this.os == null) {
+if (this.sb == null) this.sb = new javajs.util.SB ();
+this.sb.append (s);
+} else {
+var b = s.getBytes ();
+this.os.write (b, 0, b.length);
+this.byteCount += b.length;
+return this;
+}} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+} else {
+throw e;
+}
+}
+this.byteCount += s.length;
+return this;
+}, "~S");
+Clazz.defineMethod (c$, "reset",
+function () {
+this.sb = null;
+this.initOS ();
+});
+Clazz.defineMethod (c$, "initOS",
+($fz = function () {
+if (this.sb != null) {
+var s = this.sb.toString ();
+this.reset ();
+this.append (s);
+return;
+}try {
+{
+this.os = null;
+}if (this.os == null) this.os = new java.io.ByteArrayOutputStream ();
+if (this.bw != null) {
+this.bw.close ();
+this.bw = new java.io.BufferedWriter ( new java.io.OutputStreamWriter (this.os));
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+this.byteCount = 0;
+}, $fz.isPrivate = true, $fz));
+Clazz.overrideMethod (c$, "write",
+function (buf, i, len) {
+if (this.os == null) this.initOS ();
+try {
+this.os.write (buf, i, len);
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+} else {
+throw e;
+}
+}
+this.byteCount += len;
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "writeByteAsInt",
+function (b) {
+if (this.os == null) this.initOS ();
+{
+this.os.writeByteAsInt(b);
+}this.byteCount++;
+}, "~N");
+Clazz.defineMethod (c$, "cancel",
+function () {
+this.isCanceled = true;
+this.closeChannel ();
+});
+Clazz.defineMethod (c$, "closeChannel",
+function () {
+if (this.closed) return null;
+try {
+if (this.bw != null) {
+this.bw.flush ();
+this.bw.close ();
+} else if (this.os != null) {
+this.os.flush ();
+this.os.close ();
+}if (this.os0 != null && this.isCanceled) {
+this.os0.flush ();
+this.os0.close ();
+}} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+if (this.isCanceled) {
+this.closed = true;
+return null;
+}if (this.fileName == null) {
+if (this.$isBase64) {
+var s = this.getBase64 ();
+if (this.os0 != null) {
+this.os = this.os0;
+this.append (s);
+}this.sb = new javajs.util.SB ();
+this.sb.append (s);
+this.$isBase64 = false;
+return this.closeChannel ();
+}return (this.sb == null ? null : this.sb.toString ());
+}this.closed = true;
+var jmol = null;
+var _function = null;
+{
+jmol = Jmol; _function = (typeof this.fileName == "function" ?
+this.fileName : null);
+}if (jmol != null) {
+var data = (this.sb == null ? this.toByteArray () : this.sb.toString ());
+if (_function == null) jmol._doAjax (this.fileName, null, data);
+ else jmol._apply (this.fileName, data);
+}return null;
+});
+Clazz.defineMethod (c$, "isBase64",
+function () {
+return this.$isBase64;
+});
+Clazz.defineMethod (c$, "getBase64",
+function () {
+return javajs.util.Base64.getBase64 (this.toByteArray ()).toString ();
+});
+Clazz.defineMethod (c$, "toByteArray",
+function () {
+return (this.bytes != null ? this.bytes : Clazz.instanceOf (this.os, java.io.ByteArrayOutputStream) ? (this.os).toByteArray () : null);
+});
+Clazz.defineMethod (c$, "close",
+function () {
+this.closeChannel ();
+});
+Clazz.overrideMethod (c$, "toString",
+function () {
+if (this.bw != null) try {
+this.bw.flush ();
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+} else {
+throw e;
+}
+}
+if (this.sb != null) return this.closeChannel ();
+return this.byteCount + " bytes";
+});
+Clazz.defineMethod (c$, "postByteArray",
+($fz = function () {
+var bytes = (this.sb == null ? this.toByteArray () : this.sb.toString ().getBytes ());
+return this.bytePoster.postByteArray (this.fileName, bytes);
+}, $fz.isPrivate = true, $fz));
+c$.isRemote = Clazz.defineMethod (c$, "isRemote",
+function (fileName) {
+if (fileName == null) return false;
+var itype = javajs.util.OC.urlTypeIndex (fileName);
+return (itype >= 0 && itype != 4);
+}, "~S");
+c$.isLocal = Clazz.defineMethod (c$, "isLocal",
+function (fileName) {
+if (fileName == null) return false;
+var itype = javajs.util.OC.urlTypeIndex (fileName);
+return (itype < 0 || itype == 4);
+}, "~S");
+c$.urlTypeIndex = Clazz.defineMethod (c$, "urlTypeIndex",
+function (name) {
+if (name == null) return -2;
+for (var i = 0; i < javajs.util.OC.urlPrefixes.length; ++i) {
+if (name.startsWith (javajs.util.OC.urlPrefixes[i])) {
+return i;
+}}
+return -1;
+}, "~S");
+Clazz.defineStatics (c$,
+"urlPrefixes", Clazz.newArray (-1, ["http:", "https:", "sftp:", "ftp:", "file:"]),
+"URL_LOCAL", 4);
+});
diff --git a/bin/javajs/util/P3.js b/bin/javajs/util/P3.js
index cc292cd..b44211d 100644
--- a/bin/javajs/util/P3.js
+++ b/bin/javajs/util/P3.js
@@ -1,26 +1,26 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.T3"], "javajs.util.P3", null, function () {
-c$ = Clazz.declareType (javajs.util, "P3", javajs.util.T3);
-c$.newP = Clazz.defineMethod (c$, "newP",
-function (t) {
-var p = new javajs.util.P3 ();
-p.x = t.x;
-p.y = t.y;
-p.z = t.z;
-return p;
-}, "javajs.util.T3");
-c$.getUnlikely = Clazz.defineMethod (c$, "getUnlikely",
-function () {
-return (javajs.util.P3.unlikely == null ? javajs.util.P3.unlikely = javajs.util.P3.new3 (3.141592653589793, 2.718281828459045, (8.539734222673566)) : javajs.util.P3.unlikely);
-});
-c$.new3 = Clazz.defineMethod (c$, "new3",
-function (x, y, z) {
-var p = new javajs.util.P3 ();
-p.x = x;
-p.y = y;
-p.z = z;
-return p;
-}, "~N,~N,~N");
-Clazz.defineStatics (c$,
-"unlikely", null);
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.T3"], "javajs.util.P3", null, function () {
+c$ = Clazz.declareType (javajs.util, "P3", javajs.util.T3);
+c$.newP = Clazz.defineMethod (c$, "newP",
+function (t) {
+var p = new javajs.util.P3 ();
+p.x = t.x;
+p.y = t.y;
+p.z = t.z;
+return p;
+}, "javajs.util.T3");
+c$.getUnlikely = Clazz.defineMethod (c$, "getUnlikely",
+function () {
+return (javajs.util.P3.unlikely == null ? javajs.util.P3.unlikely = javajs.util.P3.new3 (3.141592653589793, 2.718281828459045, (8.539734222673566)) : javajs.util.P3.unlikely);
+});
+c$.new3 = Clazz.defineMethod (c$, "new3",
+function (x, y, z) {
+var p = new javajs.util.P3 ();
+p.x = x;
+p.y = y;
+p.z = z;
+return p;
+}, "~N,~N,~N");
+Clazz.defineStatics (c$,
+"unlikely", null);
+});
diff --git a/bin/javajs/util/P3i.js b/bin/javajs/util/P3i.js
index 4888909..e4e31b5 100644
--- a/bin/javajs/util/P3i.js
+++ b/bin/javajs/util/P3i.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.T3i"], "javajs.util.P3i", null, function () {
-c$ = Clazz.declareType (javajs.util, "P3i", javajs.util.T3i);
-c$.new3 = Clazz.defineMethod (c$, "new3",
-function (x, y, z) {
-var pt = new javajs.util.P3i ();
-pt.x = x;
-pt.y = y;
-pt.z = z;
-return pt;
-}, "~N,~N,~N");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.T3i"], "javajs.util.P3i", null, function () {
+c$ = Clazz.declareType (javajs.util, "P3i", javajs.util.T3i);
+c$.new3 = Clazz.defineMethod (c$, "new3",
+function (x, y, z) {
+var pt = new javajs.util.P3i ();
+pt.x = x;
+pt.y = y;
+pt.z = z;
+return pt;
+}, "~N,~N,~N");
+});
diff --git a/bin/javajs/util/P4.js b/bin/javajs/util/P4.js
index c317cd6..2afde3c 100644
--- a/bin/javajs/util/P4.js
+++ b/bin/javajs/util/P4.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.T4"], "javajs.util.P4", null, function () {
-c$ = Clazz.declareType (javajs.util, "P4", javajs.util.T4);
-c$.new4 = Clazz.defineMethod (c$, "new4",
-function (x, y, z, w) {
-var pt = new javajs.util.P4 ();
-pt.set4 (x, y, z, w);
-return pt;
-}, "~N,~N,~N,~N");
-c$.newPt = Clazz.defineMethod (c$, "newPt",
-function (value) {
-var pt = new javajs.util.P4 ();
-pt.set4 (value.x, value.y, value.z, value.w);
-return pt;
-}, "javajs.util.P4");
-Clazz.defineMethod (c$, "distance4",
-function (p1) {
-var dx = this.x - p1.x;
-var dy = this.y - p1.y;
-var dz = this.z - p1.z;
-var dw = this.w - p1.w;
-return Math.sqrt (dx * dx + dy * dy + dz * dz + dw * dw);
-}, "javajs.util.P4");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.T4"], "javajs.util.P4", null, function () {
+c$ = Clazz.declareType (javajs.util, "P4", javajs.util.T4);
+c$.new4 = Clazz.defineMethod (c$, "new4",
+function (x, y, z, w) {
+var pt = new javajs.util.P4 ();
+pt.set4 (x, y, z, w);
+return pt;
+}, "~N,~N,~N,~N");
+c$.newPt = Clazz.defineMethod (c$, "newPt",
+function (value) {
+var pt = new javajs.util.P4 ();
+pt.set4 (value.x, value.y, value.z, value.w);
+return pt;
+}, "javajs.util.P4");
+Clazz.defineMethod (c$, "distance4",
+function (p1) {
+var dx = this.x - p1.x;
+var dy = this.y - p1.y;
+var dz = this.z - p1.z;
+var dw = this.w - p1.w;
+return Math.sqrt (dx * dx + dy * dy + dz * dz + dw * dw);
+}, "javajs.util.P4");
+});
diff --git a/bin/javajs/util/PT.class b/bin/javajs/util/PT.class
index c3955d6..280974d 100644
Binary files a/bin/javajs/util/PT.class and b/bin/javajs/util/PT.class differ
diff --git a/bin/javajs/util/PT.js b/bin/javajs/util/PT.js
index b20715c..2bfe06d 100644
--- a/bin/javajs/util/PT.js
+++ b/bin/javajs/util/PT.js
@@ -1,945 +1,945 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (null, "javajs.util.PT", ["java.lang.Boolean", "$.Double", "$.Float", "$.Number", "java.util.Map", "javajs.api.JSONEncodable", "javajs.util.AU", "$.DF", "$.Lst", "$.M34", "$.M4", "$.SB"], function () {
-c$ = Clazz.declareType (javajs.util, "PT");
-c$.parseInt = Clazz.defineMethod (c$, "parseInt",
-function (str) {
-return javajs.util.PT.parseIntNext (str, Clazz.newIntArray (-1, [0]));
-}, "~S");
-c$.parseIntNext = Clazz.defineMethod (c$, "parseIntNext",
-function (str, next) {
-var cch = str.length;
-if (next[0] < 0 || next[0] >= cch) return -2147483648;
-return javajs.util.PT.parseIntChecked (str, cch, next);
-}, "~S,~A");
-c$.parseIntChecked = Clazz.defineMethod (c$, "parseIntChecked",
-function (str, ichMax, next) {
-var digitSeen = false;
-var value = 0;
-var ich = next[0];
-if (ich < 0) return -2147483648;
-var ch;
-while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
-
-var negative = false;
-if (ich < ichMax && str.charCodeAt (ich) == 45) {
-negative = true;
-++ich;
-}while (ich < ichMax && (ch = str.charCodeAt (ich)) >= 48 && ch <= 57) {
-value = value * 10 + (ch - 48);
-digitSeen = true;
-++ich;
-}
-if (!digitSeen) value = -2147483648;
- else if (negative) value = -value;
-next[0] = ich;
-return value;
-}, "~S,~N,~A");
-c$.isWhiteSpace = Clazz.defineMethod (c$, "isWhiteSpace",
-function (str, ich) {
-var ch;
-return (ich >= 0 && ((ch = str.charAt (ich)) == ' ' || ch == '\t' || ch == '\n'));
-}, "~S,~N");
-c$.parseFloatChecked = Clazz.defineMethod (c$, "parseFloatChecked",
-function (str, ichMax, next, isStrict) {
-var digitSeen = false;
-var ich = next[0];
-if (isStrict && str.indexOf ('\n') != str.lastIndexOf ('\n')) return NaN;
-while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
-
-var negative = false;
-if (ich < ichMax && str.charAt (ich) == '-') {
-++ich;
-negative = true;
-}var ch = 0;
-var ival = 0;
-var ival2 = 0;
-while (ich < ichMax && (ch = str.charCodeAt (ich)) >= 48 && ch <= 57) {
-ival = (ival * 10) + (ch - 48) * 1;
-++ich;
-digitSeen = true;
-}
-var isDecimal = false;
-var iscale = 0;
-var nzero = (ival == 0 ? -1 : 0);
-if (ch == 46) {
-isDecimal = true;
-while (++ich < ichMax && (ch = str.charCodeAt (ich)) >= 48 && ch <= 57) {
-digitSeen = true;
-if (nzero < 0) {
-if (ch == 48) {
-nzero--;
-continue;
-}nzero = -nzero;
-}if (iscale < javajs.util.PT.decimalScale.length) {
-ival2 = (ival2 * 10) + (ch - 48) * 1;
-iscale++;
-}}
-}var value;
-if (!digitSeen) {
-value = NaN;
-} else if (ival2 > 0) {
-value = ival2 * javajs.util.PT.decimalScale[iscale - 1];
-if (nzero > 1) {
-if (nzero - 2 < javajs.util.PT.decimalScale.length) {
-value *= javajs.util.PT.decimalScale[nzero - 2];
-} else {
-value *= Math.pow (10, 1 - nzero);
-}} else {
-value += ival;
-}} else {
-value = ival;
-}var isExponent = false;
-if (ich < ichMax && (ch == 69 || ch == 101 || ch == 68)) {
-isExponent = true;
-if (++ich >= ichMax) return NaN;
-ch = str.charCodeAt (ich);
-if ((ch == 43) && (++ich >= ichMax)) return NaN;
-next[0] = ich;
-var exponent = javajs.util.PT.parseIntChecked (str, ichMax, next);
-if (exponent == -2147483648) return NaN;
-if (exponent > 0 && exponent <= javajs.util.PT.tensScale.length) value *= javajs.util.PT.tensScale[exponent - 1];
- else if (exponent < 0 && -exponent <= javajs.util.PT.decimalScale.length) value *= javajs.util.PT.decimalScale[-exponent - 1];
- else if (exponent != 0) value *= Math.pow (10, exponent);
-} else {
-next[0] = ich;
-}if (negative) value = -value;
-if (value == Infinity) value = 3.4028235E38;
-return (!isStrict || (!isExponent || isDecimal) && javajs.util.PT.checkTrailingText (str, next[0], ichMax) ? value : NaN);
-}, "~S,~N,~A,~B");
-c$.checkTrailingText = Clazz.defineMethod (c$, "checkTrailingText",
-function (str, ich, ichMax) {
-var ch;
-while (ich < ichMax && (javajs.util.PT.isWhitespace (ch = str.charAt (ich)) || ch == ';')) ++ich;
-
-return (ich == ichMax);
-}, "~S,~N,~N");
-c$.parseFloatArray = Clazz.defineMethod (c$, "parseFloatArray",
-function (str) {
-return javajs.util.PT.parseFloatArrayNext (str, Clazz.newIntArray (1, 0), null, null, null);
-}, "~S");
-c$.parseFloatArrayInfested = Clazz.defineMethod (c$, "parseFloatArrayInfested",
-function (tokens, data) {
-var len = data.length;
-var nTokens = tokens.length;
-var n = 0;
-var max = 0;
-for (var i = 0; i >= 0 && i < len && n < nTokens; i++) {
-var f;
-while (Float.isNaN (f = javajs.util.PT.parseFloat (tokens[n++])) && n < nTokens) {
-}
-if (!Float.isNaN (f)) data[(max = i)] = f;
-if (n == nTokens) break;
-}
-return max + 1;
-}, "~A,~A");
-c$.parseFloatArrayNext = Clazz.defineMethod (c$, "parseFloatArrayNext",
-function (str, next, f, strStart, strEnd) {
-var n = 0;
-var pt = next[0];
-if (pt >= 0) {
-if (strStart != null) {
-var p = str.indexOf (strStart, pt);
-if (p >= 0) next[0] = p + strStart.length;
-}str = str.substring (next[0]);
-pt = (strEnd == null ? -1 : str.indexOf (strEnd));
-if (pt < 0) pt = str.length;
- else str = str.substring (0, pt);
-next[0] += pt + 1;
-var tokens = javajs.util.PT.getTokens (str);
-if (f == null) f = Clazz.newFloatArray (tokens.length, 0);
-n = javajs.util.PT.parseFloatArrayInfested (tokens, f);
-}if (f == null) return Clazz.newFloatArray (0, 0);
-for (var i = n; i < f.length; i++) f[i] = NaN;
-
-return f;
-}, "~S,~A,~A,~S,~S");
-c$.parseFloatRange = Clazz.defineMethod (c$, "parseFloatRange",
-function (str, ichMax, next) {
-var cch = str.length;
-if (ichMax > cch) ichMax = cch;
-if (next[0] < 0 || next[0] >= ichMax) return NaN;
-return javajs.util.PT.parseFloatChecked (str, ichMax, next, false);
-}, "~S,~N,~A");
-c$.parseFloatNext = Clazz.defineMethod (c$, "parseFloatNext",
-function (str, next) {
-var cch = (str == null ? -1 : str.length);
-return (next[0] < 0 || next[0] >= cch ? NaN : javajs.util.PT.parseFloatChecked (str, cch, next, false));
-}, "~S,~A");
-c$.parseFloatStrict = Clazz.defineMethod (c$, "parseFloatStrict",
-function (str) {
-var cch = str.length;
-if (cch == 0) return NaN;
-return javajs.util.PT.parseFloatChecked (str, cch, Clazz.newIntArray (-1, [0]), true);
-}, "~S");
-c$.parseFloat = Clazz.defineMethod (c$, "parseFloat",
-function (str) {
-return javajs.util.PT.parseFloatNext (str, Clazz.newIntArray (-1, [0]));
-}, "~S");
-c$.parseIntRadix = Clazz.defineMethod (c$, "parseIntRadix",
-function (s, i) {
-{
-return Integer.parseIntRadix(s, i);
-}}, "~S,~N");
-c$.getTokens = Clazz.defineMethod (c$, "getTokens",
-function (line) {
-return javajs.util.PT.getTokensAt (line, 0);
-}, "~S");
-c$.parseToken = Clazz.defineMethod (c$, "parseToken",
-function (str) {
-return javajs.util.PT.parseTokenNext (str, Clazz.newIntArray (-1, [0]));
-}, "~S");
-c$.parseTrimmed = Clazz.defineMethod (c$, "parseTrimmed",
-function (str) {
-return javajs.util.PT.parseTrimmedRange (str, 0, str.length);
-}, "~S");
-c$.parseTrimmedAt = Clazz.defineMethod (c$, "parseTrimmedAt",
-function (str, ichStart) {
-return javajs.util.PT.parseTrimmedRange (str, ichStart, str.length);
-}, "~S,~N");
-c$.parseTrimmedRange = Clazz.defineMethod (c$, "parseTrimmedRange",
-function (str, ichStart, ichMax) {
-var cch = str.length;
-if (ichMax < cch) cch = ichMax;
-if (cch < ichStart) return "";
-return javajs.util.PT.parseTrimmedChecked (str, ichStart, cch);
-}, "~S,~N,~N");
-c$.getTokensAt = Clazz.defineMethod (c$, "getTokensAt",
-function (line, ich) {
-if (line == null) return null;
-var cchLine = line.length;
-if (ich < 0 || ich > cchLine) return null;
-var tokenCount = javajs.util.PT.countTokens (line, ich);
-var tokens = new Array (tokenCount);
-var next = Clazz.newIntArray (1, 0);
-next[0] = ich;
-for (var i = 0; i < tokenCount; ++i) tokens[i] = javajs.util.PT.parseTokenChecked (line, cchLine, next);
-
-return tokens;
-}, "~S,~N");
-c$.countChar = Clazz.defineMethod (c$, "countChar",
-function (line, c) {
-var tokenCount = 0;
-var pt = -1;
-while ((pt = line.indexOf (c, pt + 1)) >= 0) tokenCount++;
-
-return tokenCount;
-}, "~S,~S");
-c$.countTokens = Clazz.defineMethod (c$, "countTokens",
-function (line, ich) {
-var tokenCount = 0;
-if (line != null) {
-var ichMax = line.length;
-while (true) {
-while (ich < ichMax && javajs.util.PT.isWhiteSpace (line, ich)) ++ich;
-
-if (ich == ichMax) break;
-++tokenCount;
-do {
-++ich;
-} while (ich < ichMax && !javajs.util.PT.isWhiteSpace (line, ich));
-}
-}return tokenCount;
-}, "~S,~N");
-c$.parseTokenNext = Clazz.defineMethod (c$, "parseTokenNext",
-function (str, next) {
-var cch = str.length;
-return (next[0] < 0 || next[0] >= cch ? null : javajs.util.PT.parseTokenChecked (str, cch, next));
-}, "~S,~A");
-c$.parseTokenRange = Clazz.defineMethod (c$, "parseTokenRange",
-function (str, ichMax, next) {
-var cch = str.length;
-if (ichMax > cch) ichMax = cch;
-return (next[0] < 0 || next[0] >= ichMax ? null : javajs.util.PT.parseTokenChecked (str, ichMax, next));
-}, "~S,~N,~A");
-c$.parseTokenChecked = Clazz.defineMethod (c$, "parseTokenChecked",
-function (str, ichMax, next) {
-var ich = next[0];
-while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
-
-var ichNonWhite = ich;
-while (ich < ichMax && !javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
-
-next[0] = ich;
-return (ichNonWhite == ich ? null : str.substring (ichNonWhite, ich));
-}, "~S,~N,~A");
-c$.parseTrimmedChecked = Clazz.defineMethod (c$, "parseTrimmedChecked",
-function (str, ich, ichMax) {
-while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
-
-var ichLast = ichMax - 1;
-while (ichLast >= ich && javajs.util.PT.isWhiteSpace (str, ichLast)) --ichLast;
-
-return (ichLast < ich ? "" : str.substring (ich, ichLast + 1));
-}, "~S,~N,~N");
-c$.dVal = Clazz.defineMethod (c$, "dVal",
-function (s) {
-{
-if(s==null)
-throw new NumberFormatException("null");
-var d=parseFloat(s);
-if(isNaN(d))
-throw new NumberFormatException("Not a Number : "+s);
-return d
-}}, "~S");
-c$.fVal = Clazz.defineMethod (c$, "fVal",
-function (s) {
-{
-return this.dVal(s);
-}}, "~S");
-c$.parseIntRange = Clazz.defineMethod (c$, "parseIntRange",
-function (str, ichMax, next) {
-var cch = str.length;
-if (ichMax > cch) ichMax = cch;
-return (next[0] < 0 || next[0] >= ichMax ? -2147483648 : javajs.util.PT.parseIntChecked (str, ichMax, next));
-}, "~S,~N,~A");
-c$.parseFloatArrayData = Clazz.defineMethod (c$, "parseFloatArrayData",
-function (tokens, data) {
-javajs.util.PT.parseFloatArrayDataN (tokens, data, data.length);
-}, "~A,~A");
-c$.parseFloatArrayDataN = Clazz.defineMethod (c$, "parseFloatArrayDataN",
-function (tokens, data, nData) {
-for (var i = nData; --i >= 0; ) data[i] = (i >= tokens.length ? NaN : javajs.util.PT.parseFloat (tokens[i]));
-
-}, "~A,~A,~N");
-c$.split = Clazz.defineMethod (c$, "split",
-function (text, run) {
-if (text.length == 0) return new Array (0);
-var n = 1;
-var i = text.indexOf (run);
-var lines;
-var runLen = run.length;
-if (i < 0 || runLen == 0) {
-lines = new Array (1);
-lines[0] = text;
-return lines;
-}var len = text.length - runLen;
-for (; i >= 0 && i < len; n++) i = text.indexOf (run, i + runLen);
-
-lines = new Array (n);
-i = 0;
-var ipt = 0;
-var pt = 0;
-for (; (ipt = text.indexOf (run, i)) >= 0 && pt + 1 < n; ) {
-lines[pt++] = text.substring (i, ipt);
-i = ipt + runLen;
-}
-if (text.indexOf (run, len) != len) len += runLen;
-lines[pt] = text.substring (i, len);
-return lines;
-}, "~S,~S");
-c$.getQuotedStringAt = Clazz.defineMethod (c$, "getQuotedStringAt",
-function (line, ipt0) {
-var next = Clazz.newIntArray (-1, [ipt0]);
-return javajs.util.PT.getQuotedStringNext (line, next);
-}, "~S,~N");
-c$.getQuotedStringNext = Clazz.defineMethod (c$, "getQuotedStringNext",
-function (line, next) {
-var i = next[0];
-if (i < 0 || (i = line.indexOf ("\"", i)) < 0) return "";
-var pt = i + 1;
-var len = line.length;
-while (++i < len && line.charAt (i) != '"') if (line.charAt (i) == '\\') i++;
-
-next[0] = i + 1;
-return line.substring (pt, i);
-}, "~S,~A");
-c$.getCSVString = Clazz.defineMethod (c$, "getCSVString",
-function (line, next) {
-var i = next[1];
-if (i < 0 || (i = line.indexOf ("\"", i)) < 0) return null;
-var pt = next[0] = i;
-var len = line.length;
-var escaped = false;
-var haveEscape = false;
-while (++i < len && (line.charAt (i) != '"' || (escaped = (i + 1 < len && line.charAt (i + 1) == '"')))) if (escaped) {
-escaped = false;
-haveEscape = true;
-i++;
-}
-if (i >= len) {
-next[1] = -1;
-return null;
-}next[1] = i + 1;
-var s = line.substring (pt + 1, i);
-return (haveEscape ? javajs.util.PT.rep (javajs.util.PT.rep (s, "\"\"", "\0"), "\0", "\"") : s);
-}, "~S,~A");
-c$.isOneOf = Clazz.defineMethod (c$, "isOneOf",
-function (key, semiList) {
-if (semiList.length == 0) return false;
-if (semiList.charAt (0) != ';') semiList = ";" + semiList + ";";
-return key.indexOf (";") < 0 && semiList.indexOf (';' + key + ';') >= 0;
-}, "~S,~S");
-c$.getQuotedAttribute = Clazz.defineMethod (c$, "getQuotedAttribute",
-function (info, name) {
-var i = info.indexOf (name + "=");
-return (i < 0 ? null : javajs.util.PT.getQuotedStringAt (info, i));
-}, "~S,~S");
-c$.approx = Clazz.defineMethod (c$, "approx",
-function (f, n) {
-return Math.round (f * n) / n;
-}, "~N,~N");
-c$.rep = Clazz.defineMethod (c$, "rep",
-function (str, strFrom, strTo) {
-if (str == null || strFrom.length == 0 || str.indexOf (strFrom) < 0) return str;
-var isOnce = (strTo.indexOf (strFrom) >= 0);
-do {
-str = str.$replace (strFrom, strTo);
-} while (!isOnce && str.indexOf (strFrom) >= 0);
-return str;
-}, "~S,~S,~S");
-c$.formatF = Clazz.defineMethod (c$, "formatF",
-function (value, width, precision, alignLeft, zeroPad) {
-return javajs.util.PT.formatS (javajs.util.DF.formatDecimal (value, precision), width, 0, alignLeft, zeroPad);
-}, "~N,~N,~N,~B,~B");
-c$.formatD = Clazz.defineMethod (c$, "formatD",
-function (value, width, precision, alignLeft, zeroPad, allowOverflow) {
-return javajs.util.PT.formatS (javajs.util.DF.formatDecimal (value, -1 - precision), width, 0, alignLeft, zeroPad);
-}, "~N,~N,~N,~B,~B,~B");
-c$.formatS = Clazz.defineMethod (c$, "formatS",
-function (value, width, precision, alignLeft, zeroPad) {
-if (value == null) return "";
-var len = value.length;
-if (precision != 2147483647 && precision > 0 && precision < len) value = value.substring (0, precision);
- else if (precision < 0 && len + precision >= 0) value = value.substring (len + precision + 1);
-var padLength = width - value.length;
-if (padLength <= 0) return value;
-var isNeg = (zeroPad && !alignLeft && value.charAt (0) == '-');
-var padChar = (zeroPad ? '0' : ' ');
-var padChar0 = (isNeg ? '-' : padChar);
-var sb = new javajs.util.SB ();
-if (alignLeft) sb.append (value);
-sb.appendC (padChar0);
-for (var i = padLength; --i > 0; ) sb.appendC (padChar);
-
-if (!alignLeft) sb.append (isNeg ? padChar + value.substring (1) : value);
-return sb.toString ();
-}, "~S,~N,~N,~B,~B");
-c$.replaceWithCharacter = Clazz.defineMethod (c$, "replaceWithCharacter",
-function (str, strFrom, chTo) {
-if (str == null) return null;
-for (var i = strFrom.length; --i >= 0; ) str = str.$replace (strFrom.charAt (i), chTo);
-
-return str;
-}, "~S,~S,~S");
-c$.replaceAllCharacters = Clazz.defineMethod (c$, "replaceAllCharacters",
-function (str, strFrom, strTo) {
-for (var i = strFrom.length; --i >= 0; ) {
-var chFrom = strFrom.substring (i, i + 1);
-str = javajs.util.PT.rep (str, chFrom, strTo);
-}
-return str;
-}, "~S,~S,~S");
-c$.trim = Clazz.defineMethod (c$, "trim",
-function (str, chars) {
-if (str == null || str.length == 0) return str;
-if (chars.length == 0) return str.trim ();
-var len = str.length;
-var k = 0;
-while (k < len && chars.indexOf (str.charAt (k)) >= 0) k++;
-
-var m = str.length - 1;
-while (m > k && chars.indexOf (str.charAt (m)) >= 0) m--;
-
-return str.substring (k, m + 1);
-}, "~S,~S");
-c$.trimQuotes = Clazz.defineMethod (c$, "trimQuotes",
-function (value) {
-return (value != null && value.length > 1 && value.startsWith ("\"") && value.endsWith ("\"") ? value.substring (1, value.length - 1) : value);
-}, "~S");
-c$.isNonStringPrimitive = Clazz.defineMethod (c$, "isNonStringPrimitive",
-function (info) {
-return Clazz.instanceOf (info, Number) || Clazz.instanceOf (info, Boolean);
-}, "~O");
-c$.arrayGet = Clazz.defineMethod (c$, "arrayGet",
-($fz = function (info, i) {
-{
-return info[i];
-}}, $fz.isPrivate = true, $fz), "~O,~N");
-c$.toJSON = Clazz.defineMethod (c$, "toJSON",
-function (infoType, info) {
-if (info == null) return javajs.util.PT.packageJSON (infoType, null);
-if (javajs.util.PT.isNonStringPrimitive (info)) return javajs.util.PT.packageJSON (infoType, info.toString ());
-var s = null;
-var sb = null;
-while (true) {
-if (Clazz.instanceOf (info, String)) {
-s = info;
-{
-if (typeof s == "undefined") s = "null"
-}if (s.indexOf ("{\"") != 0) {
-s = javajs.util.PT.rep (s, "\"", "\\\"");
-s = javajs.util.PT.rep (s, "\n", "\\n");
-s = "\"" + s + "\"";
-}break;
-}if (Clazz.instanceOf (info, javajs.api.JSONEncodable)) {
-if ((s = (info).toJSON ()) == null) s = "null";
-break;
-}sb = new javajs.util.SB ();
-if (Clazz.instanceOf (info, java.util.Map)) {
-sb.append ("{ ");
-var sep = "";
-for (var key, $key = (info).keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
-sb.append (sep).append (javajs.util.PT.packageJSON (key, javajs.util.PT.toJSON (null, (info).get (key))));
-sep = ",";
-}
-sb.append (" }");
-break;
-}if (Clazz.instanceOf (info, javajs.util.Lst)) {
-sb.append ("[ ");
-var n = (info).size ();
-for (var i = 0; i < n; i++) {
-if (i > 0) sb.appendC (',');
-sb.append (javajs.util.PT.toJSON (null, (info).get (i)));
-}
-sb.append (" ]");
-break;
-}if (Clazz.instanceOf (info, javajs.util.M34)) {
-var len = (Clazz.instanceOf (info, javajs.util.M4) ? 4 : 3);
-var x = Clazz.newFloatArray (len, 0);
-var m = info;
-sb.appendC ('[');
-for (var i = 0; i < len; i++) {
-if (i > 0) sb.appendC (',');
-m.getRow (i, x);
-sb.append (javajs.util.PT.toJSON (null, x));
-}
-sb.appendC (']');
-break;
-}s = javajs.util.PT.nonArrayString (info);
-if (s == null) {
-sb.append ("[");
-var n = javajs.util.AU.getLength (info);
-for (var i = 0; i < n; i++) {
-if (i > 0) sb.appendC (',');
-sb.append (javajs.util.PT.toJSON (null, javajs.util.PT.arrayGet (info, i)));
-}
-sb.append ("]");
-break;
-}info = info.toString ();
-}
-return javajs.util.PT.packageJSON (infoType, (s == null ? sb.toString () : s));
-}, "~S,~O");
-c$.nonArrayString = Clazz.defineMethod (c$, "nonArrayString",
-function (x) {
-{
-var s = x.toString(); return (s.startsWith("[object") &&
-s.endsWith("Array]") ? null : s);
-}}, "~O");
-c$.byteArrayToJSON = Clazz.defineMethod (c$, "byteArrayToJSON",
-function (data) {
-var sb = new javajs.util.SB ();
-sb.append ("[");
-var n = data.length;
-for (var i = 0; i < n; i++) {
-if (i > 0) sb.appendC (',');
-sb.appendI (data[i] & 0xFF);
-}
-sb.append ("]");
-return sb.toString ();
-}, "~A");
-c$.packageJSON = Clazz.defineMethod (c$, "packageJSON",
-function (infoType, info) {
-return (infoType == null ? info : "\"" + infoType + "\": " + info);
-}, "~S,~S");
-c$.escapeUrl = Clazz.defineMethod (c$, "escapeUrl",
-function (url) {
-url = javajs.util.PT.rep (url, "\n", "");
-url = javajs.util.PT.rep (url, "%", "%25");
-url = javajs.util.PT.rep (url, "#", "%23");
-url = javajs.util.PT.rep (url, "[", "%5B");
-url = javajs.util.PT.rep (url, "]", "%5D");
-url = javajs.util.PT.rep (url, " ", "%20");
-return url;
-}, "~S");
-c$.esc = Clazz.defineMethod (c$, "esc",
-function (str) {
-if (str == null || str.length == 0) return "\"\"";
-var haveEscape = false;
-var i = 0;
-for (; i < "\\\\\tt\rr\nn\"\"".length; i += 2) if (str.indexOf ("\\\\\tt\rr\nn\"\"".charAt (i)) >= 0) {
-haveEscape = true;
-break;
-}
-if (haveEscape) while (i < "\\\\\tt\rr\nn\"\"".length) {
-var pt = -1;
-var ch = "\\\\\tt\rr\nn\"\"".charAt (i++);
-var ch2 = "\\\\\tt\rr\nn\"\"".charAt (i++);
-var sb = new javajs.util.SB ();
-var pt0 = 0;
-while ((pt = str.indexOf (ch, pt + 1)) >= 0) {
-sb.append (str.substring (pt0, pt)).appendC ('\\').appendC (ch2);
-pt0 = pt + 1;
-}
-sb.append (str.substring (pt0, str.length));
-str = sb.toString ();
-}
-return "\"" + javajs.util.PT.escUnicode (str) + "\"";
-}, "~S");
-c$.escUnicode = Clazz.defineMethod (c$, "escUnicode",
-function (str) {
-for (var i = str.length; --i >= 0; ) if (str.charCodeAt (i) > 0x7F) {
-var s = "0000" + Integer.toHexString (str.charCodeAt (i));
-str = str.substring (0, i) + "\\u" + s.substring (s.length - 4) + str.substring (i + 1);
-}
-return str;
-}, "~S");
-c$.escF = Clazz.defineMethod (c$, "escF",
-function (f) {
-var sf = "" + f;
-{
-if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
-sf += ".0";
-}return sf;
-}, "~N");
-c$.join = Clazz.defineMethod (c$, "join",
-function (s, c, i0) {
-if (s.length < i0) return null;
-var sb = new javajs.util.SB ();
-sb.append (s[i0++]);
-for (var i = i0; i < s.length; i++) sb.appendC (c).append (s[i]);
-
-return sb.toString ();
-}, "~A,~S,~N");
-c$.isLike = Clazz.defineMethod (c$, "isLike",
-function (a, b) {
-var areEqual = a.equals (b);
-if (areEqual) return true;
-var isStart = b.startsWith ("*");
-var isEnd = b.endsWith ("*");
-return (!isStart && !isEnd) ? areEqual : isStart && isEnd ? b.length == 1 || a.contains (b.substring (1, b.length - 1)) : isStart ? a.endsWith (b.substring (1)) : a.startsWith (b.substring (0, b.length - 1));
-}, "~S,~S");
-c$.getMapValueNoCase = Clazz.defineMethod (c$, "getMapValueNoCase",
-function (h, key) {
-if ("this".equals (key)) return h;
-var val = h.get (key);
-if (val == null) for (var e, $e = h.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) if (e.getKey ().equalsIgnoreCase (key)) return e.getValue ();
-
-return val;
-}, "java.util.Map,~S");
-c$.clean = Clazz.defineMethod (c$, "clean",
-function (s) {
-return javajs.util.PT.rep (javajs.util.PT.replaceAllCharacters (s, " \t\n\r", " "), " ", " ").trim ();
-}, "~S");
-c$.fdup = Clazz.defineMethod (c$, "fdup",
-function (f, pt, n) {
-var ch;
-var count = 0;
-for (var i = pt; --i >= 1; ) {
-if (javajs.util.PT.isDigit (ch = f.charAt (i))) continue;
-switch (ch) {
-case '.':
-if (count++ != 0) return f;
-continue;
-case '-':
-if (i != 1 && f.charAt (i - 1) != '.') return f;
-continue;
-default:
-return f;
-}
-}
-var s = f.substring (0, pt + 1);
-var sb = new javajs.util.SB ();
-for (var i = 0; i < n; i++) sb.append (s);
-
-sb.append (f.substring (pt + 1));
-return sb.toString ();
-}, "~S,~N,~N");
-c$.formatString = Clazz.defineMethod (c$, "formatString",
-function (strFormat, key, strT, floatT, doubleT, doOne) {
-if (strFormat == null) return null;
-if ("".equals (strFormat)) return "";
-var len = key.length;
-if (strFormat.indexOf ("%") < 0 || len == 0 || strFormat.indexOf (key) < 0) return strFormat;
-var strLabel = "";
-var ich;
-var ichPercent;
-var ichKey;
-for (ich = 0; (ichPercent = strFormat.indexOf ('%', ich)) >= 0 && (ichKey = strFormat.indexOf (key, ichPercent + 1)) >= 0; ) {
-if (ich != ichPercent) strLabel += strFormat.substring (ich, ichPercent);
-ich = ichPercent + 1;
-if (ichKey > ichPercent + 6) {
-strLabel += '%';
-continue;
-}try {
-var alignLeft = false;
-if (strFormat.charAt (ich) == '-') {
-alignLeft = true;
-++ich;
-}var zeroPad = false;
-if (strFormat.charAt (ich) == '0') {
-zeroPad = true;
-++ich;
-}var ch;
-var width = 0;
-while ((ch = strFormat.charAt (ich)) >= '0' && (ch <= '9')) {
-width = (10 * width) + (ch.charCodeAt (0) - 48);
-++ich;
-}
-var precision = 2147483647;
-var isExponential = false;
-if (strFormat.charAt (ich) == '.') {
-++ich;
-if ((ch = strFormat.charAt (ich)) == '-') {
-isExponential = true;
-++ich;
-}if ((ch = strFormat.charAt (ich)) >= '0' && ch <= '9') {
-precision = ch.charCodeAt (0) - 48;
-++ich;
-}if (isExponential) precision = -precision - (strT == null ? 1 : 0);
-}var st = strFormat.substring (ich, ich + len);
-if (!st.equals (key)) {
-ich = ichPercent + 1;
-strLabel += '%';
-continue;
-}ich += len;
-if (!Float.isNaN (floatT)) strLabel += javajs.util.PT.formatF (floatT, width, precision, alignLeft, zeroPad);
- else if (strT != null) strLabel += javajs.util.PT.formatS (strT, width, precision, alignLeft, zeroPad);
- else if (!Double.isNaN (doubleT)) strLabel += javajs.util.PT.formatD (doubleT, width, precision, alignLeft, zeroPad, true);
-if (doOne) break;
-} catch (ioobe) {
-if (Clazz.exceptionOf (ioobe, IndexOutOfBoundsException)) {
-ich = ichPercent;
-break;
-} else {
-throw ioobe;
-}
-}
-}
-strLabel += strFormat.substring (ich);
-return strLabel;
-}, "~S,~S,~S,~N,~N,~B");
-c$.formatStringS = Clazz.defineMethod (c$, "formatStringS",
-function (strFormat, key, strT) {
-return javajs.util.PT.formatString (strFormat, key, strT, NaN, NaN, false);
-}, "~S,~S,~S");
-c$.formatStringF = Clazz.defineMethod (c$, "formatStringF",
-function (strFormat, key, floatT) {
-return javajs.util.PT.formatString (strFormat, key, null, floatT, NaN, false);
-}, "~S,~S,~N");
-c$.formatStringI = Clazz.defineMethod (c$, "formatStringI",
-function (strFormat, key, intT) {
-return javajs.util.PT.formatString (strFormat, key, "" + intT, NaN, NaN, false);
-}, "~S,~S,~N");
-c$.sprintf = Clazz.defineMethod (c$, "sprintf",
-function (strFormat, list, values) {
-if (values == null) return strFormat;
-var n = list.length;
-if (n == values.length) try {
-for (var o = 0; o < n; o++) {
-if (values[o] == null) continue;
-switch (list.charAt (o)) {
-case 's':
-strFormat = javajs.util.PT.formatString (strFormat, "s", values[o], NaN, NaN, true);
-break;
-case 'f':
-strFormat = javajs.util.PT.formatString (strFormat, "f", null, (values[o]).floatValue (), NaN, true);
-break;
-case 'i':
-strFormat = javajs.util.PT.formatString (strFormat, "d", "" + values[o], NaN, NaN, true);
-strFormat = javajs.util.PT.formatString (strFormat, "i", "" + values[o], NaN, NaN, true);
-break;
-case 'd':
-strFormat = javajs.util.PT.formatString (strFormat, "e", null, NaN, (values[o]).doubleValue (), true);
-break;
-case 'p':
-var pVal = values[o];
-strFormat = javajs.util.PT.formatString (strFormat, "p", null, pVal.x, NaN, true);
-strFormat = javajs.util.PT.formatString (strFormat, "p", null, pVal.y, NaN, true);
-strFormat = javajs.util.PT.formatString (strFormat, "p", null, pVal.z, NaN, true);
-break;
-case 'q':
-var qVal = values[o];
-strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.x, NaN, true);
-strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.y, NaN, true);
-strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.z, NaN, true);
-strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.w, NaN, true);
-break;
-case 'S':
-var sVal = values[o];
-for (var i = 0; i < sVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "s", sVal[i], NaN, NaN, true);
-
-break;
-case 'F':
-var fVal = values[o];
-for (var i = 0; i < fVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "f", null, fVal[i], NaN, true);
-
-break;
-case 'I':
-var iVal = values[o];
-for (var i = 0; i < iVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "d", "" + iVal[i], NaN, NaN, true);
-
-for (var i = 0; i < iVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "i", "" + iVal[i], NaN, NaN, true);
-
-break;
-case 'D':
-var dVal = values[o];
-for (var i = 0; i < dVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "e", null, NaN, dVal[i], true);
-
-}
-}
-return javajs.util.PT.rep (strFormat, "%%", "%");
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-System.out.println ("TextFormat.sprintf error " + list + " " + strFormat);
-return javajs.util.PT.rep (strFormat, "%", "?");
-}, "~S,~S,~A");
-c$.formatCheck = Clazz.defineMethod (c$, "formatCheck",
-function (strFormat) {
-if (strFormat == null || strFormat.indexOf ('p') < 0 && strFormat.indexOf ('q') < 0) return strFormat;
-strFormat = javajs.util.PT.rep (strFormat, "%%", "\1");
-strFormat = javajs.util.PT.rep (strFormat, "%p", "%6.2p");
-strFormat = javajs.util.PT.rep (strFormat, "%q", "%6.2q");
-var format = javajs.util.PT.split (strFormat, "%");
-var sb = new javajs.util.SB ();
-sb.append (format[0]);
-for (var i = 1; i < format.length; i++) {
-var f = "%" + format[i];
-var pt;
-if (f.length >= 3) {
-if ((pt = f.indexOf ('p')) >= 0) f = javajs.util.PT.fdup (f, pt, 3);
-if ((pt = f.indexOf ('q')) >= 0) f = javajs.util.PT.fdup (f, pt, 4);
-}sb.append (f);
-}
-return sb.toString ().$replace ('\1', '%');
-}, "~S");
-c$.leftJustify = Clazz.defineMethod (c$, "leftJustify",
-function (s, s1, s2) {
-s.append (s2);
-var n = s1.length - s2.length;
-if (n > 0) s.append (s1.substring (0, n));
-}, "javajs.util.SB,~S,~S");
-c$.rightJustify = Clazz.defineMethod (c$, "rightJustify",
-function (s, s1, s2) {
-var n = s1.length - s2.length;
-if (n > 0) s.append (s1.substring (0, n));
-s.append (s2);
-}, "javajs.util.SB,~S,~S");
-c$.safeTruncate = Clazz.defineMethod (c$, "safeTruncate",
-function (f, n) {
-if (f > -0.001 && f < 0.001) f = 0;
-return (f + " ").substring (0, n);
-}, "~N,~N");
-c$.isWild = Clazz.defineMethod (c$, "isWild",
-function (s) {
-return s != null && (s.indexOf ("*") >= 0 || s.indexOf ("?") >= 0);
-}, "~S");
-c$.isMatch = Clazz.defineMethod (c$, "isMatch",
-function (search, match, checkStar, allowInitialStar) {
-if (search.equals (match)) return true;
-var mLen = match.length;
-if (mLen == 0) return false;
-var isStar0 = (checkStar && allowInitialStar ? match.charAt (0) == '*' : false);
-if (mLen == 1 && isStar0) return true;
-var isStar1 = (checkStar && match.endsWith ("*"));
-var haveQ = (match.indexOf ('?') >= 0);
-if (!haveQ) {
-if (isStar0) return (isStar1 ? (mLen < 3 || search.indexOf (match.substring (1, mLen - 1)) >= 0) : search.endsWith (match.substring (1)));
- else if (isStar1) return search.startsWith (match.substring (0, mLen - 1));
-}var sLen = search.length;
-var qqqq = "????";
-var nq = 4;
-while (nq < sLen) {
-qqqq += qqqq;
-nq += 4;
-}
-if (checkStar) {
-if (isStar0) {
-match = qqqq + match.substring (1);
-mLen += nq - 1;
-}if (isStar1) {
-match = match.substring (0, mLen - 1) + qqqq;
-mLen += nq - 1;
-}}if (mLen < sLen) return false;
-var ich = 0;
-while (mLen > sLen) {
-if (allowInitialStar && match.charAt (ich) == '?') {
-++ich;
-} else if (match.charAt (ich + mLen - 1) != '?') {
-return false;
-}--mLen;
-}
-for (var i = sLen; --i >= 0; ) {
-var chm = match.charAt (ich + i);
-if (chm == '?') continue;
-var chs = search.charAt (i);
-if (chm != chs && (chm != '\1' || chs != '?')) return false;
-}
-return true;
-}, "~S,~S,~B,~B");
-c$.replaceQuotedStrings = Clazz.defineMethod (c$, "replaceQuotedStrings",
-function (s, list, newList) {
-var n = list.size ();
-for (var i = 0; i < n; i++) {
-var name = list.get (i);
-var newName = newList.get (i);
-if (!newName.equals (name)) s = javajs.util.PT.rep (s, "\"" + name + "\"", "\"" + newName + "\"");
-}
-return s;
-}, "~S,javajs.util.Lst,javajs.util.Lst");
-c$.replaceStrings = Clazz.defineMethod (c$, "replaceStrings",
-function (s, list, newList) {
-var n = list.size ();
-for (var i = 0; i < n; i++) {
-var name = list.get (i);
-var newName = newList.get (i);
-if (!newName.equals (name)) s = javajs.util.PT.rep (s, name, newName);
-}
-return s;
-}, "~S,javajs.util.Lst,javajs.util.Lst");
-c$.isDigit = Clazz.defineMethod (c$, "isDigit",
-function (ch) {
-var c = (ch).charCodeAt (0);
-return (48 <= c && c <= 57);
-}, "~S");
-c$.isUpperCase = Clazz.defineMethod (c$, "isUpperCase",
-function (ch) {
-var c = (ch).charCodeAt (0);
-return (65 <= c && c <= 90);
-}, "~S");
-c$.isLowerCase = Clazz.defineMethod (c$, "isLowerCase",
-function (ch) {
-var c = (ch).charCodeAt (0);
-return (97 <= c && c <= 122);
-}, "~S");
-c$.isLetter = Clazz.defineMethod (c$, "isLetter",
-function (ch) {
-var c = (ch).charCodeAt (0);
-return (65 <= c && c <= 90 || 97 <= c && c <= 122);
-}, "~S");
-c$.isLetterOrDigit = Clazz.defineMethod (c$, "isLetterOrDigit",
-function (ch) {
-var c = (ch).charCodeAt (0);
-return (65 <= c && c <= 90 || 97 <= c && c <= 122 || 48 <= c && c <= 57);
-}, "~S");
-c$.isWhitespace = Clazz.defineMethod (c$, "isWhitespace",
-function (ch) {
-var c = (ch).charCodeAt (0);
-return (c >= 0x1c && c <= 0x20 || c >= 0x9 && c <= 0xd);
-}, "~S");
-c$.fixPtFloats = Clazz.defineMethod (c$, "fixPtFloats",
-function (pt, f) {
-pt.x = Math.round (pt.x * f) / f;
-pt.y = Math.round (pt.y * f) / f;
-pt.z = Math.round (pt.z * f) / f;
-}, "javajs.util.T3,~N");
-c$.fixDouble = Clazz.defineMethod (c$, "fixDouble",
-function (d, f) {
-return Math.round (d * f) / f;
-}, "~N,~N");
-c$.parseFloatFraction = Clazz.defineMethod (c$, "parseFloatFraction",
-function (s) {
-var pt = s.indexOf ("/");
-return (pt < 0 ? javajs.util.PT.parseFloat (s) : javajs.util.PT.parseFloat (s.substring (0, pt)) / javajs.util.PT.parseFloat (s.substring (pt + 1)));
-}, "~S");
-Clazz.defineStatics (c$,
-"tensScale", Clazz.newFloatArray (-1, [10, 100, 1000, 10000, 100000, 1000000]),
-"decimalScale", Clazz.newFloatArray (-1, [0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001, 0.00000001, 0.000000001]),
-"FLOAT_MIN_SAFE", 2E-45,
-"escapable", "\\\\\tt\rr\nn\"\"",
-"FRACTIONAL_PRECISION", 100000,
-"CARTESIAN_PRECISION", 10000);
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (null, "javajs.util.PT", ["java.lang.Boolean", "$.Double", "$.Float", "$.Number", "java.util.Map", "javajs.api.JSONEncodable", "javajs.util.AU", "$.DF", "$.Lst", "$.M34", "$.M4", "$.SB"], function () {
+c$ = Clazz.declareType (javajs.util, "PT");
+c$.parseInt = Clazz.defineMethod (c$, "parseInt",
+function (str) {
+return javajs.util.PT.parseIntNext (str, Clazz.newIntArray (-1, [0]));
+}, "~S");
+c$.parseIntNext = Clazz.defineMethod (c$, "parseIntNext",
+function (str, next) {
+var cch = str.length;
+if (next[0] < 0 || next[0] >= cch) return -2147483648;
+return javajs.util.PT.parseIntChecked (str, cch, next);
+}, "~S,~A");
+c$.parseIntChecked = Clazz.defineMethod (c$, "parseIntChecked",
+function (str, ichMax, next) {
+var digitSeen = false;
+var value = 0;
+var ich = next[0];
+if (ich < 0) return -2147483648;
+var ch;
+while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
+
+var negative = false;
+if (ich < ichMax && str.charCodeAt (ich) == 45) {
+negative = true;
+++ich;
+}while (ich < ichMax && (ch = str.charCodeAt (ich)) >= 48 && ch <= 57) {
+value = value * 10 + (ch - 48);
+digitSeen = true;
+++ich;
+}
+if (!digitSeen) value = -2147483648;
+ else if (negative) value = -value;
+next[0] = ich;
+return value;
+}, "~S,~N,~A");
+c$.isWhiteSpace = Clazz.defineMethod (c$, "isWhiteSpace",
+function (str, ich) {
+var ch;
+return (ich >= 0 && ((ch = str.charAt (ich)) == ' ' || ch == '\t' || ch == '\n'));
+}, "~S,~N");
+c$.parseFloatChecked = Clazz.defineMethod (c$, "parseFloatChecked",
+function (str, ichMax, next, isStrict) {
+var digitSeen = false;
+var ich = next[0];
+if (isStrict && str.indexOf ('\n') != str.lastIndexOf ('\n')) return NaN;
+while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
+
+var negative = false;
+if (ich < ichMax && str.charAt (ich) == '-') {
+++ich;
+negative = true;
+}var ch = 0;
+var ival = 0;
+var ival2 = 0;
+while (ich < ichMax && (ch = str.charCodeAt (ich)) >= 48 && ch <= 57) {
+ival = (ival * 10) + (ch - 48) * 1;
+++ich;
+digitSeen = true;
+}
+var isDecimal = false;
+var iscale = 0;
+var nzero = (ival == 0 ? -1 : 0);
+if (ch == 46) {
+isDecimal = true;
+while (++ich < ichMax && (ch = str.charCodeAt (ich)) >= 48 && ch <= 57) {
+digitSeen = true;
+if (nzero < 0) {
+if (ch == 48) {
+nzero--;
+continue;
+}nzero = -nzero;
+}if (iscale < javajs.util.PT.decimalScale.length) {
+ival2 = (ival2 * 10) + (ch - 48) * 1;
+iscale++;
+}}
+}var value;
+if (!digitSeen) {
+value = NaN;
+} else if (ival2 > 0) {
+value = ival2 * javajs.util.PT.decimalScale[iscale - 1];
+if (nzero > 1) {
+if (nzero - 2 < javajs.util.PT.decimalScale.length) {
+value *= javajs.util.PT.decimalScale[nzero - 2];
+} else {
+value *= Math.pow (10, 1 - nzero);
+}} else {
+value += ival;
+}} else {
+value = ival;
+}var isExponent = false;
+if (ich < ichMax && (ch == 69 || ch == 101 || ch == 68)) {
+isExponent = true;
+if (++ich >= ichMax) return NaN;
+ch = str.charCodeAt (ich);
+if ((ch == 43) && (++ich >= ichMax)) return NaN;
+next[0] = ich;
+var exponent = javajs.util.PT.parseIntChecked (str, ichMax, next);
+if (exponent == -2147483648) return NaN;
+if (exponent > 0 && exponent <= javajs.util.PT.tensScale.length) value *= javajs.util.PT.tensScale[exponent - 1];
+ else if (exponent < 0 && -exponent <= javajs.util.PT.decimalScale.length) value *= javajs.util.PT.decimalScale[-exponent - 1];
+ else if (exponent != 0) value *= Math.pow (10, exponent);
+} else {
+next[0] = ich;
+}if (negative) value = -value;
+if (value == Infinity) value = 3.4028235E38;
+return (!isStrict || (!isExponent || isDecimal) && javajs.util.PT.checkTrailingText (str, next[0], ichMax) ? value : NaN);
+}, "~S,~N,~A,~B");
+c$.checkTrailingText = Clazz.defineMethod (c$, "checkTrailingText",
+function (str, ich, ichMax) {
+var ch;
+while (ich < ichMax && (javajs.util.PT.isWhitespace (ch = str.charAt (ich)) || ch == ';')) ++ich;
+
+return (ich == ichMax);
+}, "~S,~N,~N");
+c$.parseFloatArray = Clazz.defineMethod (c$, "parseFloatArray",
+function (str) {
+return javajs.util.PT.parseFloatArrayNext (str, Clazz.newIntArray (1, 0), null, null, null);
+}, "~S");
+c$.parseFloatArrayInfested = Clazz.defineMethod (c$, "parseFloatArrayInfested",
+function (tokens, data) {
+var len = data.length;
+var nTokens = tokens.length;
+var n = 0;
+var max = 0;
+for (var i = 0; i >= 0 && i < len && n < nTokens; i++) {
+var f;
+while (Float.isNaN (f = javajs.util.PT.parseFloat (tokens[n++])) && n < nTokens) {
+}
+if (!Float.isNaN (f)) data[(max = i)] = f;
+if (n == nTokens) break;
+}
+return max + 1;
+}, "~A,~A");
+c$.parseFloatArrayNext = Clazz.defineMethod (c$, "parseFloatArrayNext",
+function (str, next, f, strStart, strEnd) {
+var n = 0;
+var pt = next[0];
+if (pt >= 0) {
+if (strStart != null) {
+var p = str.indexOf (strStart, pt);
+if (p >= 0) next[0] = p + strStart.length;
+}str = str.substring (next[0]);
+pt = (strEnd == null ? -1 : str.indexOf (strEnd));
+if (pt < 0) pt = str.length;
+ else str = str.substring (0, pt);
+next[0] += pt + 1;
+var tokens = javajs.util.PT.getTokens (str);
+if (f == null) f = Clazz.newFloatArray (tokens.length, 0);
+n = javajs.util.PT.parseFloatArrayInfested (tokens, f);
+}if (f == null) return Clazz.newFloatArray (0, 0);
+for (var i = n; i < f.length; i++) f[i] = NaN;
+
+return f;
+}, "~S,~A,~A,~S,~S");
+c$.parseFloatRange = Clazz.defineMethod (c$, "parseFloatRange",
+function (str, ichMax, next) {
+var cch = str.length;
+if (ichMax > cch) ichMax = cch;
+if (next[0] < 0 || next[0] >= ichMax) return NaN;
+return javajs.util.PT.parseFloatChecked (str, ichMax, next, false);
+}, "~S,~N,~A");
+c$.parseFloatNext = Clazz.defineMethod (c$, "parseFloatNext",
+function (str, next) {
+var cch = (str == null ? -1 : str.length);
+return (next[0] < 0 || next[0] >= cch ? NaN : javajs.util.PT.parseFloatChecked (str, cch, next, false));
+}, "~S,~A");
+c$.parseFloatStrict = Clazz.defineMethod (c$, "parseFloatStrict",
+function (str) {
+var cch = str.length;
+if (cch == 0) return NaN;
+return javajs.util.PT.parseFloatChecked (str, cch, Clazz.newIntArray (-1, [0]), true);
+}, "~S");
+c$.parseFloat = Clazz.defineMethod (c$, "parseFloat",
+function (str) {
+return javajs.util.PT.parseFloatNext (str, Clazz.newIntArray (-1, [0]));
+}, "~S");
+c$.parseIntRadix = Clazz.defineMethod (c$, "parseIntRadix",
+function (s, i) {
+{
+return Integer.parseIntRadix(s, i);
+}}, "~S,~N");
+c$.getTokens = Clazz.defineMethod (c$, "getTokens",
+function (line) {
+return javajs.util.PT.getTokensAt (line, 0);
+}, "~S");
+c$.parseToken = Clazz.defineMethod (c$, "parseToken",
+function (str) {
+return javajs.util.PT.parseTokenNext (str, Clazz.newIntArray (-1, [0]));
+}, "~S");
+c$.parseTrimmed = Clazz.defineMethod (c$, "parseTrimmed",
+function (str) {
+return javajs.util.PT.parseTrimmedRange (str, 0, str.length);
+}, "~S");
+c$.parseTrimmedAt = Clazz.defineMethod (c$, "parseTrimmedAt",
+function (str, ichStart) {
+return javajs.util.PT.parseTrimmedRange (str, ichStart, str.length);
+}, "~S,~N");
+c$.parseTrimmedRange = Clazz.defineMethod (c$, "parseTrimmedRange",
+function (str, ichStart, ichMax) {
+var cch = str.length;
+if (ichMax < cch) cch = ichMax;
+if (cch < ichStart) return "";
+return javajs.util.PT.parseTrimmedChecked (str, ichStart, cch);
+}, "~S,~N,~N");
+c$.getTokensAt = Clazz.defineMethod (c$, "getTokensAt",
+function (line, ich) {
+if (line == null) return null;
+var cchLine = line.length;
+if (ich < 0 || ich > cchLine) return null;
+var tokenCount = javajs.util.PT.countTokens (line, ich);
+var tokens = new Array (tokenCount);
+var next = Clazz.newIntArray (1, 0);
+next[0] = ich;
+for (var i = 0; i < tokenCount; ++i) tokens[i] = javajs.util.PT.parseTokenChecked (line, cchLine, next);
+
+return tokens;
+}, "~S,~N");
+c$.countChar = Clazz.defineMethod (c$, "countChar",
+function (line, c) {
+var tokenCount = 0;
+var pt = -1;
+while ((pt = line.indexOf (c, pt + 1)) >= 0) tokenCount++;
+
+return tokenCount;
+}, "~S,~S");
+c$.countTokens = Clazz.defineMethod (c$, "countTokens",
+function (line, ich) {
+var tokenCount = 0;
+if (line != null) {
+var ichMax = line.length;
+while (true) {
+while (ich < ichMax && javajs.util.PT.isWhiteSpace (line, ich)) ++ich;
+
+if (ich == ichMax) break;
+++tokenCount;
+do {
+++ich;
+} while (ich < ichMax && !javajs.util.PT.isWhiteSpace (line, ich));
+}
+}return tokenCount;
+}, "~S,~N");
+c$.parseTokenNext = Clazz.defineMethod (c$, "parseTokenNext",
+function (str, next) {
+var cch = str.length;
+return (next[0] < 0 || next[0] >= cch ? null : javajs.util.PT.parseTokenChecked (str, cch, next));
+}, "~S,~A");
+c$.parseTokenRange = Clazz.defineMethod (c$, "parseTokenRange",
+function (str, ichMax, next) {
+var cch = str.length;
+if (ichMax > cch) ichMax = cch;
+return (next[0] < 0 || next[0] >= ichMax ? null : javajs.util.PT.parseTokenChecked (str, ichMax, next));
+}, "~S,~N,~A");
+c$.parseTokenChecked = Clazz.defineMethod (c$, "parseTokenChecked",
+function (str, ichMax, next) {
+var ich = next[0];
+while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
+
+var ichNonWhite = ich;
+while (ich < ichMax && !javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
+
+next[0] = ich;
+return (ichNonWhite == ich ? null : str.substring (ichNonWhite, ich));
+}, "~S,~N,~A");
+c$.parseTrimmedChecked = Clazz.defineMethod (c$, "parseTrimmedChecked",
+function (str, ich, ichMax) {
+while (ich < ichMax && javajs.util.PT.isWhiteSpace (str, ich)) ++ich;
+
+var ichLast = ichMax - 1;
+while (ichLast >= ich && javajs.util.PT.isWhiteSpace (str, ichLast)) --ichLast;
+
+return (ichLast < ich ? "" : str.substring (ich, ichLast + 1));
+}, "~S,~N,~N");
+c$.dVal = Clazz.defineMethod (c$, "dVal",
+function (s) {
+{
+if(s==null)
+throw new NumberFormatException("null");
+var d=parseFloat(s);
+if(isNaN(d))
+throw new NumberFormatException("Not a Number : "+s);
+return d
+}}, "~S");
+c$.fVal = Clazz.defineMethod (c$, "fVal",
+function (s) {
+{
+return this.dVal(s);
+}}, "~S");
+c$.parseIntRange = Clazz.defineMethod (c$, "parseIntRange",
+function (str, ichMax, next) {
+var cch = str.length;
+if (ichMax > cch) ichMax = cch;
+return (next[0] < 0 || next[0] >= ichMax ? -2147483648 : javajs.util.PT.parseIntChecked (str, ichMax, next));
+}, "~S,~N,~A");
+c$.parseFloatArrayData = Clazz.defineMethod (c$, "parseFloatArrayData",
+function (tokens, data) {
+javajs.util.PT.parseFloatArrayDataN (tokens, data, data.length);
+}, "~A,~A");
+c$.parseFloatArrayDataN = Clazz.defineMethod (c$, "parseFloatArrayDataN",
+function (tokens, data, nData) {
+for (var i = nData; --i >= 0; ) data[i] = (i >= tokens.length ? NaN : javajs.util.PT.parseFloat (tokens[i]));
+
+}, "~A,~A,~N");
+c$.split = Clazz.defineMethod (c$, "split",
+function (text, run) {
+if (text.length == 0) return new Array (0);
+var n = 1;
+var i = text.indexOf (run);
+var lines;
+var runLen = run.length;
+if (i < 0 || runLen == 0) {
+lines = new Array (1);
+lines[0] = text;
+return lines;
+}var len = text.length - runLen;
+for (; i >= 0 && i < len; n++) i = text.indexOf (run, i + runLen);
+
+lines = new Array (n);
+i = 0;
+var ipt = 0;
+var pt = 0;
+for (; (ipt = text.indexOf (run, i)) >= 0 && pt + 1 < n; ) {
+lines[pt++] = text.substring (i, ipt);
+i = ipt + runLen;
+}
+if (text.indexOf (run, len) != len) len += runLen;
+lines[pt] = text.substring (i, len);
+return lines;
+}, "~S,~S");
+c$.getQuotedStringAt = Clazz.defineMethod (c$, "getQuotedStringAt",
+function (line, ipt0) {
+var next = Clazz.newIntArray (-1, [ipt0]);
+return javajs.util.PT.getQuotedStringNext (line, next);
+}, "~S,~N");
+c$.getQuotedStringNext = Clazz.defineMethod (c$, "getQuotedStringNext",
+function (line, next) {
+var i = next[0];
+if (i < 0 || (i = line.indexOf ("\"", i)) < 0) return "";
+var pt = i + 1;
+var len = line.length;
+while (++i < len && line.charAt (i) != '"') if (line.charAt (i) == '\\') i++;
+
+next[0] = i + 1;
+return line.substring (pt, i);
+}, "~S,~A");
+c$.getCSVString = Clazz.defineMethod (c$, "getCSVString",
+function (line, next) {
+var i = next[1];
+if (i < 0 || (i = line.indexOf ("\"", i)) < 0) return null;
+var pt = next[0] = i;
+var len = line.length;
+var escaped = false;
+var haveEscape = false;
+while (++i < len && (line.charAt (i) != '"' || (escaped = (i + 1 < len && line.charAt (i + 1) == '"')))) if (escaped) {
+escaped = false;
+haveEscape = true;
+i++;
+}
+if (i >= len) {
+next[1] = -1;
+return null;
+}next[1] = i + 1;
+var s = line.substring (pt + 1, i);
+return (haveEscape ? javajs.util.PT.rep (javajs.util.PT.rep (s, "\"\"", "\0"), "\0", "\"") : s);
+}, "~S,~A");
+c$.isOneOf = Clazz.defineMethod (c$, "isOneOf",
+function (key, semiList) {
+if (semiList.length == 0) return false;
+if (semiList.charAt (0) != ';') semiList = ";" + semiList + ";";
+return key.indexOf (";") < 0 && semiList.indexOf (';' + key + ';') >= 0;
+}, "~S,~S");
+c$.getQuotedAttribute = Clazz.defineMethod (c$, "getQuotedAttribute",
+function (info, name) {
+var i = info.indexOf (name + "=");
+return (i < 0 ? null : javajs.util.PT.getQuotedStringAt (info, i));
+}, "~S,~S");
+c$.approx = Clazz.defineMethod (c$, "approx",
+function (f, n) {
+return Math.round (f * n) / n;
+}, "~N,~N");
+c$.rep = Clazz.defineMethod (c$, "rep",
+function (str, strFrom, strTo) {
+if (str == null || strFrom.length == 0 || str.indexOf (strFrom) < 0) return str;
+var isOnce = (strTo.indexOf (strFrom) >= 0);
+do {
+str = str.$replace (strFrom, strTo);
+} while (!isOnce && str.indexOf (strFrom) >= 0);
+return str;
+}, "~S,~S,~S");
+c$.formatF = Clazz.defineMethod (c$, "formatF",
+function (value, width, precision, alignLeft, zeroPad) {
+return javajs.util.PT.formatS (javajs.util.DF.formatDecimal (value, precision), width, 0, alignLeft, zeroPad);
+}, "~N,~N,~N,~B,~B");
+c$.formatD = Clazz.defineMethod (c$, "formatD",
+function (value, width, precision, alignLeft, zeroPad, allowOverflow) {
+return javajs.util.PT.formatS (javajs.util.DF.formatDecimal (value, -1 - precision), width, 0, alignLeft, zeroPad);
+}, "~N,~N,~N,~B,~B,~B");
+c$.formatS = Clazz.defineMethod (c$, "formatS",
+function (value, width, precision, alignLeft, zeroPad) {
+if (value == null) return "";
+var len = value.length;
+if (precision != 2147483647 && precision > 0 && precision < len) value = value.substring (0, precision);
+ else if (precision < 0 && len + precision >= 0) value = value.substring (len + precision + 1);
+var padLength = width - value.length;
+if (padLength <= 0) return value;
+var isNeg = (zeroPad && !alignLeft && value.charAt (0) == '-');
+var padChar = (zeroPad ? '0' : ' ');
+var padChar0 = (isNeg ? '-' : padChar);
+var sb = new javajs.util.SB ();
+if (alignLeft) sb.append (value);
+sb.appendC (padChar0);
+for (var i = padLength; --i > 0; ) sb.appendC (padChar);
+
+if (!alignLeft) sb.append (isNeg ? padChar + value.substring (1) : value);
+return sb.toString ();
+}, "~S,~N,~N,~B,~B");
+c$.replaceWithCharacter = Clazz.defineMethod (c$, "replaceWithCharacter",
+function (str, strFrom, chTo) {
+if (str == null) return null;
+for (var i = strFrom.length; --i >= 0; ) str = str.$replace (strFrom.charAt (i), chTo);
+
+return str;
+}, "~S,~S,~S");
+c$.replaceAllCharacters = Clazz.defineMethod (c$, "replaceAllCharacters",
+function (str, strFrom, strTo) {
+for (var i = strFrom.length; --i >= 0; ) {
+var chFrom = strFrom.substring (i, i + 1);
+str = javajs.util.PT.rep (str, chFrom, strTo);
+}
+return str;
+}, "~S,~S,~S");
+c$.trim = Clazz.defineMethod (c$, "trim",
+function (str, chars) {
+if (str == null || str.length == 0) return str;
+if (chars.length == 0) return str.trim ();
+var len = str.length;
+var k = 0;
+while (k < len && chars.indexOf (str.charAt (k)) >= 0) k++;
+
+var m = str.length - 1;
+while (m > k && chars.indexOf (str.charAt (m)) >= 0) m--;
+
+return str.substring (k, m + 1);
+}, "~S,~S");
+c$.trimQuotes = Clazz.defineMethod (c$, "trimQuotes",
+function (value) {
+return (value != null && value.length > 1 && value.startsWith ("\"") && value.endsWith ("\"") ? value.substring (1, value.length - 1) : value);
+}, "~S");
+c$.isNonStringPrimitive = Clazz.defineMethod (c$, "isNonStringPrimitive",
+function (info) {
+return Clazz.instanceOf (info, Number) || Clazz.instanceOf (info, Boolean);
+}, "~O");
+c$.arrayGet = Clazz.defineMethod (c$, "arrayGet",
+($fz = function (info, i) {
+{
+return info[i];
+}}, $fz.isPrivate = true, $fz), "~O,~N");
+c$.toJSON = Clazz.defineMethod (c$, "toJSON",
+function (infoType, info) {
+if (info == null) return javajs.util.PT.packageJSON (infoType, null);
+if (javajs.util.PT.isNonStringPrimitive (info)) return javajs.util.PT.packageJSON (infoType, info.toString ());
+var s = null;
+var sb = null;
+while (true) {
+if (Clazz.instanceOf (info, String)) {
+s = info;
+{
+if (typeof s == "undefined") s = "null"
+}if (s.indexOf ("{\"") != 0) {
+s = javajs.util.PT.rep (s, "\"", "\\\"");
+s = javajs.util.PT.rep (s, "\n", "\\n");
+s = "\"" + s + "\"";
+}break;
+}if (Clazz.instanceOf (info, javajs.api.JSONEncodable)) {
+if ((s = (info).toJSON ()) == null) s = "null";
+break;
+}sb = new javajs.util.SB ();
+if (Clazz.instanceOf (info, java.util.Map)) {
+sb.append ("{ ");
+var sep = "";
+for (var key, $key = (info).keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) {
+sb.append (sep).append (javajs.util.PT.packageJSON (key, javajs.util.PT.toJSON (null, (info).get (key))));
+sep = ",";
+}
+sb.append (" }");
+break;
+}if (Clazz.instanceOf (info, javajs.util.Lst)) {
+sb.append ("[ ");
+var n = (info).size ();
+for (var i = 0; i < n; i++) {
+if (i > 0) sb.appendC (',');
+sb.append (javajs.util.PT.toJSON (null, (info).get (i)));
+}
+sb.append (" ]");
+break;
+}if (Clazz.instanceOf (info, javajs.util.M34)) {
+var len = (Clazz.instanceOf (info, javajs.util.M4) ? 4 : 3);
+var x = Clazz.newFloatArray (len, 0);
+var m = info;
+sb.appendC ('[');
+for (var i = 0; i < len; i++) {
+if (i > 0) sb.appendC (',');
+m.getRow (i, x);
+sb.append (javajs.util.PT.toJSON (null, x));
+}
+sb.appendC (']');
+break;
+}s = javajs.util.PT.nonArrayString (info);
+if (s == null) {
+sb.append ("[");
+var n = javajs.util.AU.getLength (info);
+for (var i = 0; i < n; i++) {
+if (i > 0) sb.appendC (',');
+sb.append (javajs.util.PT.toJSON (null, javajs.util.PT.arrayGet (info, i)));
+}
+sb.append ("]");
+break;
+}info = info.toString ();
+}
+return javajs.util.PT.packageJSON (infoType, (s == null ? sb.toString () : s));
+}, "~S,~O");
+c$.nonArrayString = Clazz.defineMethod (c$, "nonArrayString",
+function (x) {
+{
+var s = x.toString(); return (s.startsWith("[object") &&
+s.endsWith("Array]") ? null : s);
+}}, "~O");
+c$.byteArrayToJSON = Clazz.defineMethod (c$, "byteArrayToJSON",
+function (data) {
+var sb = new javajs.util.SB ();
+sb.append ("[");
+var n = data.length;
+for (var i = 0; i < n; i++) {
+if (i > 0) sb.appendC (',');
+sb.appendI (data[i] & 0xFF);
+}
+sb.append ("]");
+return sb.toString ();
+}, "~A");
+c$.packageJSON = Clazz.defineMethod (c$, "packageJSON",
+function (infoType, info) {
+return (infoType == null ? info : "\"" + infoType + "\": " + info);
+}, "~S,~S");
+c$.escapeUrl = Clazz.defineMethod (c$, "escapeUrl",
+function (url) {
+url = javajs.util.PT.rep (url, "\n", "");
+url = javajs.util.PT.rep (url, "%", "%25");
+url = javajs.util.PT.rep (url, "#", "%23");
+url = javajs.util.PT.rep (url, "[", "%5B");
+url = javajs.util.PT.rep (url, "]", "%5D");
+url = javajs.util.PT.rep (url, " ", "%20");
+return url;
+}, "~S");
+c$.esc = Clazz.defineMethod (c$, "esc",
+function (str) {
+if (str == null || str.length == 0) return "\"\"";
+var haveEscape = false;
+var i = 0;
+for (; i < "\\\\\tt\rr\nn\"\"".length; i += 2) if (str.indexOf ("\\\\\tt\rr\nn\"\"".charAt (i)) >= 0) {
+haveEscape = true;
+break;
+}
+if (haveEscape) while (i < "\\\\\tt\rr\nn\"\"".length) {
+var pt = -1;
+var ch = "\\\\\tt\rr\nn\"\"".charAt (i++);
+var ch2 = "\\\\\tt\rr\nn\"\"".charAt (i++);
+var sb = new javajs.util.SB ();
+var pt0 = 0;
+while ((pt = str.indexOf (ch, pt + 1)) >= 0) {
+sb.append (str.substring (pt0, pt)).appendC ('\\').appendC (ch2);
+pt0 = pt + 1;
+}
+sb.append (str.substring (pt0, str.length));
+str = sb.toString ();
+}
+return "\"" + javajs.util.PT.escUnicode (str) + "\"";
+}, "~S");
+c$.escUnicode = Clazz.defineMethod (c$, "escUnicode",
+function (str) {
+for (var i = str.length; --i >= 0; ) if (str.charCodeAt (i) > 0x7F) {
+var s = "0000" + Integer.toHexString (str.charCodeAt (i));
+str = str.substring (0, i) + "\\u" + s.substring (s.length - 4) + str.substring (i + 1);
+}
+return str;
+}, "~S");
+c$.escF = Clazz.defineMethod (c$, "escF",
+function (f) {
+var sf = "" + f;
+{
+if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
+sf += ".0";
+}return sf;
+}, "~N");
+c$.join = Clazz.defineMethod (c$, "join",
+function (s, c, i0) {
+if (s.length < i0) return null;
+var sb = new javajs.util.SB ();
+sb.append (s[i0++]);
+for (var i = i0; i < s.length; i++) sb.appendC (c).append (s[i]);
+
+return sb.toString ();
+}, "~A,~S,~N");
+c$.isLike = Clazz.defineMethod (c$, "isLike",
+function (a, b) {
+var areEqual = a.equals (b);
+if (areEqual) return true;
+var isStart = b.startsWith ("*");
+var isEnd = b.endsWith ("*");
+return (!isStart && !isEnd) ? areEqual : isStart && isEnd ? b.length == 1 || a.contains (b.substring (1, b.length - 1)) : isStart ? a.endsWith (b.substring (1)) : a.startsWith (b.substring (0, b.length - 1));
+}, "~S,~S");
+c$.getMapValueNoCase = Clazz.defineMethod (c$, "getMapValueNoCase",
+function (h, key) {
+if ("this".equals (key)) return h;
+var val = h.get (key);
+if (val == null) for (var e, $e = h.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) if (e.getKey ().equalsIgnoreCase (key)) return e.getValue ();
+
+return val;
+}, "java.util.Map,~S");
+c$.clean = Clazz.defineMethod (c$, "clean",
+function (s) {
+return javajs.util.PT.rep (javajs.util.PT.replaceAllCharacters (s, " \t\n\r", " "), " ", " ").trim ();
+}, "~S");
+c$.fdup = Clazz.defineMethod (c$, "fdup",
+function (f, pt, n) {
+var ch;
+var count = 0;
+for (var i = pt; --i >= 1; ) {
+if (javajs.util.PT.isDigit (ch = f.charAt (i))) continue;
+switch (ch) {
+case '.':
+if (count++ != 0) return f;
+continue;
+case '-':
+if (i != 1 && f.charAt (i - 1) != '.') return f;
+continue;
+default:
+return f;
+}
+}
+var s = f.substring (0, pt + 1);
+var sb = new javajs.util.SB ();
+for (var i = 0; i < n; i++) sb.append (s);
+
+sb.append (f.substring (pt + 1));
+return sb.toString ();
+}, "~S,~N,~N");
+c$.formatString = Clazz.defineMethod (c$, "formatString",
+function (strFormat, key, strT, floatT, doubleT, doOne) {
+if (strFormat == null) return null;
+if ("".equals (strFormat)) return "";
+var len = key.length;
+if (strFormat.indexOf ("%") < 0 || len == 0 || strFormat.indexOf (key) < 0) return strFormat;
+var strLabel = "";
+var ich;
+var ichPercent;
+var ichKey;
+for (ich = 0; (ichPercent = strFormat.indexOf ('%', ich)) >= 0 && (ichKey = strFormat.indexOf (key, ichPercent + 1)) >= 0; ) {
+if (ich != ichPercent) strLabel += strFormat.substring (ich, ichPercent);
+ich = ichPercent + 1;
+if (ichKey > ichPercent + 6) {
+strLabel += '%';
+continue;
+}try {
+var alignLeft = false;
+if (strFormat.charAt (ich) == '-') {
+alignLeft = true;
+++ich;
+}var zeroPad = false;
+if (strFormat.charAt (ich) == '0') {
+zeroPad = true;
+++ich;
+}var ch;
+var width = 0;
+while ((ch = strFormat.charAt (ich)) >= '0' && (ch <= '9')) {
+width = (10 * width) + (ch.charCodeAt (0) - 48);
+++ich;
+}
+var precision = 2147483647;
+var isExponential = false;
+if (strFormat.charAt (ich) == '.') {
+++ich;
+if ((ch = strFormat.charAt (ich)) == '-') {
+isExponential = true;
+++ich;
+}if ((ch = strFormat.charAt (ich)) >= '0' && ch <= '9') {
+precision = ch.charCodeAt (0) - 48;
+++ich;
+}if (isExponential) precision = -precision - (strT == null ? 1 : 0);
+}var st = strFormat.substring (ich, ich + len);
+if (!st.equals (key)) {
+ich = ichPercent + 1;
+strLabel += '%';
+continue;
+}ich += len;
+if (!Float.isNaN (floatT)) strLabel += javajs.util.PT.formatF (floatT, width, precision, alignLeft, zeroPad);
+ else if (strT != null) strLabel += javajs.util.PT.formatS (strT, width, precision, alignLeft, zeroPad);
+ else if (!Double.isNaN (doubleT)) strLabel += javajs.util.PT.formatD (doubleT, width, precision, alignLeft, zeroPad, true);
+if (doOne) break;
+} catch (ioobe) {
+if (Clazz.exceptionOf (ioobe, IndexOutOfBoundsException)) {
+ich = ichPercent;
+break;
+} else {
+throw ioobe;
+}
+}
+}
+strLabel += strFormat.substring (ich);
+return strLabel;
+}, "~S,~S,~S,~N,~N,~B");
+c$.formatStringS = Clazz.defineMethod (c$, "formatStringS",
+function (strFormat, key, strT) {
+return javajs.util.PT.formatString (strFormat, key, strT, NaN, NaN, false);
+}, "~S,~S,~S");
+c$.formatStringF = Clazz.defineMethod (c$, "formatStringF",
+function (strFormat, key, floatT) {
+return javajs.util.PT.formatString (strFormat, key, null, floatT, NaN, false);
+}, "~S,~S,~N");
+c$.formatStringI = Clazz.defineMethod (c$, "formatStringI",
+function (strFormat, key, intT) {
+return javajs.util.PT.formatString (strFormat, key, "" + intT, NaN, NaN, false);
+}, "~S,~S,~N");
+c$.sprintf = Clazz.defineMethod (c$, "sprintf",
+function (strFormat, list, values) {
+if (values == null) return strFormat;
+var n = list.length;
+if (n == values.length) try {
+for (var o = 0; o < n; o++) {
+if (values[o] == null) continue;
+switch (list.charAt (o)) {
+case 's':
+strFormat = javajs.util.PT.formatString (strFormat, "s", values[o], NaN, NaN, true);
+break;
+case 'f':
+strFormat = javajs.util.PT.formatString (strFormat, "f", null, (values[o]).floatValue (), NaN, true);
+break;
+case 'i':
+strFormat = javajs.util.PT.formatString (strFormat, "d", "" + values[o], NaN, NaN, true);
+strFormat = javajs.util.PT.formatString (strFormat, "i", "" + values[o], NaN, NaN, true);
+break;
+case 'd':
+strFormat = javajs.util.PT.formatString (strFormat, "e", null, NaN, (values[o]).doubleValue (), true);
+break;
+case 'p':
+var pVal = values[o];
+strFormat = javajs.util.PT.formatString (strFormat, "p", null, pVal.x, NaN, true);
+strFormat = javajs.util.PT.formatString (strFormat, "p", null, pVal.y, NaN, true);
+strFormat = javajs.util.PT.formatString (strFormat, "p", null, pVal.z, NaN, true);
+break;
+case 'q':
+var qVal = values[o];
+strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.x, NaN, true);
+strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.y, NaN, true);
+strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.z, NaN, true);
+strFormat = javajs.util.PT.formatString (strFormat, "q", null, qVal.w, NaN, true);
+break;
+case 'S':
+var sVal = values[o];
+for (var i = 0; i < sVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "s", sVal[i], NaN, NaN, true);
+
+break;
+case 'F':
+var fVal = values[o];
+for (var i = 0; i < fVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "f", null, fVal[i], NaN, true);
+
+break;
+case 'I':
+var iVal = values[o];
+for (var i = 0; i < iVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "d", "" + iVal[i], NaN, NaN, true);
+
+for (var i = 0; i < iVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "i", "" + iVal[i], NaN, NaN, true);
+
+break;
+case 'D':
+var dVal = values[o];
+for (var i = 0; i < dVal.length; i++) strFormat = javajs.util.PT.formatString (strFormat, "e", null, NaN, dVal[i], true);
+
+}
+}
+return javajs.util.PT.rep (strFormat, "%%", "%");
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+System.out.println ("TextFormat.sprintf error " + list + " " + strFormat);
+return javajs.util.PT.rep (strFormat, "%", "?");
+}, "~S,~S,~A");
+c$.formatCheck = Clazz.defineMethod (c$, "formatCheck",
+function (strFormat) {
+if (strFormat == null || strFormat.indexOf ('p') < 0 && strFormat.indexOf ('q') < 0) return strFormat;
+strFormat = javajs.util.PT.rep (strFormat, "%%", "\1");
+strFormat = javajs.util.PT.rep (strFormat, "%p", "%6.2p");
+strFormat = javajs.util.PT.rep (strFormat, "%q", "%6.2q");
+var format = javajs.util.PT.split (strFormat, "%");
+var sb = new javajs.util.SB ();
+sb.append (format[0]);
+for (var i = 1; i < format.length; i++) {
+var f = "%" + format[i];
+var pt;
+if (f.length >= 3) {
+if ((pt = f.indexOf ('p')) >= 0) f = javajs.util.PT.fdup (f, pt, 3);
+if ((pt = f.indexOf ('q')) >= 0) f = javajs.util.PT.fdup (f, pt, 4);
+}sb.append (f);
+}
+return sb.toString ().$replace ('\1', '%');
+}, "~S");
+c$.leftJustify = Clazz.defineMethod (c$, "leftJustify",
+function (s, s1, s2) {
+s.append (s2);
+var n = s1.length - s2.length;
+if (n > 0) s.append (s1.substring (0, n));
+}, "javajs.util.SB,~S,~S");
+c$.rightJustify = Clazz.defineMethod (c$, "rightJustify",
+function (s, s1, s2) {
+var n = s1.length - s2.length;
+if (n > 0) s.append (s1.substring (0, n));
+s.append (s2);
+}, "javajs.util.SB,~S,~S");
+c$.safeTruncate = Clazz.defineMethod (c$, "safeTruncate",
+function (f, n) {
+if (f > -0.001 && f < 0.001) f = 0;
+return (f + " ").substring (0, n);
+}, "~N,~N");
+c$.isWild = Clazz.defineMethod (c$, "isWild",
+function (s) {
+return s != null && (s.indexOf ("*") >= 0 || s.indexOf ("?") >= 0);
+}, "~S");
+c$.isMatch = Clazz.defineMethod (c$, "isMatch",
+function (search, match, checkStar, allowInitialStar) {
+if (search.equals (match)) return true;
+var mLen = match.length;
+if (mLen == 0) return false;
+var isStar0 = (checkStar && allowInitialStar ? match.charAt (0) == '*' : false);
+if (mLen == 1 && isStar0) return true;
+var isStar1 = (checkStar && match.endsWith ("*"));
+var haveQ = (match.indexOf ('?') >= 0);
+if (!haveQ) {
+if (isStar0) return (isStar1 ? (mLen < 3 || search.indexOf (match.substring (1, mLen - 1)) >= 0) : search.endsWith (match.substring (1)));
+ else if (isStar1) return search.startsWith (match.substring (0, mLen - 1));
+}var sLen = search.length;
+var qqqq = "????";
+var nq = 4;
+while (nq < sLen) {
+qqqq += qqqq;
+nq += 4;
+}
+if (checkStar) {
+if (isStar0) {
+match = qqqq + match.substring (1);
+mLen += nq - 1;
+}if (isStar1) {
+match = match.substring (0, mLen - 1) + qqqq;
+mLen += nq - 1;
+}}if (mLen < sLen) return false;
+var ich = 0;
+while (mLen > sLen) {
+if (allowInitialStar && match.charAt (ich) == '?') {
+++ich;
+} else if (match.charAt (ich + mLen - 1) != '?') {
+return false;
+}--mLen;
+}
+for (var i = sLen; --i >= 0; ) {
+var chm = match.charAt (ich + i);
+if (chm == '?') continue;
+var chs = search.charAt (i);
+if (chm != chs && (chm != '\1' || chs != '?')) return false;
+}
+return true;
+}, "~S,~S,~B,~B");
+c$.replaceQuotedStrings = Clazz.defineMethod (c$, "replaceQuotedStrings",
+function (s, list, newList) {
+var n = list.size ();
+for (var i = 0; i < n; i++) {
+var name = list.get (i);
+var newName = newList.get (i);
+if (!newName.equals (name)) s = javajs.util.PT.rep (s, "\"" + name + "\"", "\"" + newName + "\"");
+}
+return s;
+}, "~S,javajs.util.Lst,javajs.util.Lst");
+c$.replaceStrings = Clazz.defineMethod (c$, "replaceStrings",
+function (s, list, newList) {
+var n = list.size ();
+for (var i = 0; i < n; i++) {
+var name = list.get (i);
+var newName = newList.get (i);
+if (!newName.equals (name)) s = javajs.util.PT.rep (s, name, newName);
+}
+return s;
+}, "~S,javajs.util.Lst,javajs.util.Lst");
+c$.isDigit = Clazz.defineMethod (c$, "isDigit",
+function (ch) {
+var c = (ch).charCodeAt (0);
+return (48 <= c && c <= 57);
+}, "~S");
+c$.isUpperCase = Clazz.defineMethod (c$, "isUpperCase",
+function (ch) {
+var c = (ch).charCodeAt (0);
+return (65 <= c && c <= 90);
+}, "~S");
+c$.isLowerCase = Clazz.defineMethod (c$, "isLowerCase",
+function (ch) {
+var c = (ch).charCodeAt (0);
+return (97 <= c && c <= 122);
+}, "~S");
+c$.isLetter = Clazz.defineMethod (c$, "isLetter",
+function (ch) {
+var c = (ch).charCodeAt (0);
+return (65 <= c && c <= 90 || 97 <= c && c <= 122);
+}, "~S");
+c$.isLetterOrDigit = Clazz.defineMethod (c$, "isLetterOrDigit",
+function (ch) {
+var c = (ch).charCodeAt (0);
+return (65 <= c && c <= 90 || 97 <= c && c <= 122 || 48 <= c && c <= 57);
+}, "~S");
+c$.isWhitespace = Clazz.defineMethod (c$, "isWhitespace",
+function (ch) {
+var c = (ch).charCodeAt (0);
+return (c >= 0x1c && c <= 0x20 || c >= 0x9 && c <= 0xd);
+}, "~S");
+c$.fixPtFloats = Clazz.defineMethod (c$, "fixPtFloats",
+function (pt, f) {
+pt.x = Math.round (pt.x * f) / f;
+pt.y = Math.round (pt.y * f) / f;
+pt.z = Math.round (pt.z * f) / f;
+}, "javajs.util.T3,~N");
+c$.fixDouble = Clazz.defineMethod (c$, "fixDouble",
+function (d, f) {
+return Math.round (d * f) / f;
+}, "~N,~N");
+c$.parseFloatFraction = Clazz.defineMethod (c$, "parseFloatFraction",
+function (s) {
+var pt = s.indexOf ("/");
+return (pt < 0 ? javajs.util.PT.parseFloat (s) : javajs.util.PT.parseFloat (s.substring (0, pt)) / javajs.util.PT.parseFloat (s.substring (pt + 1)));
+}, "~S");
+Clazz.defineStatics (c$,
+"tensScale", Clazz.newFloatArray (-1, [10, 100, 1000, 10000, 100000, 1000000]),
+"decimalScale", Clazz.newFloatArray (-1, [0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001, 0.00000001, 0.000000001]),
+"FLOAT_MIN_SAFE", 2E-45,
+"escapable", "\\\\\tt\rr\nn\"\"",
+"FRACTIONAL_PRECISION", 100000,
+"CARTESIAN_PRECISION", 10000);
+});
diff --git a/bin/javajs/util/Quat.js b/bin/javajs/util/Quat.js
index 0db2469..bfc5444 100644
--- a/bin/javajs/util/Quat.js
+++ b/bin/javajs/util/Quat.js
@@ -1,427 +1,427 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.P4"], "javajs.util.Quat", ["java.lang.Float", "javajs.util.A4", "$.M3", "$.V3"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.q0 = 0;
-this.q1 = 0;
-this.q2 = 0;
-this.q3 = 0;
-this.mat = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "Quat");
-Clazz.makeConstructor (c$,
-function () {
-this.q0 = 1;
-});
-c$.newQ = Clazz.defineMethod (c$, "newQ",
-function (q) {
-var q1 = new javajs.util.Quat ();
-q1.set (q);
-return q1;
-}, "javajs.util.Quat");
-c$.newVA = Clazz.defineMethod (c$, "newVA",
-function (v, theta) {
-var q = new javajs.util.Quat ();
-q.setTA (v, theta);
-return q;
-}, "javajs.util.T3,~N");
-c$.newM = Clazz.defineMethod (c$, "newM",
-function (mat) {
-var q = new javajs.util.Quat ();
-q.setM (javajs.util.M3.newM3 (mat));
-return q;
-}, "javajs.util.M3");
-c$.newAA = Clazz.defineMethod (c$, "newAA",
-function (a) {
-var q = new javajs.util.Quat ();
-q.setAA (a);
-return q;
-}, "javajs.util.A4");
-c$.newP4 = Clazz.defineMethod (c$, "newP4",
-function (pt) {
-var q = new javajs.util.Quat ();
-q.setP4 (pt);
-return q;
-}, "javajs.util.P4");
-c$.new4 = Clazz.defineMethod (c$, "new4",
-function (q1, q2, q3, q0) {
-var q = new javajs.util.Quat ();
-if (q0 < -1) {
-q.q0 = -1;
-return q;
-}if (q0 > 1) {
-q.q0 = 1;
-return q;
-}q.q0 = q0;
-q.q1 = q1;
-q.q2 = q2;
-q.q3 = q3;
-return q;
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "set",
-function (q) {
-this.q0 = q.q0;
-this.q1 = q.q1;
-this.q2 = q.q2;
-this.q3 = q.q3;
-}, "javajs.util.Quat");
-Clazz.defineMethod (c$, "setP4",
-($fz = function (pt) {
-var factor = (pt == null ? 0 : pt.distance4 (javajs.util.Quat.qZero));
-if (factor == 0) {
-this.q0 = 1;
-return;
-}this.q0 = pt.w / factor;
-this.q1 = pt.x / factor;
-this.q2 = pt.y / factor;
-this.q3 = pt.z / factor;
-}, $fz.isPrivate = true, $fz), "javajs.util.P4");
-Clazz.defineMethod (c$, "setTA",
-function (pt, theta) {
-if (pt.x == 0 && pt.y == 0 && pt.z == 0) {
-this.q0 = 1;
-return;
-}var fact = (Math.sin (theta / 2 * 0.017453292519943295) / Math.sqrt (pt.x * pt.x + pt.y * pt.y + pt.z * pt.z));
-this.q0 = (Math.cos (theta / 2 * 0.017453292519943295));
-this.q1 = (pt.x * fact);
-this.q2 = (pt.y * fact);
-this.q3 = (pt.z * fact);
-}, "javajs.util.T3,~N");
-Clazz.defineMethod (c$, "setAA",
-function (a) {
-var aa = javajs.util.A4.newAA (a);
-if (aa.angle == 0) aa.y = 1;
-this.setM ( new javajs.util.M3 ().setAA (aa));
-}, "javajs.util.A4");
-Clazz.defineMethod (c$, "setM",
-($fz = function (mat) {
-this.mat = mat;
-var trace = mat.m00 + mat.m11 + mat.m22;
-var temp;
-var w;
-var x;
-var y;
-var z;
-if (trace >= 0.5) {
-w = Math.sqrt (1.0 + trace);
-x = (mat.m21 - mat.m12) / w;
-y = (mat.m02 - mat.m20) / w;
-z = (mat.m10 - mat.m01) / w;
-} else if ((temp = mat.m00 + mat.m00 - trace) >= 0.5) {
-x = Math.sqrt (1.0 + temp);
-w = (mat.m21 - mat.m12) / x;
-y = (mat.m10 + mat.m01) / x;
-z = (mat.m20 + mat.m02) / x;
-} else if ((temp = mat.m11 + mat.m11 - trace) >= 0.5 || mat.m11 > mat.m22) {
-y = Math.sqrt (1.0 + temp);
-w = (mat.m02 - mat.m20) / y;
-x = (mat.m10 + mat.m01) / y;
-z = (mat.m21 + mat.m12) / y;
-} else {
-z = Math.sqrt (1.0 + mat.m22 + mat.m22 - trace);
-w = (mat.m10 - mat.m01) / z;
-x = (mat.m20 + mat.m02) / z;
-y = (mat.m21 + mat.m12) / z;
-}this.q0 = (w * 0.5);
-this.q1 = (x * 0.5);
-this.q2 = (y * 0.5);
-this.q3 = (z * 0.5);
-}, $fz.isPrivate = true, $fz), "javajs.util.M3");
-Clazz.defineMethod (c$, "setRef",
-function (qref) {
-if (qref == null) {
-this.mul (this.getFixFactor ());
-return;
-}if (this.dot (qref) >= 0) return;
-this.q0 *= -1;
-this.q1 *= -1;
-this.q2 *= -1;
-this.q3 *= -1;
-}, "javajs.util.Quat");
-c$.getQuaternionFrame = Clazz.defineMethod (c$, "getQuaternionFrame",
-function (center, x, xy) {
-var vA = javajs.util.V3.newV (x);
-var vB = javajs.util.V3.newV (xy);
-if (center != null) {
-vA.sub (center);
-vB.sub (center);
-}return javajs.util.Quat.getQuaternionFrameV (vA, vB, null, false);
-}, "javajs.util.P3,javajs.util.T3,javajs.util.T3");
-c$.getQuaternionFrameV = Clazz.defineMethod (c$, "getQuaternionFrameV",
-function (vA, vB, vC, yBased) {
-if (vC == null) {
-vC = new javajs.util.V3 ();
-vC.cross (vA, vB);
-if (yBased) vA.cross (vB, vC);
-}var vBprime = new javajs.util.V3 ();
-vBprime.cross (vC, vA);
-vA.normalize ();
-vBprime.normalize ();
-vC.normalize ();
-var mat = new javajs.util.M3 ();
-mat.setColumnV (0, vA);
-mat.setColumnV (1, vBprime);
-mat.setColumnV (2, vC);
-var q = javajs.util.Quat.newM (mat);
-return q;
-}, "javajs.util.V3,javajs.util.V3,javajs.util.V3,~B");
-Clazz.defineMethod (c$, "getMatrix",
-function () {
-if (this.mat == null) this.setMatrix ();
-return this.mat;
-});
-Clazz.defineMethod (c$, "setMatrix",
-($fz = function () {
-this.mat = new javajs.util.M3 ();
-this.mat.m00 = this.q0 * this.q0 + this.q1 * this.q1 - this.q2 * this.q2 - this.q3 * this.q3;
-this.mat.m01 = 2 * this.q1 * this.q2 - 2 * this.q0 * this.q3;
-this.mat.m02 = 2 * this.q1 * this.q3 + 2 * this.q0 * this.q2;
-this.mat.m10 = 2 * this.q1 * this.q2 + 2 * this.q0 * this.q3;
-this.mat.m11 = this.q0 * this.q0 - this.q1 * this.q1 + this.q2 * this.q2 - this.q3 * this.q3;
-this.mat.m12 = 2 * this.q2 * this.q3 - 2 * this.q0 * this.q1;
-this.mat.m20 = 2 * this.q1 * this.q3 - 2 * this.q0 * this.q2;
-this.mat.m21 = 2 * this.q2 * this.q3 + 2 * this.q0 * this.q1;
-this.mat.m22 = this.q0 * this.q0 - this.q1 * this.q1 - this.q2 * this.q2 + this.q3 * this.q3;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "add",
-function (x) {
-return javajs.util.Quat.newVA (this.getNormal (), this.getTheta () + x);
-}, "~N");
-Clazz.defineMethod (c$, "mul",
-function (x) {
-return (x == 1 ? javajs.util.Quat.new4 (this.q1, this.q2, this.q3, this.q0) : javajs.util.Quat.newVA (this.getNormal (), this.getTheta () * x));
-}, "~N");
-Clazz.defineMethod (c$, "mulQ",
-function (p) {
-return javajs.util.Quat.new4 (this.q0 * p.q1 + this.q1 * p.q0 + this.q2 * p.q3 - this.q3 * p.q2, this.q0 * p.q2 + this.q2 * p.q0 + this.q3 * p.q1 - this.q1 * p.q3, this.q0 * p.q3 + this.q3 * p.q0 + this.q1 * p.q2 - this.q2 * p.q1, this.q0 * p.q0 - this.q1 * p.q1 - this.q2 * p.q2 - this.q3 * p.q3);
-}, "javajs.util.Quat");
-Clazz.defineMethod (c$, "div",
-function (p) {
-return this.mulQ (p.inv ());
-}, "javajs.util.Quat");
-Clazz.defineMethod (c$, "divLeft",
-function (p) {
-return this.inv ().mulQ (p);
-}, "javajs.util.Quat");
-Clazz.defineMethod (c$, "dot",
-function (q) {
-return this.q0 * q.q0 + this.q1 * q.q1 + this.q2 * q.q2 + this.q3 * q.q3;
-}, "javajs.util.Quat");
-Clazz.defineMethod (c$, "inv",
-function () {
-return javajs.util.Quat.new4 (-this.q1, -this.q2, -this.q3, this.q0);
-});
-Clazz.defineMethod (c$, "negate",
-function () {
-return javajs.util.Quat.new4 (-this.q1, -this.q2, -this.q3, -this.q0);
-});
-Clazz.defineMethod (c$, "getFixFactor",
-($fz = function () {
-return (this.q0 < 0 || this.q0 == 0 && (this.q1 < 0 || this.q1 == 0 && (this.q2 < 0 || this.q2 == 0 && this.q3 < 0)) ? -1 : 1);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "getVector",
-function (i) {
-return this.getVectorScaled (i, 1);
-}, "~N");
-Clazz.defineMethod (c$, "getVectorScaled",
-function (i, scale) {
-if (i == -1) {
-scale *= this.getFixFactor ();
-return javajs.util.V3.new3 (this.q1 * scale, this.q2 * scale, this.q3 * scale);
-}if (this.mat == null) this.setMatrix ();
-var v = new javajs.util.V3 ();
-this.mat.getColumnV (i, v);
-if (scale != 1) v.scale (scale);
-return v;
-}, "~N,~N");
-Clazz.defineMethod (c$, "getNormal",
-function () {
-var v = javajs.util.Quat.getRawNormal (this);
-v.scale (this.getFixFactor ());
-return v;
-});
-c$.getRawNormal = Clazz.defineMethod (c$, "getRawNormal",
-($fz = function (q) {
-var v = javajs.util.V3.new3 (q.q1, q.q2, q.q3);
-if (v.length () == 0) return javajs.util.V3.new3 (0, 0, 1);
-v.normalize ();
-return v;
-}, $fz.isPrivate = true, $fz), "javajs.util.Quat");
-Clazz.defineMethod (c$, "getTheta",
-function () {
-return (Math.acos (Math.abs (this.q0)) * 2 * 180 / 3.141592653589793);
-});
-Clazz.defineMethod (c$, "getThetaRadians",
-function () {
-return (Math.acos (Math.abs (this.q0)) * 2);
-});
-Clazz.defineMethod (c$, "getNormalDirected",
-function (v0) {
-var v = this.getNormal ();
-if (v.x * v0.x + v.y * v0.y + v.z * v0.z < 0) {
-v.scale (-1);
-}return v;
-}, "javajs.util.V3");
-Clazz.defineMethod (c$, "get3dProjection",
-function (v3d) {
-v3d.set (this.q1, this.q2, this.q3);
-return v3d;
-}, "javajs.util.V3");
-Clazz.defineMethod (c$, "getThetaDirected",
-function (axisAngle) {
-var theta = this.getTheta ();
-var v = this.getNormal ();
-if (axisAngle.x * this.q1 + axisAngle.y * this.q2 + axisAngle.z * this.q3 < 0) {
-v.scale (-1);
-theta = -theta;
-}axisAngle.set4 (v.x, v.y, v.z, theta);
-return axisAngle;
-}, "javajs.util.P4");
-Clazz.defineMethod (c$, "getThetaDirectedV",
-function (vector) {
-var theta = this.getTheta ();
-var v = this.getNormal ();
-if (vector.x * this.q1 + vector.y * this.q2 + vector.z * this.q3 < 0) {
-v.scale (-1);
-theta = -theta;
-}return theta;
-}, "javajs.util.V3");
-Clazz.defineMethod (c$, "toPoint4f",
-function () {
-return javajs.util.P4.new4 (this.q1, this.q2, this.q3, this.q0);
-});
-Clazz.defineMethod (c$, "toAxisAngle4f",
-function () {
-var theta = 2 * Math.acos (Math.abs (this.q0));
-var sinTheta2 = Math.sin (theta / 2);
-var v = this.getNormal ();
-if (sinTheta2 < 0) {
-v.scale (-1);
-theta = 3.141592653589793 - theta;
-}return javajs.util.A4.newVA (v, theta);
-});
-Clazz.defineMethod (c$, "transform2",
-function (pt, ptNew) {
-if (this.mat == null) this.setMatrix ();
-this.mat.rotate2 (pt, ptNew);
-return ptNew;
-}, "javajs.util.T3,javajs.util.T3");
-Clazz.defineMethod (c$, "leftDifference",
-function (q2) {
-var q2adjusted = (this.dot (q2) < 0 ? q2.negate () : q2);
-return this.inv ().mulQ (q2adjusted);
-}, "javajs.util.Quat");
-Clazz.defineMethod (c$, "rightDifference",
-function (q2) {
-var q2adjusted = (this.dot (q2) < 0 ? q2.negate () : q2);
-return this.mulQ (q2adjusted.inv ());
-}, "javajs.util.Quat");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "{" + this.q1 + " " + this.q2 + " " + this.q3 + " " + this.q0 + "}";
-});
-c$.div = Clazz.defineMethod (c$, "div",
-function (data1, data2, nMax, isRelative) {
-var n;
-if (data1 == null || data2 == null || (n = Math.min (data1.length, data2.length)) == 0) return null;
-if (nMax > 0 && n > nMax) n = nMax;
-var dqs = new Array (n);
-for (var i = 0; i < n; i++) {
-if (data1[i] == null || data2[i] == null) return null;
-dqs[i] = (isRelative ? data1[i].divLeft (data2[i]) : data1[i].div (data2[i]));
-}
-return dqs;
-}, "~A,~A,~N,~B");
-c$.sphereMean = Clazz.defineMethod (c$, "sphereMean",
-function (data, retStddev, criterion) {
-if (data == null || data.length == 0) return new javajs.util.Quat ();
-if (retStddev == null) retStddev = Clazz.newFloatArray (1, 0);
-if (data.length == 1) {
-retStddev[0] = 0;
-return javajs.util.Quat.newQ (data[0]);
-}var diff = 3.4028235E38;
-var lastStddev = 3.4028235E38;
-var qMean = javajs.util.Quat.simpleAverage (data);
-var maxIter = 100;
-var iter = 0;
-while (diff > criterion && lastStddev != 0 && iter < maxIter) {
-qMean = javajs.util.Quat.newMean (data, qMean);
-retStddev[0] = javajs.util.Quat.stdDev (data, qMean);
-diff = Math.abs (retStddev[0] - lastStddev);
-lastStddev = retStddev[0];
-}
-return qMean;
-}, "~A,~A,~N");
-c$.simpleAverage = Clazz.defineMethod (c$, "simpleAverage",
-($fz = function (ndata) {
-var mean = javajs.util.V3.new3 (0, 0, 1);
-var v = ndata[0].getNormal ();
-mean.add (v);
-for (var i = ndata.length; --i >= 0; ) mean.add (ndata[i].getNormalDirected (mean));
-
-mean.sub (v);
-mean.normalize ();
-var f = 0;
-for (var i = ndata.length; --i >= 0; ) f += Math.abs (ndata[i].get3dProjection (v).dot (mean));
-
-if (f != 0) mean.scale (f / ndata.length);
-f = Math.sqrt (1 - mean.lengthSquared ());
-if (Float.isNaN (f)) f = 0;
-return javajs.util.Quat.newP4 (javajs.util.P4.new4 (mean.x, mean.y, mean.z, f));
-}, $fz.isPrivate = true, $fz), "~A");
-c$.newMean = Clazz.defineMethod (c$, "newMean",
-($fz = function (data, mean) {
-var sum = new javajs.util.V3 ();
-var v;
-var q;
-var dq;
-for (var i = data.length; --i >= 0; ) {
-q = data[i];
-dq = q.div (mean);
-v = dq.getNormal ();
-v.scale (dq.getTheta ());
-sum.add (v);
-}
-sum.scale (1 / data.length);
-var dqMean = javajs.util.Quat.newVA (sum, sum.length ());
-return dqMean.mulQ (mean);
-}, $fz.isPrivate = true, $fz), "~A,javajs.util.Quat");
-c$.stdDev = Clazz.defineMethod (c$, "stdDev",
-($fz = function (data, mean) {
-var sum2 = 0;
-var n = data.length;
-for (var i = n; --i >= 0; ) {
-var theta = data[i].div (mean).getTheta ();
-sum2 += theta * theta;
-}
-return Math.sqrt (sum2 / n);
-}, $fz.isPrivate = true, $fz), "~A,javajs.util.Quat");
-Clazz.defineMethod (c$, "getEulerZYZ",
-function () {
-var rA;
-var rB;
-var rG;
-if (this.q1 == 0 && this.q2 == 0) {
-var theta = this.getTheta ();
-return Clazz.newFloatArray (-1, [this.q3 < 0 ? -theta : theta, 0, 0]);
-}rA = Math.atan2 (2 * (this.q2 * this.q3 + this.q0 * this.q1), 2 * (-this.q1 * this.q3 + this.q0 * this.q2));
-rB = Math.acos (this.q3 * this.q3 - this.q2 * this.q2 - this.q1 * this.q1 + this.q0 * this.q0);
-rG = Math.atan2 (2 * (this.q2 * this.q3 - this.q0 * this.q1), 2 * (this.q0 * this.q2 + this.q1 * this.q3));
-return Clazz.newFloatArray (-1, [(rA / 0.017453292519943295), (rB / 0.017453292519943295), (rG / 0.017453292519943295)]);
-});
-Clazz.defineMethod (c$, "getEulerZXZ",
-function () {
-var rA;
-var rB;
-var rG;
-if (this.q1 == 0 && this.q2 == 0) {
-var theta = this.getTheta ();
-return Clazz.newFloatArray (-1, [this.q3 < 0 ? -theta : theta, 0, 0]);
-}rA = Math.atan2 (2 * (this.q1 * this.q3 - this.q0 * this.q2), 2 * (this.q0 * this.q1 + this.q2 * this.q3));
-rB = Math.acos (this.q3 * this.q3 - this.q2 * this.q2 - this.q1 * this.q1 + this.q0 * this.q0);
-rG = Math.atan2 (2 * (this.q1 * this.q3 + this.q0 * this.q2), 2 * (-this.q2 * this.q3 + this.q0 * this.q1));
-return Clazz.newFloatArray (-1, [(rA / 0.017453292519943295), (rB / 0.017453292519943295), (rG / 0.017453292519943295)]);
-});
-c$.qZero = c$.prototype.qZero = new javajs.util.P4 ();
-Clazz.defineStatics (c$,
-"RAD_PER_DEG", 0.017453292519943295);
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.P4"], "javajs.util.Quat", ["java.lang.Float", "javajs.util.A4", "$.M3", "$.V3"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.q0 = 0;
+this.q1 = 0;
+this.q2 = 0;
+this.q3 = 0;
+this.mat = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "Quat");
+Clazz.makeConstructor (c$,
+function () {
+this.q0 = 1;
+});
+c$.newQ = Clazz.defineMethod (c$, "newQ",
+function (q) {
+var q1 = new javajs.util.Quat ();
+q1.set (q);
+return q1;
+}, "javajs.util.Quat");
+c$.newVA = Clazz.defineMethod (c$, "newVA",
+function (v, theta) {
+var q = new javajs.util.Quat ();
+q.setTA (v, theta);
+return q;
+}, "javajs.util.T3,~N");
+c$.newM = Clazz.defineMethod (c$, "newM",
+function (mat) {
+var q = new javajs.util.Quat ();
+q.setM (javajs.util.M3.newM3 (mat));
+return q;
+}, "javajs.util.M3");
+c$.newAA = Clazz.defineMethod (c$, "newAA",
+function (a) {
+var q = new javajs.util.Quat ();
+q.setAA (a);
+return q;
+}, "javajs.util.A4");
+c$.newP4 = Clazz.defineMethod (c$, "newP4",
+function (pt) {
+var q = new javajs.util.Quat ();
+q.setP4 (pt);
+return q;
+}, "javajs.util.P4");
+c$.new4 = Clazz.defineMethod (c$, "new4",
+function (q1, q2, q3, q0) {
+var q = new javajs.util.Quat ();
+if (q0 < -1) {
+q.q0 = -1;
+return q;
+}if (q0 > 1) {
+q.q0 = 1;
+return q;
+}q.q0 = q0;
+q.q1 = q1;
+q.q2 = q2;
+q.q3 = q3;
+return q;
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "set",
+function (q) {
+this.q0 = q.q0;
+this.q1 = q.q1;
+this.q2 = q.q2;
+this.q3 = q.q3;
+}, "javajs.util.Quat");
+Clazz.defineMethod (c$, "setP4",
+($fz = function (pt) {
+var factor = (pt == null ? 0 : pt.distance4 (javajs.util.Quat.qZero));
+if (factor == 0) {
+this.q0 = 1;
+return;
+}this.q0 = pt.w / factor;
+this.q1 = pt.x / factor;
+this.q2 = pt.y / factor;
+this.q3 = pt.z / factor;
+}, $fz.isPrivate = true, $fz), "javajs.util.P4");
+Clazz.defineMethod (c$, "setTA",
+function (pt, theta) {
+if (pt.x == 0 && pt.y == 0 && pt.z == 0) {
+this.q0 = 1;
+return;
+}var fact = (Math.sin (theta / 2 * 0.017453292519943295) / Math.sqrt (pt.x * pt.x + pt.y * pt.y + pt.z * pt.z));
+this.q0 = (Math.cos (theta / 2 * 0.017453292519943295));
+this.q1 = (pt.x * fact);
+this.q2 = (pt.y * fact);
+this.q3 = (pt.z * fact);
+}, "javajs.util.T3,~N");
+Clazz.defineMethod (c$, "setAA",
+function (a) {
+var aa = javajs.util.A4.newAA (a);
+if (aa.angle == 0) aa.y = 1;
+this.setM ( new javajs.util.M3 ().setAA (aa));
+}, "javajs.util.A4");
+Clazz.defineMethod (c$, "setM",
+($fz = function (mat) {
+this.mat = mat;
+var trace = mat.m00 + mat.m11 + mat.m22;
+var temp;
+var w;
+var x;
+var y;
+var z;
+if (trace >= 0.5) {
+w = Math.sqrt (1.0 + trace);
+x = (mat.m21 - mat.m12) / w;
+y = (mat.m02 - mat.m20) / w;
+z = (mat.m10 - mat.m01) / w;
+} else if ((temp = mat.m00 + mat.m00 - trace) >= 0.5) {
+x = Math.sqrt (1.0 + temp);
+w = (mat.m21 - mat.m12) / x;
+y = (mat.m10 + mat.m01) / x;
+z = (mat.m20 + mat.m02) / x;
+} else if ((temp = mat.m11 + mat.m11 - trace) >= 0.5 || mat.m11 > mat.m22) {
+y = Math.sqrt (1.0 + temp);
+w = (mat.m02 - mat.m20) / y;
+x = (mat.m10 + mat.m01) / y;
+z = (mat.m21 + mat.m12) / y;
+} else {
+z = Math.sqrt (1.0 + mat.m22 + mat.m22 - trace);
+w = (mat.m10 - mat.m01) / z;
+x = (mat.m20 + mat.m02) / z;
+y = (mat.m21 + mat.m12) / z;
+}this.q0 = (w * 0.5);
+this.q1 = (x * 0.5);
+this.q2 = (y * 0.5);
+this.q3 = (z * 0.5);
+}, $fz.isPrivate = true, $fz), "javajs.util.M3");
+Clazz.defineMethod (c$, "setRef",
+function (qref) {
+if (qref == null) {
+this.mul (this.getFixFactor ());
+return;
+}if (this.dot (qref) >= 0) return;
+this.q0 *= -1;
+this.q1 *= -1;
+this.q2 *= -1;
+this.q3 *= -1;
+}, "javajs.util.Quat");
+c$.getQuaternionFrame = Clazz.defineMethod (c$, "getQuaternionFrame",
+function (center, x, xy) {
+var vA = javajs.util.V3.newV (x);
+var vB = javajs.util.V3.newV (xy);
+if (center != null) {
+vA.sub (center);
+vB.sub (center);
+}return javajs.util.Quat.getQuaternionFrameV (vA, vB, null, false);
+}, "javajs.util.P3,javajs.util.T3,javajs.util.T3");
+c$.getQuaternionFrameV = Clazz.defineMethod (c$, "getQuaternionFrameV",
+function (vA, vB, vC, yBased) {
+if (vC == null) {
+vC = new javajs.util.V3 ();
+vC.cross (vA, vB);
+if (yBased) vA.cross (vB, vC);
+}var vBprime = new javajs.util.V3 ();
+vBprime.cross (vC, vA);
+vA.normalize ();
+vBprime.normalize ();
+vC.normalize ();
+var mat = new javajs.util.M3 ();
+mat.setColumnV (0, vA);
+mat.setColumnV (1, vBprime);
+mat.setColumnV (2, vC);
+var q = javajs.util.Quat.newM (mat);
+return q;
+}, "javajs.util.V3,javajs.util.V3,javajs.util.V3,~B");
+Clazz.defineMethod (c$, "getMatrix",
+function () {
+if (this.mat == null) this.setMatrix ();
+return this.mat;
+});
+Clazz.defineMethod (c$, "setMatrix",
+($fz = function () {
+this.mat = new javajs.util.M3 ();
+this.mat.m00 = this.q0 * this.q0 + this.q1 * this.q1 - this.q2 * this.q2 - this.q3 * this.q3;
+this.mat.m01 = 2 * this.q1 * this.q2 - 2 * this.q0 * this.q3;
+this.mat.m02 = 2 * this.q1 * this.q3 + 2 * this.q0 * this.q2;
+this.mat.m10 = 2 * this.q1 * this.q2 + 2 * this.q0 * this.q3;
+this.mat.m11 = this.q0 * this.q0 - this.q1 * this.q1 + this.q2 * this.q2 - this.q3 * this.q3;
+this.mat.m12 = 2 * this.q2 * this.q3 - 2 * this.q0 * this.q1;
+this.mat.m20 = 2 * this.q1 * this.q3 - 2 * this.q0 * this.q2;
+this.mat.m21 = 2 * this.q2 * this.q3 + 2 * this.q0 * this.q1;
+this.mat.m22 = this.q0 * this.q0 - this.q1 * this.q1 - this.q2 * this.q2 + this.q3 * this.q3;
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "add",
+function (x) {
+return javajs.util.Quat.newVA (this.getNormal (), this.getTheta () + x);
+}, "~N");
+Clazz.defineMethod (c$, "mul",
+function (x) {
+return (x == 1 ? javajs.util.Quat.new4 (this.q1, this.q2, this.q3, this.q0) : javajs.util.Quat.newVA (this.getNormal (), this.getTheta () * x));
+}, "~N");
+Clazz.defineMethod (c$, "mulQ",
+function (p) {
+return javajs.util.Quat.new4 (this.q0 * p.q1 + this.q1 * p.q0 + this.q2 * p.q3 - this.q3 * p.q2, this.q0 * p.q2 + this.q2 * p.q0 + this.q3 * p.q1 - this.q1 * p.q3, this.q0 * p.q3 + this.q3 * p.q0 + this.q1 * p.q2 - this.q2 * p.q1, this.q0 * p.q0 - this.q1 * p.q1 - this.q2 * p.q2 - this.q3 * p.q3);
+}, "javajs.util.Quat");
+Clazz.defineMethod (c$, "div",
+function (p) {
+return this.mulQ (p.inv ());
+}, "javajs.util.Quat");
+Clazz.defineMethod (c$, "divLeft",
+function (p) {
+return this.inv ().mulQ (p);
+}, "javajs.util.Quat");
+Clazz.defineMethod (c$, "dot",
+function (q) {
+return this.q0 * q.q0 + this.q1 * q.q1 + this.q2 * q.q2 + this.q3 * q.q3;
+}, "javajs.util.Quat");
+Clazz.defineMethod (c$, "inv",
+function () {
+return javajs.util.Quat.new4 (-this.q1, -this.q2, -this.q3, this.q0);
+});
+Clazz.defineMethod (c$, "negate",
+function () {
+return javajs.util.Quat.new4 (-this.q1, -this.q2, -this.q3, -this.q0);
+});
+Clazz.defineMethod (c$, "getFixFactor",
+($fz = function () {
+return (this.q0 < 0 || this.q0 == 0 && (this.q1 < 0 || this.q1 == 0 && (this.q2 < 0 || this.q2 == 0 && this.q3 < 0)) ? -1 : 1);
+}, $fz.isPrivate = true, $fz));
+Clazz.defineMethod (c$, "getVector",
+function (i) {
+return this.getVectorScaled (i, 1);
+}, "~N");
+Clazz.defineMethod (c$, "getVectorScaled",
+function (i, scale) {
+if (i == -1) {
+scale *= this.getFixFactor ();
+return javajs.util.V3.new3 (this.q1 * scale, this.q2 * scale, this.q3 * scale);
+}if (this.mat == null) this.setMatrix ();
+var v = new javajs.util.V3 ();
+this.mat.getColumnV (i, v);
+if (scale != 1) v.scale (scale);
+return v;
+}, "~N,~N");
+Clazz.defineMethod (c$, "getNormal",
+function () {
+var v = javajs.util.Quat.getRawNormal (this);
+v.scale (this.getFixFactor ());
+return v;
+});
+c$.getRawNormal = Clazz.defineMethod (c$, "getRawNormal",
+($fz = function (q) {
+var v = javajs.util.V3.new3 (q.q1, q.q2, q.q3);
+if (v.length () == 0) return javajs.util.V3.new3 (0, 0, 1);
+v.normalize ();
+return v;
+}, $fz.isPrivate = true, $fz), "javajs.util.Quat");
+Clazz.defineMethod (c$, "getTheta",
+function () {
+return (Math.acos (Math.abs (this.q0)) * 2 * 180 / 3.141592653589793);
+});
+Clazz.defineMethod (c$, "getThetaRadians",
+function () {
+return (Math.acos (Math.abs (this.q0)) * 2);
+});
+Clazz.defineMethod (c$, "getNormalDirected",
+function (v0) {
+var v = this.getNormal ();
+if (v.x * v0.x + v.y * v0.y + v.z * v0.z < 0) {
+v.scale (-1);
+}return v;
+}, "javajs.util.V3");
+Clazz.defineMethod (c$, "get3dProjection",
+function (v3d) {
+v3d.set (this.q1, this.q2, this.q3);
+return v3d;
+}, "javajs.util.V3");
+Clazz.defineMethod (c$, "getThetaDirected",
+function (axisAngle) {
+var theta = this.getTheta ();
+var v = this.getNormal ();
+if (axisAngle.x * this.q1 + axisAngle.y * this.q2 + axisAngle.z * this.q3 < 0) {
+v.scale (-1);
+theta = -theta;
+}axisAngle.set4 (v.x, v.y, v.z, theta);
+return axisAngle;
+}, "javajs.util.P4");
+Clazz.defineMethod (c$, "getThetaDirectedV",
+function (vector) {
+var theta = this.getTheta ();
+var v = this.getNormal ();
+if (vector.x * this.q1 + vector.y * this.q2 + vector.z * this.q3 < 0) {
+v.scale (-1);
+theta = -theta;
+}return theta;
+}, "javajs.util.V3");
+Clazz.defineMethod (c$, "toPoint4f",
+function () {
+return javajs.util.P4.new4 (this.q1, this.q2, this.q3, this.q0);
+});
+Clazz.defineMethod (c$, "toAxisAngle4f",
+function () {
+var theta = 2 * Math.acos (Math.abs (this.q0));
+var sinTheta2 = Math.sin (theta / 2);
+var v = this.getNormal ();
+if (sinTheta2 < 0) {
+v.scale (-1);
+theta = 3.141592653589793 - theta;
+}return javajs.util.A4.newVA (v, theta);
+});
+Clazz.defineMethod (c$, "transform2",
+function (pt, ptNew) {
+if (this.mat == null) this.setMatrix ();
+this.mat.rotate2 (pt, ptNew);
+return ptNew;
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "leftDifference",
+function (q2) {
+var q2adjusted = (this.dot (q2) < 0 ? q2.negate () : q2);
+return this.inv ().mulQ (q2adjusted);
+}, "javajs.util.Quat");
+Clazz.defineMethod (c$, "rightDifference",
+function (q2) {
+var q2adjusted = (this.dot (q2) < 0 ? q2.negate () : q2);
+return this.mulQ (q2adjusted.inv ());
+}, "javajs.util.Quat");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "{" + this.q1 + " " + this.q2 + " " + this.q3 + " " + this.q0 + "}";
+});
+c$.div = Clazz.defineMethod (c$, "div",
+function (data1, data2, nMax, isRelative) {
+var n;
+if (data1 == null || data2 == null || (n = Math.min (data1.length, data2.length)) == 0) return null;
+if (nMax > 0 && n > nMax) n = nMax;
+var dqs = new Array (n);
+for (var i = 0; i < n; i++) {
+if (data1[i] == null || data2[i] == null) return null;
+dqs[i] = (isRelative ? data1[i].divLeft (data2[i]) : data1[i].div (data2[i]));
+}
+return dqs;
+}, "~A,~A,~N,~B");
+c$.sphereMean = Clazz.defineMethod (c$, "sphereMean",
+function (data, retStddev, criterion) {
+if (data == null || data.length == 0) return new javajs.util.Quat ();
+if (retStddev == null) retStddev = Clazz.newFloatArray (1, 0);
+if (data.length == 1) {
+retStddev[0] = 0;
+return javajs.util.Quat.newQ (data[0]);
+}var diff = 3.4028235E38;
+var lastStddev = 3.4028235E38;
+var qMean = javajs.util.Quat.simpleAverage (data);
+var maxIter = 100;
+var iter = 0;
+while (diff > criterion && lastStddev != 0 && iter < maxIter) {
+qMean = javajs.util.Quat.newMean (data, qMean);
+retStddev[0] = javajs.util.Quat.stdDev (data, qMean);
+diff = Math.abs (retStddev[0] - lastStddev);
+lastStddev = retStddev[0];
+}
+return qMean;
+}, "~A,~A,~N");
+c$.simpleAverage = Clazz.defineMethod (c$, "simpleAverage",
+($fz = function (ndata) {
+var mean = javajs.util.V3.new3 (0, 0, 1);
+var v = ndata[0].getNormal ();
+mean.add (v);
+for (var i = ndata.length; --i >= 0; ) mean.add (ndata[i].getNormalDirected (mean));
+
+mean.sub (v);
+mean.normalize ();
+var f = 0;
+for (var i = ndata.length; --i >= 0; ) f += Math.abs (ndata[i].get3dProjection (v).dot (mean));
+
+if (f != 0) mean.scale (f / ndata.length);
+f = Math.sqrt (1 - mean.lengthSquared ());
+if (Float.isNaN (f)) f = 0;
+return javajs.util.Quat.newP4 (javajs.util.P4.new4 (mean.x, mean.y, mean.z, f));
+}, $fz.isPrivate = true, $fz), "~A");
+c$.newMean = Clazz.defineMethod (c$, "newMean",
+($fz = function (data, mean) {
+var sum = new javajs.util.V3 ();
+var v;
+var q;
+var dq;
+for (var i = data.length; --i >= 0; ) {
+q = data[i];
+dq = q.div (mean);
+v = dq.getNormal ();
+v.scale (dq.getTheta ());
+sum.add (v);
+}
+sum.scale (1 / data.length);
+var dqMean = javajs.util.Quat.newVA (sum, sum.length ());
+return dqMean.mulQ (mean);
+}, $fz.isPrivate = true, $fz), "~A,javajs.util.Quat");
+c$.stdDev = Clazz.defineMethod (c$, "stdDev",
+($fz = function (data, mean) {
+var sum2 = 0;
+var n = data.length;
+for (var i = n; --i >= 0; ) {
+var theta = data[i].div (mean).getTheta ();
+sum2 += theta * theta;
+}
+return Math.sqrt (sum2 / n);
+}, $fz.isPrivate = true, $fz), "~A,javajs.util.Quat");
+Clazz.defineMethod (c$, "getEulerZYZ",
+function () {
+var rA;
+var rB;
+var rG;
+if (this.q1 == 0 && this.q2 == 0) {
+var theta = this.getTheta ();
+return Clazz.newFloatArray (-1, [this.q3 < 0 ? -theta : theta, 0, 0]);
+}rA = Math.atan2 (2 * (this.q2 * this.q3 + this.q0 * this.q1), 2 * (-this.q1 * this.q3 + this.q0 * this.q2));
+rB = Math.acos (this.q3 * this.q3 - this.q2 * this.q2 - this.q1 * this.q1 + this.q0 * this.q0);
+rG = Math.atan2 (2 * (this.q2 * this.q3 - this.q0 * this.q1), 2 * (this.q0 * this.q2 + this.q1 * this.q3));
+return Clazz.newFloatArray (-1, [(rA / 0.017453292519943295), (rB / 0.017453292519943295), (rG / 0.017453292519943295)]);
+});
+Clazz.defineMethod (c$, "getEulerZXZ",
+function () {
+var rA;
+var rB;
+var rG;
+if (this.q1 == 0 && this.q2 == 0) {
+var theta = this.getTheta ();
+return Clazz.newFloatArray (-1, [this.q3 < 0 ? -theta : theta, 0, 0]);
+}rA = Math.atan2 (2 * (this.q1 * this.q3 - this.q0 * this.q2), 2 * (this.q0 * this.q1 + this.q2 * this.q3));
+rB = Math.acos (this.q3 * this.q3 - this.q2 * this.q2 - this.q1 * this.q1 + this.q0 * this.q0);
+rG = Math.atan2 (2 * (this.q1 * this.q3 + this.q0 * this.q2), 2 * (-this.q2 * this.q3 + this.q0 * this.q1));
+return Clazz.newFloatArray (-1, [(rA / 0.017453292519943295), (rB / 0.017453292519943295), (rG / 0.017453292519943295)]);
+});
+c$.qZero = c$.prototype.qZero = new javajs.util.P4 ();
+Clazz.defineStatics (c$,
+"RAD_PER_DEG", 0.017453292519943295);
+});
diff --git a/bin/javajs/util/Rdr.class b/bin/javajs/util/Rdr.class
index 2611f4e..0617f27 100644
Binary files a/bin/javajs/util/Rdr.class and b/bin/javajs/util/Rdr.class differ
diff --git a/bin/javajs/util/Rdr.js b/bin/javajs/util/Rdr.js
index 6f65dc5..45a14ab 100644
--- a/bin/javajs/util/Rdr.js
+++ b/bin/javajs/util/Rdr.js
@@ -1,311 +1,311 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.GenericLineReader"], "javajs.util.Rdr", ["java.io.BufferedInputStream", "$.BufferedReader", "$.ByteArrayInputStream", "$.InputStreamReader", "$.StringReader", "javajs.util.AU", "$.Base64", "$.Encoding", "$.SB"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.reader = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "Rdr", null, javajs.api.GenericLineReader);
-Clazz.makeConstructor (c$,
-function (reader) {
-this.reader = reader;
-}, "java.io.BufferedReader");
-Clazz.overrideMethod (c$, "readNextLine",
-function () {
-return this.reader.readLine ();
-});
-c$.readCifData = Clazz.defineMethod (c$, "readCifData",
-function (parser, br) {
-return parser.set (null, br).getAllCifData ();
-}, "javajs.api.GenericCifDataParser,java.io.BufferedReader");
-c$.fixUTF = Clazz.defineMethod (c$, "fixUTF",
-function (bytes) {
-var encoding = javajs.util.Rdr.getUTFEncoding (bytes);
-if (encoding !== javajs.util.Encoding.NONE) try {
-var s = String.instantialize (bytes, encoding.name ().$replace ('_', '-'));
-switch (encoding) {
-case javajs.util.Encoding.UTF8:
-case javajs.util.Encoding.UTF_16BE:
-case javajs.util.Encoding.UTF_16LE:
-s = s.substring (1);
-break;
-default:
-break;
-}
-return s;
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.UnsupportedEncodingException)) {
-System.out.println (e);
-} else {
-throw e;
-}
-}
-return String.instantialize (bytes);
-}, "~A");
-c$.getUTFEncoding = Clazz.defineMethod (c$, "getUTFEncoding",
-($fz = function (bytes) {
-if (bytes.length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) return javajs.util.Encoding.UTF8;
-if (bytes.length >= 4 && bytes[0] == 0 && bytes[1] == 0 && bytes[2] == 0xFE && bytes[3] == 0xFF) return javajs.util.Encoding.UTF_32BE;
-if (bytes.length >= 4 && bytes[0] == 0xFF && bytes[1] == 0xFE && bytes[2] == 0 && bytes[3] == 0) return javajs.util.Encoding.UTF_32LE;
-if (bytes.length >= 2 && bytes[0] == 0xFF && bytes[1] == 0xFE) return javajs.util.Encoding.UTF_16LE;
-if (bytes.length >= 2 && bytes[0] == 0xFE && bytes[1] == 0xFF) return javajs.util.Encoding.UTF_16BE;
-return javajs.util.Encoding.NONE;
-}, $fz.isPrivate = true, $fz), "~A");
-c$.getUTFEncodingForStream = Clazz.defineMethod (c$, "getUTFEncodingForStream",
-($fz = function (is) {
-{
-is.resetStream();
-}var abMagic = Clazz.newByteArray (4, 0);
-abMagic[3] = 1;
-try {
-is.mark (5);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-return javajs.util.Encoding.NONE;
-} else {
-throw e;
-}
-}
-is.read (abMagic, 0, 4);
-is.reset ();
-return javajs.util.Rdr.getUTFEncoding (abMagic);
-}, $fz.isPrivate = true, $fz), "java.io.BufferedInputStream");
-c$.isBase64 = Clazz.defineMethod (c$, "isBase64",
-function (sb) {
-return (sb.indexOf (";base64,") == 0);
-}, "javajs.util.SB");
-c$.isCompoundDocumentS = Clazz.defineMethod (c$, "isCompoundDocumentS",
-function (is) {
-return javajs.util.Rdr.isCompoundDocumentB (javajs.util.Rdr.getMagic (is, 8));
-}, "java.io.InputStream");
-c$.isCompoundDocumentB = Clazz.defineMethod (c$, "isCompoundDocumentB",
-function (bytes) {
-return (bytes.length >= 8 && bytes[0] == 0xD0 && bytes[1] == 0xCF && bytes[2] == 0x11 && bytes[3] == 0xE0 && bytes[4] == 0xA1 && bytes[5] == 0xB1 && bytes[6] == 0x1A && bytes[7] == 0xE1);
-}, "~A");
-c$.isGzipS = Clazz.defineMethod (c$, "isGzipS",
-function (is) {
-return javajs.util.Rdr.isGzipB (javajs.util.Rdr.getMagic (is, 2));
-}, "java.io.InputStream");
-c$.isGzipB = Clazz.defineMethod (c$, "isGzipB",
-function (bytes) {
-return (bytes != null && bytes.length >= 2 && bytes[0] == 0x1F && bytes[1] == 0x8B);
-}, "~A");
-c$.isPickleS = Clazz.defineMethod (c$, "isPickleS",
-function (is) {
-return javajs.util.Rdr.isPickleB (javajs.util.Rdr.getMagic (is, 2));
-}, "java.io.InputStream");
-c$.isPickleB = Clazz.defineMethod (c$, "isPickleB",
-function (bytes) {
-return (bytes != null && bytes.length >= 2 && bytes[0] == 0x7D && bytes[1] == 0x71);
-}, "~A");
-c$.isPngZipStream = Clazz.defineMethod (c$, "isPngZipStream",
-function (is) {
-return javajs.util.Rdr.isPngZipB (javajs.util.Rdr.getMagic (is, 55));
-}, "java.io.InputStream");
-c$.isPngZipB = Clazz.defineMethod (c$, "isPngZipB",
-function (bytes) {
-return (bytes[50] == 0 && bytes[51] == 0x50 && bytes[52] == 0x4E && bytes[53] == 0x47 && bytes[54] == 0x4A);
-}, "~A");
-c$.isZipS = Clazz.defineMethod (c$, "isZipS",
-function (is) {
-return javajs.util.Rdr.isZipB (javajs.util.Rdr.getMagic (is, 4));
-}, "java.io.InputStream");
-c$.isZipB = Clazz.defineMethod (c$, "isZipB",
-function (bytes) {
-return (bytes.length >= 4 && bytes[0] == 0x50 && bytes[1] == 0x4B && bytes[2] == 0x03 && bytes[3] == 0x04);
-}, "~A");
-c$.getMagic = Clazz.defineMethod (c$, "getMagic",
-($fz = function (is, n) {
-var abMagic = Clazz.newByteArray (n, 0);
-{
-is.resetStream();
-}try {
-is.mark (n + 1);
-is.read (abMagic, 0, n);
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-} else {
-throw e;
-}
-}
-try {
-is.reset ();
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-} else {
-throw e;
-}
-}
-return abMagic;
-}, $fz.isPrivate = true, $fz), "java.io.InputStream,~N");
-c$.guessMimeTypeForBytes = Clazz.defineMethod (c$, "guessMimeTypeForBytes",
-function (bytes) {
-switch (bytes.length < 2 ? -1 : bytes[1]) {
-case 0:
-return "image/jpg";
-case 0x49:
-return "image/gif";
-case 0x4D:
-return "image/BMP";
-case 0x50:
-return "image/png";
-default:
-return "image/unknown";
-}
-}, "~A");
-c$.getBIS = Clazz.defineMethod (c$, "getBIS",
-function (bytes) {
-return new java.io.BufferedInputStream ( new java.io.ByteArrayInputStream (bytes));
-}, "~A");
-c$.getBR = Clazz.defineMethod (c$, "getBR",
-function (string) {
-return new java.io.BufferedReader ( new java.io.StringReader (string));
-}, "~S");
-c$.getUnzippedInputStream = Clazz.defineMethod (c$, "getUnzippedInputStream",
-function (jzt, bis) {
-while (javajs.util.Rdr.isGzipS (bis)) bis = new java.io.BufferedInputStream (jzt.newGZIPInputStream (bis));
-
-return bis;
-}, "javajs.api.GenericZipTools,java.io.BufferedInputStream");
-c$.getBytesFromSB = Clazz.defineMethod (c$, "getBytesFromSB",
-function (sb) {
-return (javajs.util.Rdr.isBase64 (sb) ? javajs.util.Base64.decodeBase64 (sb.substring (8)) : sb.toBytes (0, -1));
-}, "javajs.util.SB");
-c$.getStreamAsBytes = Clazz.defineMethod (c$, "getStreamAsBytes",
-function (bis, out) {
-var buf = Clazz.newByteArray (1024, 0);
-var bytes = (out == null ? Clazz.newByteArray (4096, 0) : null);
-var len = 0;
-var totalLen = 0;
-while ((len = bis.read (buf, 0, 1024)) > 0) {
-totalLen += len;
-if (out == null) {
-if (totalLen >= bytes.length) bytes = javajs.util.AU.ensureLengthByte (bytes, totalLen * 2);
-System.arraycopy (buf, 0, bytes, totalLen - len, len);
-} else {
-out.write (buf, 0, len);
-}}
-bis.close ();
-if (out == null) {
-return javajs.util.AU.arrayCopyByte (bytes, totalLen);
-}return totalLen + " bytes";
-}, "java.io.BufferedInputStream,javajs.util.OC");
-c$.getBufferedReader = Clazz.defineMethod (c$, "getBufferedReader",
-function (bis, charSet) {
-if (javajs.util.Rdr.getUTFEncodingForStream (bis) === javajs.util.Encoding.NONE) return new java.io.BufferedReader ( new java.io.InputStreamReader (bis, (charSet == null ? "UTF-8" : charSet)));
-var bytes = javajs.util.Rdr.getLimitedStreamBytes (bis, -1);
-bis.close ();
-return javajs.util.Rdr.getBR (charSet == null ? javajs.util.Rdr.fixUTF (bytes) : String.instantialize (bytes, charSet));
-}, "java.io.BufferedInputStream,~S");
-c$.getLimitedStreamBytes = Clazz.defineMethod (c$, "getLimitedStreamBytes",
-function (is, n) {
-var buflen = (n > 0 && n < 1024 ? n : 1024);
-var buf = Clazz.newByteArray (buflen, 0);
-var bytes = Clazz.newByteArray (n < 0 ? 4096 : n, 0);
-var len = 0;
-var totalLen = 0;
-if (n < 0) n = 2147483647;
-while (totalLen < n && (len = is.read (buf, 0, buflen)) > 0) {
-totalLen += len;
-if (totalLen > bytes.length) bytes = javajs.util.AU.ensureLengthByte (bytes, totalLen * 2);
-System.arraycopy (buf, 0, bytes, totalLen - len, len);
-if (n != 2147483647 && totalLen + buflen > bytes.length) buflen = bytes.length - totalLen;
-}
-if (totalLen == bytes.length) return bytes;
-buf = Clazz.newByteArray (totalLen, 0);
-System.arraycopy (bytes, 0, buf, 0, totalLen);
-return buf;
-}, "java.io.InputStream,~N");
-c$.StreamToUTF8String = Clazz.defineMethod (c$, "StreamToUTF8String",
-function (bis) {
-var data = new Array (1);
-try {
-javajs.util.Rdr.readAllAsString (javajs.util.Rdr.getBufferedReader (bis, "UTF-8"), -1, true, data, 0);
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-} else {
-throw e;
-}
-}
-return data[0];
-}, "java.io.BufferedInputStream");
-c$.readAllAsString = Clazz.defineMethod (c$, "readAllAsString",
-function (br, nBytesMax, allowBinary, data, i) {
-try {
-var sb = javajs.util.SB.newN (8192);
-var line;
-if (nBytesMax < 0) {
-line = br.readLine ();
-if (allowBinary || line != null && line.indexOf ('\0') < 0 && (line.length != 4 || line.charCodeAt (0) != 65533 || line.indexOf ("PNG") != 1)) {
-sb.append (line).appendC ('\n');
-while ((line = br.readLine ()) != null) sb.append (line).appendC ('\n');
-
-}} else {
-var n = 0;
-var len;
-while (n < nBytesMax && (line = br.readLine ()) != null) {
-if (nBytesMax - n < (len = line.length) + 1) line = line.substring (0, nBytesMax - n - 1);
-sb.append (line).appendC ('\n');
-n += len + 1;
-}
-}br.close ();
-data[i] = sb.toString ();
-return true;
-} catch (ioe) {
-if (Clazz.exceptionOf (ioe, Exception)) {
-data[i] = ioe.toString ();
-return false;
-} else {
-throw ioe;
-}
-}
-}, "java.io.BufferedReader,~N,~B,~A,~N");
-c$.getPngZipPointAndCount = Clazz.defineMethod (c$, "getPngZipPointAndCount",
-function (bis, pt_count) {
-bis.mark (75);
-try {
-var data = javajs.util.Rdr.getLimitedStreamBytes (bis, 74);
-bis.reset ();
-var pt = 0;
-for (var i = 64, f = 1; --i > 54; f *= 10) pt += (data[i] - 48) * f;
-
-var n = 0;
-for (var i = 74, f = 1; --i > 64; f *= 10) n += (data[i] - 48) * f;
-
-pt_count[0] = pt;
-pt_count[1] = n;
-} catch (e) {
-pt_count[1] = 0;
-}
-}, "java.io.BufferedInputStream,~A");
-c$.getPngZipStream = Clazz.defineMethod (c$, "getPngZipStream",
-function (bis, asNewStream) {
-if (!javajs.util.Rdr.isPngZipStream (bis)) return bis;
-var data = Clazz.newByteArray (0, 0);
-bis.mark (75);
-try {
-var pt_count = Clazz.newIntArray (2, 0);
-javajs.util.Rdr.getPngZipPointAndCount (bis, pt_count);
-if (pt_count[1] != 0) {
-var pt = pt_count[0];
-while (pt > 0) pt -= bis.skip (pt);
-
-if (!asNewStream) return bis;
-data = javajs.util.Rdr.getLimitedStreamBytes (bis, pt_count[1]);
-}} catch (e) {
-} finally {
-try {
-if (asNewStream) bis.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-}
-return javajs.util.Rdr.getBIS (data);
-}, "java.io.BufferedInputStream,~B");
-c$.getZipRoot = Clazz.defineMethod (c$, "getZipRoot",
-function (fileName) {
-var pt = fileName.indexOf ("|");
-return (pt < 0 ? fileName : fileName.substring (0, pt));
-}, "~S");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.GenericLineReader"], "javajs.util.Rdr", ["java.io.BufferedInputStream", "$.BufferedReader", "$.ByteArrayInputStream", "$.InputStreamReader", "$.StringReader", "javajs.util.AU", "$.Base64", "$.Encoding", "$.SB"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.reader = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "Rdr", null, javajs.api.GenericLineReader);
+Clazz.makeConstructor (c$,
+function (reader) {
+this.reader = reader;
+}, "java.io.BufferedReader");
+Clazz.overrideMethod (c$, "readNextLine",
+function () {
+return this.reader.readLine ();
+});
+c$.readCifData = Clazz.defineMethod (c$, "readCifData",
+function (parser, br) {
+return parser.set (null, br).getAllCifData ();
+}, "javajs.api.GenericCifDataParser,java.io.BufferedReader");
+c$.fixUTF = Clazz.defineMethod (c$, "fixUTF",
+function (bytes) {
+var encoding = javajs.util.Rdr.getUTFEncoding (bytes);
+if (encoding !== javajs.util.Encoding.NONE) try {
+var s = String.instantialize (bytes, encoding.name ().$replace ('_', '-'));
+switch (encoding) {
+case javajs.util.Encoding.UTF8:
+case javajs.util.Encoding.UTF_16BE:
+case javajs.util.Encoding.UTF_16LE:
+s = s.substring (1);
+break;
+default:
+break;
+}
+return s;
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.UnsupportedEncodingException)) {
+System.out.println (e);
+} else {
+throw e;
+}
+}
+return String.instantialize (bytes);
+}, "~A");
+c$.getUTFEncoding = Clazz.defineMethod (c$, "getUTFEncoding",
+($fz = function (bytes) {
+if (bytes.length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) return javajs.util.Encoding.UTF8;
+if (bytes.length >= 4 && bytes[0] == 0 && bytes[1] == 0 && bytes[2] == 0xFE && bytes[3] == 0xFF) return javajs.util.Encoding.UTF_32BE;
+if (bytes.length >= 4 && bytes[0] == 0xFF && bytes[1] == 0xFE && bytes[2] == 0 && bytes[3] == 0) return javajs.util.Encoding.UTF_32LE;
+if (bytes.length >= 2 && bytes[0] == 0xFF && bytes[1] == 0xFE) return javajs.util.Encoding.UTF_16LE;
+if (bytes.length >= 2 && bytes[0] == 0xFE && bytes[1] == 0xFF) return javajs.util.Encoding.UTF_16BE;
+return javajs.util.Encoding.NONE;
+}, $fz.isPrivate = true, $fz), "~A");
+c$.getUTFEncodingForStream = Clazz.defineMethod (c$, "getUTFEncodingForStream",
+($fz = function (is) {
+{
+is.resetStream();
+}var abMagic = Clazz.newByteArray (4, 0);
+abMagic[3] = 1;
+try {
+is.mark (5);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+return javajs.util.Encoding.NONE;
+} else {
+throw e;
+}
+}
+is.read (abMagic, 0, 4);
+is.reset ();
+return javajs.util.Rdr.getUTFEncoding (abMagic);
+}, $fz.isPrivate = true, $fz), "java.io.BufferedInputStream");
+c$.isBase64 = Clazz.defineMethod (c$, "isBase64",
+function (sb) {
+return (sb.indexOf (";base64,") == 0);
+}, "javajs.util.SB");
+c$.isCompoundDocumentS = Clazz.defineMethod (c$, "isCompoundDocumentS",
+function (is) {
+return javajs.util.Rdr.isCompoundDocumentB (javajs.util.Rdr.getMagic (is, 8));
+}, "java.io.InputStream");
+c$.isCompoundDocumentB = Clazz.defineMethod (c$, "isCompoundDocumentB",
+function (bytes) {
+return (bytes.length >= 8 && bytes[0] == 0xD0 && bytes[1] == 0xCF && bytes[2] == 0x11 && bytes[3] == 0xE0 && bytes[4] == 0xA1 && bytes[5] == 0xB1 && bytes[6] == 0x1A && bytes[7] == 0xE1);
+}, "~A");
+c$.isGzipS = Clazz.defineMethod (c$, "isGzipS",
+function (is) {
+return javajs.util.Rdr.isGzipB (javajs.util.Rdr.getMagic (is, 2));
+}, "java.io.InputStream");
+c$.isGzipB = Clazz.defineMethod (c$, "isGzipB",
+function (bytes) {
+return (bytes != null && bytes.length >= 2 && bytes[0] == 0x1F && bytes[1] == 0x8B);
+}, "~A");
+c$.isPickleS = Clazz.defineMethod (c$, "isPickleS",
+function (is) {
+return javajs.util.Rdr.isPickleB (javajs.util.Rdr.getMagic (is, 2));
+}, "java.io.InputStream");
+c$.isPickleB = Clazz.defineMethod (c$, "isPickleB",
+function (bytes) {
+return (bytes != null && bytes.length >= 2 && bytes[0] == 0x7D && bytes[1] == 0x71);
+}, "~A");
+c$.isPngZipStream = Clazz.defineMethod (c$, "isPngZipStream",
+function (is) {
+return javajs.util.Rdr.isPngZipB (javajs.util.Rdr.getMagic (is, 55));
+}, "java.io.InputStream");
+c$.isPngZipB = Clazz.defineMethod (c$, "isPngZipB",
+function (bytes) {
+return (bytes[50] == 0 && bytes[51] == 0x50 && bytes[52] == 0x4E && bytes[53] == 0x47 && bytes[54] == 0x4A);
+}, "~A");
+c$.isZipS = Clazz.defineMethod (c$, "isZipS",
+function (is) {
+return javajs.util.Rdr.isZipB (javajs.util.Rdr.getMagic (is, 4));
+}, "java.io.InputStream");
+c$.isZipB = Clazz.defineMethod (c$, "isZipB",
+function (bytes) {
+return (bytes.length >= 4 && bytes[0] == 0x50 && bytes[1] == 0x4B && bytes[2] == 0x03 && bytes[3] == 0x04);
+}, "~A");
+c$.getMagic = Clazz.defineMethod (c$, "getMagic",
+($fz = function (is, n) {
+var abMagic = Clazz.newByteArray (n, 0);
+{
+is.resetStream();
+}try {
+is.mark (n + 1);
+is.read (abMagic, 0, n);
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+} else {
+throw e;
+}
+}
+try {
+is.reset ();
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+} else {
+throw e;
+}
+}
+return abMagic;
+}, $fz.isPrivate = true, $fz), "java.io.InputStream,~N");
+c$.guessMimeTypeForBytes = Clazz.defineMethod (c$, "guessMimeTypeForBytes",
+function (bytes) {
+switch (bytes.length < 2 ? -1 : bytes[1]) {
+case 0:
+return "image/jpg";
+case 0x49:
+return "image/gif";
+case 0x4D:
+return "image/BMP";
+case 0x50:
+return "image/png";
+default:
+return "image/unknown";
+}
+}, "~A");
+c$.getBIS = Clazz.defineMethod (c$, "getBIS",
+function (bytes) {
+return new java.io.BufferedInputStream ( new java.io.ByteArrayInputStream (bytes));
+}, "~A");
+c$.getBR = Clazz.defineMethod (c$, "getBR",
+function (string) {
+return new java.io.BufferedReader ( new java.io.StringReader (string));
+}, "~S");
+c$.getUnzippedInputStream = Clazz.defineMethod (c$, "getUnzippedInputStream",
+function (jzt, bis) {
+while (javajs.util.Rdr.isGzipS (bis)) bis = new java.io.BufferedInputStream (jzt.newGZIPInputStream (bis));
+
+return bis;
+}, "javajs.api.GenericZipTools,java.io.BufferedInputStream");
+c$.getBytesFromSB = Clazz.defineMethod (c$, "getBytesFromSB",
+function (sb) {
+return (javajs.util.Rdr.isBase64 (sb) ? javajs.util.Base64.decodeBase64 (sb.substring (8)) : sb.toBytes (0, -1));
+}, "javajs.util.SB");
+c$.getStreamAsBytes = Clazz.defineMethod (c$, "getStreamAsBytes",
+function (bis, out) {
+var buf = Clazz.newByteArray (1024, 0);
+var bytes = (out == null ? Clazz.newByteArray (4096, 0) : null);
+var len = 0;
+var totalLen = 0;
+while ((len = bis.read (buf, 0, 1024)) > 0) {
+totalLen += len;
+if (out == null) {
+if (totalLen >= bytes.length) bytes = javajs.util.AU.ensureLengthByte (bytes, totalLen * 2);
+System.arraycopy (buf, 0, bytes, totalLen - len, len);
+} else {
+out.write (buf, 0, len);
+}}
+bis.close ();
+if (out == null) {
+return javajs.util.AU.arrayCopyByte (bytes, totalLen);
+}return totalLen + " bytes";
+}, "java.io.BufferedInputStream,javajs.util.OC");
+c$.getBufferedReader = Clazz.defineMethod (c$, "getBufferedReader",
+function (bis, charSet) {
+if (javajs.util.Rdr.getUTFEncodingForStream (bis) === javajs.util.Encoding.NONE) return new java.io.BufferedReader ( new java.io.InputStreamReader (bis, (charSet == null ? "UTF-8" : charSet)));
+var bytes = javajs.util.Rdr.getLimitedStreamBytes (bis, -1);
+bis.close ();
+return javajs.util.Rdr.getBR (charSet == null ? javajs.util.Rdr.fixUTF (bytes) : String.instantialize (bytes, charSet));
+}, "java.io.BufferedInputStream,~S");
+c$.getLimitedStreamBytes = Clazz.defineMethod (c$, "getLimitedStreamBytes",
+function (is, n) {
+var buflen = (n > 0 && n < 1024 ? n : 1024);
+var buf = Clazz.newByteArray (buflen, 0);
+var bytes = Clazz.newByteArray (n < 0 ? 4096 : n, 0);
+var len = 0;
+var totalLen = 0;
+if (n < 0) n = 2147483647;
+while (totalLen < n && (len = is.read (buf, 0, buflen)) > 0) {
+totalLen += len;
+if (totalLen > bytes.length) bytes = javajs.util.AU.ensureLengthByte (bytes, totalLen * 2);
+System.arraycopy (buf, 0, bytes, totalLen - len, len);
+if (n != 2147483647 && totalLen + buflen > bytes.length) buflen = bytes.length - totalLen;
+}
+if (totalLen == bytes.length) return bytes;
+buf = Clazz.newByteArray (totalLen, 0);
+System.arraycopy (bytes, 0, buf, 0, totalLen);
+return buf;
+}, "java.io.InputStream,~N");
+c$.StreamToUTF8String = Clazz.defineMethod (c$, "StreamToUTF8String",
+function (bis) {
+var data = new Array (1);
+try {
+javajs.util.Rdr.readAllAsString (javajs.util.Rdr.getBufferedReader (bis, "UTF-8"), -1, true, data, 0);
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+} else {
+throw e;
+}
+}
+return data[0];
+}, "java.io.BufferedInputStream");
+c$.readAllAsString = Clazz.defineMethod (c$, "readAllAsString",
+function (br, nBytesMax, allowBinary, data, i) {
+try {
+var sb = javajs.util.SB.newN (8192);
+var line;
+if (nBytesMax < 0) {
+line = br.readLine ();
+if (allowBinary || line != null && line.indexOf ('\0') < 0 && (line.length != 4 || line.charCodeAt (0) != 65533 || line.indexOf ("PNG") != 1)) {
+sb.append (line).appendC ('\n');
+while ((line = br.readLine ()) != null) sb.append (line).appendC ('\n');
+
+}} else {
+var n = 0;
+var len;
+while (n < nBytesMax && (line = br.readLine ()) != null) {
+if (nBytesMax - n < (len = line.length) + 1) line = line.substring (0, nBytesMax - n - 1);
+sb.append (line).appendC ('\n');
+n += len + 1;
+}
+}br.close ();
+data[i] = sb.toString ();
+return true;
+} catch (ioe) {
+if (Clazz.exceptionOf (ioe, Exception)) {
+data[i] = ioe.toString ();
+return false;
+} else {
+throw ioe;
+}
+}
+}, "java.io.BufferedReader,~N,~B,~A,~N");
+c$.getPngZipPointAndCount = Clazz.defineMethod (c$, "getPngZipPointAndCount",
+function (bis, pt_count) {
+bis.mark (75);
+try {
+var data = javajs.util.Rdr.getLimitedStreamBytes (bis, 74);
+bis.reset ();
+var pt = 0;
+for (var i = 64, f = 1; --i > 54; f *= 10) pt += (data[i] - 48) * f;
+
+var n = 0;
+for (var i = 74, f = 1; --i > 64; f *= 10) n += (data[i] - 48) * f;
+
+pt_count[0] = pt;
+pt_count[1] = n;
+} catch (e) {
+pt_count[1] = 0;
+}
+}, "java.io.BufferedInputStream,~A");
+c$.getPngZipStream = Clazz.defineMethod (c$, "getPngZipStream",
+function (bis, asNewStream) {
+if (!javajs.util.Rdr.isPngZipStream (bis)) return bis;
+var data = Clazz.newByteArray (0, 0);
+bis.mark (75);
+try {
+var pt_count = Clazz.newIntArray (2, 0);
+javajs.util.Rdr.getPngZipPointAndCount (bis, pt_count);
+if (pt_count[1] != 0) {
+var pt = pt_count[0];
+while (pt > 0) pt -= bis.skip (pt);
+
+if (!asNewStream) return bis;
+data = javajs.util.Rdr.getLimitedStreamBytes (bis, pt_count[1]);
+}} catch (e) {
+} finally {
+try {
+if (asNewStream) bis.close ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+}
+return javajs.util.Rdr.getBIS (data);
+}, "java.io.BufferedInputStream,~B");
+c$.getZipRoot = Clazz.defineMethod (c$, "getZipRoot",
+function (fileName) {
+var pt = fileName.indexOf ("|");
+return (pt < 0 ? fileName : fileName.substring (0, pt));
+}, "~S");
+});
diff --git a/bin/javajs/util/SB.js b/bin/javajs/util/SB.js
index daa1518..b597d0f 100644
--- a/bin/javajs/util/SB.js
+++ b/bin/javajs/util/SB.js
@@ -1,151 +1,151 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.decorateAsClass (function () {
-this.sb = null;
-this.s = null;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "SB");
-Clazz.makeConstructor (c$,
-function () {
-{
-this.s = "";
-}});
-c$.newN = Clazz.defineMethod (c$, "newN",
-function (n) {
-{
-return new javajs.util.SB();
-}}, "~N");
-c$.newS = Clazz.defineMethod (c$, "newS",
-function (s) {
-{
-var sb = new javajs.util.SB();
-sb.s = s;
-return sb;
-}}, "~S");
-Clazz.defineMethod (c$, "append",
-function (s) {
-{
-this.s += s
-}return this;
-}, "~S");
-Clazz.defineMethod (c$, "appendC",
-function (c) {
-{
-this.s += c;
-}return this;
-}, "~S");
-Clazz.defineMethod (c$, "appendI",
-function (i) {
-{
-this.s += i
-}return this;
-}, "~N");
-Clazz.defineMethod (c$, "appendB",
-function (b) {
-{
-this.s += b
-}return this;
-}, "~B");
-Clazz.defineMethod (c$, "appendF",
-function (f) {
-{
-var sf = "" + f;
-if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
-sf += ".0" ;
-this.s += sf;
-}return this;
-}, "~N");
-Clazz.defineMethod (c$, "appendD",
-function (d) {
-{
-var sf = "" + d;
-if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
-sf += ".0" ;
-this.s += sf;
-}return this;
-}, "~N");
-Clazz.defineMethod (c$, "appendSB",
-function (buf) {
-{
-this.s += buf.s;
-}return this;
-}, "javajs.util.SB");
-Clazz.defineMethod (c$, "appendO",
-function (data) {
-if (data != null) {
-{
-this.s += data.toString();
-}}return this;
-}, "~O");
-Clazz.defineMethod (c$, "appendCB",
-function (cb, off, len) {
-{
-for (var i = len,j=off; --i >= 0;)
-this.s += cb[j++];
-}}, "~A,~N,~N");
-Clazz.overrideMethod (c$, "toString",
-function () {
-{
-return this.s;
-}});
-Clazz.defineMethod (c$, "length",
-function () {
-{
-return this.s.length;
-}});
-Clazz.defineMethod (c$, "indexOf",
-function (s) {
-{
-return this.s.indexOf(s);
-}}, "~S");
-Clazz.defineMethod (c$, "charAt",
-function (i) {
-{
-return this.s.charAt(i);
-}}, "~N");
-Clazz.defineMethod (c$, "charCodeAt",
-function (i) {
-{
-return this.s.charCodeAt(i);
-}}, "~N");
-Clazz.defineMethod (c$, "setLength",
-function (n) {
-{
-this.s = this.s.substring(0, n);
-}}, "~N");
-Clazz.defineMethod (c$, "lastIndexOf",
-function (s) {
-{
-return this.s.lastIndexOf(s);
-}}, "~S");
-Clazz.defineMethod (c$, "indexOf2",
-function (s, i) {
-{
-return this.s.indexOf(s, i);
-}}, "~S,~N");
-Clazz.defineMethod (c$, "substring",
-function (i) {
-{
-return this.s.substring(i);
-}}, "~N");
-Clazz.defineMethod (c$, "substring2",
-function (i, j) {
-{
-return this.s.substring(i, j);
-}}, "~N,~N");
-Clazz.defineMethod (c$, "toBytes",
-function (off, len) {
-if (len < 0) len = this.length () - off;
-var b = Clazz.newByteArray (len, 0);
-for (var i = off + len, j = i - off; --i >= off; ) b[--j] = (this.charAt (i)).charCodeAt (0);
-
-return b;
-}, "~N,~N");
-Clazz.defineMethod (c$, "replace",
-function (start, end, str) {
-{
-this.s = this.s.substring(0, start) + str + this.s.substring(end);
-}}, "~N,~N,~S");
-Clazz.defineMethod (c$, "insert",
-function (offset, str) {
-this.replace (offset, offset, str);
-}, "~N,~S");
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.decorateAsClass (function () {
+this.sb = null;
+this.s = null;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "SB");
+Clazz.makeConstructor (c$,
+function () {
+{
+this.s = "";
+}});
+c$.newN = Clazz.defineMethod (c$, "newN",
+function (n) {
+{
+return new javajs.util.SB();
+}}, "~N");
+c$.newS = Clazz.defineMethod (c$, "newS",
+function (s) {
+{
+var sb = new javajs.util.SB();
+sb.s = s;
+return sb;
+}}, "~S");
+Clazz.defineMethod (c$, "append",
+function (s) {
+{
+this.s += s
+}return this;
+}, "~S");
+Clazz.defineMethod (c$, "appendC",
+function (c) {
+{
+this.s += c;
+}return this;
+}, "~S");
+Clazz.defineMethod (c$, "appendI",
+function (i) {
+{
+this.s += i
+}return this;
+}, "~N");
+Clazz.defineMethod (c$, "appendB",
+function (b) {
+{
+this.s += b
+}return this;
+}, "~B");
+Clazz.defineMethod (c$, "appendF",
+function (f) {
+{
+var sf = "" + f;
+if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
+sf += ".0" ;
+this.s += sf;
+}return this;
+}, "~N");
+Clazz.defineMethod (c$, "appendD",
+function (d) {
+{
+var sf = "" + d;
+if (sf.indexOf(".") < 0 && sf.indexOf("e") < 0)
+sf += ".0" ;
+this.s += sf;
+}return this;
+}, "~N");
+Clazz.defineMethod (c$, "appendSB",
+function (buf) {
+{
+this.s += buf.s;
+}return this;
+}, "javajs.util.SB");
+Clazz.defineMethod (c$, "appendO",
+function (data) {
+if (data != null) {
+{
+this.s += data.toString();
+}}return this;
+}, "~O");
+Clazz.defineMethod (c$, "appendCB",
+function (cb, off, len) {
+{
+for (var i = len,j=off; --i >= 0;)
+this.s += cb[j++];
+}}, "~A,~N,~N");
+Clazz.overrideMethod (c$, "toString",
+function () {
+{
+return this.s;
+}});
+Clazz.defineMethod (c$, "length",
+function () {
+{
+return this.s.length;
+}});
+Clazz.defineMethod (c$, "indexOf",
+function (s) {
+{
+return this.s.indexOf(s);
+}}, "~S");
+Clazz.defineMethod (c$, "charAt",
+function (i) {
+{
+return this.s.charAt(i);
+}}, "~N");
+Clazz.defineMethod (c$, "charCodeAt",
+function (i) {
+{
+return this.s.charCodeAt(i);
+}}, "~N");
+Clazz.defineMethod (c$, "setLength",
+function (n) {
+{
+this.s = this.s.substring(0, n);
+}}, "~N");
+Clazz.defineMethod (c$, "lastIndexOf",
+function (s) {
+{
+return this.s.lastIndexOf(s);
+}}, "~S");
+Clazz.defineMethod (c$, "indexOf2",
+function (s, i) {
+{
+return this.s.indexOf(s, i);
+}}, "~S,~N");
+Clazz.defineMethod (c$, "substring",
+function (i) {
+{
+return this.s.substring(i);
+}}, "~N");
+Clazz.defineMethod (c$, "substring2",
+function (i, j) {
+{
+return this.s.substring(i, j);
+}}, "~N,~N");
+Clazz.defineMethod (c$, "toBytes",
+function (off, len) {
+if (len < 0) len = this.length () - off;
+var b = Clazz.newByteArray (len, 0);
+for (var i = off + len, j = i - off; --i >= off; ) b[--j] = (this.charAt (i)).charCodeAt (0);
+
+return b;
+}, "~N,~N");
+Clazz.defineMethod (c$, "replace",
+function (start, end, str) {
+{
+this.s = this.s.substring(0, start) + str + this.s.substring(end);
+}}, "~N,~N,~S");
+Clazz.defineMethod (c$, "insert",
+function (offset, str) {
+this.replace (offset, offset, str);
+}, "~N,~S");
diff --git a/bin/javajs/util/StringDataReader.js b/bin/javajs/util/StringDataReader.js
index 691fb2c..229c2ac 100644
--- a/bin/javajs/util/StringDataReader.js
+++ b/bin/javajs/util/StringDataReader.js
@@ -1,12 +1,12 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.DataReader"], "javajs.util.StringDataReader", ["java.io.StringReader"], function () {
-c$ = Clazz.declareType (javajs.util, "StringDataReader", javajs.util.DataReader);
-Clazz.makeConstructor (c$,
-function (data) {
-Clazz.superConstructor (this, javajs.util.StringDataReader, [ new java.io.StringReader (data)]);
-}, "~S");
-Clazz.overrideMethod (c$, "setData",
-function (data) {
-return new javajs.util.StringDataReader (data);
-}, "~O");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.DataReader"], "javajs.util.StringDataReader", ["java.io.StringReader"], function () {
+c$ = Clazz.declareType (javajs.util, "StringDataReader", javajs.util.DataReader);
+Clazz.makeConstructor (c$,
+function (data) {
+Clazz.superConstructor (this, javajs.util.StringDataReader, [ new java.io.StringReader (data)]);
+}, "~S");
+Clazz.overrideMethod (c$, "setData",
+function (data) {
+return new javajs.util.StringDataReader (data);
+}, "~O");
+});
diff --git a/bin/javajs/util/T3.js b/bin/javajs/util/T3.js
index a914fe2..81c591c 100644
--- a/bin/javajs/util/T3.js
+++ b/bin/javajs/util/T3.js
@@ -1,141 +1,141 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.JSONEncodable"], "javajs.util.T3", ["java.lang.Float"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.x = 0;
-this.y = 0;
-this.z = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "T3", null, [javajs.api.JSONEncodable, java.io.Serializable]);
-Clazz.defineMethod (c$, "set",
-function (x, y, z) {
-this.x = x;
-this.y = y;
-this.z = z;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "setA",
-function (t) {
-this.x = t[0];
-this.y = t[1];
-this.z = t[2];
-}, "~A");
-Clazz.defineMethod (c$, "setT",
-function (t1) {
-this.x = t1.x;
-this.y = t1.y;
-this.z = t1.z;
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "add2",
-function (t1, t2) {
-this.x = t1.x + t2.x;
-this.y = t1.y + t2.y;
-this.z = t1.z + t2.z;
-}, "javajs.util.T3,javajs.util.T3");
-Clazz.defineMethod (c$, "add",
-function (t1) {
-this.x += t1.x;
-this.y += t1.y;
-this.z += t1.z;
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "distanceSquared",
-function (p1) {
-var dx = this.x - p1.x;
-var dy = this.y - p1.y;
-var dz = this.z - p1.z;
-return (dx * dx + dy * dy + dz * dz);
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "distance",
-function (p1) {
-return Math.sqrt (this.distanceSquared (p1));
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "sub2",
-function (t1, t2) {
-this.x = t1.x - t2.x;
-this.y = t1.y - t2.y;
-this.z = t1.z - t2.z;
-}, "javajs.util.T3,javajs.util.T3");
-Clazz.defineMethod (c$, "sub",
-function (t1) {
-this.x -= t1.x;
-this.y -= t1.y;
-this.z -= t1.z;
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "scale",
-function (s) {
-this.x *= s;
-this.y *= s;
-this.z *= s;
-}, "~N");
-Clazz.defineMethod (c$, "add3",
-function (a, b, c) {
-this.x += a;
-this.y += b;
-this.z += c;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "scaleT",
-function (p) {
-this.x *= p.x;
-this.y *= p.y;
-this.z *= p.z;
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "scaleAdd2",
-function (s, t1, t2) {
-this.x = s * t1.x + t2.x;
-this.y = s * t1.y + t2.y;
-this.z = s * t1.z + t2.z;
-}, "~N,javajs.util.T3,javajs.util.T3");
-Clazz.defineMethod (c$, "ave",
-function (a, b) {
-this.x = (a.x + b.x) / 2;
-this.y = (a.y + b.y) / 2;
-this.z = (a.z + b.z) / 2;
-}, "javajs.util.T3,javajs.util.T3");
-Clazz.defineMethod (c$, "dot",
-function (v) {
-return this.x * v.x + this.y * v.y + this.z * v.z;
-}, "javajs.util.T3");
-Clazz.defineMethod (c$, "lengthSquared",
-function () {
-return this.x * this.x + this.y * this.y + this.z * this.z;
-});
-Clazz.defineMethod (c$, "length",
-function () {
-return Math.sqrt (this.lengthSquared ());
-});
-Clazz.defineMethod (c$, "normalize",
-function () {
-var d = this.length ();
-this.x /= d;
-this.y /= d;
-this.z /= d;
-});
-Clazz.defineMethod (c$, "cross",
-function (v1, v2) {
-this.set (v1.y * v2.z - v1.z * v2.y, v1.z * v2.x - v1.x * v2.z, v1.x * v2.y - v1.y * v2.x);
-}, "javajs.util.T3,javajs.util.T3");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-var bits = 1;
-bits = 31 * bits + javajs.util.T3.floatToIntBits0 (this.x);
-bits = 31 * bits + javajs.util.T3.floatToIntBits0 (this.y);
-bits = 31 * bits + javajs.util.T3.floatToIntBits0 (this.z);
-return (bits ^ (bits >> 32));
-});
-c$.floatToIntBits0 = Clazz.defineMethod (c$, "floatToIntBits0",
-function (f) {
-return (f == 0 ? 0 : Float.floatToIntBits (f));
-}, "~N");
-Clazz.overrideMethod (c$, "equals",
-function (t1) {
-if (!(Clazz.instanceOf (t1, javajs.util.T3))) return false;
-var t2 = t1;
-return (this.x == t2.x && this.y == t2.y && this.z == t2.z);
-}, "~O");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "{" + this.x + ", " + this.y + ", " + this.z + "}";
-});
-Clazz.overrideMethod (c$, "toJSON",
-function () {
-return "[" + this.x + "," + this.y + "," + this.z + "]";
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.JSONEncodable"], "javajs.util.T3", ["java.lang.Float"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.x = 0;
+this.y = 0;
+this.z = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "T3", null, [javajs.api.JSONEncodable, java.io.Serializable]);
+Clazz.defineMethod (c$, "set",
+function (x, y, z) {
+this.x = x;
+this.y = y;
+this.z = z;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "setA",
+function (t) {
+this.x = t[0];
+this.y = t[1];
+this.z = t[2];
+}, "~A");
+Clazz.defineMethod (c$, "setT",
+function (t1) {
+this.x = t1.x;
+this.y = t1.y;
+this.z = t1.z;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "add2",
+function (t1, t2) {
+this.x = t1.x + t2.x;
+this.y = t1.y + t2.y;
+this.z = t1.z + t2.z;
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "add",
+function (t1) {
+this.x += t1.x;
+this.y += t1.y;
+this.z += t1.z;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "distanceSquared",
+function (p1) {
+var dx = this.x - p1.x;
+var dy = this.y - p1.y;
+var dz = this.z - p1.z;
+return (dx * dx + dy * dy + dz * dz);
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "distance",
+function (p1) {
+return Math.sqrt (this.distanceSquared (p1));
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "sub2",
+function (t1, t2) {
+this.x = t1.x - t2.x;
+this.y = t1.y - t2.y;
+this.z = t1.z - t2.z;
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "sub",
+function (t1) {
+this.x -= t1.x;
+this.y -= t1.y;
+this.z -= t1.z;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "scale",
+function (s) {
+this.x *= s;
+this.y *= s;
+this.z *= s;
+}, "~N");
+Clazz.defineMethod (c$, "add3",
+function (a, b, c) {
+this.x += a;
+this.y += b;
+this.z += c;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "scaleT",
+function (p) {
+this.x *= p.x;
+this.y *= p.y;
+this.z *= p.z;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "scaleAdd2",
+function (s, t1, t2) {
+this.x = s * t1.x + t2.x;
+this.y = s * t1.y + t2.y;
+this.z = s * t1.z + t2.z;
+}, "~N,javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "ave",
+function (a, b) {
+this.x = (a.x + b.x) / 2;
+this.y = (a.y + b.y) / 2;
+this.z = (a.z + b.z) / 2;
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.defineMethod (c$, "dot",
+function (v) {
+return this.x * v.x + this.y * v.y + this.z * v.z;
+}, "javajs.util.T3");
+Clazz.defineMethod (c$, "lengthSquared",
+function () {
+return this.x * this.x + this.y * this.y + this.z * this.z;
+});
+Clazz.defineMethod (c$, "length",
+function () {
+return Math.sqrt (this.lengthSquared ());
+});
+Clazz.defineMethod (c$, "normalize",
+function () {
+var d = this.length ();
+this.x /= d;
+this.y /= d;
+this.z /= d;
+});
+Clazz.defineMethod (c$, "cross",
+function (v1, v2) {
+this.set (v1.y * v2.z - v1.z * v2.y, v1.z * v2.x - v1.x * v2.z, v1.x * v2.y - v1.y * v2.x);
+}, "javajs.util.T3,javajs.util.T3");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+var bits = 1;
+bits = 31 * bits + javajs.util.T3.floatToIntBits0 (this.x);
+bits = 31 * bits + javajs.util.T3.floatToIntBits0 (this.y);
+bits = 31 * bits + javajs.util.T3.floatToIntBits0 (this.z);
+return (bits ^ (bits >> 32));
+});
+c$.floatToIntBits0 = Clazz.defineMethod (c$, "floatToIntBits0",
+function (f) {
+return (f == 0 ? 0 : Float.floatToIntBits (f));
+}, "~N");
+Clazz.overrideMethod (c$, "equals",
+function (t1) {
+if (!(Clazz.instanceOf (t1, javajs.util.T3))) return false;
+var t2 = t1;
+return (this.x == t2.x && this.y == t2.y && this.z == t2.z);
+}, "~O");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "{" + this.x + ", " + this.y + ", " + this.z + "}";
+});
+Clazz.overrideMethod (c$, "toJSON",
+function () {
+return "[" + this.x + "," + this.y + "," + this.z + "]";
+});
+});
diff --git a/bin/javajs/util/T3d.js b/bin/javajs/util/T3d.js
index 4040423..984370c 100644
--- a/bin/javajs/util/T3d.js
+++ b/bin/javajs/util/T3d.js
@@ -1,87 +1,87 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (null, "javajs.util.T3d", ["java.lang.Double"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.x = 0;
-this.y = 0;
-this.z = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "T3d", null, java.io.Serializable);
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "set",
-function (x, y, z) {
-this.x = x;
-this.y = y;
-this.z = z;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "setA",
-function (t) {
-this.x = t[0];
-this.y = t[1];
-this.z = t[2];
-}, "~A");
-Clazz.defineMethod (c$, "setT",
-function (t1) {
-this.x = t1.x;
-this.y = t1.y;
-this.z = t1.z;
-}, "javajs.util.T3d");
-Clazz.defineMethod (c$, "add2",
-function (t1, t2) {
-this.x = t1.x + t2.x;
-this.y = t1.y + t2.y;
-this.z = t1.z + t2.z;
-}, "javajs.util.T3d,javajs.util.T3d");
-Clazz.defineMethod (c$, "add",
-function (t1) {
-this.x += t1.x;
-this.y += t1.y;
-this.z += t1.z;
-}, "javajs.util.T3d");
-Clazz.defineMethod (c$, "sub2",
-function (t1, t2) {
-this.x = t1.x - t2.x;
-this.y = t1.y - t2.y;
-this.z = t1.z - t2.z;
-}, "javajs.util.T3d,javajs.util.T3d");
-Clazz.defineMethod (c$, "sub",
-function (t1) {
-this.x -= t1.x;
-this.y -= t1.y;
-this.z -= t1.z;
-}, "javajs.util.T3d");
-Clazz.defineMethod (c$, "scale",
-function (s) {
-this.x *= s;
-this.y *= s;
-this.z *= s;
-}, "~N");
-Clazz.defineMethod (c$, "scaleAdd",
-function (s, t1, t2) {
-this.x = s * t1.x + t2.x;
-this.y = s * t1.y + t2.y;
-this.z = s * t1.z + t2.z;
-}, "~N,javajs.util.T3d,javajs.util.T3d");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-var xbits = javajs.util.T3d.doubleToLongBits0 (this.x);
-var ybits = javajs.util.T3d.doubleToLongBits0 (this.y);
-var zbits = javajs.util.T3d.doubleToLongBits0 (this.z);
-return (xbits ^ (xbits >> 32) ^ ybits ^ (ybits >> 32) ^ zbits ^ (zbits >> 32));
-});
-c$.doubleToLongBits0 = Clazz.defineMethod (c$, "doubleToLongBits0",
-function (d) {
-return (d == 0 ? 0 : Double.doubleToLongBits (d));
-}, "~N");
-Clazz.overrideMethod (c$, "equals",
-function (t1) {
-if (!(Clazz.instanceOf (t1, javajs.util.T3d))) return false;
-var t2 = t1;
-return (this.x == t2.x && this.y == t2.y && this.z == t2.z);
-}, "~O");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "{" + this.x + ", " + this.y + ", " + this.z + "}";
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (null, "javajs.util.T3d", ["java.lang.Double"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.x = 0;
+this.y = 0;
+this.z = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "T3d", null, java.io.Serializable);
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "set",
+function (x, y, z) {
+this.x = x;
+this.y = y;
+this.z = z;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "setA",
+function (t) {
+this.x = t[0];
+this.y = t[1];
+this.z = t[2];
+}, "~A");
+Clazz.defineMethod (c$, "setT",
+function (t1) {
+this.x = t1.x;
+this.y = t1.y;
+this.z = t1.z;
+}, "javajs.util.T3d");
+Clazz.defineMethod (c$, "add2",
+function (t1, t2) {
+this.x = t1.x + t2.x;
+this.y = t1.y + t2.y;
+this.z = t1.z + t2.z;
+}, "javajs.util.T3d,javajs.util.T3d");
+Clazz.defineMethod (c$, "add",
+function (t1) {
+this.x += t1.x;
+this.y += t1.y;
+this.z += t1.z;
+}, "javajs.util.T3d");
+Clazz.defineMethod (c$, "sub2",
+function (t1, t2) {
+this.x = t1.x - t2.x;
+this.y = t1.y - t2.y;
+this.z = t1.z - t2.z;
+}, "javajs.util.T3d,javajs.util.T3d");
+Clazz.defineMethod (c$, "sub",
+function (t1) {
+this.x -= t1.x;
+this.y -= t1.y;
+this.z -= t1.z;
+}, "javajs.util.T3d");
+Clazz.defineMethod (c$, "scale",
+function (s) {
+this.x *= s;
+this.y *= s;
+this.z *= s;
+}, "~N");
+Clazz.defineMethod (c$, "scaleAdd",
+function (s, t1, t2) {
+this.x = s * t1.x + t2.x;
+this.y = s * t1.y + t2.y;
+this.z = s * t1.z + t2.z;
+}, "~N,javajs.util.T3d,javajs.util.T3d");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+var xbits = javajs.util.T3d.doubleToLongBits0 (this.x);
+var ybits = javajs.util.T3d.doubleToLongBits0 (this.y);
+var zbits = javajs.util.T3d.doubleToLongBits0 (this.z);
+return (xbits ^ (xbits >> 32) ^ ybits ^ (ybits >> 32) ^ zbits ^ (zbits >> 32));
+});
+c$.doubleToLongBits0 = Clazz.defineMethod (c$, "doubleToLongBits0",
+function (d) {
+return (d == 0 ? 0 : Double.doubleToLongBits (d));
+}, "~N");
+Clazz.overrideMethod (c$, "equals",
+function (t1) {
+if (!(Clazz.instanceOf (t1, javajs.util.T3d))) return false;
+var t2 = t1;
+return (this.x == t2.x && this.y == t2.y && this.z == t2.z);
+}, "~O");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "{" + this.x + ", " + this.y + ", " + this.z + "}";
+});
+});
diff --git a/bin/javajs/util/T3i.js b/bin/javajs/util/T3i.js
index bc24bf4..43b9910 100644
--- a/bin/javajs/util/T3i.js
+++ b/bin/javajs/util/T3i.js
@@ -1,48 +1,48 @@
-Clazz.declarePackage ("javajs.util");
-c$ = Clazz.decorateAsClass (function () {
-this.x = 0;
-this.y = 0;
-this.z = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "T3i", null, java.io.Serializable);
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.defineMethod (c$, "set",
-function (x, y, z) {
-this.x = x;
-this.y = y;
-this.z = z;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "setT",
-function (t1) {
-this.x = t1.x;
-this.y = t1.y;
-this.z = t1.z;
-}, "javajs.util.T3i");
-Clazz.defineMethod (c$, "add",
-function (t) {
-this.x += t.x;
-this.y += t.y;
-this.z += t.z;
-}, "javajs.util.T3i");
-Clazz.defineMethod (c$, "scaleAdd",
-function (s, t1, t2) {
-this.x = s * t1.x + t2.x;
-this.y = s * t1.y + t2.y;
-this.z = s * t1.z + t2.z;
-}, "~N,javajs.util.T3i,javajs.util.T3i");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-return this.x ^ this.y ^ this.z;
-});
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (!(Clazz.instanceOf (o, javajs.util.T3i))) return false;
-var t = o;
-return (this.x == t.x && this.y == t.y && this.z == t.z);
-}, "~O");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(" + this.x + ", " + this.y + ", " + this.z + ")";
-});
+Clazz.declarePackage ("javajs.util");
+c$ = Clazz.decorateAsClass (function () {
+this.x = 0;
+this.y = 0;
+this.z = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "T3i", null, java.io.Serializable);
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.defineMethod (c$, "set",
+function (x, y, z) {
+this.x = x;
+this.y = y;
+this.z = z;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "setT",
+function (t1) {
+this.x = t1.x;
+this.y = t1.y;
+this.z = t1.z;
+}, "javajs.util.T3i");
+Clazz.defineMethod (c$, "add",
+function (t) {
+this.x += t.x;
+this.y += t.y;
+this.z += t.z;
+}, "javajs.util.T3i");
+Clazz.defineMethod (c$, "scaleAdd",
+function (s, t1, t2) {
+this.x = s * t1.x + t2.x;
+this.y = s * t1.y + t2.y;
+this.z = s * t1.z + t2.z;
+}, "~N,javajs.util.T3i,javajs.util.T3i");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+return this.x ^ this.y ^ this.z;
+});
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (!(Clazz.instanceOf (o, javajs.util.T3i))) return false;
+var t = o;
+return (this.x == t.x && this.y == t.y && this.z == t.z);
+}, "~O");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(" + this.x + ", " + this.y + ", " + this.z + ")";
+});
diff --git a/bin/javajs/util/T4.js b/bin/javajs/util/T4.js
index 3ea8edd..d33a2c7 100644
--- a/bin/javajs/util/T4.js
+++ b/bin/javajs/util/T4.js
@@ -1,37 +1,37 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.T3"], "javajs.util.T4", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.w = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "T4", javajs.util.T3);
-Clazz.defineMethod (c$, "set4",
-function (x, y, z, w) {
-this.x = x;
-this.y = y;
-this.z = z;
-this.w = w;
-}, "~N,~N,~N,~N");
-Clazz.defineMethod (c$, "scale4",
-function (s) {
-this.scale (s);
-this.w *= s;
-}, "~N");
-Clazz.overrideMethod (c$, "hashCode",
-function () {
-return javajs.util.T3.floatToIntBits0 (this.x) ^ javajs.util.T3.floatToIntBits0 (this.y) ^ javajs.util.T3.floatToIntBits0 (this.z) ^ javajs.util.T3.floatToIntBits0 (this.w);
-});
-Clazz.overrideMethod (c$, "equals",
-function (o) {
-if (!(Clazz.instanceOf (o, javajs.util.T4))) return false;
-var t = o;
-return (this.x == t.x && this.y == t.y && this.z == t.z && this.w == t.w);
-}, "~O");
-Clazz.overrideMethod (c$, "toString",
-function () {
-return "(" + this.x + ", " + this.y + ", " + this.z + ", " + this.w + ")";
-});
-Clazz.overrideMethod (c$, "toJSON",
-function () {
-return "[" + this.x + ", " + this.y + ", " + this.z + ", " + this.w + "]";
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.T3"], "javajs.util.T4", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.w = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "T4", javajs.util.T3);
+Clazz.defineMethod (c$, "set4",
+function (x, y, z, w) {
+this.x = x;
+this.y = y;
+this.z = z;
+this.w = w;
+}, "~N,~N,~N,~N");
+Clazz.defineMethod (c$, "scale4",
+function (s) {
+this.scale (s);
+this.w *= s;
+}, "~N");
+Clazz.overrideMethod (c$, "hashCode",
+function () {
+return javajs.util.T3.floatToIntBits0 (this.x) ^ javajs.util.T3.floatToIntBits0 (this.y) ^ javajs.util.T3.floatToIntBits0 (this.z) ^ javajs.util.T3.floatToIntBits0 (this.w);
+});
+Clazz.overrideMethod (c$, "equals",
+function (o) {
+if (!(Clazz.instanceOf (o, javajs.util.T4))) return false;
+var t = o;
+return (this.x == t.x && this.y == t.y && this.z == t.z && this.w == t.w);
+}, "~O");
+Clazz.overrideMethod (c$, "toString",
+function () {
+return "(" + this.x + ", " + this.y + ", " + this.z + ", " + this.w + ")";
+});
+Clazz.overrideMethod (c$, "toJSON",
+function () {
+return "[" + this.x + ", " + this.y + ", " + this.z + ", " + this.w + "]";
+});
+});
diff --git a/bin/javajs/util/V3.js b/bin/javajs/util/V3.js
index 37591c1..28f7077 100644
--- a/bin/javajs/util/V3.js
+++ b/bin/javajs/util/V3.js
@@ -1,31 +1,31 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.T3"], "javajs.util.V3", null, function () {
-c$ = Clazz.declareType (javajs.util, "V3", javajs.util.T3);
-Clazz.makeConstructor (c$,
-function () {
-});
-c$.newV = Clazz.defineMethod (c$, "newV",
-function (t) {
-return javajs.util.V3.new3 (t.x, t.y, t.z);
-}, "javajs.util.T3");
-c$.newVsub = Clazz.defineMethod (c$, "newVsub",
-function (t1, t2) {
-return javajs.util.V3.new3 (t1.x - t2.x, t1.y - t2.y, t1.z - t2.z);
-}, "javajs.util.T3,javajs.util.T3");
-c$.new3 = Clazz.defineMethod (c$, "new3",
-function (x, y, z) {
-var v = new javajs.util.V3 ();
-v.x = x;
-v.y = y;
-v.z = z;
-return v;
-}, "~N,~N,~N");
-Clazz.defineMethod (c$, "angle",
-function (v1) {
-var xx = this.y * v1.z - this.z * v1.y;
-var yy = this.z * v1.x - this.x * v1.z;
-var zz = this.x * v1.y - this.y * v1.x;
-var cross = Math.sqrt (xx * xx + yy * yy + zz * zz);
-return Math.abs (Math.atan2 (cross, this.dot (v1)));
-}, "javajs.util.V3");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.T3"], "javajs.util.V3", null, function () {
+c$ = Clazz.declareType (javajs.util, "V3", javajs.util.T3);
+Clazz.makeConstructor (c$,
+function () {
+});
+c$.newV = Clazz.defineMethod (c$, "newV",
+function (t) {
+return javajs.util.V3.new3 (t.x, t.y, t.z);
+}, "javajs.util.T3");
+c$.newVsub = Clazz.defineMethod (c$, "newVsub",
+function (t1, t2) {
+return javajs.util.V3.new3 (t1.x - t2.x, t1.y - t2.y, t1.z - t2.z);
+}, "javajs.util.T3,javajs.util.T3");
+c$.new3 = Clazz.defineMethod (c$, "new3",
+function (x, y, z) {
+var v = new javajs.util.V3 ();
+v.x = x;
+v.y = y;
+v.z = z;
+return v;
+}, "~N,~N,~N");
+Clazz.defineMethod (c$, "angle",
+function (v1) {
+var xx = this.y * v1.z - this.z * v1.y;
+var yy = this.z * v1.x - this.x * v1.z;
+var zz = this.x * v1.y - this.y * v1.x;
+var cross = Math.sqrt (xx * xx + yy * yy + zz * zz);
+return Math.abs (Math.atan2 (cross, this.dot (v1)));
+}, "javajs.util.V3");
+});
diff --git a/bin/javajs/util/V3d.js b/bin/javajs/util/V3d.js
index 729c5a3..c3a166e 100644
--- a/bin/javajs/util/V3d.js
+++ b/bin/javajs/util/V3d.js
@@ -1,27 +1,27 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.util.T3d"], "javajs.util.V3d", null, function () {
-c$ = Clazz.declareType (javajs.util, "V3d", javajs.util.T3d);
-Clazz.defineMethod (c$, "cross",
-function (v1, v2) {
-this.set (v1.y * v2.z - v1.z * v2.y, v1.z * v2.x - v1.x * v2.z, v1.x * v2.y - v1.y * v2.x);
-}, "javajs.util.V3d,javajs.util.V3d");
-Clazz.defineMethod (c$, "normalize",
-function () {
-var d = this.length ();
-this.x /= d;
-this.y /= d;
-this.z /= d;
-});
-Clazz.defineMethod (c$, "dot",
-function (v) {
-return this.x * v.x + this.y * v.y + this.z * v.z;
-}, "javajs.util.V3d");
-Clazz.defineMethod (c$, "lengthSquared",
-function () {
-return this.x * this.x + this.y * this.y + this.z * this.z;
-});
-Clazz.defineMethod (c$, "length",
-function () {
-return Math.sqrt (this.lengthSquared ());
-});
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.util.T3d"], "javajs.util.V3d", null, function () {
+c$ = Clazz.declareType (javajs.util, "V3d", javajs.util.T3d);
+Clazz.defineMethod (c$, "cross",
+function (v1, v2) {
+this.set (v1.y * v2.z - v1.z * v2.y, v1.z * v2.x - v1.x * v2.z, v1.x * v2.y - v1.y * v2.x);
+}, "javajs.util.V3d,javajs.util.V3d");
+Clazz.defineMethod (c$, "normalize",
+function () {
+var d = this.length ();
+this.x /= d;
+this.y /= d;
+this.z /= d;
+});
+Clazz.defineMethod (c$, "dot",
+function (v) {
+return this.x * v.x + this.y * v.y + this.z * v.z;
+}, "javajs.util.V3d");
+Clazz.defineMethod (c$, "lengthSquared",
+function () {
+return this.x * this.x + this.y * this.y + this.z * this.z;
+});
+Clazz.defineMethod (c$, "length",
+function () {
+return Math.sqrt (this.lengthSquared ());
+});
+});
diff --git a/bin/javajs/util/XmlUtil.js b/bin/javajs/util/XmlUtil.js
index ee4fff9..68b0ce4 100644
--- a/bin/javajs/util/XmlUtil.js
+++ b/bin/javajs/util/XmlUtil.js
@@ -1,73 +1,73 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (null, "javajs.util.XmlUtil", ["javajs.util.PT"], function () {
-c$ = Clazz.declareType (javajs.util, "XmlUtil");
-Clazz.makeConstructor (c$,
-function () {
-});
-c$.openDocument = Clazz.defineMethod (c$, "openDocument",
-function (data) {
-data.append ("\n");
-}, "javajs.util.SB");
-c$.openTag = Clazz.defineMethod (c$, "openTag",
-function (sb, name) {
-sb.append ("<").append (name).append (">\n");
-}, "javajs.util.SB,~S");
-c$.openTagAttr = Clazz.defineMethod (c$, "openTagAttr",
-function (sb, name, attributes) {
-javajs.util.XmlUtil.appendTagAll (sb, name, attributes, null, false, false);
-sb.append ("\n");
-}, "javajs.util.SB,~S,~A");
-c$.closeTag = Clazz.defineMethod (c$, "closeTag",
-function (sb, name) {
-sb.append ("").append (name).append (">\n");
-}, "javajs.util.SB,~S");
-c$.appendTagAll = Clazz.defineMethod (c$, "appendTagAll",
-function (sb, name, attributes, data, isCdata, doClose) {
-var closer = ">";
-if (name.endsWith ("/")) {
-name = name.substring (0, name.length - 1);
-if (data == null) {
-closer = "/>\n";
-doClose = false;
-}}sb.append ("<").append (name);
-if (attributes != null) for (var i = 0; i < attributes.length; i++) {
-var o = attributes[i];
-if (o == null) continue;
-if (Clazz.instanceOf (o, Array)) for (var j = 0; j < (o).length; j += 2) javajs.util.XmlUtil.appendAttrib (sb, (o)[j], (o)[j + 1]);
-
- else javajs.util.XmlUtil.appendAttrib (sb, o, attributes[++i]);
-}
-sb.append (closer);
-if (data != null) {
-if (isCdata) data = javajs.util.XmlUtil.wrapCdata (data);
-sb.appendO (data);
-}if (doClose) javajs.util.XmlUtil.closeTag (sb, name);
-}, "javajs.util.SB,~S,~A,~O,~B,~B");
-c$.wrapCdata = Clazz.defineMethod (c$, "wrapCdata",
-function (data) {
-var s = "" + data;
-return (s.indexOf ("&") < 0 && s.indexOf ("<") < 0 ? (s.startsWith ("\n") ? "" : "\n") + s : "", "]]]]>") + "]]>");
-}, "~O");
-c$.unwrapCdata = Clazz.defineMethod (c$, "unwrapCdata",
-function (s) {
-return (s.startsWith ("") ? javajs.util.PT.rep (s.substring (9, s.length - 3), "]]]]>", "]]>") : s);
-}, "~S");
-c$.appendTagObj = Clazz.defineMethod (c$, "appendTagObj",
-function (sb, name, attributes, data) {
-javajs.util.XmlUtil.appendTagAll (sb, name, attributes, data, false, true);
-}, "javajs.util.SB,~S,~A,~O");
-c$.appendTag = Clazz.defineMethod (c$, "appendTag",
-function (sb, name, data) {
-if (Clazz.instanceOf (data, Array)) javajs.util.XmlUtil.appendTagAll (sb, name, data, null, false, true);
- else javajs.util.XmlUtil.appendTagAll (sb, name, null, data, false, true);
-}, "javajs.util.SB,~S,~O");
-c$.appendCdata = Clazz.defineMethod (c$, "appendCdata",
-function (sb, name, attributes, data) {
-javajs.util.XmlUtil.appendTagAll (sb, name, attributes, data, true, true);
-}, "javajs.util.SB,~S,~A,~S");
-c$.appendAttrib = Clazz.defineMethod (c$, "appendAttrib",
-function (sb, name, value) {
-if (value == null) return;
-sb.append (" ").appendO (name).append ("=\"").appendO (value).append ("\"");
-}, "javajs.util.SB,~O,~O");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (null, "javajs.util.XmlUtil", ["javajs.util.PT"], function () {
+c$ = Clazz.declareType (javajs.util, "XmlUtil");
+Clazz.makeConstructor (c$,
+function () {
+});
+c$.openDocument = Clazz.defineMethod (c$, "openDocument",
+function (data) {
+data.append ("\n");
+}, "javajs.util.SB");
+c$.openTag = Clazz.defineMethod (c$, "openTag",
+function (sb, name) {
+sb.append ("<").append (name).append (">\n");
+}, "javajs.util.SB,~S");
+c$.openTagAttr = Clazz.defineMethod (c$, "openTagAttr",
+function (sb, name, attributes) {
+javajs.util.XmlUtil.appendTagAll (sb, name, attributes, null, false, false);
+sb.append ("\n");
+}, "javajs.util.SB,~S,~A");
+c$.closeTag = Clazz.defineMethod (c$, "closeTag",
+function (sb, name) {
+sb.append ("").append (name).append (">\n");
+}, "javajs.util.SB,~S");
+c$.appendTagAll = Clazz.defineMethod (c$, "appendTagAll",
+function (sb, name, attributes, data, isCdata, doClose) {
+var closer = ">";
+if (name.endsWith ("/")) {
+name = name.substring (0, name.length - 1);
+if (data == null) {
+closer = "/>\n";
+doClose = false;
+}}sb.append ("<").append (name);
+if (attributes != null) for (var i = 0; i < attributes.length; i++) {
+var o = attributes[i];
+if (o == null) continue;
+if (Clazz.instanceOf (o, Array)) for (var j = 0; j < (o).length; j += 2) javajs.util.XmlUtil.appendAttrib (sb, (o)[j], (o)[j + 1]);
+
+ else javajs.util.XmlUtil.appendAttrib (sb, o, attributes[++i]);
+}
+sb.append (closer);
+if (data != null) {
+if (isCdata) data = javajs.util.XmlUtil.wrapCdata (data);
+sb.appendO (data);
+}if (doClose) javajs.util.XmlUtil.closeTag (sb, name);
+}, "javajs.util.SB,~S,~A,~O,~B,~B");
+c$.wrapCdata = Clazz.defineMethod (c$, "wrapCdata",
+function (data) {
+var s = "" + data;
+return (s.indexOf ("&") < 0 && s.indexOf ("<") < 0 ? (s.startsWith ("\n") ? "" : "\n") + s : "", "]]]]>") + "]]>");
+}, "~O");
+c$.unwrapCdata = Clazz.defineMethod (c$, "unwrapCdata",
+function (s) {
+return (s.startsWith ("") ? javajs.util.PT.rep (s.substring (9, s.length - 3), "]]]]>", "]]>") : s);
+}, "~S");
+c$.appendTagObj = Clazz.defineMethod (c$, "appendTagObj",
+function (sb, name, attributes, data) {
+javajs.util.XmlUtil.appendTagAll (sb, name, attributes, data, false, true);
+}, "javajs.util.SB,~S,~A,~O");
+c$.appendTag = Clazz.defineMethod (c$, "appendTag",
+function (sb, name, data) {
+if (Clazz.instanceOf (data, Array)) javajs.util.XmlUtil.appendTagAll (sb, name, data, null, false, true);
+ else javajs.util.XmlUtil.appendTagAll (sb, name, null, data, false, true);
+}, "javajs.util.SB,~S,~O");
+c$.appendCdata = Clazz.defineMethod (c$, "appendCdata",
+function (sb, name, attributes, data) {
+javajs.util.XmlUtil.appendTagAll (sb, name, attributes, data, true, true);
+}, "javajs.util.SB,~S,~A,~S");
+c$.appendAttrib = Clazz.defineMethod (c$, "appendAttrib",
+function (sb, name, value) {
+if (value == null) return;
+sb.append (" ").appendO (name).append ("=\"").appendO (value).append ("\"");
+}, "javajs.util.SB,~O,~O");
+});
diff --git a/bin/javajs/util/ZipData.js b/bin/javajs/util/ZipData.js
index 8f318ca..8d9db8e 100644
--- a/bin/javajs/util/ZipData.js
+++ b/bin/javajs/util/ZipData.js
@@ -1,45 +1,45 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (null, "javajs.util.ZipData", ["javajs.util.Rdr", "$.ZipTools"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.isEnabled = true;
-this.buf = null;
-this.pt = 0;
-this.nBytes = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.util, "ZipData");
-Clazz.makeConstructor (c$,
-function (nBytes) {
-this.nBytes = nBytes;
-}, "~N");
-Clazz.defineMethod (c$, "addBytes",
-function (byteBuf, nSectorBytes, nBytesRemaining) {
-if (this.pt == 0) {
-if (!javajs.util.Rdr.isGzipB (byteBuf)) {
-this.isEnabled = false;
-return -1;
-}this.buf = Clazz.newByteArray (nBytesRemaining, 0);
-}var nToAdd = Math.min (nSectorBytes, nBytesRemaining);
-System.arraycopy (byteBuf, 0, this.buf, this.pt, nToAdd);
-this.pt += nToAdd;
-return nBytesRemaining - nToAdd;
-}, "~A,~N,~N");
-Clazz.defineMethod (c$, "addTo",
-function (jzt, data) {
-data.append (javajs.util.ZipData.getGzippedBytesAsString (jzt, this.buf));
-}, "javajs.api.GenericZipTools,javajs.util.SB");
-c$.getGzippedBytesAsString = Clazz.defineMethod (c$, "getGzippedBytesAsString",
-function (jzt, bytes) {
-try {
-var bis = jzt.getUnGzippedInputStream (bytes);
-var s = javajs.util.ZipTools.getStreamAsString (bis);
-bis.close ();
-return s;
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-return "";
-} else {
-throw e;
-}
-}
-}, "javajs.api.GenericZipTools,~A");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (null, "javajs.util.ZipData", ["javajs.util.Rdr", "$.ZipTools"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.isEnabled = true;
+this.buf = null;
+this.pt = 0;
+this.nBytes = 0;
+Clazz.instantialize (this, arguments);
+}, javajs.util, "ZipData");
+Clazz.makeConstructor (c$,
+function (nBytes) {
+this.nBytes = nBytes;
+}, "~N");
+Clazz.defineMethod (c$, "addBytes",
+function (byteBuf, nSectorBytes, nBytesRemaining) {
+if (this.pt == 0) {
+if (!javajs.util.Rdr.isGzipB (byteBuf)) {
+this.isEnabled = false;
+return -1;
+}this.buf = Clazz.newByteArray (nBytesRemaining, 0);
+}var nToAdd = Math.min (nSectorBytes, nBytesRemaining);
+System.arraycopy (byteBuf, 0, this.buf, this.pt, nToAdd);
+this.pt += nToAdd;
+return nBytesRemaining - nToAdd;
+}, "~A,~N,~N");
+Clazz.defineMethod (c$, "addTo",
+function (jzt, data) {
+data.append (javajs.util.ZipData.getGzippedBytesAsString (jzt, this.buf));
+}, "javajs.api.GenericZipTools,javajs.util.SB");
+c$.getGzippedBytesAsString = Clazz.defineMethod (c$, "getGzippedBytesAsString",
+function (jzt, bytes) {
+try {
+var bis = jzt.getUnGzippedInputStream (bytes);
+var s = javajs.util.ZipTools.getStreamAsString (bis);
+bis.close ();
+return s;
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+return "";
+} else {
+throw e;
+}
+}
+}, "javajs.api.GenericZipTools,~A");
+});
diff --git a/bin/javajs/util/ZipTools.class b/bin/javajs/util/ZipTools.class
index ee31ca7..6d95ca3 100644
Binary files a/bin/javajs/util/ZipTools.class and b/bin/javajs/util/ZipTools.class differ
diff --git a/bin/javajs/util/ZipTools.js b/bin/javajs/util/ZipTools.js
index 5e0ad7b..fba24e6 100644
--- a/bin/javajs/util/ZipTools.js
+++ b/bin/javajs/util/ZipTools.js
@@ -1,308 +1,308 @@
-Clazz.declarePackage ("javajs.util");
-Clazz.load (["javajs.api.GenericZipTools"], "javajs.util.ZipTools", ["java.io.BufferedInputStream", "$.IOException", "java.lang.Boolean", "java.util.zip.CRC32", "$.GZIPInputStream", "$.ZipEntry", "$.ZipInputStream", "javajs.api.GenericZipInputStream", "$.ZInputStream", "javajs.util.BArray", "$.Lst", "$.PT", "$.Rdr", "$.SB"], function () {
-c$ = Clazz.declareType (javajs.util, "ZipTools", null, javajs.api.GenericZipTools);
-Clazz.makeConstructor (c$,
-function () {
-});
-Clazz.overrideMethod (c$, "newZipInputStream",
-function (is) {
-return javajs.util.ZipTools.newZIS (is);
-}, "java.io.InputStream");
-c$.newZIS = Clazz.defineMethod (c$, "newZIS",
-($fz = function (is) {
-return (Clazz.instanceOf (is, javajs.api.ZInputStream) ? is : Clazz.instanceOf (is, java.io.BufferedInputStream) ? new javajs.api.GenericZipInputStream (is) : new javajs.api.GenericZipInputStream ( new java.io.BufferedInputStream (is)));
-}, $fz.isPrivate = true, $fz), "java.io.InputStream");
-Clazz.overrideMethod (c$, "getAllZipData",
-function (is, subfileList, name0, binaryFileList, fileData) {
-var zis = javajs.util.ZipTools.newZIS (is);
-var ze;
-var listing = new javajs.util.SB ();
-binaryFileList = "|" + binaryFileList + "|";
-var prefix = javajs.util.PT.join (subfileList, '/', 1);
-var prefixd = null;
-if (prefix != null) {
-prefixd = prefix.substring (0, prefix.indexOf ("/") + 1);
-if (prefixd.length == 0) prefixd = null;
-}try {
-while ((ze = zis.getNextEntry ()) != null) {
-var name = ze.getName ();
-if (prefix != null && prefixd != null && !(name.equals (prefix) || name.startsWith (prefixd))) continue;
-listing.append (name).appendC ('\n');
-var sname = "|" + name.substring (name.lastIndexOf ("/") + 1) + "|";
-var asBinaryString = (binaryFileList.indexOf (sname) >= 0);
-var bytes = javajs.util.Rdr.getLimitedStreamBytes (zis, ze.getSize ());
-var str;
-if (asBinaryString) {
-str = this.getBinaryStringForBytes (bytes);
-name += ":asBinaryString";
-} else {
-str = javajs.util.Rdr.fixUTF (bytes);
-}str = "BEGIN Directory Entry " + name + "\n" + str + "\nEND Directory Entry " + name + "\n";
-fileData.put (name0 + "|" + name, str);
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-fileData.put ("#Directory_Listing", listing.toString ());
-}, "java.io.InputStream,~A,~S,~S,java.util.Map");
-Clazz.defineMethod (c$, "getBinaryStringForBytes",
-($fz = function (bytes) {
-var ret = new javajs.util.SB ();
-for (var i = 0; i < bytes.length; i++) ret.append (Integer.toHexString (bytes[i] & 0xFF)).appendC (' ');
-
-return ret.toString ();
-}, $fz.isPrivate = true, $fz), "~A");
-Clazz.overrideMethod (c$, "getZipFileDirectory",
-function (bis, list, listPtr, asBufferedInputStream) {
-var ret;
-if (list == null || listPtr >= list.length) return this.getZipDirectoryAsStringAndClose (bis);
-bis = javajs.util.Rdr.getPngZipStream (bis, true);
-var fileName = list[listPtr];
-var zis = new java.util.zip.ZipInputStream (bis);
-var ze;
-try {
-var isAll = (fileName.equals ("."));
-if (isAll || fileName.lastIndexOf ("/") == fileName.length - 1) {
-ret = new javajs.util.SB ();
-while ((ze = zis.getNextEntry ()) != null) {
-var name = ze.getName ();
-if (isAll || name.startsWith (fileName)) ret.append (name).appendC ('\n');
-}
-var str = ret.toString ();
-return (asBufferedInputStream ? javajs.util.Rdr.getBIS (str.getBytes ()) : str);
-}var pt = fileName.indexOf (":asBinaryString");
-var asBinaryString = (pt > 0);
-if (asBinaryString) fileName = fileName.substring (0, pt);
-fileName = fileName.$replace ('\\', '/');
-while ((ze = zis.getNextEntry ()) != null && !fileName.equals (ze.getName ())) {
-}
-var bytes = (ze == null ? null : javajs.util.Rdr.getLimitedStreamBytes (zis, ze.getSize ()));
-ze = null;
-zis.close ();
-if (bytes == null) return "";
-if (javajs.util.Rdr.isZipB (bytes) || javajs.util.Rdr.isPngZipB (bytes)) return this.getZipFileDirectory (javajs.util.Rdr.getBIS (bytes), list, ++listPtr, asBufferedInputStream);
-if (asBufferedInputStream) return javajs.util.Rdr.getBIS (bytes);
-if (asBinaryString) {
-ret = new javajs.util.SB ();
-for (var i = 0; i < bytes.length; i++) ret.append (Integer.toHexString (bytes[i] & 0xFF)).appendC (' ');
-
-return ret.toString ();
-}if (javajs.util.Rdr.isGzipB (bytes)) bytes = javajs.util.Rdr.getLimitedStreamBytes (this.getUnGzippedInputStream (bytes), -1);
-return javajs.util.Rdr.fixUTF (bytes);
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-return "";
-} else {
-throw e;
-}
-}
-}, "java.io.BufferedInputStream,~A,~N,~B");
-Clazz.overrideMethod (c$, "getZipFileContentsAsBytes",
-function (bis, list, listPtr) {
-var ret = Clazz.newByteArray (0, 0);
-var fileName = list[listPtr];
-if (fileName.lastIndexOf ("/") == fileName.length - 1) return ret;
-try {
-bis = javajs.util.Rdr.getPngZipStream (bis, true);
-var zis = new java.util.zip.ZipInputStream (bis);
-var ze;
-while ((ze = zis.getNextEntry ()) != null) {
-if (!fileName.equals (ze.getName ())) continue;
-var bytes = javajs.util.Rdr.getLimitedStreamBytes (zis, ze.getSize ());
-return ((javajs.util.Rdr.isZipB (bytes) || javajs.util.Rdr.isPngZipB (bytes)) && ++listPtr < list.length ? this.getZipFileContentsAsBytes (javajs.util.Rdr.getBIS (bytes), list, listPtr) : bytes);
-}
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-return ret;
-}, "java.io.BufferedInputStream,~A,~N");
-Clazz.overrideMethod (c$, "getZipDirectoryAsStringAndClose",
-function (bis) {
-var sb = new javajs.util.SB ();
-var s = new Array (0);
-try {
-s = this.getZipDirectoryOrErrorAndClose (bis, null);
-bis.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-for (var i = 0; i < s.length; i++) sb.append (s[i]).appendC ('\n');
-
-return sb.toString ();
-}, "java.io.BufferedInputStream");
-Clazz.overrideMethod (c$, "getZipDirectoryAndClose",
-function (bis, manifestID) {
-var s = new Array (0);
-try {
-s = this.getZipDirectoryOrErrorAndClose (bis, manifestID);
-bis.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-System.out.println (e.toString ());
-} else {
-throw e;
-}
-}
-return s;
-}, "java.io.BufferedInputStream,~S");
-Clazz.defineMethod (c$, "getZipDirectoryOrErrorAndClose",
-($fz = function (bis, manifestID) {
-bis = javajs.util.Rdr.getPngZipStream (bis, true);
-var v = new javajs.util.Lst ();
-var zis = new java.util.zip.ZipInputStream (bis);
-var ze;
-var manifest = null;
-while ((ze = zis.getNextEntry ()) != null) {
-var fileName = ze.getName ();
-if (manifestID != null && fileName.startsWith (manifestID)) manifest = javajs.util.ZipTools.getStreamAsString (zis);
- else if (!fileName.startsWith ("__MACOS")) v.addLast (fileName);
-}
-zis.close ();
-if (manifestID != null) v.add (0, manifest == null ? "" : manifest + "\n############\n");
-return v.toArray ( new Array (v.size ()));
-}, $fz.isPrivate = true, $fz), "java.io.BufferedInputStream,~S");
-c$.getStreamAsString = Clazz.defineMethod (c$, "getStreamAsString",
-function (is) {
-return javajs.util.Rdr.fixUTF (javajs.util.Rdr.getLimitedStreamBytes (is, -1));
-}, "java.io.InputStream");
-Clazz.overrideMethod (c$, "newGZIPInputStream",
-function (is) {
-return new java.io.BufferedInputStream ( new java.util.zip.GZIPInputStream (is, 512));
-}, "java.io.InputStream");
-Clazz.overrideMethod (c$, "getUnGzippedInputStream",
-function (bytes) {
-try {
-return javajs.util.Rdr.getUnzippedInputStream (this, javajs.util.Rdr.getBIS (bytes));
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-return null;
-} else {
-throw e;
-}
-}
-}, "~A");
-Clazz.overrideMethod (c$, "addZipEntry",
-function (zos, fileName) {
-(zos).putNextEntry ( new java.util.zip.ZipEntry (fileName));
-}, "~O,~S");
-Clazz.overrideMethod (c$, "closeZipEntry",
-function (zos) {
-(zos).closeEntry ();
-}, "~O");
-Clazz.overrideMethod (c$, "getZipOutputStream",
-function (bos) {
-{
-return javajs.api.Interface.getInterface(
-"java.util.zip.ZipOutputStream").setZOS(bos);
-}}, "~O");
-Clazz.overrideMethod (c$, "getCrcValue",
-function (bytes) {
-var crc = new java.util.zip.CRC32 ();
-crc.update (bytes, 0, bytes.length);
-return crc.getValue ();
-}, "~A");
-Clazz.overrideMethod (c$, "readFileAsMap",
-function (bis, bdata, name) {
-var pt = (name == null ? -1 : name.indexOf ("|"));
-name = (pt >= 0 ? name.substring (pt + 1) : null);
-try {
-if (javajs.util.Rdr.isPngZipStream (bis)) {
-var isImage = "_IMAGE_".equals (name);
-if (name == null || isImage) bdata.put ((isImage ? "_DATA_" : "_IMAGE_"), new javajs.util.BArray (javajs.util.ZipTools.getPngImageBytes (bis)));
-if (!isImage) this.cacheZipContents (bis, name, bdata, true);
-} else if (javajs.util.Rdr.isZipS (bis)) {
-this.cacheZipContents (bis, name, bdata, true);
-} else if (name == null) {
-bdata.put ("_DATA_", new javajs.util.BArray (javajs.util.Rdr.getLimitedStreamBytes (bis, -1)));
-} else {
-throw new java.io.IOException ("ZIP file " + name + " not found");
-}bdata.put ("$_BINARY_$", Boolean.TRUE);
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-bdata.clear ();
-bdata.put ("_ERROR_", e.getMessage ());
-} else {
-throw e;
-}
-}
-}, "java.io.BufferedInputStream,java.util.Map,~S");
-Clazz.overrideMethod (c$, "cacheZipContents",
-function (bis, fileName, cache, asByteArray) {
-var zis = javajs.util.ZipTools.newZIS (bis);
-var ze;
-var listing = new javajs.util.SB ();
-var n = 0;
-var oneFile = (asByteArray && fileName != null);
-var pt = (oneFile ? fileName.indexOf ("|") : -1);
-var file0 = (pt >= 0 ? fileName : null);
-if (pt >= 0) fileName = fileName.substring (0, pt);
-try {
-while ((ze = zis.getNextEntry ()) != null) {
-var name = ze.getName ();
-if (fileName != null) {
-if (oneFile) {
-if (!name.equalsIgnoreCase (fileName)) continue;
-} else {
-listing.append (name).appendC ('\n');
-}}var nBytes = ze.getSize ();
-var bytes = javajs.util.Rdr.getLimitedStreamBytes (zis, nBytes);
-if (file0 != null) {
-this.readFileAsMap (javajs.util.Rdr.getBIS (bytes), cache, file0);
-return null;
-}n += bytes.length;
-var o = (asByteArray ? new javajs.util.BArray (bytes) : bytes);
-cache.put ((oneFile ? "_DATA_" : (fileName == null ? "" : fileName + "|") + name), o);
-if (oneFile) break;
-}
-zis.close ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-try {
-zis.close ();
-} catch (e1) {
-if (Clazz.exceptionOf (e1, java.io.IOException)) {
-} else {
-throw e1;
-}
-}
-return null;
-} else {
-throw e;
-}
-}
-if (n == 0 || fileName == null) return null;
-System.out.println ("ZipTools cached " + n + " bytes from " + fileName);
-return listing.toString ();
-}, "java.io.BufferedInputStream,~S,java.util.Map,~B");
-c$.getPngImageBytes = Clazz.defineMethod (c$, "getPngImageBytes",
-($fz = function (bis) {
-try {
-if (javajs.util.Rdr.isPngZipStream (bis)) {
-var pt_count = Clazz.newIntArray (2, 0);
-javajs.util.Rdr.getPngZipPointAndCount (bis, pt_count);
-if (pt_count[1] != 0) return javajs.util.ZipTools.deActivatePngZipB (javajs.util.Rdr.getLimitedStreamBytes (bis, pt_count[0]));
-}return javajs.util.Rdr.getLimitedStreamBytes (bis, -1);
-} catch (e) {
-if (Clazz.exceptionOf (e, java.io.IOException)) {
-return null;
-} else {
-throw e;
-}
-}
-}, $fz.isPrivate = true, $fz), "java.io.BufferedInputStream");
-c$.deActivatePngZipB = Clazz.defineMethod (c$, "deActivatePngZipB",
-($fz = function (bytes) {
-if (javajs.util.Rdr.isPngZipB (bytes)) bytes[51] = 32;
-return bytes;
-}, $fz.isPrivate = true, $fz), "~A");
-});
+Clazz.declarePackage ("javajs.util");
+Clazz.load (["javajs.api.GenericZipTools"], "javajs.util.ZipTools", ["java.io.BufferedInputStream", "$.IOException", "java.lang.Boolean", "java.util.zip.CRC32", "$.GZIPInputStream", "$.ZipEntry", "$.ZipInputStream", "javajs.api.GenericZipInputStream", "$.ZInputStream", "javajs.util.BArray", "$.Lst", "$.PT", "$.Rdr", "$.SB"], function () {
+c$ = Clazz.declareType (javajs.util, "ZipTools", null, javajs.api.GenericZipTools);
+Clazz.makeConstructor (c$,
+function () {
+});
+Clazz.overrideMethod (c$, "newZipInputStream",
+function (is) {
+return javajs.util.ZipTools.newZIS (is);
+}, "java.io.InputStream");
+c$.newZIS = Clazz.defineMethod (c$, "newZIS",
+($fz = function (is) {
+return (Clazz.instanceOf (is, javajs.api.ZInputStream) ? is : Clazz.instanceOf (is, java.io.BufferedInputStream) ? new javajs.api.GenericZipInputStream (is) : new javajs.api.GenericZipInputStream ( new java.io.BufferedInputStream (is)));
+}, $fz.isPrivate = true, $fz), "java.io.InputStream");
+Clazz.overrideMethod (c$, "getAllZipData",
+function (is, subfileList, name0, binaryFileList, fileData) {
+var zis = javajs.util.ZipTools.newZIS (is);
+var ze;
+var listing = new javajs.util.SB ();
+binaryFileList = "|" + binaryFileList + "|";
+var prefix = javajs.util.PT.join (subfileList, '/', 1);
+var prefixd = null;
+if (prefix != null) {
+prefixd = prefix.substring (0, prefix.indexOf ("/") + 1);
+if (prefixd.length == 0) prefixd = null;
+}try {
+while ((ze = zis.getNextEntry ()) != null) {
+var name = ze.getName ();
+if (prefix != null && prefixd != null && !(name.equals (prefix) || name.startsWith (prefixd))) continue;
+listing.append (name).appendC ('\n');
+var sname = "|" + name.substring (name.lastIndexOf ("/") + 1) + "|";
+var asBinaryString = (binaryFileList.indexOf (sname) >= 0);
+var bytes = javajs.util.Rdr.getLimitedStreamBytes (zis, ze.getSize ());
+var str;
+if (asBinaryString) {
+str = this.getBinaryStringForBytes (bytes);
+name += ":asBinaryString";
+} else {
+str = javajs.util.Rdr.fixUTF (bytes);
+}str = "BEGIN Directory Entry " + name + "\n" + str + "\nEND Directory Entry " + name + "\n";
+fileData.put (name0 + "|" + name, str);
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+fileData.put ("#Directory_Listing", listing.toString ());
+}, "java.io.InputStream,~A,~S,~S,java.util.Map");
+Clazz.defineMethod (c$, "getBinaryStringForBytes",
+($fz = function (bytes) {
+var ret = new javajs.util.SB ();
+for (var i = 0; i < bytes.length; i++) ret.append (Integer.toHexString (bytes[i] & 0xFF)).appendC (' ');
+
+return ret.toString ();
+}, $fz.isPrivate = true, $fz), "~A");
+Clazz.overrideMethod (c$, "getZipFileDirectory",
+function (bis, list, listPtr, asBufferedInputStream) {
+var ret;
+if (list == null || listPtr >= list.length) return this.getZipDirectoryAsStringAndClose (bis);
+bis = javajs.util.Rdr.getPngZipStream (bis, true);
+var fileName = list[listPtr];
+var zis = new java.util.zip.ZipInputStream (bis);
+var ze;
+try {
+var isAll = (fileName.equals ("."));
+if (isAll || fileName.lastIndexOf ("/") == fileName.length - 1) {
+ret = new javajs.util.SB ();
+while ((ze = zis.getNextEntry ()) != null) {
+var name = ze.getName ();
+if (isAll || name.startsWith (fileName)) ret.append (name).appendC ('\n');
+}
+var str = ret.toString ();
+return (asBufferedInputStream ? javajs.util.Rdr.getBIS (str.getBytes ()) : str);
+}var pt = fileName.indexOf (":asBinaryString");
+var asBinaryString = (pt > 0);
+if (asBinaryString) fileName = fileName.substring (0, pt);
+fileName = fileName.$replace ('\\', '/');
+while ((ze = zis.getNextEntry ()) != null && !fileName.equals (ze.getName ())) {
+}
+var bytes = (ze == null ? null : javajs.util.Rdr.getLimitedStreamBytes (zis, ze.getSize ()));
+ze = null;
+zis.close ();
+if (bytes == null) return "";
+if (javajs.util.Rdr.isZipB (bytes) || javajs.util.Rdr.isPngZipB (bytes)) return this.getZipFileDirectory (javajs.util.Rdr.getBIS (bytes), list, ++listPtr, asBufferedInputStream);
+if (asBufferedInputStream) return javajs.util.Rdr.getBIS (bytes);
+if (asBinaryString) {
+ret = new javajs.util.SB ();
+for (var i = 0; i < bytes.length; i++) ret.append (Integer.toHexString (bytes[i] & 0xFF)).appendC (' ');
+
+return ret.toString ();
+}if (javajs.util.Rdr.isGzipB (bytes)) bytes = javajs.util.Rdr.getLimitedStreamBytes (this.getUnGzippedInputStream (bytes), -1);
+return javajs.util.Rdr.fixUTF (bytes);
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+return "";
+} else {
+throw e;
+}
+}
+}, "java.io.BufferedInputStream,~A,~N,~B");
+Clazz.overrideMethod (c$, "getZipFileContentsAsBytes",
+function (bis, list, listPtr) {
+var ret = Clazz.newByteArray (0, 0);
+var fileName = list[listPtr];
+if (fileName.lastIndexOf ("/") == fileName.length - 1) return ret;
+try {
+bis = javajs.util.Rdr.getPngZipStream (bis, true);
+var zis = new java.util.zip.ZipInputStream (bis);
+var ze;
+while ((ze = zis.getNextEntry ()) != null) {
+if (!fileName.equals (ze.getName ())) continue;
+var bytes = javajs.util.Rdr.getLimitedStreamBytes (zis, ze.getSize ());
+return ((javajs.util.Rdr.isZipB (bytes) || javajs.util.Rdr.isPngZipB (bytes)) && ++listPtr < list.length ? this.getZipFileContentsAsBytes (javajs.util.Rdr.getBIS (bytes), list, listPtr) : bytes);
+}
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+} else {
+throw e;
+}
+}
+return ret;
+}, "java.io.BufferedInputStream,~A,~N");
+Clazz.overrideMethod (c$, "getZipDirectoryAsStringAndClose",
+function (bis) {
+var sb = new javajs.util.SB ();
+var s = new Array (0);
+try {
+s = this.getZipDirectoryOrErrorAndClose (bis, null);
+bis.close ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+for (var i = 0; i < s.length; i++) sb.append (s[i]).appendC ('\n');
+
+return sb.toString ();
+}, "java.io.BufferedInputStream");
+Clazz.overrideMethod (c$, "getZipDirectoryAndClose",
+function (bis, manifestID) {
+var s = new Array (0);
+try {
+s = this.getZipDirectoryOrErrorAndClose (bis, manifestID);
+bis.close ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+System.out.println (e.toString ());
+} else {
+throw e;
+}
+}
+return s;
+}, "java.io.BufferedInputStream,~S");
+Clazz.defineMethod (c$, "getZipDirectoryOrErrorAndClose",
+($fz = function (bis, manifestID) {
+bis = javajs.util.Rdr.getPngZipStream (bis, true);
+var v = new javajs.util.Lst ();
+var zis = new java.util.zip.ZipInputStream (bis);
+var ze;
+var manifest = null;
+while ((ze = zis.getNextEntry ()) != null) {
+var fileName = ze.getName ();
+if (manifestID != null && fileName.startsWith (manifestID)) manifest = javajs.util.ZipTools.getStreamAsString (zis);
+ else if (!fileName.startsWith ("__MACOS")) v.addLast (fileName);
+}
+zis.close ();
+if (manifestID != null) v.add (0, manifest == null ? "" : manifest + "\n############\n");
+return v.toArray ( new Array (v.size ()));
+}, $fz.isPrivate = true, $fz), "java.io.BufferedInputStream,~S");
+c$.getStreamAsString = Clazz.defineMethod (c$, "getStreamAsString",
+function (is) {
+return javajs.util.Rdr.fixUTF (javajs.util.Rdr.getLimitedStreamBytes (is, -1));
+}, "java.io.InputStream");
+Clazz.overrideMethod (c$, "newGZIPInputStream",
+function (is) {
+return new java.io.BufferedInputStream ( new java.util.zip.GZIPInputStream (is, 512));
+}, "java.io.InputStream");
+Clazz.overrideMethod (c$, "getUnGzippedInputStream",
+function (bytes) {
+try {
+return javajs.util.Rdr.getUnzippedInputStream (this, javajs.util.Rdr.getBIS (bytes));
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+return null;
+} else {
+throw e;
+}
+}
+}, "~A");
+Clazz.overrideMethod (c$, "addZipEntry",
+function (zos, fileName) {
+(zos).putNextEntry ( new java.util.zip.ZipEntry (fileName));
+}, "~O,~S");
+Clazz.overrideMethod (c$, "closeZipEntry",
+function (zos) {
+(zos).closeEntry ();
+}, "~O");
+Clazz.overrideMethod (c$, "getZipOutputStream",
+function (bos) {
+{
+return javajs.api.Interface.getInterface(
+"java.util.zip.ZipOutputStream").setZOS(bos);
+}}, "~O");
+Clazz.overrideMethod (c$, "getCrcValue",
+function (bytes) {
+var crc = new java.util.zip.CRC32 ();
+crc.update (bytes, 0, bytes.length);
+return crc.getValue ();
+}, "~A");
+Clazz.overrideMethod (c$, "readFileAsMap",
+function (bis, bdata, name) {
+var pt = (name == null ? -1 : name.indexOf ("|"));
+name = (pt >= 0 ? name.substring (pt + 1) : null);
+try {
+if (javajs.util.Rdr.isPngZipStream (bis)) {
+var isImage = "_IMAGE_".equals (name);
+if (name == null || isImage) bdata.put ((isImage ? "_DATA_" : "_IMAGE_"), new javajs.util.BArray (javajs.util.ZipTools.getPngImageBytes (bis)));
+if (!isImage) this.cacheZipContents (bis, name, bdata, true);
+} else if (javajs.util.Rdr.isZipS (bis)) {
+this.cacheZipContents (bis, name, bdata, true);
+} else if (name == null) {
+bdata.put ("_DATA_", new javajs.util.BArray (javajs.util.Rdr.getLimitedStreamBytes (bis, -1)));
+} else {
+throw new java.io.IOException ("ZIP file " + name + " not found");
+}bdata.put ("$_BINARY_$", Boolean.TRUE);
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+bdata.clear ();
+bdata.put ("_ERROR_", e.getMessage ());
+} else {
+throw e;
+}
+}
+}, "java.io.BufferedInputStream,java.util.Map,~S");
+Clazz.overrideMethod (c$, "cacheZipContents",
+function (bis, fileName, cache, asByteArray) {
+var zis = javajs.util.ZipTools.newZIS (bis);
+var ze;
+var listing = new javajs.util.SB ();
+var n = 0;
+var oneFile = (asByteArray && fileName != null);
+var pt = (oneFile ? fileName.indexOf ("|") : -1);
+var file0 = (pt >= 0 ? fileName : null);
+if (pt >= 0) fileName = fileName.substring (0, pt);
+try {
+while ((ze = zis.getNextEntry ()) != null) {
+var name = ze.getName ();
+if (fileName != null) {
+if (oneFile) {
+if (!name.equalsIgnoreCase (fileName)) continue;
+} else {
+listing.append (name).appendC ('\n');
+}}var nBytes = ze.getSize ();
+var bytes = javajs.util.Rdr.getLimitedStreamBytes (zis, nBytes);
+if (file0 != null) {
+this.readFileAsMap (javajs.util.Rdr.getBIS (bytes), cache, file0);
+return null;
+}n += bytes.length;
+var o = (asByteArray ? new javajs.util.BArray (bytes) : bytes);
+cache.put ((oneFile ? "_DATA_" : (fileName == null ? "" : fileName + "|") + name), o);
+if (oneFile) break;
+}
+zis.close ();
+} catch (e) {
+if (Clazz.exceptionOf (e, Exception)) {
+try {
+zis.close ();
+} catch (e1) {
+if (Clazz.exceptionOf (e1, java.io.IOException)) {
+} else {
+throw e1;
+}
+}
+return null;
+} else {
+throw e;
+}
+}
+if (n == 0 || fileName == null) return null;
+System.out.println ("ZipTools cached " + n + " bytes from " + fileName);
+return listing.toString ();
+}, "java.io.BufferedInputStream,~S,java.util.Map,~B");
+c$.getPngImageBytes = Clazz.defineMethod (c$, "getPngImageBytes",
+($fz = function (bis) {
+try {
+if (javajs.util.Rdr.isPngZipStream (bis)) {
+var pt_count = Clazz.newIntArray (2, 0);
+javajs.util.Rdr.getPngZipPointAndCount (bis, pt_count);
+if (pt_count[1] != 0) return javajs.util.ZipTools.deActivatePngZipB (javajs.util.Rdr.getLimitedStreamBytes (bis, pt_count[0]));
+}return javajs.util.Rdr.getLimitedStreamBytes (bis, -1);
+} catch (e) {
+if (Clazz.exceptionOf (e, java.io.IOException)) {
+return null;
+} else {
+throw e;
+}
+}
+}, $fz.isPrivate = true, $fz), "java.io.BufferedInputStream");
+c$.deActivatePngZipB = Clazz.defineMethod (c$, "deActivatePngZipB",
+($fz = function (bytes) {
+if (javajs.util.Rdr.isPngZipB (bytes)) bytes[51] = 32;
+return bytes;
+}, $fz.isPrivate = true, $fz), "~A");
+});
diff --git a/bin/lang/Messages.properties b/bin/lang/Messages.properties
deleted file mode 100644
index b2bf58b..0000000
--- a/bin/lang/Messages.properties
+++ /dev/null
@@ -1,1247 +0,0 @@
-action.refresh_services = Refresh Services
-action.reset_services = Reset Services
-action.merge_results = Merge Results
-action.load_scheme = Load scheme
-action.save_scheme = Save scheme
-action.save_image = Save Image
-action.paste = Paste
-action.show_html_source = Show HTML Source
-action.print = Print
-action.web_service = Web Service
-action.cancel_job = Cancel Job
-action.start_job = Start Job
-action.revert = Revert
-action.move_down = Move Down
-action.move_up = Move Up
-action.remove_return_datatype = Remove return datatype
-action.add_return_datatype = Add return datatype
-action.remove_input_parameter = Remove selected input parameter
-action.add_input_parameter = Add input parameter
-action.edit = Edit
-action.new = New
-action.open_file = Open file
-action.show_unconserved = Show Unconserved
-action.open_new_alignment = Open new alignment
-action.raise_associated_windows = Raise Associated Windows
-action.minimize_associated_windows = Minimize Associated Windows
-action.close_all = Close all
-action.load_project = Load Project
-action.save_project = Save Project
-action.quit = Quit
-action.expand_views = Expand Views
-action.gather_views = Gather Views
-action.page_setup = Page Setup
-action.reload = Reload
-action.load = Load
-action.open = Open
-action.cancel = Cancel
-action.create = Create
-action.update = Update
-action.delete = Delete
-action.snapshot = Snapshot
-action.clear = Clear
-action.accept = Accept
-action.select_ddbb = --- Select Database ---
-action.undo = Undo
-action.redo = Redo
-action.reset = Reset
-action.remove_left = Remove left
-action.remove_right = Remove right
-action.remove_empty_columns = Remove Empty Columns
-action.remove_all_gaps = Remove All Gaps
-action.left_justify_alignment = Left Justify Alignment
-action.right_justify_alignment = Right Justify Alignment
-action.boxes = Boxes
-action.text = Text
-action.by_pairwise_id = by Pairwise Identity
-action.by_id = by Id
-action.by_length = by Length
-action.by_group = by Group
-action.unmark_as_reference = Unmark as Reference
-action.set_as_reference = Set as Reference
-action.remove = Remove
-action.remove_redundancy = Remove Redundancy...
-action.pairwise_alignment = Pairwise Alignments...
-action.by_rna_helixes = by RNA Helices
-action.user_defined = User Defined...
-action.by_conservation = By Conservation
-action.wrap = Wrap
-action.show_gaps = Show Gaps
-action.show_hidden_markers = Show Hidden Markers
-action.find = Find
-action.undefine_groups = Undefine Groups
-action.create_groups = Create Groups
-action.make_groups_selection = Make Groups For Selection
-action.copy = Copy
-action.cut = Cut
-action.font = Font...
-action.scale_above = Scale Above
-action.scale_left = Scale Left
-action.scale_right = Scale Right
-action.by_tree_order = By Tree Order
-action.sort = Sort
-action.calculate_tree = Calculate Tree
-action.help = Help
-action.by_annotation = by Annotation...
-action.invert_sequence_selection = Invert Sequence Selection
-action.invert_column_selection = Invert Column Selection
-action.show = Show
-action.hide = Hide
-action.ok = OK
-action.set_defaults = Defaults
-action.create_group = Create Group
-action.remove_group = Remove Group
-action.edit_group = Edit Group
-action.border_colour = Border colour
-action.edit_new_group = Edit New Group
-action.hide_sequences = Hide Sequences
-action.sequences = Sequences
-action.ids = IDS
-action.ids_sequences = IDS and sequences
-action.reveal_all = Reveal All
-action.reveal_sequences = Reveal Sequences
-action.find_all = Find all
-action.find_next = Find next
-action.file = File
-action.view = View
-action.annotations = Annotations
-action.change_params = Change Parameters
-action.apply = Apply
-action.apply_threshold_all_groups = Apply threshold to all groups
-action.apply_all_groups = Apply to all Groups
-action.by_chain = By Chain
-action.by_sequence = By Sequence
-action.paste_annotations = Paste Annotations
-action.format = Format
-action.select = Select
-action.new_view = New View
-action.close = Close
-action.add = Add
-action.save_as_default = Save as default
-action.save_as = Save as
-action.save = Save
-action.cancel_fetch = Cancel Fetch
-action.save_omit_hidden_columns = Save / Omit Hidden Regions
-action.change_font = Change Font
-action.change_font_tree_panel = Change Font (Tree Panel)
-action.colour = Colour
-action.calculate = Calculate
-action.select_all = Select all
-action.deselect_all = Deselect all
-action.invert_selection = Invert selection
-action.using_jmol = Using Jmol
-action.link = Link
-action.group_link = Group Link
-action.show_chain = Show Chain
-action.show_group = Show Group
-action.fetch_db_references = Fetch DB References
-action.view_flanking_regions = Show flanking regions
-label.view_flanking_regions = Show sequence data either side of the subsequences involved in this alignment
-label.str = Str:
-label.seq = Seq:
-label.structures_manager = Structures Manager
-label.nickname = Nickname:
-label.url = URL:
-label.input_file_url = Enter URL or Input File
-label.select_feature = Select feature:
-label.name = Name
-label.name_param = Name: {0}
-label.group = Group
-label.group_name = Group Name
-label.group_description = Group Description
-label.edit_group_name_description = Edit Group Name/Description
-label.colour = Colour:
-label.description = Description:
-label.start = Start:
-label.end = End:
-label.current_parameter_set_name = Current parameter set name:
-label.service_action = Service Action:
-label.post_url = POST URL:
-label.url_suffix = URL Suffix
-label.sequence_source = Sequence Source
-label.per_seq = per Sequence
-label.result_vertically_separable = Results are vertically separable
-label.amend = Amend
-label.undo_command = Undo {0}
-label.redo_command = Redo {0}
-label.principal_component_analysis = Principal Component Analysis
-label.average_distance_identity = Average Distance Using % Identity
-label.neighbour_joining_identity = Neighbour Joining Using % Identity
-label.treecalc_title = {0} Using {1}
-label.tree_calc_av = Average Distance
-label.tree_calc_nj = Neighbour Joining
-label.select_score_model = Select score model
-label.score_model_pid = % Identity
-label.score_model_blosum62 = BLOSUM62
-label.score_model_pam250 = PAM 250
-label.score_model_conservation = Physicochemical property conservation
-label.score_model_enhconservation = Physicochemical property conservation
-label.status_bar = Status bar
-label.out_to_textbox = Output to Textbox
-label.clustalx = Clustalx
-label.clustal = Clustal
-label.zappo = Zappo
-label.taylor = Taylor
-label.blc = BLC
-label.fasta = Fasta
-label.msf = MSF
-label.pfam = PFAM
-label.pileup = Pileup
-label.pir = PIR
-label.hydrophobicity = Hydrophobicity
-label.helix_propensity = Helix Propensity
-label.strand_propensity = Strand Propensity
-label.turn_propensity = Turn Propensity
-label.buried_index = Buried Index
-label.purine_pyrimidine = Purine/Pyrimidine
-label.percentage_identity = Percentage Identity
-label.blosum62 = BLOSUM62
-label.blosum62_score = BLOSUM62 Score
-label.tcoffee_scores = T-Coffee Scores
-label.average_distance_bloslum62 = Average Distance Using BLOSUM62
-label.neighbour_blosum62 = Neighbour Joining Using BLOSUM62
-label.show_annotations = Show annotations
-label.hide_annotations = Hide annotations
-label.show_all_seq_annotations = Show sequence related
-label.hide_all_seq_annotations = Hide sequence related
-label.show_all_al_annotations = Show alignment related
-label.hide_all_al_annotations = Hide alignment related
-label.hide_all = Hide all
-label.add_reference_annotations = Add reference annotations
-label.find_tip = Search alignment, selection or sequence ids for a subsequence (ignoring gaps).
Accepts regular expressions - search Help for 'regex' for details.
-label.colour_text = Colour Text
-label.show_non_conversed = Show nonconserved
-label.overview_window = Overview Window
-label.none = None
-label.above_identity_threshold = Above Identity Threshold
-label.show_sequence_features = Show Sequence Features
-label.nucleotide = Nucleotide
-label.protein = Protein
-label.to_new_alignment = To New Alignment
-label.to_this_alignment = Add To This Alignment
-label.apply_colour_to_all_groups = Apply Colour To All Groups
-label.modify_identity_thereshold = Modify Identity Threshold...
-label.modify_conservation_thereshold = Modify Conservation Threshold...
-label.input_from_textbox = Input from textbox
-label.centre_column_labels = Centre column labels
-label.automatic_scrolling = Automatic Scrolling
-label.documentation = Documentation
-label.about = About...
-label.show_sequence_limits = Show Sequence Limits
-label.feature_settings = Feature Settings...
-label.all_columns = All Columns
-label.all_sequences = All Sequences
-label.selected_columns = Selected Columns
-label.selected_sequences = Selected Sequences
-label.except_selected_sequences = All except selected sequences
-label.all_but_selected_region = All but Selected Region (Shift+Ctrl+H)
-label.selected_region = Selected Region
-label.all_sequences_columns = All Sequences and Columns
-label.hide_insertions = Hide columns gapped for selection
-label.hide_selected_annotations = Hide selected annotations
-label.show_selected_annotations = Show selected annotations
-label.group_consensus = Group Consensus
-label.group_conservation = Group Conservation
-label.show_consensus_histogram = Show Consensus Histogram
-label.show_consensus_logo = Show Consensus Logo
-label.norm_consensus_logo = Normalise Consensus Logo
-label.apply_all_groups = Apply to all groups
-label.autocalculated_annotation = Autocalculated Annotation
-label.show_first = Show first
-label.show_last = Show last
-label.struct_from_pdb = Process secondary structure from PDB
-label.use_rnaview = Use RNAView for secondary structure
-label.autoadd_secstr = Add secondary structure annotation to alignment
-label.autoadd_temp = Add Temperature Factor annotation to alignment
-label.structure_viewer = Default structure viewer
-label.chimera_path = Path to Chimera program
-label.chimera_path_tip = Jalview will first try any path entered here, else standard installation locations.
Double-click to browse for file.
-label.invalid_chimera_path = Chimera path not found or not executable
-label.chimera_missing = Chimera structure viewer not found.
Please enter the path to Chimera (if installed),
or download and install UCSF Chimera.
-label.chimera_failed = Error opening Chimera - is it installed?\nCheck path in Preferences, Structure
-label.min_colour = Minimum Colour
-label.max_colour = Maximum Colour
-label.use_original_colours = Use Original Colours
-label.threshold_minmax = Threshold is min/max
-label.represent_group_with = Represent Group with {0}
-label.selection = Selection
-label.group_colour = Group Colour
-label.sequence = Sequence
-label.view_pdb_structure = View PDB Structure
-label.min = Min:
-label.max = Max:
-label.colour_by_label = Colour by label
-label.new_feature = New Feature
-label.match_case = Match Case
-label.view_alignment_editor = View in alignment editor
-label.labels = Labels
-label.output_values = Output Values...
-label.output_points = Output points...
-label.output_transformed_points = Output transformed points
-label.input_data = Input Data...
-label.nucleotide_matrix = Nucleotide matrix
-label.protein_matrix = Protein matrix
-label.show_bootstrap_values = Show Bootstrap Values
-label.show_distances = Show distances
-label.mark_unassociated_leaves = Mark Unassociated Leaves
-label.fit_to_window = Fit To Window
-label.newick_format = Newick Format
-label.select_newick_like_tree_file = Select a newick-like tree file
-label.colours = Colours
-label.view_mapping = View Mapping
-label.wireframe = Wireframe
-label.depthcue = Depthcue
-label.z_buffering = Z Buffering
-label.charge_cysteine = Charge & Cysteine
-label.all_chains_visible = All Chains Visible
-label.successfully_added_features_alignment = Successfully added features to alignment
-label.keyboard_editing_mode = Keyboard editing mode is {0}
-label.paste_features_annotations_Tcoffee_here = Paste your features / annotations / T-coffee score file here.
-label.removed_columns = Removed {0} columns.
-label.removed_empty_columns = Removed {0} empty columns.
-label.paste_newick_tree_file = Paste your Newick tree file here.
-label.order_by_params = Order by {0}
-label.html_content = {0}
-label.paste_pdb_file= Paste your PDB file here.
-label.paste_pdb_file_for_sequence = Paste PDB file for sequence {0}
-label.could_not_parse_newick_file = Could not parse Newick file\!\n {0}
-label.successfully_pasted_tcoffee_scores_to_alignment= Successfully pasted T-Coffee scores to alignment.
-label.failed_add_tcoffee_scores = Failed to add T-Coffee scores:
-label.successfully_pasted_annotation_to_alignment= Successfully pasted annotation to alignment.
-label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file = Couldn't parse pasted text as a valid annotation, feature, GFF, or T-Coffee score file
-label.successfully_pasted_alignment_file = Successfully pasted alignment file
-label.paste_your_alignment_file = Paste your alignment file here
-label.paste_your = Paste your
-label.finished_searching = Finished searching
-label.search_results= Search results {0} : {1}
-label.found_match_for = Found match for {0}
-label.font = Font:
-label.size = Size:
-label.style = Style:
-label.enter_redundancy_threshold = Enter the redundancy threshold
-label.calculating = Calculating....
-label.modify_conservation_visibility = Modify conservation visibility
-label.colour_residues_above_occurence = Colour residues above % occurence
-label.set_this_label_text = set this label text
-label.sequences_from = Sequences from {0}
-label.successfully_loaded_file = Successfully loaded file {0}
-label.successfully_saved_to_file_in_format = Successfully saved to file: {0} in {1} format.
-label.copied_sequences_to_clipboard = Copied {0} sequences to clipboard.
-label.check_file_matches_sequence_ids_alignment = Check that the file matches sequence IDs in the alignment.
-label.problem_reading_tcoffee_score_file = Problem reading T-COFFEE score file
-label.source_to_target = {0} ... {1}
-label.per_sequence_only= Per-sequence only
-label.to_file = to File
-label.to_textbox = to Textbox
-label.jalview = Jalview
-label.csv_spreadsheet = CSV (Spreadsheet)
-label.status = Status
-label.channels = Channels
-label.channel_title_item_count = {0} ({1})
-label.blog_item_published_on_date = {0} {1}
-label.select_das_service_from_table = Select a DAS service from the table to read a full description here.
-label.session_update = Session Update
-label.new_vamsas_session = New Vamsas Session
-label.load_vamsas_session = Load Vamsas Session
-label.save_vamsas_session = Save Vamsas Session
-label.select_vamsas_session_opened_as_new_vamsas_session= Select a vamsas session to be opened as a new vamsas session.
-label.open_saved_vamsas_session = Open a saved VAMSAS session
-label.groovy_console = Groovy Console...
-label.lineart = Lineart
-label.dont_ask_me_again = Don't ask me again
-label.select_eps_character_rendering_style = Select EPS character rendering style
-label.invert_selection = Invert Selection
-label.optimise_order = Optimise Order
-label.seq_sort_by_score = Sequence sort by Score
-label.load_colours = Load Colours
-label.save_colours = Save Colours
-label.fetch_das_features = Fetch DAS Features
-label.selected_database_to_fetch_from = Selected {0} database {1} to fetch from {2}
-label.database_param = Database: {0}
-label.example = Example
-label.example_param = Example: {0}
-label.select_file_format_before_saving = You must select a file format before saving!
-label.file_format_not_specified = File format not specified
-label.alignment_contains_hidden_columns = The Alignment contains hidden regions (hidden sequences/columns).\nDo you want to save only the visible alignment?
-label.couldnt_save_file = Couldn't save file: {0}
-label.error_saving_file = Error Saving File
-label.remove_from_default_list = Remove from default list?
-label.remove_user_defined_colour = Remove user defined colour
-label.you_must_select_least_two_sequences = You must select at least 2 sequences.
-label.invalid_selection = Invalid Selection
-label.principal_component_analysis_must_take_least_four_input_sequences = Principal component analysis must take\nat least 4 input sequences.
-label.sequence_selection_insufficient = Sequence selection insufficient
-label.you_need_more_two_sequences_selected_build_tree = You need to have more than two sequences selected to build a tree!
-label.not_enough_sequences = Not enough sequences
-label.selected_region_to_tree_may_only_contain_residues_or_gaps = The selected region to create a tree may\nonly contain residues or gaps.\nTry using the Pad function in the edit menu,\nor one of the multiple sequence alignment web services.
-label.sequences_selection_not_aligned = Sequences in selection are not aligned
-label.sequences_must_be_aligned_before_creating_tree = The sequences must be aligned before creating a tree.\nTry using the Pad function in the edit menu,\n or one of the multiple sequence alignment web services.
-label.sequences_not_aligned = Sequences not aligned
-label.problem_reading_tree_file = Problem reading tree file
-label.possible_problem_with_tree_file = Possible problem with tree file
-label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation = Please select at least three bases in at least one sequence in order to perform a cDNA translation.
-label.translation_failed = Translation Failed
-label.error_when_translating_sequences_submit_bug_report = Unfortunately, something went wrong when translating your sequences.\nPlease take a look in the Jalview java console\nand submit a bug report including the stacktrace.
-label.implementation_error = Implementation error:
-label.automatically_associate_pdb_files_with_sequences_same_name = Do you want to automatically associate the {0} PDB files with sequences in the alignment that have the same name?
-label.automatically_associate_pdb_files_by_name = Automatically Associate PDB files by name
-label.ignore_unmatched_dropped_files_info = Do you want to
ignore the {0} files whose names did not match any sequence IDs ?
-label.ignore_unmatched_dropped_files = Ignore unmatched dropped files?
-label.view_name_original = Original
-label.enter_view_name = Enter View Name
-label.enter_label = Enter label
-label.enter_label_for_the_structure = Enter a label for the structure?
-label.pdb_entry_is_already_displayed = {0} is already displayed.\nDo you want to re-use this viewer ?
-label.map_sequences_to_visible_window = Map Sequences to Visible Window: {0}
-label.add_pdbentry_to_view = Do you want to add {0} to the view called\n{1}\n
-label.align_to_existing_structure_view = Align to existing structure view
-label.pdb_entries_couldnt_be_retrieved = The following pdb entries could not be retrieved from the PDB\:\n{0}\nPlease retry, or try downloading them manually.
-label.couldnt_load_file = Couldn't load file
-label.couldnt_find_pdb_id_in_file = Couldn't find a PDB id in the file supplied. Please enter an Id to identify this structure.
-label.no_pdb_id_in_file = No PDB Id in File
-label.couldnt_read_pasted_text = Couldn't read the pasted text {0}
-label.error_parsing_text = Error parsing text
-label.enter_local_das_source = Enter Nickname & URL of Local DAS Source
-label.you_can_only_edit_or_remove_local_das_sources = You can only edit or remove local DAS Sources!
-label.public_das_source = Public DAS source - not editable
-label.input_alignment_from_url = Input Alignment From URL
-label.input_alignment = Input Alignment
-label.couldnt_import_as_vamsas_session = Couldn't import {0} as a new vamsas session.
-label.vamsas_document_import_failed = Vamsas Document Import Failed
-label.couldnt_locate = Couldn't locate {0}
-label.url_not_found = URL not found
-label.no_link_selected = No link selected
-label.new_sequence_url_link = New sequence URL link
-label.cannot_edit_annotations_in_wrapped_view = Cannot edit annotations in wrapped view
-label.wrapped_view_no_edit = Wrapped view - no edit
-label.error_retrieving_data = Error Retrieving Data
-label.user_colour_scheme_must_have_name = User colour scheme must have a name
-label.no_name_colour_scheme = No name for colour scheme
-label.invalid_url = Invalid URL !
-label.error_loading_file = Error loading file
-label.problems_opening_file = Encountered problems opening {0}!!
-label.file_open_error = File open error
-label.no_das_sources_selected_warn = No das sources were selected.\nPlease select some sources and\ntry again.
-label.no_das_sources_selected_title = No DAS Sources Selected
-label.colour_scheme_exists_overwrite = Colour scheme {0} exists.\nContinue saving colour scheme as {1}?"
-label.duplicate_scheme_name = Duplicate scheme name
-label.jalview_new_questionnaire = There is a new Questionnaire available. Would you like to complete it now ?\n
-label.jalview_user_survey = Jalview User Survey
-label.alignment_properties = Alignment Properties: {0}
-label.alignment_props = Alignment Properties
-label.input_cut_paste = Cut & Paste Input
-label.input_cut_paste_params = Cut & Paste Input - {0}
-label.alignment_output_command = Alignment output - {0}
-label.annotations = Annotations
-label.structure_options = Structure Options
-label.features = Features
-label.overview_params = Overview {0}
-label.paste_newick_file = Paste Newick file
-label.load_tree_from_file = From File -
-label.colour_by_annotation = Colour by Annotation
-label.selection_output_command = Selection output - {0}
-label.annotation_for_displayid =
Annotation for {0}
-label.pdb_sequence_mapping = PDB - Sequence Mapping
-label.pca_details = PCA details
-label.redundancy_threshold_selection = Redundancy threshold selection
-label.user_defined_colours = User defined colours
-label.jalviewLite_release = JalviewLite - Release {0}
-label.jaview_build_date = Build date: {0}
-label.jalview_authors_1 = Authors: Jim Procter, Andrew Waterhouse, Mungo Carstairs, Tochukwu Ofoegbu, Lauren Lui, Jan Engelhardt,
-label.jalview_authors_2 = Natasha Sherstnev, Daniel Barton, Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton.
-label.jalview_dev_managers = Development managed by The Barton Group, University of Dundee, Scotland, UK.
-label.jalview_distribution_lists = For help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list
-label.jalview_please_cite = If you use Jalview, please cite:
-label.jalview_cite_1_authors = Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)
-label.jalview_cite_1_title = Jalview Version 2 - a multiple sequence alignment editor and analysis workbench
-label.jalview_cite_1_ref = Bioinformatics doi: 10.1093/bioinformatics/btp033
-label.right_click = Right click
-label.to_add_annotation = to add annotation
-label.alignment_has_no_annotations = Alignment has no annotations
-label.retrieving_pdb_data = Retrieving PDB data...
-label.label = Label
-label.no_features_added_to_this_alignment = No Features added to this alignment!!
-label.features_can_be_added_from_searches_1 = (Features can be added from searches or
-label.features_can_be_added_from_searches_2 = from Jalview / GFF features files)
-label.calculating_pca= Calculating PCA
-label.reveal_columns = Reveal Columns
-label.jalview_cannot_open_file = Jalview can't open file
-label.jalview_applet = Jalview applet
-label.loading_data = Loading data
-label.memory_stats = Total Free Memory: {0} MB; Max Memory: {1} MB; {2} %
-label.calculating_tree = Calculating tree
-label.state_queueing = queuing
-label.state_running = running
-label.state_complete = complete
-label.state_completed = finished
-label.state_job_cancelled = job cancelled!!
-label.state_job_error = job error!
-label.server_error_try_later = Server Error! (try later)
-label.error_loading_pdb_data = Error loading PDB data!!
-label.fetching_pdb_data = Fetching PDB data...
-label.structure_type = Structure type
-label.settings_for_type = Settings for {0}
-label.view_full_application = View in Full Application
-label.load_associated_tree = Load Associated Tree ...
-label.load_features_annotations = Load Features/Annotations ...
-label.export_features = Export Features ...
-label.export_annotations = Export Annotations ...
-label.to_upper_case = To Upper Case
-label.to_lower_case = To Lower Case
-label.toggle_case = Toggle Case
-label.edit_name_description = Edit Name/Description ...
-label.create_sequence_feature = Create Sequence Feature ...
-label.edit_sequence = Edit Sequence
-label.edit_sequences = Edit Sequences
-label.sequence_details = Sequence Details
-label.jmol_help = Jmol Help
-label.chimera_help = Chimera Help
-label.close_viewer = Close Viewer
-label.confirm_close_chimera = This will close Jalview''s connection to {0}. Do you want to close the Chimera window as well?
-label.chimera_help = Chimera Help
-label.all = All
-label.sort_by = Sort alignment by
-label.sort_by_score = Sort by Score
-label.sort_by_density = Sort by Density
-label.sequence_sort_by_density = Sequence sort by Density
-label.sort_ann_by = Sort annotations by
-label.sort_annotations_by_sequence = Sort by sequence
-label.sort_annotations_by_label = Sort by label
-label.reveal = Reveal
-label.hide_columns = Hide Columns
-label.load_jalview_annotations = Load Jalview Annotations or Features File
-label.load_tree_file = Load a tree file
-label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences = Retrieve and parse sequence database records for the alignment or the currently selected sequences
-label.standard_databases = Standard Databases
-label.fetch_embl_uniprot = Fetch from EMBL/EMBLCDS or Uniprot/PDB and any selected DAS sources
-label.reset_min_max_colours_to_defaults = Reset min and max colours to defaults from user preferences.
-label.align_structures_using_linked_alignment_views = Align structures using {0} linked alignment views
-label.connect_to_session = Connect to session {0}
-label.threshold_feature_display_by_score = Threshold the feature display by score.
-label.threshold_feature_no_thereshold = No Threshold
-label.threshold_feature_above_thereshold = Above Threshold
-label.threshold_feature_below_thereshold = Below Threshold
-label.adjust_thereshold = Adjust threshold
-label.toggle_absolute_relative_display_threshold = Toggle between absolute and relative display threshold.
-label.display_features_same_type_different_label_using_different_colour = Display features of the same type with a different label using a different colour. (e.g. domain features)
-label.select_colour_minimum_value = Select Colour for Minimum Value
-label.select_colour_maximum_value = Select Colour for Maximum Value
-label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment = Open a new structure viewer with all structures associated with the current selection and superimpose them using the alignment.
-label.open_url_param = Open URL {0}
-label.open_url_seqs_param = Open URL ({0}..) ({1} seqs)
-label.load_pdb_file_associate_with_sequence = Load a PDB file and associate it with sequence {0}
-label.reveal_hidden_columns = Reveal Hidden Columns with Right Mouse Button
-label.dark_colour = Dark Colour
-label.light_colour = Light Colour
-label.highlightnode = Left click to select leaves. Double-click to invert leaves. Right click to change colour.
-label.load_colour_scheme = Load colour scheme
-label.copy_format_from = Copy format from
-label.toggle_enabled_views = When enabled, allows many views to be selected.
-label.select_all_views = Select all views
-label.select_many_views = Select many views
-label.edit_notes_parameter_set = Click to edit the notes for this parameter set.
-label.open_local_file = Open local file
-label.enable_automatically_sort_alignment_when_open_new_tree = Enable this to automatically sort the alignment when you open a new tree.
-label.listen_for_selections = Listen for selections
-label.selections_mirror_selections_made_same_sequences_other_views = When selected, selections in this view will mirror selections made on the same sequences in other views.
-label.toggle_sequence_visibility = Shift+H toggles sequence visiblity
-label.toggle_columns_visibility = Ctrl+H toggles column visiblity.
-label.toggles_visibility_hidden_selected_regions = H toggles visibility of hidden or selected regions
-label.rename_tab_eXpand_reGroup= Right-click to rename tab Press X to eXpand tabs, G to reGroup.
-label.right_align_sequence_id = Right Align Sequence Id
-label.sequence_id_tooltip = Sequence ID Tooltip
-label.no_services =
-label.select_copy_raw_html = Select this if you want to copy raw html
-label.share_data_vamsas_applications = Share data with other vamsas applications
-label.connect_to = Connect to
-label.join_existing_vamsas_session = Join an existing vamsas session
-label.from_url = from URL
-label.any_trees_calculated_or_loaded_alignment_automatically_sort = When selected, any trees calculated or loaded onto the alignment will automatically sort the alignment
-label.sort_with_new_tree = Sort With New Tree
-label.from_textbox = from Textbox
-label.window = Window
-label.preferences = Preferences
-label.tools = Tools
-label.fetch_sequences = Fetch Sequence(s)
-label.stop_vamsas_session = Stop Vamsas Session
-label.collect_garbage = Collect Garbage
-label.show_memory_usage = Show Memory Usage
-label.show_java_console = Show Java Console
-label.show_jalview_news = Show Jalview News
-label.take_snapshot = Take snapshot
-label.monospaced_fonts_faster_to_render = Monospaced fonts are faster to render
-label.anti_alias_fonts = Anti-alias Fonts (Slower to render)
-label.monospaced_font= Monospaced
-label.quality = Quality
-label.maximize_window = Maximize Window
-label.conservation = Conservation
-label.consensus = Consensus
-label.histogram = Histogram
-label.logo = Logo
-label.non_positional_features = List Non-positional Features
-label.database_references = List Database References
-label.share_selection_across_views = Share selection across views
-label.scroll_highlighted_regions = Scroll to highlighted regions
-label.gap_symbol = Gap Symbol
-label.prot_alignment_colour = Protein Alignment Colour
-label.nuc_alignment_colour = Nucleotide Alignment Colour
-label.address = Address
-label.port = Port
-label.default_browser_unix = Default Browser (Unix)
-label.send_usage_statistics = Send usage statistics
-label.check_for_questionnaires = Check for questionnaires
-label.check_for_latest_version = Check for latest version
-label.url_linkfrom_sequence_id = URL link from Sequence ID
-label.use_proxy_server = Use a proxy server
-label.eps_rendering_style = EPS rendering style
-label.append_start_end = Append /start-end (/15-380)
-label.full_sequence_id = Full Sequence Id
-label.smooth_font = Smooth Font
-label.autocalculate_consensus = AutoCalculate Consensus
-label.pad_gaps = Pad Gaps
-label.pad_gaps_when_editing = Pad Gaps When Editing
-label.automatically_set_id_width = Automatically set ID width
-label.figure_id_column_width = Figure ID column width
-label.use_modeller_output = Use Modeller Output
-label.wrap_alignment = Wrap Alignment
-label.right_align_ids = Right Align Ids
-label.sequence_name_italics = Italic Sequence Ids
-label.open_overview = Open Overview
-label.default_colour_scheme_for_alignment = Default Colour Scheme for alignment
-label.annotation_shading_default = Annotation Shading Default
-label.default_minimum_colour_annotation_shading = Default Minimum Colour for annotation shading
-label.default_maximum_colour_annotation_shading = Default Maximum Colour for annotation shading
-label.visual = Visual
-label.connections = Connections
-label.output = Output
-label.editing = Editing
-label.das_settings = DAS Settings
-label.web_services = Web Services
-label.right_click_to_edit_currently_selected_parameter = Right click to edit currently selected parameter.
-label.let_jmol_manage_structure_colours = Let Jmol manage structure colours
-label.let_chimera_manage_structure_colours = Let Chimera manage structure colours
-label.marks_leaves_tree_not_associated_with_sequence = Marks leaves of tree not associated with a sequence
-label.index_web_services_menu_by_host_site = Index web services in menu by the host site
-label.option_want_informed_web_service_URL_cannot_be_accessed_jalview_when_starts_up = Check this option if you want to be informed when a web service URL cannot be accessed by Jalview when it starts up
-label.new_service_url = New Service URL
-label.edit_service_url = Edit Service URL
-label.delete_service_url = Delete Service URL
-label.details = Details
-label.options = Options
-label.parameters = Parameters
-label.available_das_sources = Available DAS Sources
-label.full_details = Full Details
-label.authority = Authority
-label.type = Type
-label.proxy_server = Proxy Server
-label.file_output = File Output
-label.select_input_type = Select input type
-label.set_options_for_type = Set options for type
-label.data_input_parameters = Data input parameters
-label.data_returned_by_service = Data returned by service
-label.rsbs_encoded_service = RSBS Encoded Service
-label.parsing_errors = Parsing errors
-label.simple_bioinformatics_rest_services = Simple Bioinformatics Rest Services
-label.web_service_discovery_urls = Web Service Discovery URLS
-label.input_parameter_name = Input Parameter name
-label.short_descriptive_name_for_service = Short descriptive name for service
-label.function_service_performs = What kind of function the service performs (e.g. alignment, analysis, search, etc).
-label.brief_description_service = Brief description of service
-label.url_post_data_service = URL to post data to service. Include any special parameters needed here
-label.optional_suffix = Optional suffix added to URL when retrieving results from service
-label.preferred_gap_character = Which gap character does this service prefer?
-label.gap_character = Gap character
-label.move_return_type_up_order= Move return type up order
-label.move_return_type_down_order= Move return type down order
-label.update_user_parameter_set = Update this existing user parameter set
-label.delete_user_parameter_set = Delete the currently selected user parameter set
-label.create_user_parameter_set = Create a new parameter set with the current settings.
-label.revert_changes_user_parameter_set = Undo all changes to the current parameter set
-label.start_job_current_settings = Start Job with current settings
-label.cancel_job_close_dialog = Close this dialog and cancel job
-label.input_output = Input/Output
-label.cut_paste = Cut'n'Paste
-label.adjusting_parameters_for_calculation = Adjusting parameters for existing Calculation
-label.2d_rna_structure_line = 2D RNA {0} (alignment)
-label.2d_rna_sequence_name = 2D RNA - {0}
-label.edit_name_and_description_current_group = Edit name and description of current group.
-label.view_structure_for = View structure for {0}
-label.view_all_structures = View all {0} structures.
-label.view_all_representative_structures = View all {0} representative structures.
-label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment = Opens a new structure viewer with all representative structures\nassociated with the current selection\nsuperimposed with the current alignment.
-label.associate_structure_with_sequence = Associate Structure with Sequence
-label.from_file = from file
-label.enter_pdb_id = Enter PDB Id
-label.discover_pdb_ids = Discover PDB ids
-label.text_colour = Text Colour
-label.structure = Structure
-label.view_structure = View Structure
-label.view_protein_structure = View Protein Structure
-label.view_rna_structure = View Nucleotide Structure
-label.clustalx_colours = Clustalx colours
-label.above_identity_percentage = Above % Identity
-label.create_sequence_details_report_annotation_for = Annotation for {0}
-label.sequence_details_for = Sequence Details for {0}
-label.sequence_name = Sequence Name
-label.sequence_description = Sequence Description
-label.edit_sequence_name_description = Edit Sequence Name/Description
-label.spaces_converted_to_backslashes = Spaces have been converted to _
-label.no_spaces_allowed_sequence_name = No spaces allowed in Sequence Name
-label.select_outline_colour = Select Outline Colour
-label.web_browser_not_found_unix = Unixers\: Couldn't find default web browser.\nAdd the full path to your browser in Preferences."
-label.web_browser_not_found = Web browser not found
-label.select_pdb_file_for = Select a PDB file for {0}
-label.html = HTML
-label.wrap = Wrap
-label.show_database_refs = Show Database Refs
-label.show_non_positional_features = Show Non-Positional Features
-label.save_png_image = Save As PNG Image
-label.load_tree_for_sequence_set = Load a tree for this sequence set
-label.export_image = Export Image
-label.vamsas_store = VAMSAS store
-label.translate_cDNA = Translate as cDNA
-label.linked_view_title = Linked cDNA and protein view
-label.align = Align
-label.extract_scores = Extract Scores
-label.get_cross_refs = Get Cross-References
-label.sort_alignment_new_tree = Sort Alignment With New Tree
-label.add_sequences = Add Sequences
-label.new_window = New Window
-label.split_window = Split Window
-label.refresh_available_sources = Refresh Available Sources
-label.use_registry = Use Registry
-label.add_local_source = Add Local Source
-label.set_as_default = Set as Default
-label.show_labels = Show labels
-label.background_colour = Background Colour
-label.associate_nodes_with = Associate Nodes With
-label.jalview_pca_calculation = Jalview PCA Calculation
-label.link_name = Link Name
-label.pdb_file = PDB file
-label.colour_with_jmol = Colour with Jmol
-label.colour_with_chimera = Colour with Chimera
-label.align_structures = Align structures
-label.jmol = Jmol
-label.chimera = Chimera
-label.sort_alignment_by_tree = Sort Alignment By Tree
-label.mark_unlinked_leaves = Mark Unlinked Leaves
-label.associate_leaves_with = Associate Leaves With
-label.save_colour_scheme_with_unique_name_added_to_colour_menu = Save your colour scheme with a unique name and it will be added to the Colour menu
-label.case_sensitive = Case Sensitive
-label.lower_case_colour = Lower Case Colour
-label.index_by_host = Index by host
-label.index_by_type = Index by type
-label.enable_jabaws_services = Enable JABAWS Services
-label.display_warnings = Display warnings
-label.move_url_up = Move URL up
-label.move_url_down = Move URL down
-label.add_sbrs_definition = Add a SBRS definition
-label.edit_sbrs_definition = Edit SBRS definition
-label.delete_sbrs_definition = Delete SBRS definition
-label.your_sequences_have_been_verified = Your sequences have been verified against known sequence databases. Some of the ids have been\n altered, most likely the start/end residue will have been updated.\n Save your alignment to maintain the updated id.\n\n
-label.sequence_names_updated = Sequence names updated
-label.dbref_search_completed = DBRef search completed
-label.show_all_chains = Show all chains
-label.fetch_all_param = Fetch all {0}
-label.paste_new_window = Paste To New Window
-label.settings_for_param = Settings for {0}
-label.view_params = View {0}
-label.all_views = All Views
-label.align_sequences_to_existing_alignment = Align sequences to an existing alignment
-label.realign_with_params = Realign with {0}
-label.calcname_with_default_settings = {0} with Defaults
-label.action_with_default_settings = {0} with default settings
-label.edit_settings_and_run = Edit settings and run...
-label.view_and_change_parameters_before_alignment = View and change the parameters before alignment
-label.run_with_preset_params = Run {0} with preset
-label.view_and_change_parameters_before_running_calculation = View and change parameters before running calculation
-label.view_documentation = View documentation
-label.select_return_type = Select return type
-label.translation_of_params = Translation of {0}
-label.features_for_params = Features for - {0}
-label.annotations_for_params = Annotations for - {0}
-label.generating_features_for_params = Generating features for - {0}
-label.generating_annotations_for_params = Generating annotations for - {0}
-label.varna_params = VARNA - {0}
-label.sequence_feature_settings = Sequence Feature Settings
-label.pairwise_aligned_sequences = Pairwise Aligned Sequences
-label.original_data_for_params = Original Data for {0}
-label.points_for_params = Points for {0}
-label.transformed_points_for_params = Transformed points for {0}
-label.graduated_color_for_params = Graduated Feature Colour for {0}
-label.select_backgroud_colour = Select Background Colour
-label.invalid_font = Invalid Font
-label.separate_multiple_accession_ids = Enter one or more PDB Ids
-label.separate_multiple_query_values = Enter one or more {0}s separated by a semi-colon ";"
-label.search_all = Enter one or more search values separated by a semi-colon ";" (Note: This Searches the entire PDB database)
-label.replace_commas_semicolons = Replace commas with semi-colons
-label.parsing_failed_syntax_errors_shown_below_param = Parsing failed. Syntax errors shown below {0}
-label.parsing_failed_unrecoverable_exception_thrown_param = \nParsing failed. An unrecoverable exception was thrown\:\n {0}
-label.example_query_param = Example query: {0}
-label.enter_value_increase_conservation_visibility = Enter value to increase conservation visibility
-label.enter_percentage_identity_above_which_colour_residues = Enter % identity above which to colour residues
-label.wswublast_client_credits = To display sequence features an exact Uniprot id with 100% sequence identity match must be entered.\nIn order to display these features, try changing the names of your sequences to the ids suggested below.\n\nRunning WSWUBlast at EBI.\nPlease quote Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez R.\nSOAP-based services provided by the European Bioinformatics Institute.\nNucleic Acids Res. 33(1)\:W25-W28 (2005));
-label.blasting_for_unidentified_sequence = BLASTing for unidentified sequences
-label.select_columns_containing = Select columns containing
-label.select_columns_not_containing = Select columns that do not contain
-option.trim_retrieved_seqs = Trim retrieved sequences
-label.trim_retrieved_sequences = When the reference sequence is longer than the sequence that you are working with, only keep the relevant subsequences.
-label.use_sequence_id_1 = Use $SEQUENCE_ID$ or $SEQUENCE_ID=//=$
-label.use_sequence_id_2 = \nto embed sequence id in URL
-label.ws_parameters_for = Parameters for {0}
-label.switch_server = Switch server
-label.choose_jabaws_server = Choose a server for running this service
-label.services_at = Services at {0}
-label.rest_client_submit = {0} using {1}
-label.fetch_retrieve_from =Retrieve from {0}
-label.fetch_retrieve_from_all_sources = Retrieve from all {0} sources in {1} First is :{2}
-#label.feature_settings_click_drag = Click/drag feature types up or down to change render order. Double click to select columns containing feature in alignment/current selection Pressing Alt will select columns outside features rather than inside Pressing Shift to modify current selection (rather than clear current selection) Press CTRL or Command/Meta to toggle columns in/outside features
-label.feature_settings_click_drag = Drag up or down to change render order. Double click to select columns containing feature.
-label.transparency_tip = Adjust transparency to 'see through' feature colours.
-label.opt_and_params_further_details = see further details by right-clicking
-label.opt_and_params_show_brief_desc_image_link = Click to show brief description Right click for further information.
-label.opt_and_params_show_brief_desc = Click to show brief description
-label.adjusts_width_generated_eps_png = Adjusts the width of the generated EPS or PNG file to ensure even the longest sequence ID or annotation label is displayed
-label.manually_specify_width_left_column = Manually specify the width of the left hand column where sequence IDs and annotation labels will be rendered in exported alignment figures. This setting will be ignored if 'Automatically set ID width' is set
-label.job_created_when_checked = When checked, a job is created for every sequence in the current selection.
-label.when_checked_job_visible_region_and_results = When checked, a single job is created for the visible region and results mapped back onto their location in the alignment. Otherwise, a job would be created for every contiguous region visible in the alignment or current selection (e.g. a multiple alignment).
-label.flat_file_representation = Flat file representation of this rest service using the Really Simple Bioinformatics Service formalism
-label.result_of_parsing_rsbs = Results of parsing the RSBS representation
-label.user_preset = User Preset
-label.service_preset = Service Preset
-label.run_with_preset = Run {0} with preset
-label.view_service_doc_url = View {1}
-label.submit_sequence = Submit {0} {1} {2} {3} to {4}
-action.by_title_param = by {0}
-label.alignment = Alignment
-label.secondary_structure_prediction = Secondary Structure Prediction
-label.sequence_database_search = Sequence Database Search
-label.analysis = Analysis
-label.protein_disorder = Protein Disorder
-label.source_from_db_source = Sources from {0}
-label.from_msname = from {0}
-label.superpose_with = Superpose with ...
-action.do = Do
-label.scale_label_to_column = Scale Label to Column
-label.add_new_row = Add New Row
-label.edit_label_description = Edit Label/Description
-label.hide_row = Hide This Row
-label.delete_row = Delete This Row
-label.show_all_hidden_rows = Show All Hidden Rows
-label.export_annotation = Export Annotation
-label.copy_consensus_sequence = Copy Consensus Sequence
-label.helix = Helix
-label.sheet = Sheet
-label.rna_helix = RNA Helix
-label.remove_annotation = Remove Annotation
-label.colour_by = Colour by...
-label.muscle_multiple_protein_sequence_alignment = Muscle Multiple Protein Sequence Alignment
-label.mafft_multiple_sequence_alignment = MAFFT Multiple Sequence Alignment
-label.clustalw_multiple_sequence_alignment = ClustalW Multiple Sequence Alignment
-label.jnet_secondary_structure_prediction = JNet Secondary Structure Prediction
-label.multiharmony = Multi-Harmony
-label.unable_start_web_service_analysis = Unable to start web service analysis
-label.job_couldnt_be_started_check_input = The Job couldn't be started. Please check your input, and the Jalview console for any warning messages.
-label.prompt_each_time = Prompt each time
-label.use_source = Use Source
-label.couldnt_save_project = Couldn't save project
-label.error_whilst_saving_current_state_to = Error whilst saving current state to {0}
-label.error_whilst_loading_project_from = Error whilst loading project from {0}
-label.couldnt_load_project = Couldn't load project
-label.pca_sequences_not_aligned = The sequences must be aligned before calculating PCA.\nTry using the Pad function in the edit menu,\nor one of the multiple sequence alignment web services.
-label.invalid_name_preset_exists = Invalid name - preset already exists.
-label.invalid_name = Invalid name
-label.set_proxy_settings = Please set up your proxy settings in the 'Connections' tab of the Preferences window
-label.proxy_authorization_failed = Proxy Authorization Failed
-label.internal_jalview_error = Internal Jalview Error
-label.secondary_structure_prediction_service_couldnt_be_located = The Secondary Structure Prediction Service named {0} at {1} couldn't be located.
-label.service_called_is_not_msa_service = The Service called \n{0}\nis not a \nMultiple Sequence Alignment Service\!
-label.msa_service_is_unknown = The Multiple Sequence Alignment Service named {0} is unknown
-label.service_called_is_not_seq_search_service = The Service called \n{0}\nis not a \nSequence Search Service\!
-label.seq_search_service_is_unknown = The Sequence Search Service named {0} is unknown
-label.feature_type = Feature Type
-label.display = Display
-label.service_url = Service URL
-label.copied_sequences = Copied sequences
-label.cut_sequences = Cut Sequences
-label.conservation_colour_increment = Conservation Colour Increment ({0})
-label.percentage_identity_thereshold = Percentage Identity Threshold ({0})
-label.error_unsupported_owwner_user_colour_scheme = Unsupported owner for User Colour scheme dialog
-label.save_alignment_to_file = Save Alignment to file
-label.save_features_to_file = Save Features to File
-label.save_annotation_to_file = Save Annotation to File
-label.no_features_on_alignment = No features found on alignment
-label.save_pdb_file = Save PDB File
-label.save_text_to_file = Save Text to File
-label.save_state = Save State
-label.restore_state = Restore State
-label.saving_jalview_project = Saving jalview project {0}
-label.loading_jalview_project = Loading jalview project {0}
-label.save_vamsas_document_archive = Save Vamsas Document Archive
-label.saving_vamsas_doc = Saving VAMSAS Document to {0}
-label.load_feature_colours = Load Feature Colours
-label.save_feature_colours = Save Feature Colour Scheme
-label.dataset_for = {0} Dataset for {1}
-label.select_startup_file = Select startup file
-label.select_default_browser = Select default web browser
-label.save_tree_as_newick = Save tree as newick file
-label.create_eps_from_tree = Create EPS file from tree
-label.create_png_from_tree = Create PNG image from tree
-label.save_colour_scheme = Save colour scheme
-label.edit_params_for = Edit parameters for {0}
-label.choose_filename_for_param_file = Choose a filename for this parameter file
-label.save_as_html = Save as HTML
-label.recently_opened = Recently Opened
-label.blasting_for_unidentified_sequence_jobs_running = BLASTing for unidentified sequences - {0} jobs running.
-label.tree_from = Tree from {0}
-label.webservice_job_title = {0} using {1}
-label.select_visible_region_of = selected {0} region of {1}
-label.visible = Visible
-label.select_unselect_visible_regions_from = select and unselected {0} regions from {1}
-label.visible_region_of = visible region of
-label.webservice_job_title_on = {0} using {1} on {2}
-label.updating_vamsas_session = Updating vamsas session
-label.loading_file = Loading File: {0}
-label.edit_params = Edit {0}
-error.not_implemented = Not implemented
-error.no_such_method_as_clone1_for = No such method as clone1 for {0}
-error.null_from_clone1 = Null from clone1!
-error.implementation_error_sortbyfeature = Implementation Error - sortByFeature method must be one of FEATURE_SCORE, FEATURE_LABEL or FEATURE_DENSITY.
-error.not_yet_implemented = Not yet implemented
-error.unknown_type_dna_or_pep = Unknown Type {0} - dna or pep are the only allowed values.
-error.implementation_error_dont_know_thereshold_annotationcolourgradient = Implementation error: don't know about threshold setting for current AnnotationColourGradient.
-error.implementation_error_embeddedpopup_not_null = Implementation error - embeddedPopup must be non-null
-error.invalid_colour_for_mycheckbox = Invalid color for MyCheckBox
-error.implementation_error_unrecognised_render_object_for_features_type = Implementation Error: Unrecognised render object {0} for features of type {1}
-error.implementation_error_unsupported_feature_colour_object = Implementation error: Unsupported feature colour object.
-error.invalid_separator_parameter = Invalid separator parameter - must be non-zero length
-error.alignment_cigararray_not_implemented = Alignment(CigarArray) not yet implemented
-error.weak_sequencei_equivalence_not_yet_implemented = Weak sequenceI equivalence not yet implemented.
-error.implementation_error_can_only_make_alignmnet_from_cigararray = Implementation Error - can only make an alignment view from a CigarArray of sequences.
-error.empty_view_cannot_be_updated = empty view cannot be updated.
-error.mismatch_between_number_of_sequences_in_block = Mismatch between number of sequences in block {0} ({1}) and the original view ({2})
-error.padding_not_yet_implemented = Padding not yet implemented
-error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view = Mismatch between visible blocks to update and number of contigs in view (contigs=0,blocks={0})
-error.unknown_seq_cigar_operation = Unknown SeqCigar operation {0}
-error.implementation_bug_parse_cigar_string = Implementation bug in parseCigarString
-error.implementation_error_invalid_operation_string = Implementation error. Invalid operation string.
-error.invalid_range_string = Invalid range string (must be zero or positive number)
-error.implementation_error_delete_range_out_of_bounds = Implementation Error: deleteRange out of bounds: start must be non-negative and less than end.
-error.implementation_error = Implementation error
-error.implementation_error_unknown_operation = Implementation Error! Unknown operation {0}
-error.implementation_error_unexpected_null_from_get_sequence_and_deletions = Implementation Error - unexpected null from getSequenceAndDeletions
-error.implementation_error_set_seq_null = Implementation Error - _setSeq(null,...)
-error.implementation_error_s = Implementation Error: _s= {0}
-error.implementation_error_seqcigar_possible = SeqCigar: Possible implementation error: sequence is longer than dataset sequence
-error.implmentation_bug_seq_null = Implementation Bug. Null seq
-error.implementation_bug_cigar_operation_list_range_list = Implementation Bug. Cigar Operation list!= range list
-error.not_yet_implemented_cigar_object_from_cigar_string = NOT YET Implemented: Constructing a Cigar object from a cigar string and a gapped sequence.
-error.implementation_bug_cigar_operation = Implementation Bug. Cigar Operation {0} {1} not one of {2}, {3}, or {4}.
-error.implementation_error_for_new_cigar = Implementation error for new Cigar(SequenceI)
-error.implementation_error_cigar_seq_no_operations = Implementation error: {0}th sequence Cigar has no operations.
-error.implementation_error_jmol_getting_data = Implementation error - Jmol seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016
-error.implementation_error_no_pdbentry_from_index = Implementation error - no corresponding pdbentry (for index {0}) to add sequences mappings to
-error.jmol_version_not_compatible_with_jalview_version = Jmol version {0} is not compatible with this version of Jalview. Report this problem at issues.jalview.org
-error.not_implemented_remove = Remove: Not implemented
-error.not_implemented_clone = Clone: Not implemented
-error.implementation_error_chimera_getting_data = Implementation error - Chimera seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016
-error.call_setprogressbar_before_registering_handler = call setProgressBar before registering the progress bar's handler.
-label.cancelled_params = Cancelled {0}
-error.implementation_error_cannot_show_view_alignment_frame = Implementation error: cannot show a view from another alignment in an AlignFrame.
-error.implementation_error_dont_know_about_thereshold_setting = Implementation error: don't know about threshold setting for current AnnotationColourGradient.
-error.eps_generation_not_implemented = EPS Generation not yet implemented
-error.png_generation_not_implemented = PNG Generation not yet implemented
-error.try_join_vamsas_session_another = Trying to join a vamsas session when another is already connected
-error.invalid_vamsas_session_id = Invalid vamsas session id
-error.implementation_error_cannot_create_groovyshell = Implementation Error. Cannot create groovyShell without Groovy on the classpath!
-label.groovy_support_failed = Jalview Groovy Support Failed
-label.couldnt_create_groovy_shell = Couldn't create the groovy Shell. Check the error log for the details of what went wrong.
-error.unsupported_version_calcIdparam = Unsupported Version for calcIdparam {0}
-error.implementation_error_cant_reorder_tree = Implementation Error: Can't reorder this tree. Not DefaultMutableTreeNode.
-error.invalid_value_for_option = Invalid value {0} for option {1}
-error.implementation_error_cannot_import_vamsas_doc = Implementation Error - cannot import existing vamsas document into an existing session, Yet!
-label.vamsas_doc_couldnt_be_opened_as_new_session = VAMSAS Document could not be opened as a new session - please choose another
-error.implementation_error_vamsas_operation_not_init = Impementation error! Vamsas Operations when client not initialised and connected
-error.jalview_no_connected_vamsas_session = Jalview not connected to Vamsas session
-error.implementation_error_cannot_recover_vamsas_object_mappings = IMPLEMENTATION ERROR: Cannot recover vamsas object mappings - no backup was made
-error.setstatus_called_non_existent_job_pane = setStatus called for non-existent job pane {0}
-error.implementation_error_cannot_find_marshaller_for_param_set =Implementation error: Can't find a marshaller for the parameter set
-error.implementation_error_old_jalview_object_not_bound =IMPLEMENTATION ERROR: old jalview object is not bound ! ({0})
-error.implementation_error_vamsas_doc_class_should_bind_to_type = Implementation Error: Vamsas Document Class {0} should bind to a {1} (found a {2})
-error.implementation_error_jalview_class_should_bind_to_type = Implementation Error: Jalview Class {0} should bind to a {1} (found a {2})
-error.invalid_vamsas_rangetype_cannot_resolve_lists = Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!
-error.implementation_error_maplist_is_null = Implementation error. MapList is null for initMapType.
-error.implementation_error_cannot_have_null_alignment = Implementation error: Cannot have null alignment property key
-error.implementation_error_null_fileparse = Implementation error. Null FileParse in copy constructor
-error.implementation_error_cannot_map_alignment_sequences = IMPLEMENTATION ERROR: Cannot map an alignment of sequences from different datasets into a single alignment in the vamsas document.
-error.implementation_error_cannot_duplicate_colour_scheme = Serious implementation error: cannot duplicate colourscheme {0}
-error.implementation_error_structure_selection_manager_null = Implementation error. Structure selection manager's context is 'null'
-exception.ssm_context_is_null = SSM context is null
-error.idstring_seqstrings_only_one_per_sequence = idstrings and seqstrings contain one string each per sequence
-error.cannot_have_mixed_length_replacement_vectors = Cannot have mixed length replacement vectors. Replacement vector for {0} is {1} strings long, and have already seen a {2} length vector.
-error.cannot_have_zero_length_vector_replacement_strings = Cannot have zero length vector of replacement strings - either 1 value or n values.
-error.implementation_error_multiple_single_sequence_prediction_jobs_not_supported = Implementation Error! Multiple single sequence prediction jobs are not yet supported
-error.implementation_error_invalid_msa_index_for_job =Implementation Error! Invalid msaIndex for JPredJob on parent MSA input object!
-error.implementation_error_startjob_called = Implementation error - StartJob(JpredJob) called on {0}
-error.multiple_jnet_subjob_merge_not_implemented = Multiple JNet subjob merging not yet implemented
-label.job_never_ran = Job never ran - input returned to user.
-error.implementation_error_minlen_must_be_greater_zero = Implementation error: minlen must be zero or more
-error.implementation_error_msawbjob_called = Implementation error - StartJob(MsaWSJob) called on a WSJobInstance {0}
-error.implementation_error_cannot_attach_ws_menu_entry = IMPLEMENTATION ERROR: cannot attach WS Menu Entry without service handle reference!
-error.parameter_migration_not_implemented_yet = Parameter migration not implemented yet
-error.implementation_error_cannot_set_jaba_option = Implementation error: cannot set Jaba Option to a value outside its allowed value range!
-error.implementation_error_valuetype_doesnt_support_jabaws_type = IMPLEMENTATION ERROR: jalview.ws.params.ValueConstrainI.ValueType does not support the JABAWS type : {0}
-error.cannot_create_jabaws_param_set = Cannot create a JabaWSParamSet from non-JabaWS parameters
-error.cannot_set_arguments_to_jabaws_param_set = Cannot set arguments to a JabaWSParamSet that are not JabaWS arguments
-error.implementation_error_runner_config_not_available = Implementation Error: Runner Config not available for a JABAWS service of type {0} ({1})
-error.implementation_error_cannot_handle_jaba_param = Implementation Error: Cannot handle Jaba parameter object {0}
-error.implementation_error_attempt_to_delete_service_preset = Implementation error: Attempt to delete a service preset!
-error.implementation_error_cannot_locate_oldname_presetname = Implementation error: Can't locate either oldname ({0}) or presetName ({1}in the datastore!"
-error.implementation_error_jabaws_param_set_only_handled_by = Implementation error: JabaWsParamSets can only be handled by JabaParamStore
-error.cannot_set_source_file_for = Cannot set source file for {0}
-error.mismatch_service_instance_preset = Probable mismatch between service instance and preset!
-error.cannot_set_params_for_ws_preset = Cannot set Parameters for a Jaba Web service's preset
-error.implementation_error_can_only_instantiate_jaba_param_sets = Implementation error: Can only instantiate Jaba parameter sets
-error.no_aacon_service_found = No AACon service found
-error.implementation_error_couldnt_copy_value_constraint = Implementation error: could not copy ValueConstrain!
-error.couldnt_encode_as_utf8 = Couldn't encode {0} as UTF-8.
-error.tree_inputtype_not_yet_implemented = Tree InputType not yet implemented
-error.implementation_error_need_to_have_httpresponse = Implementation Error: need to have an HttpResponse to process
-error.dbrefsource_implementation_exception =DBRefSource Implementation Exception
-error.implementation_error_dbinstance_must_implement_interface = Implmentation Error - getDbInstances must be given a class that implements jalview.ws.seqfetcher.DbSourceProxy (was given{0})
-error.implementation_error_must_init_dbsources =Implementation error. Must initialise dbSources
-label.view_controller_toggled_marked = {0} {1} columns {2} containing features of type {3} across {4} sequence(s)
-label.toggled = Toggled
-label.marked = Marked
-label.not = not
-label.no_feature_of_type_found = No features of type {0} found.
-label.submission_params = Submission {0}
-label.empty_alignment_job = Empty Alignment Job
-label.add_new_sbrs_service = Add a new Simple Bioinformatics Rest Service
-label.edit_sbrs_entry = Edit Simple Bioinformatics Rest Service entry
-label.pca_recalculating = Recalculating PCA
-label.pca_calculating = Calculating PCA
-label.select_foreground_colour = Choose foreground colour
-label.select_colour_for_text = Select Colour for Text
-label.adjunst_foreground_text_colour_thereshold = Adjust Foreground Text Colour Threshold
-label.select_subtree_colour = Select Sub-Tree Colour
-label.create_new_sequence_features = Create New Sequence Feature(s)
-label.amend_delete_features = Amend/Delete Features for {0}
-exception.out_of_bounds_for_file = Out of bounds for file: i={0}, Final Buffer: i0={1} iend={2}
-exception.null_string_given_to_regex_search = Null String Given to Regex.search
-exception.null_string_like_given_to_regex_search = Null StringLike Given to Regex.search
-exception.null_string_given_to_regex_reverse_search = Null String Given to Regex.reverseSearch
-exception.null_string_like_given_to_regex_reverse_search = Null StringLike Given to Regex.reverseSearch
-exception.null_string_like_given_to_regex_search_from = Null String Given to Regex.searchFrom
-exception.null_string_like_given_to_regex_search_region = Null String Given to Regex.searchRegion
-exception.replace_null_regex_pointer = Replacer has null Regex pointer
-exception.bad_pattern_to_regex_perl_code = bad pattern to Regex.perlCode: {0}
-exception.no_stub_implementation_for_interface = There is no stub implementation for the interface: {0}
-exception.cannot_set_endpoint_address_unknown_port = Cannot set Endpoint Address for Unknown Port {0}
-exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis = Querying matching opening parenthesis for non-closing parenthesis character {0}
-exception.mismatched_unseen_closing_char = Mismatched (unseen) closing character {0}
-exception.mismatched_closing_char = Mismatched closing character {0}
-exception.mismatched_opening_char = Mismatched opening character {0} at {1}
-exception.invalid_datasource_couldnt_obtain_reader = Invalid datasource. Could not obtain Reader
-exception.index_value_not_in_range = {0}: Index value {1} not in range [0..{2}]
-exception.unterminated_cigar_string = Unterminated cigar string
-exception.unexpected_operation_cigar_string_pos = Unexpected operation {0} in cigar string (position {1} in {2}
-exception.couldnt_parse_responde_from_annotated3d_server = Couldn't parse response from Annotate3d server
-exception.application_test_npe = Application test: throwing an NullPointerException It should arrive at the console
-exception.overwriting_vamsas_id_binding = Overwriting vamsas id binding
-exception.overwriting_jalview_id_binding = Overwriting jalview id binding
-error.implementation_error_unknown_file_format_string = Implementation error: Unknown file format string
-exception.failed_to_resolve_gzip_stream = Failed to resolve GZIP stream
-exception.problem_opening_file_also_tried = Problem opening {0} (also tried {1}) : {2}
-exception.problem_opening_file = Problem opening {0} : {1}
-exception.failed_to_read_data_from_source = Failed to read data from source: {0}
-exception.no_init_source_stream = Unitialised Source Stream
-exception.invalid_source_stream = Invalid Source Stream: {0}
-error.implementation_error_reset_called_for_invalid_source = Implementation Error: Reset called for invalid source.
-exception.number_of_residues_in_query_sequence_differ_from_prediction = Number of residues in {0} supposed query sequence ({1}\n{2})\ndiffer from number of prediction sites in prediction ({3})
-label.mapped = mapped
-exception.jpredconcide_entry_has_unexpected_number_of_columns = JPredConcise: Entry ({0}) has an unexpected number of columns
-exception.couldnt_parse_concise_annotation_for_prediction = Couldn't parse concise annotation for prediction profile.\n{0}
-exception.newfile = NewickFile\: {0}\n
-label.no_tree_read_in = No Tree read in
-exception.rnaml_couldnt_access_datasource = Couldn't access datasource ({0})
-exception.ranml_couldnt_process_data = Couldn't process data as RNAML file ({0})
-exception.ranml_invalid_file = Invalid RNAML file ({0})
-exception.ranml_problem_parsing_data = Problem parsing data as RNAML ({0})
-exception.pfam_no_sequences_found = No sequences found (PFAM input)
-exception.stockholm_invalid_format = This file is not in valid STOCKHOLM format: First line does not contain '# STOCKHOLM'
-exception.couldnt_parse_sequence_line = Could not parse sequence line: {0}
-exception.error_parsing_line = Error parsing {0}
-exception.unknown_annotation_detected = Unknown annotation detected: {0} {1}
-exception.couldnt_store_sequence_mappings = Couldn't store sequence mappings for {0}
-exception.matrix_too_many_iteration = Too many iterations in {0} (max is {1})
-exception.browser_not_found = Exception in finding browser: {0}
-exception.browser_unable_to_locate = Unable to locate browser: {0}
-exception.invocation_target_exception_creating_aedesc = InvocationTargetException while creating AEDesc: {0}
-exception.illegal_access_building_apple_evt= IllegalAccessException while building AppleEvent: {0}
-exception.instantiation_creating_aedesc = InstantiationException while creating AEDesc: {0}
-exception.unable_to_launch_url = Unable to launch URL: {0}
-exception.unable_to_create_internet_config = Unable to create an Internet Config instance: {0}
-exception.invocation_target_calling_url = InvocationTargetException while calling openURL: {0}
-exception.illegal_access_calling_url = IllegalAccessException while calling openURL: {0}
-exception.interrupted_launching_browser = InterruptedException while launching browser: {0}
-exception.das_source_doesnt_support_sequence_command = Source {0} does not support the sequence command.
-exception.invalid_das_source = Invalid das source: {0}
-exception.ebiembl_retrieval_failed_on = EBI EMBL XML retrieval failed on {0}:{1}
-label.no_embl_record_found = # No EMBL record retrieved for {0}:{1}
-label.embl_successfully_parsed = # Successfully parsed the {0} queries into an Alignment
-exception.no_pdb_records_for_chain = No PDB Records for {0} chain {1}
-exception.unexpected_handling_rnaml_translation_for_pdb = Unexpected exception when handling RNAML translation of PDB data
-exception.couldnt_recover_sequence_properties_for_alignment = Couldn't recover sequence properties for alignment
-exception.unknown_format_for_file = Unknown format {0} for file \: \n{1}
-label.remove_gaps = Remove Gaps
-exception.couldnt_recover_sequence_props_for_jnet_query = Couldn't recover sequence properties for JNet Query sequence!
-exception.server_timeout_try_later = Server timed out - try again later\n
-exception.web_service_returned_null_try_later= Server at {0} returned null object, it probably cannot be contacted. Try again later.
-exception.cannot_contact_service_endpoint_at = Cannot contact service endpoint at {0}
-error.implementation_error_cannot_find_service_url_in_given_set = Implementation error: Cannot find service url in the given url set!
-error.implementation_error_cannot_find_service_url_in_given_set_param_store = Implementation error: Cannot find service url in the given url set for this service parameter store ({0}}
-exception.jobsubmission_invalid_params_set = Invalid parameter set. Check Jalview implementation
-exception.notvaliddata_group_contains_less_than_min_seqs = Group contains less than {0} sequences.
-exception.outofmemory_loading_pdb_file = Out of memory loading PDB File
-exception.eps_coudnt_write_output_file = Could not write to the output file: {0}
-exception.eps_method_not_supported = Method not currently supported by EpsGraphics2D version {0}
-exception.eps_unable_to_get_inverse_matrix = Unable to get inverse of matrix: {0}
-warn.job_cannot_be_cancelled_close_window = This job cannot be cancelled.\nJust close the window.
-warn.service_not_supported = Service not supported!
-warn.input_is_too_big = Input is too big!
-warn.invalid_job_param_set = Invalid job parameter set!
-warn.oneseq_msainput_selection = The current selection only contains a single sequence. Do you want to submit all sequences for alignment instead ?
-info.job_couldnt_be_run_server_doesnt_support_program = Job could not be run because the server doesn't support this program.\n{0}
-info.job_couldnt_be_run_exceeded_hard_limit = Job could not be run because it exceeded a hard limit on the server.\n{0}
-info.job_couldnt_be_run_incorrect_param_setting = Job could not be run because some of the parameter settings are not supported by the server.\n{0}\nPlease check to make sure you have used the correct parameter set for this service\!\n
-info.no_jobs_ran = No jobs ran
-info.failed_to_submit_prediction = Failed to submit the prediction\:\n{0} {1}
-info.invalid_jnet_job_result_data ={0}\n{1}\nInvalid JNet job result data\!\n{2}
-info.failed_to_submit_sequences_for_alignment = Failed to submit sequences for alignment.\nIt is most likely that there is a problem with the server.\nJust close the window\n
-info.alignment_object_method_notes = \nAlignment Object Method Notes\n
-info.server_exception = \n{0} Server exception\!\n{1}
-info.invalid_msa_input_mininfo = Need at least two sequences with at least 3 residues each, with no hidden regions between them.
-info.invalid_msa_notenough = Not enough sequence data to align
-status.processing_commandline_args = Processing commandline arguments...
-status.das_features_being_retrived = DAS features being retrieved...
-status.searching_for_sequences_from = Searching for sequences from {0}
-status.finished_searching_for_sequences_from = Finished searching for sequences from {0}
-label.eps_file = EPS file
-label.png_image = PNG image
-status.saving_file = Saving {0}
-status.export_complete = Export complete.
-status.fetching_pdb = Fetching PDB {0}
-status.refreshing_news = Refreshing news
-status.importing_vamsas_session_from = Importing VAMSAS session from {0}
-status.opening_params = Opening {0}
-status.waiting_sequence_database_fetchers_init = Waiting for Sequence Database Fetchers to initialise
-status.init_sequence_database_fetchers = Initialising Sequence Database Fetchers
-status.fetching_sequence_queries_from = Fetching {0} sequence queries from {1}
-status.finshed_querying = Finished querying
-status.parsing_results = Parsing results.
-status.processing = Processing...
-status.refreshing_web_service_menus = Refreshing Web Service Menus
-status.collecting_job_results = Collecting job results.
-status.fetching_das_sequence_features = Fetching DAS Sequence Features
-status.no_das_sources_active = No DAS Sources Active
-status.das_feature_fetching_cancelled = DAS Feature Fetching Cancelled
-status.das_feature_fetching_complete = DAS Feature Fetching Complete
-status.fetching_db_refs = Fetching db refs
-status.loading_cached_pdb_entries = Loading Cached PDB Entries
-status.searching_for_pdb_structures = Searching for PDB Structures
-status.opening_file = opening file
-status.colouring_chimera = Colouring Chimera
-label.font_doesnt_have_letters_defined = Font doesn't have letters defined\nso cannot be used\nwith alignment data
-label.font_too_small = Font size is too small
-label.error_loading_file_params = Error loading file {0}
-label.error_loading_jalview_file = Error loading Jalview file
-warn.out_of_memory_when_action = Out of memory when {0}\!\!\nSee help files for increasing Java Virtual Machine memory.
-warn.out_of_memory_loading_file = Out of memory loading file {0}\!\!\nSee help files for increasing Java Virtual Machine memory.
-label.out_of_memory = Out of memory
-label.invalid_id_column_width = Invalid ID Column width
-warn.user_defined_width_requirements = The user defined width for the\nannotation and sequence ID columns\nin exported figures must be\nat least 12 pixels wide.
-label.couldnt_create_sequence_fetcher = Couldn't create SequenceFetcher
-warn.couldnt_create_sequence_fetcher_client = Could not create the sequence fetcher client. Check error logs for details.
-warn.server_didnt_pass_validation = Service did not pass validation.\nCheck the Jalview Console for more details.
-warn.url_must_contain = Sequence URL must contain $SEQUENCE_ID$ or a regex $SEQUENCE_ID=//=$
-info.validate_jabaws_server = Validate JabaWS Server ?\n(Look in console output for results)
-label.test_server = Test Server?
-info.you_want_jalview_to_find_uniprot_accessions = Do you want Jalview to find\nUniprot Accession ids for given sequence names?
-label.find_uniprot_accession_ids = Find Uniprot Accession Ids
-label.new_sequence_fetcher = New Sequence Fetcher
-label.additional_sequence_fetcher = Additional Sequence Fetcher
-label.select_database_retrieval_source = Select Database Retrieval Source
-label.overwrite_existing_file = Overwrite existing file?
-label.file_already_exists = File exists
-label.edit_jabaws_url = Edit JABAWS URL
-label.add_jabaws_url = Add new JABAWS URL
-label.news_from_jalview = News from http://www.jalview.org
-label.cut_paste_alignmen_file = Cut & Paste Alignment File
-label.enter_redundancy_thereshold = Enter the redundancy threshold
-label.select_dark_light_set_thereshold = Select a dark and light text colour, then set the threshold to switch between colours, based on background colour
-label.select_feature_colour = Select Feature Colour
-label.delete_all = Delete all sequences
-warn.delete_all = Deleting all sequences will close the alignment window. Confirm deletion or Cancel.
-label.add_annotations_for = Add annotations for
-label.choose_annotations = Choose annotations
-label.find = Find
-label.invalid_search = Search string invalid
-error.invalid_regex = Invalid regular expression
-label.ignore_gaps_consensus = Ignore Gaps In Consensus
-label.show_group_histogram = Show Group Histogram
-label.show_group_logo = Show Group Logo
-label.normalise_group_logo = Normalise Group Logo
-label.show_histogram = Show Histogram
-label.show_logo = Show Logo
-label.normalise_logo = Normalise Logo
-label.no_colour_selection_in_scheme = Please make a colour selection before applying colour scheme
-label.no_colour_selection_warn = Error saving colour scheme
-label.open_split_window? = Would you like to open as a split window, with cDNA and protein linked?
-label.open_split_window = Open split window
-label.no_mappings = No mappings found
-label.mapping_failed = No sequence mapping could be made between the alignments. A mapping requires sequence names to match, and equivalent sequence lengths.
-action.no = No
-action.yes = Yes
-label.for = for
-label.select_by_annotation = Select/Hide Columns by Annotation
-action.select_by_annotation = Select/Hide Columns by Annotation...
-label.threshold_filter = Threshold Filter
-action.hide = Hide
-action.select = Select
-label.alpha_helix = Alpha Helix
-label.beta_strand = Beta Strand
-label.turn = Turn
-label.select_all = Select All
-label.structures_filter = Structures Filter
-label.search_filter = Search Filter
-label.description = Description
-label.include_description= Include Description
-action.back = Back
-label.hide_insertions = Hide Insertions
-label.mark_as_representative = Mark as representative
-label.open_jabaws_web_page = Open JABAWS web page
-label.opens_the_jabaws_server_homepage = Opens the JABAWS server's homepage in web browser
-label.pdb_sequence_getcher = PDB Sequence Fetcher
-label.result = result
-label.results = results
-label.structure_chooser = Structure Chooser
-label.select = Select :
-label.invert = Invert
-label.select_pdb_file = Select PDB File
-info.select_filter_option = Select Filter Option/Manual Entry
-info.associate_wit_sequence = Associate with Sequence
-label.search_result = Search Result
-label.found_structures_summary = Found Structures Summary
-label.configure_displayed_columns = Configure Displayed Columns
-label.start_jalview = Start Jalview
-label.biojs_html_export = BioJS
-label.scale_as_cdna = Scale protein residues to codons
-label.scale_protein_to_cdna = Scale Protein to cDNA
-label.scale_protein_to_cdna_tip = Make protein residues same width as codons in split frame views
-info.select_annotation_row = Select Annotation Row
-info.enter_search_text_here = Enter Search Text Here
-info.enter_search_text_to_enable = Enter Search Text to Enable
-info.search_in_annotation_label = Search in {0} Label
-info.search_in_annotation_description = Search in {0} Description
-info.change_threshold_mode_to_enable = Change Threshold Mode to Enable
diff --git a/bin/lang/Messages_es.properties b/bin/lang/Messages_es.properties
deleted file mode 100644
index 6db40cf..0000000
--- a/bin/lang/Messages_es.properties
+++ /dev/null
@@ -1,1136 +0,0 @@
-action.refresh_services = Refrescar servicios
-action.reset_services = Reiniciar servicios
-action.merge_results = Unificar resultados
-action.load_scheme = Cargar esquema
-action.save_scheme = Guardar esquema
-action.save_image = Guardar imagen
-action.paste = Pegar
-action.show_html_source = Mostrar código HTML
-action.print = Imprimir
-action.web_service = Servicio web
-action.cancel_job = Cancelar trabajo
-action.start_job = Arrancar trabajo
-action.revert = Deshacer
-action.move_down = Mover hacia abajo
-action.move_up = Mover hacia arriba
-action.remove_return_datatype = Borrar tipo de datos de retorno
-action.add_return_datatype = Añadir tipo de datos de retorno
-action.remove_input_parameter = Borrar el parámetro de entrada seleccionado
-action.add_input_parameter = Añadir parámetro de entrada seleccionado
-action.edit = Editar
-action.new = Nuevo
-action.open_file = Abrir fichero
-action.show_unconserved = Mostrar regiones no conservadas
-action.open_new_alignment = Abrir nuevo alineamiento
-action.raise_associated_windows = Destacar ventanas asociadas
-action.minimize_associated_windows = Minimizar ventanas asociadas
-action.close_all = Cerrar todo
-action.load_project = Cargar proyecto
-action.save_project = Guardar proyecto
-action.quit = Salir
-action.expand_views = Expandir vistas
-action.gather_views = Capturar vistas
-action.page_setup = Configuración de la página
-action.reload = Recargar
-action.load = Cargar
-action.open = Abrir
-action.cancel = Cancelar
-action.create = Crear
-action.update = Actualizar
-action.delete = Borrar
-action.snapshot = Imagen
-action.clear = Limpiar
-action.accept = Aceptar
-action.select_ddbb = --- Seleccionar base de datos ---
-action.undo = Deshacer
-action.redo = Rehacer
-action.reset = Reiniciar
-action.remove_left = Eliminar parte izquierda
-action.remove_right = Eliminar parte derecha
-action.remove_empty_columns = Eliminar las columnas vacías
-action.remove_all_gaps = Eliminar todos los huecos
-action.left_justify_alignment = Ajustar el alineamiento a la izquierda
-action.right_justify_alignment = Ajustar el alineamiento a la derecha
-action.boxes = Casillas
-action.text = Texto
-action.by_pairwise_id = Identificar por parejas
-action.by_id = Por identificador
-action.by_length = Por longitud
-action.by_group = Por grupo
-action.remove = Eliminar
-action.remove_redundancy = Eliminar redundancia...
-action.pairwise_alignment = Alineamiento de pares...
-action.by_rna_helixes = Por hélices de RNA
-action.user_defined = Definido por el usuario...
-action.by_conservation = Por conservación
-action.wrap = Envolver
-action.show_gaps = Mostrar huecos
-action.show_hidden_markers = Mostrar marcadores ocultos
-action.find = Buscar
-action.undefine_groups = Grupos sin definir
-action.create_groups = Crear grupos
-action.make_groups_selection = Hacer grupos para seleccionar
-action.copy = Copiar
-action.cut = Cortar
-action.font = Fuente...
-action.scale_above = Escala superior
-action.scale_left = Escala izquierda
-action.scale_right = Escala derecha
-action.by_tree_order = Por orden del árbol
-action.sort = Ordenar
-action.calculate_tree = Calcular árbol
-action.help = Ayuda
-action.by_annotation = Por anotación...
-action.invert_sequence_selection = Invertir selección de secuencias
-action.invert_column_selection = Invertir selección de columnas
-action.show = Mostrar
-action.hide = Ocultar
-action.ok = OK
-action.set_defaults = Defecto
-action.create_group = Crear grupo
-action.remove_group = Eliminar grupo
-action.edit_group = Editar grupo
-action.border_colour = Color del borde
-action.edit_new_group = Editar nuevo grupo
-action.hide_sequences = Ocultar secuencias
-action.sequences = Secuencias
-action.ids = IDS
-action.ids_sequences = IDS y secuencias
-action.reveal_all = Revelar todo
-action.reveal_sequences = Revelar secuencias
-action.find_all = Buscar todo
-action.find_next = Buscar siguiente
-action.file = Archivo
-action.view = Ver
-action.change_params = Cambiar parámetros
-action.apply = Aplicar
-action.apply_threshold_all_groups = Aplicar umbral a todos los grupos
-action.apply_all_groups = Aplicar a todos los grupos
-action.by_chain = Por cadena
-action.by_sequence = Por secuencia
-action.paste_annotations = Pegar anotaciones
-action.format = Formato
-action.select = Seleccionar
-action.new_view = Nueva vista
-action.close = Cerrar
-action.add = Añadir
-action.save_as_default = Guardar como por defecto
-action.save_as = Guardar como
-action.save = Guardar
-action.cancel_fetch = Cancelar búsqueda
-action.save_omit_hidden_columns = Guardar / Omitir las columnas ocultas
-action.change_font = Cambiar Fuente
-action.change_font_tree_panel = Cambiar fuente (panel del árbol)
-action.colour = Color
-action.calculate = Calcular
-action.select_all = Seleccionar Todo
-action.deselect_all = Deseleccionar Todo
-action.invert_selection = Invertir selección
-action.using_jmol = Usar Jmol
-action.link = Enlazar
-action.group_link = Enlazar grupo
-action.show_chain = Mostrar cadena
-action.show_group = Mostrar grupo
-action.fetch_db_references = Recuperar referencias a base de datos
-action.view_flanking_regions = Mostrar flancos
-label.view_flanking_regions = Mostrar los datos de la secuencia a ambos lados de las subsecuencias implicadas en este alineamiento
-label.str = Str:
-label.seq = Seq:
-label.structures_manager = Administrar estructuras
-label.nickname = Sobrenombre:
-label.url = URL:
-label.input_file_url = Introducir URL en el fichero de entrada
-label.select_feature = Seleccionar función:
-label.name = Nombre:
-label.name_param = Nombre: {0}
-label.group = Grupo:
-label.group_name = Nombre del grupo
-label.group_description = Descripción del grupo
-label.edit_group_name_description = Editar nombre/descripción del grupo
-label.colour = Color:
-label.description = Descripción:
-label.start = Comenzar:
-label.end = Terminar:
-label.current_parameter_set_name = Nombre actual del conjunto de parámetros:
-label.service_action = Acción de servicio:
-label.post_url = POST URL:
-label.url_suffix = URL Sufijo
-label.sequence_source = Fuente de la secuencia
-label.per_seq = por secuencia
-label.result_vertically_separable = Los resultados son separables verticalmente
-label.amend = Modificar
-label.undo_command = Deshacer {0}
-label.redo_command = Rehacer {0}
-label.principal_component_analysis = Análisis del Componente Principal
-label.average_distance_identity = Distancia Media Usando % de Identidad
-label.neighbour_joining_identity = Unir vecinos utilizando % de Identidad
-label.treecalc_title = {0} utilizando {1}
-label.tree_calc_av = Distancia media
-label.tree_calc_nj = Unir vecinos
-label.select_score_model = Selecciones modelo de puntuación
-label.score_model_pid = % Identidad
-label.score_model_blosum62 = BLOSUM62
-label.score_model_pam250 = PAM 250
-label.score_model_conservation = Conservación de las propiedades físico-químicas
-label.score_model_enhconservation = Conservación de las propiedades físico-químicas
-label.status_bar = Barra de estado
-label.out_to_textbox = Generar cuadro de texto
-label.clustalx = Clustalx
-label.clustal = Clustal
-label.zappo = Zappo
-label.taylor = Taylor
-label.blc = BLC
-label.fasta = Fasta
-label.msf = MSF
-label.pfam = PFAM
-label.pileup = Pileup
-label.pir = PIR
-label.hydrophobicity = Hidrofobicidad
-label.helix_propensity = Tendencia de la hélice
-label.strand_propensity = Tendencia de la hebra
-label.turn_propensity = Tendencia de giro
-label.buried_index = Índice de encubrimiento
-label.purine_pyrimidine = Purina/Pirimidina
-label.percentage_identity = Porcentaje de identidad
-label.blosum62 = BLOSUM62
-label.blosum62_score = Puntuación del BLOSUM62
-label.tcoffee_scores = Puntuación del T-Coffee
-label.average_distance_bloslum62 = Distancia Media Usando BLOSUM62
-label.neighbour_blosum62 = Neighbour Joining usando BLOSUM62
-label.show_annotations = Mostrar anotaciones
-label.colour_text = Color del texto
-label.show_non_conversed = Mostrar no conservadas
-label.overview_window = Ventana resumen
-label.none = Ninguno
-label.above_identity_threshold = Por encima del umbral de identidad
-label.show_sequence_features = Mostrar las características de las secuencias
-label.nucleotide = Nucleótido
-label.to_new_alignment = A nuevo alineamiento
-label.to_this_alignment = Añadir a este alineamiento
-label.apply_colour_to_all_groups = Aplicar color a todos los grupos
-label.modify_identity_thereshold = Modificar el umbral de identidad...
-label.modify_conservation_thereshold = Modificar el umbral de conservación...
-label.input_from_textbox = Introducir desde el cuadro de texto
-label.centre_column_labels = Centrar las etiquetas de las columnas
-label.automatic_scrolling = Desplazamiento automático
-label.documentation = Documentación
-label.about = Acerca de...
-label.show_sequence_limits = Mostrar los límites de la secuencia
-label.feature_settings = Ajustar funciones...
-label.sequence_features = Funciones de la secuencia
-label.all_columns = Todas las columnas
-label.all_sequences = Todas las secuencias
-label.selected_columns = Columnas seleccionadas
-label.selected_sequences = Secuencias seleccionadas
-label.all_but_selected_region = Todo menos la región seleccionada (Shift+Ctrl+H)
-label.selected_region = Región seleccionada
-label.all_sequences_columns = Todas las secuencias y columnas
-label.group_consensus = Consenso de grupo
-label.group_conservation = Conservación de grupo
-label.show_consensus_histogram = Mostrar el histograma de consenso
-label.show_consensus_logo = Mostrar el logo de consenso
-label.norm_consensus_logo = Normalizar el logo de consenso
-label.apply_all_groups = Aplicar a todos los grupos
-label.autocalculated_annotation = Anotación autocalculada
-label.min_colour = Color mínimo
-label.max_colour = Color máximo
-label.use_original_colours = Usar colores originales
-label.threshold_minmax = El umbral es mín/máx
-label.represent_group_with = Representar al grupo con
-label.selection = Seleccionar
-label.group_colour = Color del grupo
-label.sequence = Secuencia
-label.view_pdb_structure = Ver estructura PDB
-label.min = Mín:
-label.max = Máx:
-label.colour_by_label = Color por etiquetas
-label.new_feature = Nueva función
-label.match_case = Hacer corresponder mayúsculas y minúsculas
-label.view_alignment_editor = Ver en el editor de alineamientos
-label.labels = Etiquetas
-label.output_values = Valores de salida...
-label.output_points = Puntos de salida...
-label.output_transformed_points = Puntos de salida transformados
-label.input_data = Datos de entrada...
-label.nucleotide_matrix = Matriz nucleotídica
-label.protein_matrix = Matriz proteica
-label.show_bootstrap_values = Mostrar valores de Bootstrap
-label.show_distances = Mostrar distancias
-label.mark_unassociated_leaves = Marcar hojas no asociadas
-label.fit_to_window = Ajustar a la ventana
-label.newick_format = Formato Newick
-label.select_newick_like_tree_file = Seleccione un fichero de árbol tipo Newick
-label.colours = Colores
-label.view_mapping = Ver mapeado
-label.wireframe = Estructura metálica
-label.depthcue = Clave de profundidad
-label.z_buffering = Tamponamiento Z
-label.charge_cysteine = Carga & Cisteína
-label.all_chains_visible = Todas las cadenas visibles
-label.successfully_added_features_alignment = Funciones añadidas exitosamente al alineamiento
-label.keyboard_editing_mode = El modo de editar teclado es {0}
-label.paste_features_annotations_Tcoffee_here = Pegar tus funciones / anotaciones / puntuación del fichero T-coffee aquí.
-label.removed_columns = {0} columnas eliminadas.
-label.removed_empty_columns = {0} columnas vacías eliminadas.
-label.paste_newick_tree_file = Pegar su fichero árbol Newick aquí.
-label.order_by_params = Ordenar por {0}
-label.html_content = {0}
-label.paste_pdb_file= Pegar tu fichero PDB aquí.
-label.paste_pdb_file_for_sequence = Pegar fichero PDB para la secuencia {0}
-label.could_not_parse_newick_file = No se pudo analizar el fichero Newick\\\!\\n {0}
-label.successfully_pasted_tcoffee_scores_to_alignment= Pegada exitosamente la puntuación T-Coffee al alineamiento.
-label.failed_add_tcoffee_scores = Fallo al añadir las puntuaciones T-Coffee:
-label.successfully_pasted_annotation_to_alignment = Anotación pegada exitosamente al alineamiento.
-label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file = No es posible parsear el texto pegado como una anotación características, GFF, o fichero T-Coffee válidos
-label.successfully_pasted_alignment_file = Fichero de alineamiento pegado exitosamente
-label.paste_your_alignment_file = Pegar su fichero de alineamiento aquí
-label.paste_your = Pegar su
-label.finished_searching = Búsqueda finalizada
-label.search_results= Buscar Resultados {0} : {1}
-label.found_match_for = Buscar coincidencia para {0}
-label.font = Fuente:
-label.size = Talla:
-label.style = Estilo:
-label.enter_redundancy_threshold = Introducir el umbral de redundancia
-label.calculating = Calculando....
-label.modify_conservation_visibility = Modificar la visibilidad de conservación
-label.colour_residues_above_occurence = Residuos de color por encima del % de aparición
-label.set_this_label_text = fijar como etiqueta
-label.sequences_from = Secuencias de {0}
-label.successfully_loaded_file = Fichero cargado exitosamente {0}
-label.successfully_saved_to_file_in_format = Guardado exitosamente en el fichero: {0} en formato {1}.
-label.copied_sequences_to_clipboard = Copiadas {0} secuencias en el portapapeles.
-label.check_file_matches_sequence_ids_alignment = Comprobar que el fichero coincide con el ID de la secuencia en el alineamiento.
-label.problem_reading_tcoffee_score_file = Problema de lectura del fichero de puntuaciones T-COFFEE
-label.source_to_target = {0} a {1}
-label.per_sequence_only= Sólo por secuencia
-label.to_file = a fichero
-label.to_textbox = a cuadro de texto
-label.jalview = Jalview
-label.csv_spreadsheet = CSV (Hoja de cálculo)
-label.status = [Estado]
-label.channels = Canales
-label.channel_title_item_count = {0} ({1})
-label.blog_item_published_on_date = {0} {1}
-label.select_das_service_from_table = Seleccionar servicio DAS de la tabla para leer una descripción completa aquí.
-label.session_update = Actualizar sesión
-label.new_vamsas_session = Nueva sesión Vamsas
-label.load_vamsas_session = Cargar sesión Vamsas
-label.save_vamsas_session = Guardar sesión Vamsas
-label.select_vamsas_session_opened_as_new_vamsas_session= Selecciones una sesión vamsas para abrirla como una nueva sesión.
-label.open_saved_vamsas_session = Abrir una sesión VAMSAS guardada
-label.groovy_console = Consola Groovy
-label.lineart = lineart
-label.dont_ask_me_again = No volver a preguntar
-label.select_eps_character_rendering_style = Seleccionar el carácter EPS como estilo de visualización
-label.invert_selection = Invertir selección
-label.optimise_order = Optimizar orden
-label.seq_sort_by_score = Ordenar las secuencias por puntuación
-label.load_colours = Cargar colores
-label.save_colours = Guardar colores
-label.fetch_das_features = Recuperar funciones DAS
-label.selected_database_to_fetch_from = Seleccionada {0} Base de datos {1} para buscar de {2}
-label.database_param = Base de datos: {0}
-label.example = Ejemplo
-label.example_param = Ejemplo: {0}
-label.select_file_format_before_saving = Debe seleccionar un formato de fichero antes de guardar!
-label.file_format_not_specified = Formato de fichero no especificado
-label.alignment_contains_hidden_columns = El alineamiento contiene columnas ocultas.\\nQuieres guardar s\u00F3lo el alineamiento visible?
-label.couldnt_save_file = No se pudo guardar el fichero: {0}
-label.error_saving_file = Error guardando el fichero
-label.remove_from_default_list = eliminar de la lista de defectuosos?
-label.remove_user_defined_colour = Eliminar el color definido por el usuario
-label.you_must_select_least_two_sequences = Debes seleccionar al menos 2 secuencias.
-label.invalid_selection = Selección inválida
-label.principal_component_analysis_must_take_least_four_input_sequences = El an\u00E1lisis de la componente principal debe tomar\\nal menos 4 secuencias de entrada.
-label.sequence_selection_insufficient = Selección de secuencias insuficiente
-label.you_need_more_two_sequences_selected_build_tree = necesitas seleccionar más de dos secuencias para construir un árbol!
-label.not_enough_sequences = No suficientes secuencias
-label.selected_region_to_tree_may_only_contain_residues_or_gaps = La regi\u00F3n seleccionada para construir un \u00E1rbol puede\\ncontener s\u00F3lo residuos o espacios.\\nPrueba usando la funci\u00F3n Pad en el men\u00FA de edici\u00F3n,\\n o uno de los m\u00FAltiples servicios web de alineamiento de secuencias.
-label.sequences_selection_not_aligned = Las secuencias seleccionadas no están alineadas
-label.sequences_must_be_aligned_before_creating_tree = Las secuencias deben estar alineadas antes de crear el \u00E1rbol.\\nPrueba usando la funci\u00F3n Pad en el men\u00FA de editar,\\n o uno de los m\u00FAltiples servicios web de alineamiento de secuencias.
-label.sequences_not_aligned = Secuencias no alineadas
-label.problem_reading_tree_file = Problema al leer el fichero del árbol
-label.possible_problem_with_tree_file = Posible problema con el fichero del árbol
-label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation = Por favor seleccionar al menos tres bases de al menos una secuencia para poder realizar la traducción de cDNA.
-label.translation_failed = Translation Failed
-label.error_when_translating_sequences_submit_bug_report = Desafortunadamente, algo fue mal a la hora de traducir tus secuencias.\\nPor favor, revisa la consola Jalview java \\ny presenta un informe de error que incluya el seguimiento.
-label.implementation_error = Error de implementación:
-label.automatically_associate_pdb_files_with_sequences_same_name = Quieres asociar automáticamente los {0} ficheros PDB con las secuencias del alineamiento que tengan el mismo nombre?
-label.automatically_associate_pdb_files_by_name = Asociar los ficheros PDB por nombre automáticamente
-label.ignore_unmatched_dropped_files_info = Quieres ignorar los {0} ficheros cuyos nombres no coincidan con ningún IDs de las secuencias ?
-label.ignore_unmatched_dropped_files = Ignorar los ficheros sin coincidencias?
-label.enter_view_name = Introducir nombre visible (¿?)
-label.enter_label = Introducir etiqueta
-label.enter_label_for_the_structure = Introducir una etiqueta para la estructura?
-label.pdb_entry_is_already_displayed = {0} Ya est\u00E1 mostrado.\\nQuieres volver a usar este visor?
-label.map_sequences_to_visible_window = Mapa de secuencias en ventana visible: {0}
-label.add_pdbentry_to_view = Quieres a\u00F1adir {0} a la vista llamada\\n{1}\\n
-label.align_to_existing_structure_view = Alinear a una estructura ya existente
-label.pdb_entries_couldnt_be_retrieved = Las siguientes entradas pdb no pueden ser extra\u00EDdas del PDB\\\:\\n{0}\\nPor favor, prueba descarg\u00E1ndolas manualmente.
-label.couldnt_load_file = No se pudo cargar el fichero
-label.couldnt_find_pdb_id_in_file = No se pudo encontrar un Id PDB en el fichero suministrado. Por favor, introduzca un Id para identificar esta estructura.
-label.no_pdb_id_in_file = No hay un Id PDB en el fichero
-label.couldnt_read_pasted_text = No se pudo leer el texto pegado {0}
-label.error_parsing_text = Error analizando el texto
-label.enter_local_das_source = Intruduzca el Nickname & URL de la fuente DAS local
-label.you_can_only_edit_or_remove_local_das_sources = Sólo puedes editar o eliminar fuentes DAS locales!
-label.public_das_source = Fuente pública DAS - no editable
-label.input_alignment_from_url = Alineamiento de entrada desde URL
-label.input_alignment = Alineamiento de entrada
-label.couldnt_import_as_vamsas_session = No se pudo importar {0} como una nueva sesión Vamsas.
-label.vamsas_document_import_failed = Fallo en la importación del documento Vamsas
-label.couldnt_locate = No se pudo localizar {0}
-label.url_not_found = URL no encontrada
-label.no_link_selected = Enlace no seleccionado
-label.new_sequence_url_link = Enlace a una nueva secuencia URL
-label.cannot_edit_annotations_in_wrapped_view = No se pueden editar anotaciones en vista envolvente
-label.wrapped_view_no_edit = Vista envolvente - no editar
-label.error_retrieving_data = Error en la recuperación de datos
-label.user_colour_scheme_must_have_name = El esquema de colores del usuario debe tener un nombre
-label.no_name_colour_scheme = No hay nombre para el esquema de colores
-label.invalid_url = URL Invalido!
-label.error_loading_file = Error al cargar el fichero
-label.problems_opening_file = Encontrados problemas al abrir el fichero {0}!!
-label.file_open_error = Error al abrir el fichero
-label.no_das_sources_selected_warn = No han sido seleccionadas fuentes DAS.\\nPor favor, seleccione algunas fuentes y\\npruebe de nuevo.
-label.no_das_sources_selected_title = No han sido seleccionadas fuentes DAS
-label.colour_scheme_exists_overwrite = El esquema de colores {0} ya existe.\\nContinuar guardando el esquema de colores como {1}?
-label.duplicate_scheme_name = Duplicar nombre de esquema
-label.jalview_new_questionnaire = Hay un nuevo cuestionario disponible. Querr\u00EDa completarlo ahora ?\\n
-label.jalview_user_survey = Encuesta de usuario Jalview
-label.alignment_properties = Propiedades del alineamiento: {0}
-label.alignment_props = Propiedades del alineamiento
-label.input_cut_paste = Cortar y pegar la entrada
-label.input_cut_paste_params = Cortar y pegar la entrada - {0}
-label.alignment_output_command = Alineamiento de salida - {0}
-label.annotations = Anotaciones
-label.features = Funciones
-label.overview_params = Visión general {0}
-label.paste_newick_file = Pegar nuevo fichero Newick
-label.load_tree_from_file = desde fichero -
-label.colour_by_annotation = Color por anotación
-label.selection_output_command = Seleccionar salida - {0}
-label.annotation_for_displayid =
Anotación para {0}
-label.pdb_sequence_mapping = PDB - Mapeado de secuencia
-label.pca_details = detalles de la PCA
-label.redundancy_threshold_selection = Selección del umbral de redundancia
-label.user_defined_colours = Colores definidos del usuario
-label.jalviewLite_release = JalviewLite - versión {0}
-label.jaview_build_date = Fecha de creación: {0}
-label.jalview_authors_1 = Authors: Jim Procter, Andrew Waterhouse, Mungo Carstairs, Tochukwu Ofoegbu, Lauren Lui, Jan Engelhardt,
-label.jalview_authors_2 = Natasha Sherstnev, Daniel Barton, Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton.
-label.jalview_dev_managers = Desarrollo gestionado por The Barton Group, University of Dundee, Scotland, UK.
-label.jalview_distribution_lists = Para ayuda, ver el FAQ at www.jalview.org y/o adjuntar la lista de envío jalview-discuss@jalview.org
-label.jalview_please_cite = Si usa Jalview incluya la siguiente cita, por favor:
-label.jalview_cite_1_authors = Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)
-label.jalview_cite_1_title = Jalview Version 2 - un editor de alineamiento múltiple de secuencias y banco de trabajo de análisis
-label.jalview_cite_1_ref = Bioinformaticos doi: 10.1093/bioinformatics/btp033
-label.right_click = clic en el botón derecho
-label.to_add_annotation = para añadir anotación
-label.alignment_has_no_annotations = El alineamiento no tiene anotaciones
-label.retrieving_pdb_data = Recuperación de datos PDB...
-label.label = Etiqueta
-label.no_features_added_to_this_alignment = No hay funciones asociadas a este alineamiento!!
-label.features_can_be_added_from_searches_1 = (Las funciones pueden ser añadidas de búsquedas o
-label.features_can_be_added_from_searches_2 = de ficheros de funciones Jalview / GFF)
-label.calculating_pca= Calculando PCA
-label.reveal_columns = Mostrar Columnas
-label.jalview_cannot_open_file = Jalview no puede abrir el fichero
-label.jalview_applet = Aplicación Jalview
-label.loading_data = Cargando datos
-label.memory_stats = Memoria libre total: {0} MB; Memoria máxima: {1} MB; {2} %
-label.calculating_tree = Calculando árbol
-label.state_queueing = En cola
-label.state_running = Procesando
-label.state_complete = Completar
-label.state_completed = Finalizado
-label.state_job_cancelled = ¡Trabajo cancelado!
-label.state_job_error = Error del trabajo!
-label.server_error_try_later = ¡Error del servidor! (Intentar más tarde)
-label.error_loading_pdb_data = ¡Error cargando los datos PDB!
-label.fetching_pdb_data = Buscando los datos PDB...
-label.structure_type = Estructura_tipo
-label.settings_for_type = Ajustes para {0}
-label.view_full_application = Ver en la aplicación completa
-label.load_associated_tree = Cargar árbol asociado ...
-label.load_features_annotations = Cargar características/anotaciones ...
-label.export_features = Exportar características...
-label.export_annotations = Exportar anotaciones ...
-label.jalview_copy = Copiar (sólo Jalview)
-label.jalview_cut = Cortar (sólo Jalview)
-label.to_upper_case = Pasar a mayúsculas
-label.to_lower_case = Pasar a minúsculas
-label.toggle_case = Alternar mayúsculas y minúsculas
-label.edit_name_description = Editar nombre/descripción
-label.create_sequence_feature = Crear función de secuencia
-label.edit_sequence = Editar secuencia
-label.edit_sequences = Editar secuencias
-label.sequence_details = Detalles de la secuencia
-label.jmol_help = Ayuda de Jmol
-label.all = Todo
-label.sort_by = Ordenar por
-label.sort_by_score = Ordenar por puntuación
-label.sort_by_density = Ordenar por densidad
-label.sequence_sort_by_density = Ordenar las secuencias por densidad
-label.reveal = Revelar
-label.hide_columns = Ocultar columnas
-label.load_jalview_annotations = Cargar un fichero de anotación de Jalivew o un fichero de características
-label.load_tree_file = Cargar un fichero de árbol
-label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences = Recuperar y parsear un registro de secuencia de base de datos para el alineamiento o secuencias actualmente seleccionados
-label.standard_databases = Bases de datos estándar
-label.fetch_embl_uniprot = Recuperar de EMBL/EMBLCDS o Uniprot/PDB y de cualquier fuente DAS seleccionada
-label.reset_min_max_colours_to_defaults = Reiniciar los colores min y max colours a los valores por defecto establecidos en las preferencias de usuario
-label.align_structures_using_linked_alignment_views = Alinear las estructuras utlizando las {0} vistas de alineamiento enlazadas
-label.connect_to_session = Conectar a la sesión {0}
-label.threshold_feature_display_by_score = Filtrar la característica mostrada por puntuación.
-label.threshold_feature_no_thereshold = Sin umbral
-label.threshold_feature_above_thereshold = Por encima del umbral
-label.threshold_feature_below_thereshold = Por debajo del umbral
-label.adjust_thereshold = Ajustar umbral
-label.toggle_absolute_relative_display_threshold = Cambiar entre mostrar el umbral absoluto y el relativo.
-label.display_features_same_type_different_label_using_different_colour = Mostrar las características del mismo tipo con una etiqueta diferente y empleando un color distinto (p.e. características del dominio)
-label.select_colour_minimum_value = Seleccionar el color para el valor mínimo
-label.select_colour_maximum_value = Seleccionar el color para el valor máximo
-label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment = Abrir una nueva vista Jmol con todas las estructuras asociadas con la selección acxtual y superponer las utilizando el alineamiento.
-label.open_url_param = Abrir URL {0}
-label.open_url_seqs_param = Abrir URL ({0}..) ({1} secuencias)
-label.load_pdb_file_associate_with_sequence = Cargar un fichero PDB y asociarlo con la secuencia {0}
-label.reveal_hidden_columns = Revelar las columnas ocultas con el botón derecho del ratón
-label.dark_colour = Oscurecer color
-label.light_colour = Aclarar color
-label.highlightnode = Pulse el botón izquierdo para seleccionar las hojas. Haga doble clic para invertir las hojas. Pulse el botón derecho para cambiar el color.
-label.load_colour_scheme = Cargar esquema cromático
-label.toggle_enabled_views = Cuando está habilitado, permite que se seleccionen varias vistas.
-label.edit_notes_parameter_set = Haga clic para editar las notas de este conjunto de parámetros.
-label.open_local_file = Abrir fichero local
-label.enable_automatically_sort_alignment_when_open_new_tree = Habilite esta opción para ordenar automáticamente el alineamiento cuando abra un nuevo árbol.
-label.listen_for_selections = Atención a las selecciones
-label.selections_mirror_selections_made_same_sequences_other_views = Cuando está habilitado, las selecciones de esta vista serán un reflejo de las selecciones realizadas en las mismas secuencias de otras vistas.
-label.toggle_sequence_visibility = Shift+H cambia la visibilidad de la secuencia
-label.toggle_columns_visibility = Ctrl+H cambia la visibilidad de la columna
-label.toggles_visibility_hidden_selected_regions = H cambiar la visibilidad de las regiones ocultas o seleccionadas
-label.rename_tab_eXpand_reGroup= Haga clic en el botón derecho para renombrar la pestaña Presione X para expandir las tablas y G para reagrupar.
-label.right_align_sequence_id = Alinear a la derecha el ID de la secuencia
-label.sequence_id_tooltip = Ayuda del ID de la secuencia
-label.no_services =
-label.select_copy_raw_html = Seleccione esta opción si desea copiar el html en bruto
-label.share_data_vamsas_applications = Compartir datos con otras aplicaciones vamsas
-label.connect_to = Conectar a
-label.join_existing_vamsas_session = Unirse a una sesión vamsas existente
-label.from_url = desde una URL
-label.any_trees_calculated_or_loaded_alignment_automatically_sort = Cuando está habilitado, cualquier árbol calculado o cargado en el alineamiento lo ordenará
-label.sort_with_new_tree = Ordenar con el nuevo árbol
-label.from_textbox = desde un área de texto
-label.window = Ventana
-label.preferences = Preferencias
-label.tools = Herramientas
-label.fetch_sequences = Recuperar secuencia(s)
-label.stop_vamsas_session = Parar sesión vamsas
-label.collect_garbage = Recolector de basura
-label.show_memory_usage = Mostrar uso de memoria
-label.show_java_console = Mostrar consola de Java
-label.show_jalview_news = Mostrar las noticias de Jalview
-label.take_snapshot = Tomar captura
-label.monospaced_fonts_faster_to_render = Las fuentes monoespaciadas son más rápidas de pintar
-label.anti_alias_fonts = Fuentes anti-alias (más lentas de pintar)
-label.monospaced_font= Monoespaciadas
-label.quality = Calidad
-label.maximize_window = Maximizar ventana
-label.conservation = Conservación
-label.consensus = Consenso
-label.histogram = Histograma
-label.logo = Logo
-label.non_positional_features = Características no posicionales
-label.database_references = Referencias a base de datos
-label.share_selection_across_views = Compartir la selección en todas las vistas
-label.scroll_highlighted_regions = Desplazarse hasta las regiones resaltadas
-label.gap_symbol = Símbolo del hueco
-label.alignment_colour = Color del alineamiento
-label.address = Dirección
-label.port = Puerto
-label.default_browser_unix = Navegador por defecto (Unix)
-label.send_usage_statistics = Enviar estadísticas de uso
-label.check_for_questionnaires = Comprobar los cuestionarios
-label.check_for_latest_version = Comprobar la última versión
-label.url_linkfrom_sequence_id = URL del enlace del ID de la secuencia
-label.use_proxy_server = Utilizar un servidor proxy
-label.eps_rendering_style = Estilo de visualización EPS
-label.append_start_end = Añadir /inicio-fin (/15-380)
-label.full_sequence_id = ID de la secuencia completo
-label.smooth_font = Fuente alargada
-label.autocalculate_consensus = Autocalcular consenso
-label.pad_gaps = Rellenar huecos
-label.pad_gaps_when_editing = Rellenar huecos al editar
-label.automatically_set_id_width = Establecer automáticamente al anchura del ID
-label.figure_id_column_width = Anchura de la columna del ID de la Figura
-label.use_modeller_output = Utilizar la salidad del Modeller
-label.wrap_alignment = Envolver alineamiento
-label.right_align_ids = Alinear IDs a la derecha
-label.sequence_name_italics = Nombre de la secuencia en cursiva
-label.open_overview = Abrir resumen
-label.default_colour_scheme_for_alignment = Esquema cromático por defecto para el alineamiento
-label.annotation_shading_default = Sombreado por defecto de la anotación
-label.default_minimum_colour_annotation_shading = Por mínimo por defecto para el sombreado de la anotación
-label.default_maximum_colour_annotation_shading = Por máximo por defecto para el sombreado de la anotación
-label.visual = Visual
-label.connections = Conexiones
-label.output = Salida
-label.editing = Edición
-label.das_settings = Configuración DAS
-label.web_services = Servicios web
-label.right_click_to_edit_currently_selected_parameter = Haga clic en el botón derecho para editar el parámetro seleccionado actualmente.
-label.let_jmol_manage_structure_colours = Permitir que Jmol gestione la estructuras cromáticas
-label.marks_leaves_tree_not_associated_with_sequence = Marcar las hojas del árbol que no están asociadas a una secuencia
-label.index_web_services_menu_by_host_site = Indizar los servicios web en el menú por el host que los aloja
-label.option_want_informed_web_service_URL_cannot_be_accessed_jalview_when_starts_up = Marque esta opción si desea ser informado cuando no se pueda acceder a la URL de un servicio web al arrancar Jalview.
-label.new_service_url = Nueva URL del servicio
-label.edit_service_url = Editar la URL del servicio
-label.delete_service_url = Borrar la URL del servicio
-label.details = Detalles
-label.options = Opciones
-label.parameters = Paramétros
-label.available_das_sources = Fuentes DAS disponibles
-label.full_details = Detalles completos
-label.authority = Autoridad
-label.type = Tipo
-label.proxy_server = Servidor proxy
-label.file_output = Fichero de salida
-label.select_input_type = Seleccionar el tipo de entrada
-label.set_options_for_type = Establecer opciones para el tipo
-label.data_input_parameters = Datos de los parámetros de entrada
-label.data_returned_by_service = Datos devueltos por el servicio
-label.rsbs_encoded_service = Servicio RSBS codificado
-label.parsing_errors = Errores de parseo
-label.simple_bioinformatics_rest_services = Simple Bioinformatics Rest Services
-label.web_service_discovery_urls = URL de descubrimiento de servicios web
-label.input_parameter_name = Nombre del parámetro de entrada
-label.short_descriptive_name_for_service = Nombre corto descriptivo del servicio
-label.function_service_performs = Tipo de función que realiza el servicio (p.e. alineamiento, análisis, búsqueda, etc).
-label.brief_description_service = Descripción breve del servicio
-label.url_post_data_service = URL a la que enviar los datos del servicio. Incluya cualquier parámetro especial que se necesite aquí
-label.optional_suffix = Sufijo opcional añadido a la URL al recuperar los resultados del servicio
-label.preferred_gap_character = ¿Qué caracter para el hueco prefiere el servicio?
-label.gap_character = Carácter para hueco
-label.move_return_type_up_order= Mover el tipo de returno hacia arriba en el orden
-label.move_return_type_down_order= Mover el tipo de returno hacia abajo en el orden
-label.update_user_parameter_set = Actualizar el conjunto de parámetros de usuario existente
-label.delete_user_parameter_set = Borrar el conjunto de parámetros de usuario existente
-label.create_user_parameter_set = Crear un nuevo conjunto de parámetro con la configuración actual.
-label.revert_changes_user_parameter_set = Deshacer todos los cambios en el conjunto de parámetros actual
-label.start_job_current_settings = Arrancar trabajo con la configuración actual
-label.cancel_job_close_dialog = Cerrar este diálogo y cancelar el trabajo
-label.input_output = Entrada/Salida
-label.cut_paste = Cortar y pegar
-label.adjusting_parameters_for_calculation = Ajustar los parámetros para el cálculo existente
-label.2d_rna_structure_line = 2D RNA {0}
-label.2d_rna_sequence_name = 2D RNA - {0}
-label.edit_name_and_description_current_group = Editar el nombre y la descripción del grupo actual.
-label.view_structure_for = Visualizar la estructura para {0}
-label.view_all_structures = Visualizar todas las {0} estructuras.
-label.view_all_representative_structures = Visualizar todas las {0} estructuras representativas.
-label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment = Abrir una nueva vista de Jmol con todas las estructuras representativas\nasociadas con la selecci\u00F3n actual\nsuperpuesta con el alineamiento actual.
-label.associate_structure_with_sequence = Asociar estructura con la secuencia
-label.from_file = desde fichero
-label.enter_pdb_id = Introducir PDB Id
-label.discover_pdb_ids = Buscar PDB ids
-label.text_colour = Color del texto
-label.structure = Estructura
-label.view_structure = Visualizar estructura
-label.clustalx_colours = Colores de Clustalx
-label.above_identity_percentage = Sobre % identidad
-label.create_sequence_details_report_annotation_for = Anotación para {0}
-label.sequece_details_for = Detalles de la secuencia para {0}
-label.sequence_name = Nombre de la secuencia
-label.sequence_description = Descripción de la secuencia
-label.edit_sequence_name_description = Editar el nombre/descripción de la secuencia
-label.spaces_converted_to_backslashes = Los espacios se han convertido en _
-label.no_spaces_allowed_sequence_name = No se permiten espacios en el nombre de la secuencia
-label.select_outline_colour = Seleccionar el color del límite
-label.web_browser_not_found_unix = Unixers\: No es posible encontrar el navegador web por defecto.\nA\u00F1ada la ruta completa de su navegador en la pesta\u00F1a de Preferencias.
-label.web_browser_not_found = No se encuentra el navegador web
-label.select_pdb_file_for = Seleccione un fichero PDB para {0}
-label.html = HTML
-label.wrap = Envolver
-label.show_database_refs = Mostrar las referencias en base de datos
-label.show_non_positional_features = Mostrar las características no posicionales
-label.save_png_image = Guardar como imagen PNG
-label.load_tree_for_sequence_set = Cargar un árbol para este conjunto de secuencias
-label.export_image = Exportar imagen
-label.vamsas_store = Almacén VAMSAS
-label.translate_cDNA = Traducir cDNA
-label.extract_scores = Extraer puntuaciones
-label.get_cross_refs = Obtener referencias cruzadas
-label.sort_alignment_new_tree = Alinear el alineamiento con el nuevo árbol
-label.add_sequences = Añadir secuencias
-label.new_window = Nueva ventana
-label.refresh_available_sources = Refrescar las fuentes disponibles
-label.use_registry = Utilizar el registro
-label.add_local_source = Añadir fuente local
-label.set_as_default = Establecer por defecto
-label.show_labels = Mostrar etiquetas
-label.background_colour = Color de fondo
-label.associate_nodes_with = Asociar nodos con
-label.jalview_pca_calculation = Cálculo del PCA por Jalview
-label.link_name = Nombre del enalce
-label.pdb_file = Fichero PDB
-label.colour_with_jmol = Colorear con Jmol
-label.align_structures = Alinear estructuras
-label.jmol = Jmol
-label.sort_alignment_by_tree = Ordenar alineamiento por árbol
-label.mark_unlinked_leaves = Marcar las hojas como no enlazadas
-label.associate_leaves_with = Asociar hojas con
-label.save_colour_scheme_with_unique_name_added_to_colour_menu = Guarde el esquema cromáticos con un nombre único y se añadirá al menú de colores
-label.case_sensitive = Sensible a mayúsculas
-label.lower_case_colour = Color para las minúsculas
-label.index_by_host = Indizar por host
-label.index_by_type = Indizar por tipo
-label.enable_jabaws_services = Habilitar servicios JABAWS
-label.display_warnings = Mostrar advertencias
-label.move_url_up = Mover la URL hacia arriba
-label.move_url_down = Mover la URL hacia abajo
-label.add_sbrs_definition = Añadir una definición SBRS
-label.edit_sbrs_definition = Editar una definición SBRS
-label.delete_sbrs_definition = Borrar una definición SBRS
-label.your_sequences_have_been_verified = Sus secuencias has sido verificadas en una base de datos de secuencias conocidas. Algunos de sus ID se han alterado y\n, probablemente, el residuo de inicio/fin se haya actualizado.\nGuarde su alineamiento para mantener el ID actualizado.\n\n
-label.sequence_names_updated = Nombres de secuencia actualizados
-label.dbref_search_completed = Búsqueda de DBRef terminada
-label.show_all_chains = Mostrar todas las cadenas
-label.fetch_all_param = Recuperar todas {0}
-label.paste_new_window = Pegar en una nueva ventana
-label.settings_for_param = Configuración para {0}
-label.view_params = Visualizar {0}
-label.select_all_views = Seleccionar todas las vistas
-label.align_sequences_to_existing_alignment = Alinear las secuencias con el alineamiento existente
-label.realign_with_params = Realinear con {0}
-label.calcname_with_default_settings = {0} por defecto
-label.action_with_default_settings = {0} con la configuración por defecto
-label.edit_settings_and_run = Editar la configuración y ejecutar...
-label.view_and_change_parameters_before_alignment = Ver y cambiar los parámetros antes del alineamiento
-label.run_with_preset_params = Ejecutar {0} con preconfiguración
-label.view_and_change_parameters_before_running_calculation = Ver y cambiar los parámetros antes de lanzar el cálculo
-label.view_documentation = Ver documentación
-label.select_return_type = Seleccionar el tipo de retorno
-label.translation_of_params = Traducción de {0}
-label.features_for_params = Características de - {0}
-label.annotations_for_params = Anotaciones de - {0}
-label.generating_features_for_params = Generando características de - {0}
-label.generating_annotations_for_params = Generando anotaciones de - {0}
-label.varna_params = VARNA - {0}
-label.sequence_feature_settings = Configuración de las características de la secuencia
-label.pairwise_aligned_sequences = Secuencias alineadas a pares
-label.original_data_for_params = Datos originales de {0}
-label.points_for_params = Puntos de {0}
-label.transformed_points_for_params = Puntos transformados de {0}
-label.graduated_color_for_params = Color graduado para la característica de {0}
-label.select_backgroud_colour = Seleccionar color de fondo
-label.invalid_font = Fuente no válida
-label.separate_multiple_accession_ids = Separar los accession id con un punto y coma ";"
-label.replace_commas_semicolons = Cambiar comas por puntos y comas
-label.parsing_failed_syntax_errors_shown_below_param = Parseo erróneo. A continuación, se muestras los errores de sintaxis {0}
-label.parsing_failed_unrecoverable_exception_thrown_param = \nParseo err\u00F3neo. Se ha lanzado una excepci\u00F3n fatal\:\n {0}
-label.example_query_param = Consulta de ejemplo: {0}
-label.enter_value_increase_conservation_visibility = Introduzca un valor para incrementar la visibilidad de la conservación
-label.enter_percentage_identity_above_which_colour_residues = Introduza un % de identidad por encima del cual se colorearán los residuos
-label.wswublast_client_credits = Para mostrar las caracter\u00EDsticas de una secuencia, debe indicarse un id de Uniprot cuya secuencia se corresponda al 100 % con la introducida.\nPara mostrar estas caracter\u00EDsticas, prueba a cambar los nombre de sus secuencia con los ID que se sugieren a continuaci\u00F3n.\n\nRunning WSWUBlast at EBI.\nPlease quote Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez R.\nSOAP-based services provided by the European Bioinformatics Institute.\nNucleic Acids Res. 33(1)\:W25-W28 (2005));
-label.blasting_for_unidentified_sequence = Ejecutar BLAST para la secuencias sin identificar
-label.select_columns_containing = Seleccione las columnas que contengan
-label.select_columns_not_containing = Seleccione las columnas que no contengan
-option.trim_retrieved_seqs = Ajustar las secuencias recuperadas
-label.trim_retrieved_sequences = Cuando la secuencia de referencia es más larga que la secuencia con la que está trabajando, sólo se mantienen las subsecuencias relevantes.
-label.use_sequence_id_1 = Utilice $SEQUENCE_ID$ o $SEQUENCE_ID=//=$
-label.use_sequence_id_2 = \nto para embeber el id de la secuencia en una URL
-label.ws_parameters_for = Parámetros para {0}
-label.switch_server = Cambiar servidor
-label.open_jabaws_web_page = Abra el página principal del servidor JABAWS en un navegador web
-label.choose_jabaws_server = Escoja un servidor para ejecutar este servicio
-label.services_at = Servicios en {0}
-label.rest_client_submit = {0} utilizando {1}
-label.fetch_retrieve_from =Recuperar de {0}
-label.fetch_retrieve_from_all_sources = Recuperar de todas las fuentes {0} en {1} La primera es :{2}
-label.feature_settings_click_drag = Haga clic o arrastre los tipos de las características hacia arriba o hacia abajo para cambiar el orden de visualización. Haga doble clic para seleccionar las columnas que contienen las características del alineamiento/selección actual.
-label.opt_and_params_further_details = ver los detalles adicionales haciendo clic en el botón derecho
-label.opt_and_params_show_brief_desc_image_link = Haga clic para ver una descripción breve Haga clic en el botón derecho para obtener información adicional.
-label.opt_and_params_show_brief_desc = Haga clic para ver una descripción breve
-label.adjusts_width_generated_eps_png = Ajusta la anchura del fichero EPS o PNG generado para asegurar incluso que el ID de la secuencia más larga o las etiquetas de anotación se muestran
-label.manually_specify_width_left_column = Especificar manualmente la anchura de la columna izquierda en las etiquetas de los ID de la secuencia y las anotaciones se mostrar en las figuras del alineamiento exportado.Esta configuraicón se ignorará si está marcada la opción 'Establecer automáticamente al anchura del ID'
-label.job_created_when_checked = Cuando está habilitado, se crea un trabajo para cada secuencia de la selección actual
-label.when_checked_job_visible_region_and_results = Cuando está habilitado, se crea un único trabajo para la región visible y los resultados de mapean en su ubicación dentro del alineamiento. En caso contrario, se creará un trabajo para cada región visible y contigua en el alineamiento o selección actual (p.e. un alineamiento múlitple).
-label.flat_file_representation = La representación del fichero plano de este servicio utilizando el formalismo Really Simple Bioinformatics Service
-label.result_of_parsing_rsbs = Resultados de parsear la representación RSBS
-label.user_preset = Preselección de usuario
-label.service_preset = Preselección del servicio
-label.run_with_preset = Ejecutar {0} con preselección
-label.view_service_doc_url = Visualizar {1}
-label.submit_sequence = Enviar {0} {1} {2} {3} a {4}
-action.by_title_param = por {0}
-label.alignment = Alineamiento
-label.secondary_structure_prediction = Predicción de la estructura secundaria
-label.sequence_database_search = Búsqueda en base de datos de secuencias
-label.analysis = Análisis
-label.protein_disorder = Desorden en la proteína
-label.source_from_db_source = Fuentes de {0}
-label.from_msname = de {0}
-label.superpose_with = Superponer con...
-action.do = Hacer
-label.scale_label_to_column = Ajustar la etiqueta a la columna
-label.add_new_row = Añadir nuevo fila
-label.edit_label_description = Editar etiqueta/descripción
-label.hide_row = Ocultar esta fila
-label.delete_row = Borrar esta fila
-label.show_all_hidden_rows = Mostrar todas las filas ocultas
-label.export_annotation = Exportar anotación
-label.copy_consensus_sequence = Copiar secuencia de consenso
-label.helix = Hélice
-label.sheet = Hoja
-label.rna_helix = Hélice de ARN
-label.remove_annotation = Borrar anotación
-label.colour_by = Colorear por...
-label.muscle_multiple_protein_sequence_alignment = Alineamiento múltiple de secuencias de proteínas con Muscle
-label.mafft_multiple_sequence_alignment = Alineamiento múltiple de secuencias con MAFFT
-label.clustalw_multiple_sequence_alignment = Alineamiento múltiple de secuencias con ClustalW
-label.jnet_secondary_structure_prediction = Predicción de la estructura secundaria con JNet
-label.multiharmony = Multi-Harmony
-label.unable_start_web_service_analysis = No es posible iniciar el servicio web de análisis
-label.job_couldnt_be_started_check_input = El trabajo no puede arrancarse. Por favor, compruebe los parámetros de entrada y los mensajes de advertencia de la consola de Jalview.
-label.prompt_each_time = Preguntar siempre
-label.use_source = Fuente
-label.couldnt_save_project = No es posible guardar el proyecto
-label.error_whilst_saving_current_state_to = Error mientras se guardaba el estado a {0}
-label.error_whilst_loading_project_from = Error cargando el proyecto desde {0}
-label.couldnt_load_project = No es posible cargar el proyecto
-label.pca_sequences_not_aligned = Las secuencias deben estar alineadas antes de calcular el PCA.\nPruebe a utilizar la funci\u00F3n de rellenar huecos en el men\u00FA Editar,\no cualquiera de los servicios web de alineamiento m\u00FAltiple.
-label.invalid_name_preset_exists = Nombre no válido - esta preconfiguración ya existe.
-label.invalid_name = Nombre no válido
-label.set_proxy_settings = Por favor, configure su proxy en la pestaña 'Conexiones' de la ventana de Preferencia
-label.proxy_authorization_failed = Autorización del proxy fallida
-label.internal_jalview_error = Error interno de Jalview
-label.secondary_structure_prediction_service_couldnt_be_located = No se ha podido encontrar el Servicio de Predicciónd de la Estructura Secudaria {0} en {1}.
-label.service_called_is_not_msa_service = El Servicio llamado \n{0}\nno es un \nServicio de Alineamiento M\u00FAltiple de Secuencias\!
-label.msa_service_is_unknown = El Servicio de Alineamiento Múltiple llamado {0} es desconocido
-label.service_called_is_not_seq_search_service = El Servicio llamando \n{0}\nno es un \nServicio de B\u00FAsqueda de Secuencias\!
-label.seq_search_service_is_unknown = El Servicio de Búsqueda de Sencuencias llamado {0} es desconocido
-label.feature_type = Tipo de característisca
-label.display = Representación
-label.service_url = URL del servicio
-label.copied_sequences = Secuencias copiadas
-label.cut_sequences = Cortar secuencias
-label.conservation_colour_increment = Incremento de Conservación del Color ({0})
-label.percentage_identity_thereshold = Umbral del Porcentaje de Identidad ({0})
-label.error_unsupported_owwner_user_colour_scheme = Propietario no soportado para el diálogo del Esquema Cromático del Usuario
-label.save_alignment_to_file = Guardar Alineamiento en fichero
-label.save_features_to_file = Guardar Características en un fichero
-label.save_annotation_to_file = Guardar Anotación en un fichero
-label.no_features_on_alignment = No se han encontrado características en el alineamiento
-label.save_pdb_file = Guardar fichero PDB
-label.save_text_to_file = Guardar Texto en un fichero
-label.save_state = Guardar estado
-label.restore_state = Restaurar estado
-label.saving_jalview_project = Guardando el proyecto de Jalview {0}
-label.loading_jalview_project = Cargando el proyecto de Jalview {0}
-label.save_vamsas_document_archive = Guardar el archivo de documento Vamsas
-label.saving_vamsas_doc = Guardando el documento VAMSAS en {0}
-label.load_feature_colours = Cargar colores de características
-label.save_feature_colours = Guardar esquema cromático de características
-label.dataset_for = {0} conjunto de datos para {1}
-label.select_startup_file = Seleccionar fichero de arranque
-label.select_default_browser = Seleccionar navegador web por defecto
-label.save_tree_as_newick = Guardar árbol como fichero newick
-label.create_eps_from_tree = Crear un fichero EPS a partir de un árbol
-label.create_png_from_tree = Crear una imagen PNG a partir de un árbol
-label.save_colour_scheme = Guardar esquema cromático
-label.edit_params_for = Editar los parámetros de {0}
-label.choose_filename_for_param_file = Escoja un nombre de fichero para este fichero de parámetros
-label.save_as_html = Guardar como HTML
-label.recently_opened = Abiertos recientemente
-label.blasting_for_unidentified_sequence_jobs_running = Ejecutando BLAST de las secuencias no indentificadas - {0} trabajos en marcha.
-label.tree_from = Árbol de {0}
-label.webservice_job_title = {0} usando {1}
-label.select_visible_region_of = seleccionada {0} región de {1}
-label.visible = Visible
-label.select_unselect_visible_regions_from = seleccionada y deseleccionadas {0} regiones de {1}
-label.visible_region_of = región visible de
-label.webservice_job_title_on = {0} usando {1} de {2}
-label.updating_vamsas_session = Actualizando sesión VAMSAS
-label.loading_file = Cargando fichero: {0}
-label.edit_params = Editar {0}
-error.not_implemented = No implementado
-error.no_such_method_as_clone1_for = No existe ese método como un clone1 de {0}
-error.null_from_clone1 = Nulo de clone1!
-error.implementation_error_sortbyfeature = Error de implementación - sortByFeature debe ser uno de FEATURE_SCORE, FEATURE_LABEL o FEATURE_DENSITY.
-error.not_yet_implemented = No se ha implementado todavía
-error.unknown_type_dna_or_pep = Tipo desconocido {0} - dna o pep son los únicos valores permitidos
-error.implementation_error_dont_know_thereshold_annotationcolourgradient = Error de implementación: no se conoce el valor umbral para el AnnotationColourGradient actual.
-error.implementation_error_embeddedpopup_not_null = Error de implementación - embeddedPopup debe ser no nulo.
-error.invalid_colour_for_mycheckbox = Color no válido para MyCheckBox
-error.implementation_error_unrecognised_render_object_for_features_type = Error de implementación: no se reconoce el objeto de representación {0} para las características de tipo {1}
-error.implementation_error_unsupported_feature_colour_object = Error de implementación: objeto de color de características no soportado.
-error.invalid_separator_parameter = Separador de parámetros no válido - debe tener longitud mayor que cero
-error.alignment_cigararray_not_implemented = Alignment(CigarArray) no se ha implementado todavía
-error.weak_sequencei_equivalence_not_yet_implemented = Equivalencia débil sequenceI no se ha implementado todavía.
-error.implementation_error_can_only_make_alignmnet_from_cigararray = Error de implementación - sólo se puede construir un vista de alineamiento a partir de una CigarArray de secuencias.
-error.empty_view_cannot_be_updated = una vista vacía no se puede actualizar.
-error.mismatch_between_number_of_sequences_in_block = No hay coincidencia entre el número de secuencias en el bloque {0} ({1}) y la vista original ({2})
-error.padding_not_yet_implemented = El relleno no se ha implementado todavía
-error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view = No hay coincidencia entre los bloques visibles para actualizar y el número de contigs en la vista (contigs=0,blocks={0})
-error.unknown_seq_cigar_operation = Operación SeqCigar {0} desconocida
-error.implementation_bug_parse_cigar_string = Bug de implementación en parseCigarString
-error.implementation_error_invalid_operation_string = Error de implementación. Cadena de operación no válida.
-error.invalid_range_string = Rango de la cadena no válido (debe ser cero o un número positivo)
-error.implementation_error_delete_range_out_of_bounds = Error de implementación: deleteRange fuera de rango: el comienzo debe ser cero o positivo y menor que el final.
-error.implementation_error = Error de implementación
-error.implementation_error_unknown_operation = ¡Error de implementación! Operación desconocida {0}
-error.implementation_error_unexpected_null_from_get_sequence_and_deletions = Error de implementación - valor nulo no esperado en getSequenceAndDeletions
-error.implementation_error_set_seq_null = Error de implementación - _setSeq(null,...)
-error.implementation_error_s = Error de implementación: _s= {0}
-error.implementation_error_seqcigar_possible = SeqCigar: posible error de implementación: la secuencia es más larga de el conjunto de datos de la secuencia
-error.implmentation_bug_seq_null = Bug de implementación. Seq nula
-error.implementation_bug_cigar_operation_list_range_list = Bug de implementación: Cigar Operation list!= range list
-error.not_yet_implemented_cigar_object_from_cigar_string = No implementado todavía: construcción de un objeto Cigar desde una cadena y una secuencia con huecos.
-error.implementation_bug_cigar_operation = Bug de implementación. La operación Cigar {0} {1} no es ni {2}, ni {3} ni {4}.
-error.implementation_error_for_new_cigar = Error de implementación en new Cigar(SequenceI)
-error.implementation_error_cigar_seq_no_operations = Error de implementación: la {0}a secuencia Cigar no tiene operaciones.
-error.implementation_error_jmol_getting_data = Error de implementación - Jmol parece estar todavía intentando recuperar sus datos - informe de ello en http://issues.jalview.org/browse/JAL-1016
-error.implementation_error_no_pdbentry_from_index = Error de implementación - no existe la correspondiente entrada pdb (para el índice {0}) para añadir el mapeo de secuencias a
-error.jmol_version_not_compatible_with_jalview_version = La versión {0} de Jmol no es compatible con esta versión de Jalview. Informe de este problema en http://issues.jalview.org
-error.not_implemented_remove = Borrar: no implementado
-error.not_implemented_clone = Clonar: no implementado
-error.implementation_error_chimera_getting_data = Error de implementación - Chimera parece estar todavía intentando recuperar sus datos - informe de ello en http://issues.jalview.org/browse/JAL-1016
-error.call_setprogressbar_before_registering_handler = llamada a setProgressBar antes de registrar el manejador de la barra de estado
-label.cancelled_params = {0} cancelado
-error.implementation_error_cannot_show_view_alignment_frame = Error de implementación: no es posible mostrar una vista de otro alineamiento en un AlignFrame.
-error.implementation_error_dont_know_about_thereshold_setting = Error de implementación: no se conoce la configuración del umbral para el AnnotationColourGradient actual.
-error.eps_generation_not_implemented = La generación de EPS no se ha implementado todavía
-error.png_generation_not_implemented = La generación de PNG no se ha implementado todavía
-error.try_join_vamsas_session_another = Tratando de establecer una sesión VAMSAS cuando ya había otra conectada
-error.invalid_vamsas_session_id = Identificador de sesión VAMSAS no válido
-error.implementation_error_cannot_create_groovyshell = Error de implementación:no se puede crear groovyShell sin Groovy en el classpath
-label.groovy_support_failed = El soporte Groovy de Jalview ha fallado
-label.couldnt_create_groovy_shell = No es posible crear el shell de Groovy. Compruebe el fichero de log para conocer los detalles.
-error.unsupported_version_calcIdparam = Versión no soportada de {0}
-error.implementation_error_cant_reorder_tree = Error de implementación: no es posible reordenar este árbol. No DefaultMutableTreeNode.
-error.invalid_value_for_option = Valor no válido de {0} para la opción {1}
-error.implementation_error_cannot_import_vamsas_doc = Error de implementación - todavía no es posible importar el documento VAMSAS existente en una sesión existente.
-label.vamsas_doc_couldnt_be_opened_as_new_session = El documento VAMSAS no ha podido abrirse como una nueva sesión. Por favor, escoja otra.
-error.implementation_error_vamsas_operation_not_init = ¡Error de implementación! Operaciones VAMSAS cuando el cliente no estaba inicializado ni conectado
-error.jalview_no_connected_vamsas_session = Jalview está conectado a una sesión VAMSAS
-error.implementation_error_cannot_recover_vamsas_object_mappings = Error de implementación: no es posible recuperar los mapeos del objeto VAMSAS - no se ha hecho ningún backup
-error.setstatus_called_non_existent_job_pane = se lllamado a setStatus para el panel de trabajo {0} no existente
-error.implementation_error_cannot_find_marshaller_for_param_set =Error de implementación: no puede encontrar un marshaller para el conjunto de parámetros
-error.implementation_error_old_jalview_object_not_bound =Error de implementación: ¡el objeto Jalview antiguo no está enlazado! ({0})
-error.implementation_error_vamsas_doc_class_should_bind_to_type = Error de implementación: la clase de documento VAMSAS {0} debe enlazar a {1} (pero se ha encontrado que lo está a {2})
-error.implementation_error_jalview_class_should_bind_to_type = Error de implementación: la clase Jalview {0} debe enlazar a {1} (pero se ha encontrado que lo está a {2})
-error.invalid_vamsas_rangetype_cannot_resolve_lists = RangeType VAMSAS no válido - ¡no es posible resolver ambas listas de Pos y Seg con los valores elegidos!
-error.implementation_error_maplist_is_null = Error de implementación. MapList es nulo en initMapType.
-error.implementation_error_cannot_have_null_alignment = Error de implementación: no es posible tener una clave nula en el alineamiento
-error.implementation_error_null_fileparse = Error de implementación. FileParse nulo en el construictor de copia
-error.implementation_error_cannot_map_alignment_sequences = Error de implementación: no es posible maper un alineamiento de secuencias desde distintos conjuntos de datos en un único alineamiento en el documento VAMSAS.
-error.implementation_error_cannot_duplicate_colour_scheme = Error grave de implementación: no es posible duplicar el esquema cromático {0}
-error.implementation_error_structure_selection_manager_null = Error de implementación. El contexto structure selection manager's es nulo
-exception.ssm_context_is_null = El contexto SSM es nulo
-error.idstring_seqstrings_only_one_per_sequence = idstrings y seqstrings contienen una cadena por cada secuencia
-error.cannot_have_mixed_length_replacement_vectors = No es posible tener vectores de reemplazo de distinta longitud. El vector de reemplazo para {0} es de {1} cadenas de largo, pero se ha considerado ya como un vector de longitud {2}.
-error.cannot_have_zero_length_vector_replacement_strings = No es posible tener un vector de cadenas de reemplazo de longitud cero - debe ser uno o n.
-error.implementation_error_multiple_single_sequence_prediction_jobs_not_supported = ¡Error de implementación! Todavía no se soportan varios trabajos de predicción asociados a una única secuencia.
-error.implementation_error_invalid_msa_index_for_job = ¡Error de implementación! Valor msaIndex no válido para JPredJob en el objeto de entrada MSA padre!
-error.implementation_error_startjob_called = Error de implementación - StartJob(JpredJob) invocado en {0}
-error.multiple_jnet_subjob_merge_not_implemented = Todavía no se han implementado varios subtrabajos JNet conjuntos.
-label.job_never_ran = El trabajo nunca se ejecutó - entrada devuelta al usuario.
-error.implementation_error_minlen_must_be_greater_zero = Error de implementación: minlen debe ser cero o más
-error.implementation_error_msawbjob_called = Error de implementación - StartJob(MsaWSJob) invocado en un WSJobInstance {0}
-error.implementation_error_cannot_attach_ws_menu_entry = Error de implementación: ¡no es posible adjunto una WS Menu Entry sin una referencia a un manejador del servicio!
-error.parameter_migration_not_implemented_yet = La migración de parámetros no se ha implementado todavía
-error.implementation_error_cannot_set_jaba_option = Error de implementación: no es posible establecer el valor de Jaba Option a un valor fuera de su rango permitido
-error.implementation_error_valuetype_doesnt_support_jabaws_type = Error de implementación: jalview.ws.params.ValueConstrainI.ValueType no soporta el tipo JABAWS: {0}
-error.cannot_create_jabaws_param_set = No es posible crear un JabaWSParamSet con parámetros no JabaWS
-error.cannot_set_arguments_to_jabaws_param_set = No es posible establecer argumentos en JabaWSParamSet que no sean argumentos JabaWS
-error.implementation_error_runner_config_not_available = Error de implementación: Runner Config no está disponible para un servicio JABAWS de tipo {0} ({1})
-error.implementation_error_cannot_handle_jaba_param = Error de implementación: no es posible manejar el objeto del parámetro Jaba {0}
-error.implementation_error_attempt_to_delete_service_preset = Error de implementación: intento de borrar un servicio preestablecido
-error.implementation_error_cannot_locate_oldname_presetname = Error de implementación: no es posible localizar ni el nombre antiguo ({0}) ni el presetName ({1} en el almacén de datos.
-error.implementation_error_jabaws_param_set_only_handled_by = Error de implementación: JabaWsParamSets sólo puede ser manejado por JabaParamStore
-error.cannot_set_source_file_for = No es posible establecer el fichero fuente para {0}
-error.mismatch_service_instance_preset = Posible desajuste entre la instancia del servicio y la prestablecida
-error.cannot_set_params_for_ws_preset = No es posible establecer los parámetros para el servicio web JABA presestablecido
-error.implementation_error_can_only_instantiate_jaba_param_sets = Error de implementación: sólo se puede instanciar conjuntos de parámetros Jaba
-error.no_aacon_service_found = No se ha encontrado ningún servicio AACon
-error.implementation_error_couldnt_copy_value_constraint = Error de implementación: ¡no se puede copiar ValueConstrain!
-error.couldnt_encode_as_utf8 = No se ha podido codificar {0} como UTF-8.
-error.tree_inputtype_not_yet_implemented = No se ha implementado todavía el árbol como InputType
-error.implementation_error_need_to_have_httpresponse = Error de implementación: se necesita tener un HttpResponse que procesar
-error.dbrefsource_implementation_exception = Excepción de implementación DBRefSource
-error.implementation_error_dbinstance_must_implement_interface = Error de Implementación- getDbInstances debe recibir una clase que implemente jalview.ws.seqfetcher.DbSourceProxy (recibió {0})
-error.implementation_error_must_init_dbsources =Error de implementación. Debe inicializar dbSources
-label.view_controller_toggled_marked = {0} {1} columnas {2} conteniendo características del tipo {3} en {4} secuencia(s)
-label.toggled = Invertida
-label.marked = Marcada
-label.not = no
-label.no_feature_of_type_found = No se han encontrado características del tipo {0}.
-label.submission_params = Envío {0}
-label.empty_alignment_job = Trabajo de alineamiento vacío
-label.add_new_sbrs_service = Añadir un nuevo SBRS
-label.edit_sbrs_entry = Editar entrada SBRS
-label.pca_recalculating = Recalculando PCA
-label.pca_calculating = Calculando PCA
-label.select_foreground_colour = Escoger color del primer plano
-label.select_colour_for_text = Seleccione el color del texto
-label.adjunst_foreground_text_colour_thereshold = Ajustar el umbral del color del texto en primer plano
-label.select_subtree_colour = Seleccioanr el color del sub-árbol
-label.create_new_sequence_features = Crear nueva(s) característica(s) de secuencia
-label.amend_delete_features = Arrelgar/Borrar características de {0}
-exception.out_of_bounds_for_file = Fuera de rango para el fichero: i={0}, Buffer final: i0={1} iend={2}
-exception.null_string_given_to_regex_search = Cadena nula enviada a Regex.search
-exception.null_string_like_given_to_regex_search = StringLike nula enviada a Regex.search
-exception.null_string_given_to_regex_reverse_search = Cadena nula enviada a Regex.reverseSearch
-exception.null_string_like_given_to_regex_reverse_search = StringLike nula enviada a Regex.reverseSearch
-exception.null_string_like_given_to_regex_search_from = Cadena nula enviada a Regex.searchFrom
-exception.null_string_like_given_to_regex_search_region = Cadena nula enviada a Regex.searchRegion
-exception.replace_null_regex_pointer = Reemplazador tiene un puntero Regex nulo
-exception.bad_pattern_to_regex_perl_code = patrón erróneo en Regex.perlCode: {0}
-exception.no_stub_implementation_for_interface = No existe una implementación del stub para la interfaz: {0}
-exception.cannot_set_endpoint_address_unknown_port = No es posible estabelcer la dirección de punto final para el puerto desconocido {0}
-exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis = Consultando la coincidencia de apertura de paréntesis para paréntesis sin cerrar (?)
-exception.mismatched_unseen_closing_char = Discordancia (no vista) en el carácter de cierre {0}
-exception.mismatched_closing_char = Carácter de cierre discordante {0}
-exception.mismatched_opening_char = Carácter de apertura discordante {0} en {1}
-exception.invalid_datasource_couldnt_obtain_reader = Fuente de datos no válida. No es posible obtener el Reader
-exception.index_value_not_in_range = {0}: el valor del índice {1} en se encuentra en el rango [0..{2}]
-exception.unterminated_cigar_string = Cadena cigar sin terminar
-exception.unexpected_operation_cigar_string_pos = Operación no esperada {0} en una cadena cigar (posición {1} en {2})
-exception.couldnt_parse_responde_from_annotated3d_server = No es posible parsear la respuesta procedente del servidor Annotate3d
-exception.application_test_npe = Prueba de aplicación: lanzando un NullPointerException que debe aparecer en la consola
-exception.overwriting_vamsas_id_binding = Sobreescribiendo la asociación al VAMSAS id
-exception.overwriting_jalview_id_binding = Sobreescribiendo la asociación al Jalview id
-error.implementation_error_unknown_file_format_string = Error de implementación: cadena de formato de fichero desconocido
-exception.failed_to_resolve_gzip_stream = Fallo al resolver el flujo GZIP
-exception.problem_opening_file_also_tried = Problema abriendo {0} (también se intentó {1}) : {2}
-exception.problem_opening_file = Problema abriendo {0} : {1}
-exception.failed_to_read_data_from_source = Error al leer datos de la fuente: {0}
-exception.no_init_source_stream = Flujo de fuente sin inicializar
-exception.invalid_source_stream = Flujo de fuente no válida: {0}
-error.implementation_error_reset_called_for_invalid_source = Error de implementación: se ha invocado un Reset en una fuente no válida.
-exception.number_of_residues_in_query_sequence_differ_from_prediction = El n\u00FAmero de residuos en la supuesta secuencia consultada {0} ({1}\n{2})\ndifiere del n\u00FAmero de sitios de predicci\u00F3n en la predicci\u00F3n ({3})
-label.mapped = mapeado
-exception.jpredconcide_entry_has_unexpected_number_of_columns = JPredConcise: La entrada ({0}) tiene un número inesperado de columnas
-exception.couldnt_parse_concise_annotation_for_prediction = No es posible parsear la anotaci\u00F3n concisa para el perfil de predicci\u00F3n.\n{0}
-exception.newfile = Fichero Newick\: {0}\n
-label.no_tree_read_in = No hay lectura de árbol en
-exception.rnaml_couldnt_access_datasource = No ha sido posible acceder la fuente de datos ({0})
-exception.ranml_couldnt_process_data = No ha sido posible procesar los datos como un fichero RNAML ({0})
-exception.ranml_invalid_file = Fichero RNAML no válido ({0})
-exception.ranml_problem_parsing_data = Problema parseando los datos como RNAML ({0})
-exception.pfam_no_sequences_found = No se han encontrado secuencias (entrada PFAM)
-exception.stockholm_invalid_format = Este fichero no es tiene un formato STOCKHOLM válido: la primera línea no contiene '# STOCKHOLM'
-exception.couldnt_parse_sequence_line = No es posible parse la línea de secuencia: {0}
-exception.error_parsing_line = Error parseando {0}
-exception.unknown_annotation_detected = Anotación desconocida detectada: {0} {1}
-exception.couldnt_store_sequence_mappings = No es posible almacenar los mapeos de secuencia para {0}
-exception.matrix_too_many_iteration = Demasiadas iteraciones en {0} (el máximo es {1})
-exception.browser_not_found = Excepción al buscar el navegador: {0}
-exception.browser_unable_to_locate = Imposible encontrar el navegador: {0}
-exception.invocation_target_exception_creating_aedesc = InvocationTargetException mientras se creaba AEDesc: {0}
-exception.illegal_access_building_apple_evt= IllegalAccessException mientras se construía AppleEvent: {0}
-exception.instantiation_creating_aedesc = InstantiationException mientras se creaba AEDesc: {0}
-exception.unable_to_launch_url = Imposible lanzar la URL: {0}
-exception.unable_to_create_internet_config = Imposible crear una instancia de configuración de Internet: {0}
-exception.invocation_target_calling_url = InvocationTargetException mientras se invocaba openURL: {0}
-exception.illegal_access_calling_url = IllegalAccessException mientras se invocaba openURL: {0}
-exception.interrupted_launching_browser = InterruptedException mientras se lanzaba el navegador: {0}
-exception.das_source_doesnt_support_sequence_command = La fuente {0} no soporta el comando sequence.
-exception.invalid_das_source = Fuente DAS no válida: {0}
-exception.ebiembl_retrieval_failed_on = La recuperación de datos EBI EMBL XML ha fallado en {0}:{1}
-label.no_embl_record_found = # No se ha recuperado ningún registro EMBL de {0}:{1}
-label.embl_successfully_parsed = # Se han parseado con éxito las consultas {0} en un alineamiento
-exception.no_pdb_records_for_chain = No se han encontrado registros {0} para la cadena {1}
-exception.unexpected_handling_rnaml_translation_for_pdb = Excepcion inesperada cuando se traducían a RNAML los datos PDB
-exception.couldnt_recover_sequence_properties_for_alignment = No es posible recuperar las propiedades de la secuencia para el alineamiento
-exception.unknown_format_for_file = Formato desconocido {0} para el fichero \: \n{1}
-label.remove_gaps = Eliminar huecos
-exception.couldnt_recover_sequence_props_for_jnet_query = No ha sido posible recuperar las propiedades de la secuencia para la secuencia JNet Query!
-exception.server_timeout_try_later = Tiempo de conexi\u00F3n ha expirado - int\u00E9ntelo de nuevo m\u00E1s tarde\n
-exception.web_service_returned_null_try_later= El servidor {0} ha devuelto un objeto nulo, por lo que probablemente no se haya podido contactar con él. Inténtelo de nuevo más tarde.
-exception.cannot_contact_service_endpoint_at = No es posible contactar por el punto de acceso al servicio en {0}
-error.implementation_error_cannot_find_service_url_in_given_set = Error de implementación: no es posible encontrar la URL del servicio en el conjunto de URL proporcionado
-error.implementation_error_cannot_find_service_url_in_given_set_param_store = Error de implementación: la URL del servicio en el conjunto de URL para este almacén de parámetros del servicio({0})
-exception.jobsubmission_invalid_params_set = Conjunto de parámetros no válido. Comprueba la implementación de Jalview
-exception.notvaliddata_group_contains_less_than_min_seqs = El grupo contiene menos de {0} secuencias.
-exception.outofmemory_loading_pdb_file = Sin menoria al cargar el fichero PDB
-exception.eps_coudnt_write_output_file = No es posible escribir el fichero de salida: {0}
-exception.eps_method_not_supported = Método actualmente no suportado por la versión {0} de EpsGraphics2D
-exception.eps_unable_to_get_inverse_matrix = Imposible obtener la inversa de la matrix: {0}
-warn.job_cannot_be_cancelled_close_window = Este trabajo no se puede cancelar.\nSimplemente, cierre la ventana.
-warn.service_not_supported = ¡Servicio no soportado!
-warn.input_is_too_big = ¡El tamaño de la entrada es demasiado grande!
-warn.invalid_job_param_set = ¡Conjunto de parámetros del trabajo no válido!
-info.job_couldnt_be_run_server_doesnt_support_program = No es posible ejecutar el trabajo porque el servidor no soporta este programa.\n{0}
-info.job_couldnt_be_run_exceeded_hard_limit = No es posible ejecutar el trabajo porque excede los l\u00EDmites del servidor.\n{0}
-info.job_couldnt_be_run_incorrect_param_setting = No es posible ejecutar el trabjao porque el servidor no soporta algunos de los par\u00E1metros.\n{0}\nPor favor, aseg\u00FArese de que ha usado los par\u00E1metros adecuados para este servicio\n
-info.no_jobs_ran = No se ha ejecutado ningún trabajo
-info.failed_to_submit_prediction = Error al enviar la predicci\u00F3n\:\n{0} {1}
-info.invalid_jnet_job_result_data ={0}\n{1}\nResultados del trabajo JNet no v\u00E1lidos\!\n{2}
-info.failed_to_submit_sequences_for_alignment = Error al enviar la secuencias para el alineamiento.\nLo m\u00E1s probable es que haya un problema en el servidor.\nSimplemente, cierre la ventana\n
-info.alignment_object_method_notes = \nNotas sobre los m\u00E9todos del objeto alineamiento\n
-info.server_exception = \n{0} Excepci\u00F3n del servidor\!\n{1}
-status.processing_commandline_args = Procesando los argumentos de la línea de comandos...
-status.das_features_being_retrived = Recuperando características DAS...
-status.searching_for_sequences_from = Buscando secuencias en {0}
-status.finished_searching_for_sequences_from = Finalizada la búsqueda de secuencias en {0}
-label.eps_file = Fichero EPS
-label.png_image = Imagen PNG
-status.saving_file = Guardando {0}
-status.export_complete = Exportación completada.
-status.fetching_pdb = Recuperando PDB {0}
-status.refreshing_news = Refrescando noticias
-status.importing_vamsas_session_from = Importando sesión VAMSAS de {0}
-status.opening_params = Abriendo {0}
-status.waiting_sequence_database_fetchers_init = Esperando la inicialización de los recuperadores de bases de datos de secuencias
-status.init_sequence_database_fetchers = Inicializando recuperadores de bases de datos de secuencias
-status.fetching_sequence_queries_from = Recuperando {0} consultas de secuencias de {1}
-status.finshed_querying = Consulta finalizada
-status.parsing_results = Parseando resultados.
-status.processing = Procesando...
-status.refreshing_web_service_menus = Refrescando los menús de servicios web
-status.collecting_job_results = Recolectando los resultados de los trabajos.
-status.fetching_das_sequence_features = Recuperando las características DAS de las secuencias
-status.no_das_sources_active = No existe ninguna fuente DAS activa
-status.das_feature_fetching_cancelled = Recuperación de características DAS cancelada
-status.das_feature_fetching_complete = Recuperación de características DAS completada
-status.fetching_db_refs = Recuperando db refs
-label.font_doesnt_have_letters_defined = La fuente no tiene letras definidas\npor lo que no puede emplease\ncon datos de alineamientos
-label.font_too_small = Tamaño de la letra es demasiado pequeña
-label.error_loading_file_params = Error cargando el fichero {0}
-label.error_loading_jalview_file = Error cargando el fichero Jalview
-warn.out_of_memory_when_action = Sin memoria al {0}\!\!\nConsulte los ficheros de ayuda para ajustar la memoria de la m\u00E1quina virtual de Java.
-warn.out_of_memory_loading_file = Sin memoria al cargar el fichero {0}\!\!\nConsulte los ficheros de ayuda para ajustar la memoria de la m\u00E1quina virtual de Java.
-label.out_of_memory = Sin memoria
-label.invalid_id_column_width = Identificador de anchura de columna no válido
-warn.user_defined_width_requirements = La anchura definida por el usuario para la \nlas columnas de anotaci\u00F3n e identificador de secuencias\nen figuras exportadas debe ser\na, al menos, de 12 p\u00EDxels
-label.couldnt_create_sequence_fetcher = No es posible crear SequenceFetcher
-warn.couldnt_create_sequence_fetcher_client = No es posible crear el cliente de recuperador de secuencias. Comprueba el fichero de log para más detalles.
-warn.server_didnt_pass_validation = El servicio no ha pasado la validaci\u00F3n.\nCompruebe la consola de Jalview para m\u00E1s detalles.
-warn.url_must_contain = La URL de la secuencia debe contener $SEQUENCE_ID$ o un regex $SEQUENCE_ID=//=$
-info.validate_jabaws_server = \u00BFValidar el servidor JabaWS?\n(Consulte la consola de salida para obtener los resultados)
-label.test_server = ¿Probar servidor?
-info.you_want_jalview_to_find_uniprot_accessions = \u00BFDesea que Jalview encuentre\nUniprot Accession ids para los nombres de secuencias dados?
-label.find_uniprot_accession_ids = Buscar Uniprot Accession Ids
-label.new_sequence_fetcher = Añadir recuperador de secuencias
-label.additional_sequence_fetcher = Recuperador de secuencia adicional
-label.select_database_retrieval_source = Seleccionar fuente de recuperación de bases de datos
-label.overwrite_existing_file = ¿Sobreescribir el fichero existente?
-label.file_already_exists = El fichero existe
-label.edit_jabaws_url = Editar JABAWS URL
-label.add_jabaws_url = Añadir nueva JABAWS URL
-label.news_from_jalview = Noticias de http://www.jalview.org
-label.cut_paste_alignmen_file = Cortar & Pegar fichero de alineamiento
-label.enter_redundancy_thereshold = Introducir el umbral de redundancia
-label.select_dark_light_set_thereshold = Seleccionar un color oscuro y un color claro para el texto y establecer el umbral en que cambiar entre colores, basándose en el color de fondo
-label.select_feature_colour = Seleccionar color de las características
-label.ignore_gaps_consensus = Ignorar huecos en el consenso
-label.show_group_histogram = Mostrar histograma de grupo
-label.show_group_logo = Mostrar logo de grupo
-label.normalise_group_logo = Normalizar el logo de grupo
-label.show_histogram = Mostrar histograma
-label.show_logo = Mostrar logo
-label.normalise_logo = Normalizar logo
-label.no_colour_selection_in_scheme = Por favor, seleccione un color antes de aplicar el esquema cromático
-label.no_colour_selection_warn = Error guardando el esquema cromático
\ No newline at end of file
diff --git a/bin/netscape/javascript/JSException.js b/bin/netscape/javascript/JSException.js
index 41d9f27..8033210 100644
--- a/bin/netscape/javascript/JSException.js
+++ b/bin/netscape/javascript/JSException.js
@@ -1,4 +1,4 @@
-Clazz.declarePackage ("netscape.javascript");
-Clazz.load (["java.lang.Exception"], "netscape.javascript.JSException", null, function () {
-c$ = Clazz.declareType (netscape.javascript, "JSException", Exception);
-});
+Clazz.declarePackage ("netscape.javascript");
+Clazz.load (["java.lang.Exception"], "netscape.javascript.JSException", null, function () {
+c$ = Clazz.declareType (netscape.javascript, "JSException", Exception);
+});
diff --git a/bin/netscape/javascript/JSObject.js b/bin/netscape/javascript/JSObject.js
index 661d426..e43f247 100644
--- a/bin/netscape/javascript/JSObject.js
+++ b/bin/netscape/javascript/JSObject.js
@@ -1,19 +1,19 @@
-Clazz.declarePackage ("netscape.javascript");
-c$ = Clazz.declareType (netscape.javascript, "JSObject");
-c$.getWindow = Clazz.defineMethod (c$, "getWindow",
-function (jvlite) {
-{
-return window;
-}}, "jalview.bin.JalviewLite");
-Clazz.defineMethod (c$, "call",
-function (func, params) {
-{
-alert("call " + func);
-func.apply(null, params);
-}}, "~S,~A");
-Clazz.defineMethod (c$, "eval",
-function (string) {
-{
-alert("evval " + string);
-}return this.eval (string);
-}, "~S");
+Clazz.declarePackage ("netscape.javascript");
+c$ = Clazz.declareType (netscape.javascript, "JSObject");
+c$.getWindow = Clazz.defineMethod (c$, "getWindow",
+function (jvlite) {
+{
+return window;
+}}, "jalview.bin.JalviewLite");
+Clazz.defineMethod (c$, "call",
+function (func, params) {
+{
+alert("call " + func);
+func.apply(null, params);
+}}, "~S,~A");
+Clazz.defineMethod (c$, "eval",
+function (string) {
+{
+alert("evval " + string);
+}return this.eval (string);
+}, "~S");
diff --git a/bin/org/exolab/castor/mapping/Mapping.js b/bin/org/exolab/castor/mapping/Mapping.js
index d15a01d..b4a3c0f 100644
--- a/bin/org/exolab/castor/mapping/Mapping.js
+++ b/bin/org/exolab/castor/mapping/Mapping.js
@@ -1,8 +1,8 @@
-Clazz.declarePackage ("org.exolab.castor.mapping");
-c$ = Clazz.declareType (org.exolab.castor.mapping, "Mapping");
-Clazz.makeConstructor (c$,
-function (classLoader) {
-}, "ClassLoader");
-Clazz.defineMethod (c$, "loadMapping",
-function (url) {
-}, "java.net.URL");
+Clazz.declarePackage ("org.exolab.castor.mapping");
+c$ = Clazz.declareType (org.exolab.castor.mapping, "Mapping");
+Clazz.makeConstructor (c$,
+function (classLoader) {
+}, "ClassLoader");
+Clazz.defineMethod (c$, "loadMapping",
+function (url) {
+}, "java.net.URL");
diff --git a/bin/org/exolab/castor/xml/Unmarshaller.js b/bin/org/exolab/castor/xml/Unmarshaller.js
index 09f0175..70aff82 100644
--- a/bin/org/exolab/castor/xml/Unmarshaller.js
+++ b/bin/org/exolab/castor/xml/Unmarshaller.js
@@ -1,24 +1,24 @@
-Clazz.declarePackage ("org.exolab.castor.xml");
-c$ = Clazz.declareType (org.exolab.castor.xml, "Unmarshaller");
-Clazz.makeConstructor (c$,
-function (record) {
-}, "~O");
-Clazz.defineMethod (c$, "setIgnoreExtraElements",
-function (b) {
-}, "~B");
-Clazz.defineMethod (c$, "setIgnoreExtraAttributes",
-function (b) {
-}, "~B");
-Clazz.defineMethod (c$, "setMapping",
-function (map) {
-}, "org.exolab.castor.mapping.Mapping");
-Clazz.defineMethod (c$, "setLogWriter",
-function (printWriter) {
-}, "java.io.PrintWriter");
-Clazz.defineMethod (c$, "unmarshal",
-function (file) {
-return null;
-}, "java.io.Reader");
-Clazz.defineMethod (c$, "setDebug",
-function (debugEnabled) {
-}, "~B");
+Clazz.declarePackage ("org.exolab.castor.xml");
+c$ = Clazz.declareType (org.exolab.castor.xml, "Unmarshaller");
+Clazz.makeConstructor (c$,
+function (record) {
+}, "~O");
+Clazz.defineMethod (c$, "setIgnoreExtraElements",
+function (b) {
+}, "~B");
+Clazz.defineMethod (c$, "setIgnoreExtraAttributes",
+function (b) {
+}, "~B");
+Clazz.defineMethod (c$, "setMapping",
+function (map) {
+}, "org.exolab.castor.mapping.Mapping");
+Clazz.defineMethod (c$, "setLogWriter",
+function (printWriter) {
+}, "java.io.PrintWriter");
+Clazz.defineMethod (c$, "unmarshal",
+function (file) {
+return null;
+}, "java.io.Reader");
+Clazz.defineMethod (c$, "setDebug",
+function (debugEnabled) {
+}, "~B");
diff --git a/bin/org/jmol/viewer/Viewer.js b/bin/org/jmol/viewer/Viewer.js
index 42c1406..078e834 100644
--- a/bin/org/jmol/viewer/Viewer.js
+++ b/bin/org/jmol/viewer/Viewer.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("org.jmol.viewer");
-c$ = Clazz.declareType (org.jmol.viewer, "Viewer");
+Clazz.declarePackage ("org.jmol.viewer");
+c$ = Clazz.declareType (org.jmol.viewer, "Viewer");
diff --git a/bin/swingjs/JSEvent.js b/bin/swingjs/JSEvent.js
deleted file mode 100644
index 35812e3..0000000
--- a/bin/swingjs/JSEvent.js
+++ /dev/null
@@ -1,4 +0,0 @@
-Clazz.declarePackage ("swingjs");
-Clazz.load (["java.awt.event.InvocationEvent"], "swingjs.JSEvent", null, function () {
-c$ = Clazz.declareType (swingjs, "JSEvent", java.awt.event.InvocationEvent);
-});
diff --git a/bin/swingjs/JSThread.js b/bin/swingjs/JSThread.js
index 5c12398..92f41fb 100644
--- a/bin/swingjs/JSThread.js
+++ b/bin/swingjs/JSThread.js
@@ -1,49 +1,49 @@
-Clazz.declarePackage ("swingjs");
-Clazz.load (["java.lang.Thread", "swingjs.api.JSFunction"], "swingjs.JSThread", null, function () {
-c$ = Clazz.decorateAsClass (function () {
-this.isJS = false;
-Clazz.instantialize (this, arguments);
-}, swingjs, "JSThread", Thread, swingjs.api.JSFunction);
-Clazz.makeConstructor (c$,
-function (group, name) {
-Clazz.superConstructor (this, swingjs.JSThread, [group, name]);
-{
-this.isJS = true;
-}}, "ThreadGroup,~S");
-Clazz.overrideMethod (c$, "run",
-function () {
-this.run1 (0);
-});
-Clazz.defineMethod (c$, "start",
-function () {
-{
-swingjs.JSToolkit.setTimeout(this, 1, 0);
-}});
-Clazz.defineMethod (c$, "sleepAndReturn",
-function (delay, state) {
-if (!this.isJS) {
-Thread.sleep (delay);
-return false;
-}var me = this;
-var r = ((Clazz.isClassDefined ("swingjs.JSThread$1") ? 0 : swingjs.JSThread.$JSThread$1$ ()), Clazz.innerTypeInstance (swingjs.JSThread$1, this, Clazz.cloneFinals ("me", me, "state", state)));
-{
-setTimeout(
-function() {java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new java.awt.event.InvocationEvent(me, r))},
-delay
-);
-}return true;
-}, "~N,~N");
-c$.$JSThread$1$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.declareAnonymous (swingjs, "JSThread$1", null, Runnable);
-Clazz.overrideMethod (c$, "run",
-function () {
-this.f$.me.run1 (this.f$.state);
-});
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"INIT", 0,
-"LOOP", 1,
-"DONE", 2);
-});
+Clazz.declarePackage ("swingjs");
+Clazz.load (["java.lang.Thread", "swingjs.api.JSFunction"], "swingjs.JSThread", null, function () {
+c$ = Clazz.decorateAsClass (function () {
+this.isJS = false;
+Clazz.instantialize (this, arguments);
+}, swingjs, "JSThread", Thread, swingjs.api.JSFunction);
+Clazz.makeConstructor (c$,
+function (group, name) {
+Clazz.superConstructor (this, swingjs.JSThread, [group, name]);
+{
+this.isJS = true;
+}}, "ThreadGroup,~S");
+Clazz.overrideMethod (c$, "run",
+function () {
+this.run1 (0);
+});
+Clazz.defineMethod (c$, "start",
+function () {
+{
+swingjs.JSToolkit.setTimeout(this, 1, 0);
+}});
+Clazz.defineMethod (c$, "sleepAndReturn",
+function (delay, state) {
+if (!this.isJS) {
+Thread.sleep (delay);
+return false;
+}var me = this;
+var r = ((Clazz.isClassDefined ("swingjs.JSThread$1") ? 0 : swingjs.JSThread.$JSThread$1$ ()), Clazz.innerTypeInstance (swingjs.JSThread$1, this, Clazz.cloneFinals ("me", me, "state", state)));
+{
+setTimeout(
+function() {java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new java.awt.event.InvocationEvent(me, r))},
+delay
+);
+}return true;
+}, "~N,~N");
+c$.$JSThread$1$ = function () {
+Clazz.pu$h ();
+c$ = Clazz.declareAnonymous (swingjs, "JSThread$1", null, Runnable);
+Clazz.overrideMethod (c$, "run",
+function () {
+this.f$.me.run1 (this.f$.state);
+});
+c$ = Clazz.p0p ();
+};
+Clazz.defineStatics (c$,
+"INIT", 0,
+"LOOP", 1,
+"DONE", 2);
+});
diff --git a/bin/swingjs/api/DOMNode.js b/bin/swingjs/api/DOMNode.js
index f518093..ad28942 100644
--- a/bin/swingjs/api/DOMNode.js
+++ b/bin/swingjs/api/DOMNode.js
@@ -1,58 +1,58 @@
-Clazz.declarePackage ("swingjs.api");
-c$ = Clazz.declareType (swingjs.api, "DOMNode");
-c$.createElement = Clazz.defineMethod (c$, "createElement",
-function (key, id) {
-var obj = null;
-{
-obj = document.createElement(key);
-obj.id = id;
-}return obj;
-}, "~S,~S");
-c$.getParent = Clazz.defineMethod (c$, "getParent",
-function (obj) {
-{
-return obj.parentNode;
-}}, "swingjs.api.DOMNode");
-c$.remove = Clazz.defineMethod (c$, "remove",
-function (obj) {
-{
-try {
-var p = obj.parentNode;
-p.removeNode(obj);
-} catch(e) {};
-return p;
-}}, "swingjs.api.DOMNode");
-c$.add = Clazz.defineMethod (c$, "add",
-function (parent, child) {
-{
-parent && parent.appendChild(child);
-}}, "swingjs.api.DOMNode,swingjs.api.DOMNode");
-c$.getAttr = Clazz.defineMethod (c$, "getAttr",
-function (obj, attr) {
-{
-if (obj)return obj[attr];
-}}, "swingjs.api.DOMNode,~S");
-Clazz.defineMethod (c$, "getStyle",
-function (style) {
-{
-if (obj)return obj.style[style];
-}}, "~S");
-c$.setAttr = Clazz.defineMethod (c$, "setAttr",
-function (obj, attr, val) {
-{
-obj[attr] = (val == "TRUE" ? true : val);
-}return obj;
-}, "swingjs.api.DOMNode,~S,~O");
-c$.setStyles = Clazz.defineMethod (c$, "setStyles",
-function (obj, attr) {
-{
-for (var i = 0; i < attr.length;) {
-//System.out.println(["DOMNode.setStyles ",attr[i],attr[i+1]])
-;
-obj.style[attr[i++]] = attr[i++]; }
-}return obj;
-}, "swingjs.api.DOMNode,~A");
-c$.setSize = Clazz.defineMethod (c$, "setSize",
-function (obj, width, height) {
-return swingjs.api.DOMNode.setStyles (obj, ["width", width + "px", "height", height + "px"]);
-}, "swingjs.api.DOMNode,~N,~N");
+Clazz.declarePackage ("swingjs.api");
+c$ = Clazz.declareType (swingjs.api, "DOMNode");
+c$.createElement = Clazz.defineMethod (c$, "createElement",
+function (key, id) {
+var obj = null;
+{
+obj = document.createElement(key);
+obj.id = id;
+}return obj;
+}, "~S,~S");
+c$.getParent = Clazz.defineMethod (c$, "getParent",
+function (obj) {
+{
+return obj.parentNode;
+}}, "swingjs.api.DOMNode");
+c$.remove = Clazz.defineMethod (c$, "remove",
+function (obj) {
+{
+try {
+var p = obj.parentNode;
+p.removeNode(obj);
+} catch(e) {};
+return p;
+}}, "swingjs.api.DOMNode");
+c$.add = Clazz.defineMethod (c$, "add",
+function (parent, child) {
+{
+parent && parent.appendChild(child);
+}}, "swingjs.api.DOMNode,swingjs.api.DOMNode");
+c$.getAttr = Clazz.defineMethod (c$, "getAttr",
+function (obj, attr) {
+{
+if (obj)return obj[attr];
+}}, "swingjs.api.DOMNode,~S");
+Clazz.defineMethod (c$, "getStyle",
+function (style) {
+{
+if (obj)return obj.style[style];
+}}, "~S");
+c$.setAttr = Clazz.defineMethod (c$, "setAttr",
+function (obj, attr, val) {
+{
+obj[attr] = (val == "TRUE" ? true : val);
+}return obj;
+}, "swingjs.api.DOMNode,~S,~O");
+c$.setStyles = Clazz.defineMethod (c$, "setStyles",
+function (obj, attr) {
+{
+for (var i = 0; i < attr.length;) {
+//System.out.println(["DOMNode.setStyles ",attr[i],attr[i+1]])
+;
+obj.style[attr[i++]] = attr[i++]; }
+}return obj;
+}, "swingjs.api.DOMNode,~A");
+c$.setSize = Clazz.defineMethod (c$, "setSize",
+function (obj, width, height) {
+return swingjs.api.DOMNode.setStyles (obj, ["width", width + "px", "height", height + "px"]);
+}, "swingjs.api.DOMNode,~N,~N");
diff --git a/bin/swingjs/api/JSFunction.js b/bin/swingjs/api/JSFunction.js
index 4923079..1c8077b 100644
--- a/bin/swingjs/api/JSFunction.js
+++ b/bin/swingjs/api/JSFunction.js
@@ -1,2 +1,2 @@
-Clazz.declarePackage ("swingjs.api");
-Clazz.declareInterface (swingjs.api, "JSFunction");
+Clazz.declarePackage ("swingjs.api");
+Clazz.declareInterface (swingjs.api, "JSFunction");
diff --git a/src/fr/orsay/lri/varna/models/rna/RNA.java b/src/fr/orsay/lri/varna/models/rna/RNA.java
index 9df0400..589dc74 100644
--- a/src/fr/orsay/lri/varna/models/rna/RNA.java
+++ b/src/fr/orsay/lri/varna/models/rna/RNA.java
@@ -1,15 +1,21 @@
-package fr.orsay.lri.varna.models.rna;
-
-public class RNA {
-
- public int getSize() {
- // TODO Auto-generated method stub
- return 0;
- }
-
- public String getStructDBN(boolean b) {
- // TODO Auto-generated method stub
- return null;
- }
-
-}
+package fr.orsay.lri.varna.models.rna;
+
+/**
+ * unused in applet?
+ *
+ *
+ */
+
+public class RNA {
+
+ public int getSize() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public String getStructDBN(boolean b) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}