From: <ha...@us...> - 2014-02-21 17:44:33
|
Revision: 19370 http://sourceforge.net/p/jmol/code/19370 Author: hansonr Date: 2014-02-21 17:44:27 +0000 (Fri, 21 Feb 2014) Log Message: ----------- ___JmolVersion="14.1.11_2014.02.21" new feature: added simpler associative array notation: [key:value,...] -- no quotes required -- supplements {"key":value,...] where quotes are still required due to conflict with atom set chain descriptors sucu as {a:b}. code: faster CONNECT [{...}] process for specified bonds bug fix: JSON of 4x4 matrix (M4) fails Modified Paths: -------------- trunk/Jmol/src/javajs/util/M3.java trunk/Jmol/src/javajs/util/M34.java trunk/Jmol/src/javajs/util/M4.java trunk/Jmol/src/javajs/util/PT.java trunk/Jmol/src/org/jmol/modelset/ModelCollection.java trunk/Jmol/src/org/jmol/script/SV.java trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/javajs/util/M3.java =================================================================== --- trunk/Jmol/src/javajs/util/M3.java 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/javajs/util/M3.java 2014-02-21 17:44:27 UTC (rev 19370) @@ -228,6 +228,7 @@ * @param v * The array into which the matrix row values will be copied */ + @Override public void getRow(int row, float v[]) { getRow33(row, v); } Modified: trunk/Jmol/src/javajs/util/M34.java =================================================================== --- trunk/Jmol/src/javajs/util/M34.java 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/javajs/util/M34.java 2014-02-21 17:44:27 UTC (rev 19370) @@ -7,7 +7,7 @@ * * additions by Bob Hanson ha...@st... 9/30/2012 for unique * constructor and method names for the optimization of compiled - * JavaScript using Java2Script + * JavaScript using Java2Script and for subclassing to M3 and M4 * */ public abstract class M34 { @@ -239,6 +239,8 @@ err(); } } + + public abstract void getRow(int row, float v[]); protected void getRow33(int row, float v[]) { switch (row) { Modified: trunk/Jmol/src/javajs/util/M4.java =================================================================== --- trunk/Jmol/src/javajs/util/M4.java 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/javajs/util/M4.java 2014-02-21 17:44:27 UTC (rev 19370) @@ -423,6 +423,7 @@ * @param v * The array into which the matrix row values will be copied */ + @Override public void getRow(int row, float v[]) { if (row < 3) getRow33(row, v); Modified: trunk/Jmol/src/javajs/util/PT.java =================================================================== --- trunk/Jmol/src/javajs/util/PT.java 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/javajs/util/PT.java 2014-02-21 17:44:27 UTC (rev 19370) @@ -787,7 +787,7 @@ // M4 extends M3 int len = (info instanceof M4 ? 4 : 3); float[] x = new float[len]; - M3 m = (M3) info; + M34 m = (M34) info; sb.appendC('['); for (int i = 0; i < len; i++) { if (i > 0) Modified: trunk/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2014-02-21 17:44:27 UTC (rev 19370) @@ -2162,61 +2162,73 @@ Atom atomB = null; float dAB = 0; float dABcalc = 0; + float distanceSquared; + char altloc = '\0'; short newOrder = (short) (order | JmolEdge.BOND_NEW); - for (int iA = bsA.nextSetBit(0); iA >= 0; iA = bsA.nextSetBit(iA + 1)) { - if (isBonds) { - bondAB = bonds[iA]; - atomA = bondAB.atom1; - atomB = bondAB.atom2; - } else { - atomA = atoms[iA]; - if (atomA.isDeleted()) - continue; - } - char altloc = (isModulated(iA) ? '\0' : atomA.altloc); - for (int iB = (isBonds ? m : bsB.nextSetBit(0)); iB >= 0; iB = (isBonds ? iB - 1 - : bsB.nextSetBit(iB + 1))) { - if (!isBonds) { - if (iB == iA) + boolean checkDistance = (!isBonds || minDistance != JC.DEFAULT_MIN_CONNECT_DISTANCE || maxDistance != JC.DEFAULT_MAX_CONNECT_DISTANCE); + try { + for (int i = bsA.nextSetBit(0); i >= 0; i = bsA.nextSetBit(i + 1)) { + if (isBonds) { + bondAB = bonds[i]; + atomA = bondAB.atom1; + atomB = bondAB.atom2; + } else { + atomA = atoms[i]; + if (atomA.isDeleted()) continue; - atomB = atoms[iB]; - if (atomA.modelIndex != atomB.modelIndex || atomB.isDeleted()) - continue; - if (altloc != '\0' && altloc != atomB.altloc - && atomB.altloc != '\0') - continue; - bondAB = atomA.getBond(atomB); + altloc = (isModulated(i) ? '\0' : atomA.altloc); } - if (bondAB == null && (identifyOnly || modifyOnly) || bondAB != null - && createOnly) - continue; - float distanceSquared = atomA.distanceSquared(atomB); - if (minDistanceIsFractionRadius || maxDistanceIsFractionRadius) { - dAB = atomA.distance(atomB); - dABcalc = atomA.getBondingRadiusFloat() - + atomB.getBondingRadiusFloat(); - } - if ((minDistanceIsFractionRadius ? dAB < dABcalc * minDistance - : distanceSquared < minDistanceSquared) - || (maxDistanceIsFractionRadius ? dAB > dABcalc * maxDistance - : distanceSquared > maxDistanceSquared)) - continue; - if (bondAB != null) { - if (!identifyOnly && !matchAny) { - bondAB.setOrder(order); - bsAromatic.clear(bondAB.index); + for (int j = (isBonds ? m : bsB.nextSetBit(0)); j >= 0; j = bsB + .nextSetBit(j + 1)) { + if (isBonds) { + j = 2147483646; // Integer.MAX_VALUE - 1; one pass only + } else { + if (j == i) + continue; + atomB = atoms[j]; + if (atomA.modelIndex != atomB.modelIndex || atomB.isDeleted()) + continue; + if (altloc != '\0' && altloc != atomB.altloc + && atomB.altloc != '\0') + continue; + bondAB = atomA.getBond(atomB); } - if (!identifyOnly || matchAny || order == bondAB.order - || newOrder == bondAB.order || matchHbond && bondAB.isHydrogen()) { - bsBonds.set(bondAB.index); - nModified++; + if (bondAB == null && (identifyOnly || modifyOnly) || bondAB != null + && createOnly) + continue; + if (checkDistance) { + if (minDistanceIsFractionRadius || maxDistanceIsFractionRadius) { + dAB = atomA.distance(atomB); + dABcalc = atomA.getBondingRadiusFloat() + + atomB.getBondingRadiusFloat(); + } + distanceSquared = atomA.distanceSquared(atomB); + if ((minDistanceIsFractionRadius ? dAB < dABcalc * minDistance + : distanceSquared < minDistanceSquared) + || (maxDistanceIsFractionRadius ? dAB > dABcalc * maxDistance + : distanceSquared > maxDistanceSquared)) + continue; } - } else { - bsBonds.set(bondAtoms(atomA, atomB, order, mad, bsBonds, energy, - addGroup, true).index); - nNew++; + if (bondAB != null) { + if (!identifyOnly && !matchAny) { + bondAB.setOrder(order); + bsAromatic.clear(bondAB.index); + } + if (!identifyOnly || matchAny || order == bondAB.order + || newOrder == bondAB.order || matchHbond + && bondAB.isHydrogen()) { + bsBonds.set(bondAB.index); + nModified++; + } + } else { + bsBonds.set(bondAtoms(atomA, atomB, order, mad, bsBonds, energy, + addGroup, true).index); + nNew++; + } } } + } catch (Exception e) { + // well, we tried -- probably ran over } if (autoAromatize) assignAromaticBondsBs(true, bsBonds); Modified: trunk/Jmol/src/org/jmol/script/SV.java =================================================================== --- trunk/Jmol/src/org/jmol/script/SV.java 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/org/jmol/script/SV.java 2014-02-21 17:44:27 UTC (rev 19370) @@ -693,22 +693,23 @@ String[] keys = ht.keySet().toArray(new String[keyset.size()]); Arrays.sort(keys); if (isEscaped) { - sb.append("{ "); + sb.append("["); String sep = ""; for (int i = 0; i < keys.length; i++) { String key = keys[i]; sb.append(sep).append(PT.esc(key)).appendC(':'); sValueArray(sb, ht.get(key), map, level + 1, true); - sep = ", "; + sep = ","; } - sb.append(" }"); + sb.append("]"); return; } for (int i = 0; i < keys.length; i++) { - sb.append(keys[i]).append("\t:"); - SV v = ht.get(keys[i]); + String key = keys[i]; + sb.append(key).append("\t:"); SB sb2 = new SB(); - sValueArray(sb2, v, map, level + 1, isEscaped); + SV v = ht.get(key); + sValueArray(sb2, v, map, level + 1, v.tok == T.string); String value = sb2.toString(); sb.append(value.indexOf("\n") >= 0 ? "\n" : "\t"); sb.append(value).append("\n"); Modified: trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java 2014-02-21 17:44:27 UTC (rev 19370) @@ -845,6 +845,16 @@ } } switch (tok) { + case T.rightsquare: + case T.rightbrace: + if (!ignoreComma && nParen == 0 && nSquare == 0) + break out; + if (tok == T.rightbrace) + invArg(); + break; + } + + switch (tok) { case T.define: // @{@x} or @{@{x}} or @{@1} -- also userFunction(@1) if (tokAt(++i) == T.expressionBegin) { @@ -1038,7 +1048,7 @@ i += 2; break; } - v = getHash(i); + v = getAssocArray(i); } else { v = getPointOrPlane(i, false, true, true, false, 3, 4); } @@ -1071,11 +1081,6 @@ case T.expressionEnd: i++; break out; - case T.rightbrace: - if (!ignoreComma && nParen == 0 && nSquare == 0) - break out; - invArg(); - break; case T.comma: // ignore commas if (!ignoreComma && nParen == 0 && nSquare == 0) { break out; @@ -1120,6 +1125,11 @@ } break; default: + if (theTok == T.leftsquare && tokAt(i + 2) == T.colon) { + v = getAssocArray(i); + i = iToken; + break; + } if (T.tokAttr(theTok, T.mathop) || T.tokAttr(theTok, T.mathfunc) && tokAt(iToken + 1) == T.leftparen) { if (!rpn.addOp(theToken)) { @@ -1218,12 +1228,13 @@ } @SuppressWarnings("unchecked") - private Map<String, Object> getHash(int i) throws ScriptException { + private Map<String, Object> getAssocArray(int i) throws ScriptException { Map<String, Object> ht = new Hashtable<String, Object>(); + int closer = (tokAt(i) == T.leftbrace ? T.rightbrace : T.rightsquare); for (i = i + 1; i < slen; i++) { - if (tokAt(i) == T.rightbrace) + if (tokAt(i) == closer) break; - String key = stringParameter(i++); + String key = optParameterAsString(i++); if (tokAt(i++) != T.colon) invArg(); List<SV> v = (List<SV>) parameterExpression(i, 0, null, false, true, -1, @@ -1234,7 +1245,7 @@ break; } iToken = i; - if (tokAt(i) != T.rightbrace) + if (tokAt(i) != closer) invArg(); return ht; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2014-02-20 23:02:09 UTC (rev 19369) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2014-02-21 17:44:27 UTC (rev 19370) @@ -13,8 +13,16 @@ ___JmolVersion="14.1.11_2014.02.21" -bug fix:modelkitmode broken for Java in 14.1.10 +new feature: added simpler associative array notation: [key:value,...] + -- no quotes required + -- supplements {"key":value,...] where quotes are still required + due to conflict with atom set chain descriptors sucu as {a:b}. +code: faster CONNECT [{...}] process for specified bonds + +bug fix: JSON of 4x4 matrix (M4) fails +bug fix: modelkitmode broken for Java in 14.1.10 + new feature: catchable THROW -- as in Java or JavaScript, allows a way of jumping This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |