From: <ha...@us...> - 2010-09-27 23:08:14
|
Revision: 14382 http://jmol.svn.sourceforge.net/jmol/?rev=14382&view=rev Author: hansonr Date: 2010-09-27 23:08:08 +0000 (Mon, 27 Sep 2010) Log Message: ----------- version=12.0.16_dev # bug fix: label %1 will cause exception Modified Paths: -------------- branches/v12_0/Jmol/src/org/jmol/modelset/LabelToken.java branches/v12_0/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v12_0/Jmol/src/org/jmol/modelset/LabelToken.java =================================================================== --- branches/v12_0/Jmol/src/org/jmol/modelset/LabelToken.java 2010-09-27 23:07:37 UTC (rev 14381) +++ branches/v12_0/Jmol/src/org/jmol/modelset/LabelToken.java 2010-09-27 23:08:08 UTC (rev 14382) @@ -238,37 +238,38 @@ return tokens; } - private static int setToken(Viewer viewer, String strFormat, LabelToken lt, int cch, int chAtom, Hashtable htValues) { + private static int setToken(Viewer viewer, String strFormat, LabelToken lt, + int cch, int chAtom, Hashtable htValues) { int ich = lt.pt + 1; char ch; if (strFormat.charAt(ich) == '-') { lt.alignLeft = true; ++ich; } - if (strFormat.charAt(ich) == '0') { + if (ich < cch && strFormat.charAt(ich) == '0') { lt.zeroPad = true; ++ich; } - while (Character.isDigit(ch = strFormat.charAt(ich))) { + while (ich < cch && Character.isDigit(ch = strFormat.charAt(ich))) { lt.width = (10 * lt.width) + (ch - '0'); ++ich; } lt.precision = Integer.MAX_VALUE; boolean isNegative = false; - if (strFormat.charAt(ich) == '.') { + if (ich < cch && strFormat.charAt(ich) == '.') { ++ich; - if ((ch = strFormat.charAt(ich)) == '-') { + if (ich < cch && (ch = strFormat.charAt(ich)) == '-') { isNegative = true; ++ich; } - if (Character.isDigit(ch = strFormat.charAt(ich))) { + if (ich < cch && Character.isDigit(ch = strFormat.charAt(ich))) { lt.precision = ch - '0'; if (isNegative) lt.precision = -1 - lt.precision; ++ich; } } - if (htValues != null) { + if (ich < cch && htValues != null) { Enumeration keys = htValues.keys(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); @@ -278,52 +279,54 @@ } } } - switch (ch = strFormat.charAt(ich++)) { - case '%': - lt.text = "%"; - return ich; - case '[': - int ichClose = strFormat.indexOf(']', ich); - if (ichClose < ich) { - ich = cch; + if (ich < cch) + switch (ch = strFormat.charAt(ich++)) { + case '%': + lt.text = "%"; + return ich; + case '[': + int ichClose = strFormat.indexOf(']', ich); + if (ichClose < ich) { + ich = cch; + break; + } + String propertyName = strFormat.substring(ich, ichClose).toLowerCase(); + if (propertyName.startsWith("property_")) { + lt.text = propertyName; + lt.tok = Token.data; + lt.data = viewer.getDataFloat(lt.text); + } else { + Token token = Token.getTokenFromName(propertyName); + if (token != null && isLabelPropertyTok(token.tok)) + lt.tok = token.tok; + } + ich = ichClose + 1; break; - } - String propertyName = strFormat.substring(ich, ichClose).toLowerCase(); - if (propertyName.startsWith("property_")) { - lt.text = propertyName; + case '{': // client property name + int ichCloseBracket = strFormat.indexOf('}', ich); + if (ichCloseBracket < ich) { + ich = cch; + break; + } + lt.text = strFormat.substring(ich, ichCloseBracket); lt.tok = Token.data; - lt.data = viewer.getDataFloat(lt.text); - } else { - Token token = Token.getTokenFromName(propertyName); - if (token != null && isLabelPropertyTok(token.tok)) - lt.tok = token.tok; - } - ich = ichClose + 1; - break; - case '{': // client property name - int ichCloseBracket = strFormat.indexOf('}', ich); - if (ichCloseBracket < ich) { - ich = cch; + lt.data = viewer.getDataFloat(lt.text); + ich = ichCloseBracket + 1; break; + default: + int i, + i1; + if (ich < cch && (i = twoCharLabelTokenParams.indexOf(ch)) >= 0 + && (i1 = "xyz".indexOf(strFormat.charAt(ich))) >= 0) { + lt.tok = twoCharLabelTokenIds[i * 3 + i1]; + ich++; + } else if ((i = labelTokenParams.indexOf(ch)) >= 0) { + lt.tok = labelTokenIds[i]; + } } - lt.text = strFormat.substring(ich, ichCloseBracket); - lt.tok = Token.data; - lt.data = viewer.getDataFloat(lt.text); - ich = ichCloseBracket + 1; - break; - default: - int i, i1; - if (ich < cch - && (i = twoCharLabelTokenParams.indexOf(ch)) >= 0 - && (i1 = "xyz".indexOf(strFormat.charAt(ich))) >= 0) { - lt.tok = twoCharLabelTokenIds[i * 3 + i1]; - ich++; - } else if ((i = labelTokenParams.indexOf(ch)) >= 0) { - lt.tok = labelTokenIds[i]; - } - } lt.text = strFormat.substring(lt.pt, ich); - if (chAtom != '\0' && ich < cch && Character.isDigit(ch = strFormat.charAt(ich))) { + if (ich < cch && chAtom != '\0' + && Character.isDigit(ch = strFormat.charAt(ich))) { ich++; lt.ch1 = ch; if (ch != chAtom && chAtom != '\1') Modified: branches/v12_0/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v12_0/Jmol/src/org/jmol/viewer/Jmol.properties 2010-09-27 23:07:37 UTC (rev 14381) +++ branches/v12_0/Jmol/src/org/jmol/viewer/Jmol.properties 2010-09-27 23:08:08 UTC (rev 14382) @@ -4,6 +4,7 @@ version=12.0.16_dev +# bug fix: label %1 will cause exception # bug fix: load '@x' not saved properly in state # bug fix: arrays of hashtables and other more complex variables not being saved or created in usable form # bug fix: isosurface MEP with multiple frames fails on second isosurface This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |