summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2024-03-23 16:02:51 -0500
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2024-03-23 16:03:45 -0500
commitcc45a65c78c578eb404d8773b22e5b046917621f (patch)
tree6f53d7c974d930731ad41e80b53407c3458f35d9 /src
parente1a96524ad9000689e081a6bf52792a886c07222 (diff)
Add fractions using | to expressions
| is like /, but with higher precedence. This feature is a part of GNU Units, and was included in 7Units for compatibility.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/sevenUnits/unit/UnitDatabase.java10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/main/java/sevenUnits/unit/UnitDatabase.java b/src/main/java/sevenUnits/unit/UnitDatabase.java
index 7e76729..d738b78 100644
--- a/src/main/java/sevenUnits/unit/UnitDatabase.java
+++ b/src/main/java/sevenUnits/unit/UnitDatabase.java
@@ -1073,7 +1073,7 @@ public final class UnitDatabase {
// add data to expression replacements
static {
// add spaces around operators
- for (final String operator : Arrays.asList("\\*", "/", "\\^")) {
+ for (final String operator : Arrays.asList("\\*", "/", "\\|", "\\^")) {
EXPRESSION_REPLACEMENTS.put(Pattern.compile(operator),
" " + operator + " ");
}
@@ -1231,6 +1231,7 @@ public final class UnitDatabase {
.addBinaryOperator("*", (o1, o2) -> o1.times(o2), 1)
.addSpaceFunction("*")
.addBinaryOperator("/", (o1, o2) -> o1.dividedBy(o2), 1)
+ .addBinaryOperator("|", (o1, o2) -> o1.dividedBy(o2), 3)
.addBinaryOperator("^", UnitDatabase::exponentiateUnits, 2)
.build();
@@ -1246,6 +1247,7 @@ public final class UnitDatabase {
.addBinaryOperator("*", (o1, o2) -> o1.times(o2), 1)
.addSpaceFunction("*")
.addBinaryOperator("/", (o1, o2) -> o1.dividedBy(o2), 1)
+ .addBinaryOperator("|", (o1, o2) -> o1.dividedBy(o2), 3)
.addBinaryOperator("^", UnitDatabase::exponentiateUnitValues, 2)
.build();
@@ -1261,6 +1263,7 @@ public final class UnitDatabase {
.addBinaryOperator("*", (o1, o2) -> o1.times(o2), 1)
.addSpaceFunction("*")
.addBinaryOperator("/", (o1, o2) -> o1.dividedBy(o2), 1)
+ .addBinaryOperator("|", (o1, o2) -> o1.dividedBy(o2), 3)
.addBinaryOperator("^",
(o1, o2) -> o1.toExponent(o2.getMultiplier()), 2)
.build();
@@ -1275,6 +1278,7 @@ public final class UnitDatabase {
this::getDimension).addBinaryOperator("*", (o1, o2) -> o1.times(o2), 0)
.addSpaceFunction("*")
.addBinaryOperator("/", (o1, o2) -> o1.dividedBy(o2), 0)
+ .addBinaryOperator("|", (o1, o2) -> o1.dividedBy(o2), 2)
.addNumericOperator("^", (o1, o2) -> {
int exponent = (int) Math.round(o2.value());
return o1.toExponent(exponent);
@@ -1570,7 +1574,7 @@ public final class UnitDatabase {
// FIXME the previous operaton also breaks stuff like "1e-5"
for (int i = 0; i < modifiedExpression.length(); i++) {
if (modifiedExpression.charAt(i) == '-'
- && (i < 2 || Arrays.asList('+', '-', '*', '/', '^')
+ && (i < 2 || Arrays.asList('+', '-', '*', '/', '|', '^')
.contains(modifiedExpression.charAt(i - 2)))) {
// found a broken negative number
modifiedExpression = modifiedExpression.substring(0, i + 1)
@@ -1870,7 +1874,7 @@ public final class UnitDatabase {
// (i.e. -2 becomes - 2)
for (int i = 0; i < modifiedExpression.length(); i++) {
if (modifiedExpression.charAt(i) == '-'
- && (i < 2 || Arrays.asList('+', '-', '*', '/', '^')
+ && (i < 2 || Arrays.asList('+', '-', '*', '/', '|', '^')
.contains(modifiedExpression.charAt(i - 2)))) {
// found a broken negative number
modifiedExpression = modifiedExpression.substring(0, i + 1)