Revision: 20597 http://sourceforge.net/p/jmol/code/20597 Author: hansonr Date: 2015-06-20 03:15:06 +0000 (Sat, 20 Jun 2015) Log Message: ----------- Jmol.___JmolVersion="14.3.15_2015.06.19c"
bug fix: 1/{a b c} gives 0, not 1/length({a b c}) Modified Paths: -------------- trunk/Jmol/src/org/jmol/script/SV.java trunk/Jmol/src/org/jmol/script/ScriptCompiler.java trunk/Jmol/src/org/jmol/script/ScriptEval.java trunk/Jmol/src/org/jmol/script/ScriptTokenParser.java trunk/Jmol/src/org/jmol/scriptext/CmdExt.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/script/SV.java =================================================================== --- trunk/Jmol/src/org/jmol/script/SV.java 2015-06-19 17:14:06 UTC (rev 20596) +++ trunk/Jmol/src/org/jmol/script/SV.java 2015-06-20 03:15:06 UTC (rev 20597) @@ -542,10 +542,10 @@ case decimal: case varray: case string: - case point3f: - case point4f: - case matrix3f: - case matrix4f: +// case point3f: this makes not sense, and breaks 1/x +// case point4f: +// case matrix3f: +// case matrix4f: return (int) fValue(x); case bitset: return BSUtil.cardinalityOf(bsSelectToken(x)); Modified: trunk/Jmol/src/org/jmol/script/ScriptCompiler.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-06-19 17:14:06 UTC (rev 20596) +++ trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2015-06-20 03:15:06 UTC (rev 20597) @@ -794,7 +794,7 @@ * @return true if found */ private boolean wasImpliedScript() { - if (nTokens >= 2 && tokCommand == T.script && checkImpliedScriptCmd) { + if (nTokens >= 2 && (tokCommand == T.script || tokCommand == T.macro) && checkImpliedScriptCmd) { String s = (nTokens == 2 ? lastToken.value.toString().toUpperCase() : null); if (nTokens > 2 ? !(tokAt(2) == T.leftparen && ltoken.get(1).value @@ -983,7 +983,7 @@ && lastToken.tok != T.inline && (tokCommand == T.set && nTokens == 2 && lastToken.tok == T.defaultdirectory || tokCommand == T.load - || tokCommand == T.background || tokCommand == T.script)); + || tokCommand == T.background || tokCommand == T.script || tokCommand == T.macro)); iHaveQuotedString = true; if ((tokCommand == T.load || tokCommand == T.cgo) && lastToken.tok == T.data || tokCommand == T.data @@ -1079,6 +1079,7 @@ //$FALL-THROUGH$ case T.load: case T.script: + case T.macro: case T.getproperty: if (script.charAt(ichToken) == '@') { iHaveQuotedString = true; @@ -1132,7 +1133,7 @@ } if (!iHaveQuotedString && lookingAtImpliedString(tokCommand == T.show, tokCommand == T.load, - nTokens > 1 || tokCommand != T.script)) { + nTokens > 1 || tokCommand != T.script && tokCommand != T.macro)) { String str = script.substring(ichToken, ichToken + cchToken); if (tokCommand == T.script) { if (str.startsWith("javascript:")) { @@ -1189,7 +1190,7 @@ // cd echo goto help hover javascript label message pause // possibly script implicitString &= (nTokens == 1); - if (implicitString && !(tokCommand == T.script && iHaveQuotedString) + if (implicitString && !((tokCommand == T.script || tokCommand == T.macro) && iHaveQuotedString) && lookingAtImpliedString(true, true, true)) { String str = script.substring(ichToken, ichToken + cchToken); if (tokCommand == T.label @@ -2458,7 +2459,7 @@ case '(': if (!allowSptParen) { // script command - if (ichT >= 5 + if(tokCommand == T.macro || ichT >= 5 && (script.substring(ichT - 4, ichT).equals(".spt") || script.substring(ichT - 4, ichT).equals(".png") || script .substring(ichT - 5, ichT).equals(".pngj"))) { Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEval.java 2015-06-19 17:14:06 UTC (rev 20596) +++ trunk/Jmol/src/org/jmol/script/ScriptEval.java 2015-06-20 03:15:06 UTC (rev 20597) @@ -6199,9 +6199,16 @@ public void cmdScript(int tok, String filename, String theScript) throws ScriptException { + if (tok == T.javascript) { + checkLength(2); + if (!chk) + vwr.jsEval(paramAsStr(1)); + return; + } boolean loadCheck = true; boolean isCheck = false; boolean doStep = false; + boolean isAsync = vwr.async; int lineNumber = 0; int pc = 0; int lineEnd = 0; @@ -6212,19 +6219,15 @@ String scriptPath = null; Lst<SV> params = null; - if (tok == T.javascript) { - checkLength(2); - if (!chk) - vwr.jsEval(paramAsStr(1)); - return; + if (tok == T.macro) { + i = -2; } - boolean isAsync = vwr.async; if (filename == null && theScript == null) { tok = tokAt(i); if (tok != T.string) error(ERROR_filenameExpected); filename = paramAsStr(i); - + if (filename.equalsIgnoreCase("async")) { isAsync = true; filename = paramAsStr(++i); @@ -6261,7 +6264,8 @@ remotePath = paramAsStr(++i); filename = paramAsStr(++i); } - if ((vwr.isJS || vwr.testAsync) && (isAsync || filename.startsWith("?"))) { + if ((vwr.isJS || vwr.testAsync) + && (isAsync || filename.startsWith("?"))) { filename = loadFileAsync("SCRIPT_", filename, i, true); // on first pass a ScriptInterruption will be thrown; // on the second pass we will have the file name, which will be cache://local_n__m @@ -6298,15 +6302,18 @@ invArg(); } } - if (tokAt(i) == T.leftparen) { - params = parameterExpressionList(i, -1, false); - i = iToken + 1; - } - checkLength(doStep ? i + 1 : i); + i = -i; } } else if (filename != null && isAsync) { - filename = loadFileAsync("SCRIPT_", filename, i, true); + filename = loadFileAsync("SCRIPT_", filename, i, true); } + if (i < 0) { + if (tokAt(i = -i) == T.leftparen) { + params = parameterExpressionList(i, -1, false); + i = iToken + 1; + } + checkLength(doStep ? i + 1 : i); + } // processing @@ -6337,7 +6344,8 @@ "_arguments", (params == null ? SV.getVariableAI(new int[] {}) : SV .getVariableList(params))); - contextVariables.put("_argcount", SV.newI(params == null ? 0 : params.size())); + contextVariables.put("_argcount", + SV.newI(params == null ? 0 : params.size())); if (isCheck) listCommands = true; @@ -6346,7 +6354,7 @@ Logger.startTimer("script"); dispatchCommands(false, false, false); if (isStateScript) - ScriptManager.setStateScriptVersion(vwr, null); + ScriptManager.setStateScriptVersion(vwr, null); if (timeMsg) showString(Logger.getTimerMsg("script", 0)); isCmdLine_C_Option = saveLoadCheck; Modified: trunk/Jmol/src/org/jmol/script/ScriptTokenParser.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptTokenParser.java 2015-06-19 17:14:06 UTC (rev 20596) +++ trunk/Jmol/src/org/jmol/script/ScriptTokenParser.java 2015-06-20 03:15:06 UTC (rev 20597) @@ -100,7 +100,8 @@ protected boolean compileExpressions() { - boolean isScriptExpression = (tokCommand == T.script && tokAt(2) == T.leftparen); + boolean isScriptExpression = ((tokCommand == T.script || tokCommand == T.macro) + && tokAt(2) == T.leftparen); isEmbeddedExpression = (isScriptExpression || (tokCommand != T.nada && (tokCommand != T.function Modified: trunk/Jmol/src/org/jmol/scriptext/CmdExt.java =================================================================== --- trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-06-19 17:14:06 UTC (rev 20596) +++ trunk/Jmol/src/org/jmol/scriptext/CmdExt.java 2015-06-20 03:15:06 UTC (rev 20597) @@ -205,8 +205,7 @@ return; } showString("running " + macro); - macro = vwr.getFileAsString3(macro, false, null); - e.runScript(macro); + e.cmdScript(T.macro, macro, null); } /** Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-06-19 17:14:06 UTC (rev 20596) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-06-20 03:15:06 UTC (rev 20597) @@ -15,8 +15,12 @@ TODO: remove HTML5 dependency on synchronous file loading (check SCRIPT command for problems) -Jmol.___JmolVersion="14.3.15_2015.06.19b" +Jmol.___JmolVersion="14.3.15_2015.06.19c" +bug fix: 1/{a b c} gives 0, not 1/length({a b c}) + +JmolVersion="14.3.15_2015.06.19b" + new feature: MACRO command -- runs predefined script, generally defining new functions of general use -- contributions welcome! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ _______________________________________________ Jmol-commits mailing list Jmol-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-commits