From: richardgraham Date: Fri, 17 Aug 2012 06:21:37 +0000 (+0000) Subject: Fixed negative number bug in exp4j and custom expressions. X-Git-Tag: upstream/12.09^2~52 X-Git-Url: https://git.gag.com/?p=debian%2Fopenrocket;a=commitdiff_plain;h=192fdbaaf3c37387c35727e2266d724381120a58 Fixed negative number bug in exp4j and custom expressions. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@972 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/core/src/de/congrace/exp4j/Tokenizer.java b/core/src/de/congrace/exp4j/Tokenizer.java index 1591995e..c2c99d97 100644 --- a/core/src/de/congrace/exp4j/Tokenizer.java +++ b/core/src/de/congrace/exp4j/Tokenizer.java @@ -166,6 +166,7 @@ class Tokenizer { Token lastToken; for (int i = 0; i < chars.length; i++) { char c = chars[i]; + if (c == ' ') continue; if (isDigit(c)) { @@ -179,12 +180,12 @@ class Tokenizer { } i += numberLen - 1; lastToken = new NumberToken(valueBuilder.toString()); - } else if (Character.isLetter(c) || c == '_' || c == '#') { + } else if (Character.isLetter(c) || c == '_' || c == '$') { // can be a variable or function final StringBuilder nameBuilder = new StringBuilder(); nameBuilder.append(c); int offset = 1; - while (chars.length > i + offset && (Character.isLetter(chars[i + offset]) || Character.isDigit(chars[i + offset]) || chars[i + offset] == '_' || chars[i + offset] == '#')) { + while (chars.length > i + offset && (Character.isLetter(chars[i + offset]) || Character.isDigit(chars[i + offset]) || chars[i + offset] == '_' || chars[i + offset] == '$')) { nameBuilder.append(chars[i + offset++]); } String name = nameBuilder.toString(); diff --git a/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java b/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java index 40b3d700..47a5dff1 100644 --- a/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java +++ b/core/src/net/sf/openrocket/simulation/customexpression/CustomExpression.java @@ -204,7 +204,7 @@ public class CustomExpression implements Cloneable{ return false; // No bad characters - for (char c : "0123456789.,()[]{}<>:#@%^&* ".toCharArray()) + for (char c : "0123456789.,()[]{}<>:#@%^&*$ ".toCharArray()) if (symbol.indexOf(c) != -1 ) return false; @@ -230,7 +230,7 @@ public class CustomExpression implements Cloneable{ return false; // No characters that could mess things up saving etc - for (char c : ",()[]{}<>#".toCharArray()) + for (char c : ",()[]{}<>#$".toCharArray()) if (name.indexOf(c) != -1 ) return false; @@ -293,6 +293,7 @@ public class CustomExpression implements Cloneable{ } else break; case '#' : return false; + case '$' : return false; case '=' : return false; } } @@ -465,12 +466,12 @@ public class CustomExpression implements Cloneable{ } /* - * Returns a simple all upper case string hash code with a proceeding # mark. + * Returns a simple all upper case string hash code with a proceeding $ mark. * Used for temporary substitution when evaluating index and range expressions. */ public String hash(){ Integer hashint = new Integer(this.getExpressionString().hashCode()); - String hash = "#"; + String hash = "$"; for (char c : hashint.toString().toCharArray()){ char newc = (char) (c + 17); hash = hash + newc;