From 1ffd42904b9de70d75e46315cbcb215e86782be1 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Sat, 26 Aug 2023 17:28:21 +0200 Subject: [PATCH 1/8] update rework #616 and remove trim --- .../expressions/BExpressionContext.java | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index 7232323..eff1bbb 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -565,85 +565,85 @@ public abstract class BExpressionContext implements IByteArrayUnifier { String org = value; try { // remove some unused characters - value = value.replace(",", "."); - value = value.replace(">", ""); - value = value.replace("_", ""); + value = value.replaceAll(",", "."); + value = value.replaceAll(">", ""); + value = value.replaceAll("_", ""); + value = value.replaceAll(" ", ""); + //value = value.replaceAll(" ", ""); // nbsp + value = value.replaceAll("’", "'"); + value = value.replaceAll("”", "\""); if (value.indexOf("-") == 0) value = value.substring(1); - if (value.indexOf("~") == 0) value = value.substring(1); - if (value.contains("-")) { // replace eg. 1.4-1.6 m - String tmp = value.substring(value.indexOf("-") + 1).replaceAll("[0-9.,-]", ""); - value = value.substring(0, value.indexOf("-")) + tmp; + if (value.contains("-")) { // replace eg. 1.4-1.6 m but also 1'-6" + value = value.substring(0, value.indexOf("-")); // + tmp; } + value = value.toLowerCase(Locale.US); + // do some value conversion - if (value.toLowerCase().contains("ft")) { + if (value.contains("ft")) { float foot = 0f; int inch = 0; - String[] sa = value.trim().toLowerCase().split("ft"); - if (sa.length >= 1) foot = Float.parseFloat(sa[0].trim()); + String[] sa = value.split("ft"); + if (sa.length >= 1) foot = Float.parseFloat(sa[0]); if (sa.length == 2) { value = sa[1]; if (value.indexOf("in") > 0) value = value.substring(0, value.indexOf("in")); - inch = Integer.parseInt(value.trim()); + inch = Integer.parseInt(value); foot += inch / 12f; } value = String.format(Locale.US, "%3.1f", foot * 0.3048f); } - String valueLowerCase = value.toLowerCase(Locale.US); if (value.contains("'")) { float foot = 0f; int inch = 0; - String[] sa = valueLowerCase.trim().split("'"); - if (sa.length >= 1) foot = Float.parseFloat(sa[0].trim()); + String[] sa = value.split("'"); + if (sa.length >= 1) foot = Float.parseFloat(sa[0]); if (sa.length == 2) { value = sa[1]; if (value.indexOf("''") > 0) value = value.substring(0, value.indexOf("''")); if (value.indexOf("\"") > 0) value = value.substring(0, value.indexOf("\"")); - inch = Integer.parseInt(value.trim()); + inch = Integer.parseInt(value); foot += inch / 12f; } value = String.format(Locale.US, "%3.1f", foot * 0.3048f); - } else if (valueLowerCase.contains("in") || value.contains("\"")) { + } else if (value.contains("in") || value.contains("\"")) { float inch = 0f; - if (valueLowerCase.indexOf("in") > 0) value = value.substring(0, valueLowerCase.indexOf("in")); + if (value.indexOf("in") > 0) value = value.substring(0, value.indexOf("in")); if (value.indexOf("\"") > 0) value = value.substring(0, value.indexOf("\"")); - inch = Float.parseFloat(value.trim()); + inch = Float.parseFloat(value); value = String.format(Locale.US, "%3.1f", inch * 0.0254f); - } else if (valueLowerCase.contains("feet") || valueLowerCase.contains("foot")) { + } else if (value.contains("feet") || value.contains("foot")) { float feet = 0f; - String s = value.substring(0, valueLowerCase.indexOf("f")); - feet = Float.parseFloat(s.trim()); + String s = value.substring(0, value.indexOf("f")); + feet = Float.parseFloat(s); value = String.format(Locale.US, "%3.1f", feet * 0.3048f); - } else if (valueLowerCase.contains("fathom") || valueLowerCase.contains("fm")) { - String s = value.substring(0, valueLowerCase.indexOf("f")); - float fathom = Float.parseFloat(s.trim()); + } else if (value.contains("fathom") || value.contains("fm")) { + String s = value.substring(0, value.indexOf("f")); + float fathom = Float.parseFloat(s); value = String.format(Locale.US, "%3.1f", fathom * 1.8288f); - } else if (valueLowerCase.contains("cm")) { - String[] sa = valueLowerCase.trim().split("cm"); - if (sa.length >= 1) value = sa[0].trim(); - float cm = Float.parseFloat(value.trim()); + } else if (value.contains("cm")) { + String[] sa = value.split("cm"); + if (sa.length >= 1) value = sa[0]; + float cm = Float.parseFloat(value); value = String.format(Locale.US, "%3.1f", cm / 100f); - } else if (valueLowerCase.contains("meter")) { - String s = value.substring(0, valueLowerCase.indexOf("m")); - value = s.trim(); - } else if (valueLowerCase.contains("mph")) { - String[] sa = valueLowerCase.trim().split("mph"); - if (sa.length >= 1) value = sa[0].trim(); - float mph = Float.parseFloat(value.trim()); + } else if (value.contains("meter")) { + value = value.substring(0, value.indexOf("m")); + } else if (value.toLowerCase().contains("mph")) { + String[] sa = value.split("mph"); + if (sa.length >= 1) value = sa[0]; + float mph = Float.parseFloat(value); value = String.format(Locale.US, "%3.1f", mph * 1.609344f); - } else if (valueLowerCase.contains("knot")) { - String[] sa = valueLowerCase.trim().split("knot"); - if (sa.length >= 1) value = sa[0].trim(); - float nm = Float.parseFloat(value.trim()); + } else if (value.contains("knot")) { + String[] sa = value.split("knot"); + if (sa.length >= 1) value = sa[0]; + float nm = Float.parseFloat(value); value = String.format(Locale.US, "%3.1f", nm * 1.852f); - } else if (valueLowerCase.contains("kmh") || valueLowerCase.contains("km/h") || valueLowerCase.contains("kph")) { - String[] sa = valueLowerCase.trim().split("k"); - if (sa.length > 1) value = sa[0].trim(); - } else if (valueLowerCase.contains("m")) { - String s = value.substring(0, valueLowerCase.indexOf("m")); - value = s.trim(); + } else if (value.contains("kmh") || value.contains("km/h") || value.contains("kph")) { + String[] sa = value.split("k"); + if (sa.length > 1) value = sa[0]; + } else if (value.contains("m")) { + value = value.substring(0, value.indexOf("m")); } else if (value.contains("(")) { - String s = value.substring(0, valueLowerCase.indexOf("(")); - value = s.trim(); + value = value.substring(0, value.indexOf("(")); } // found negative maxdraft values // no negative values From e697734d64ff4345e6e1f0b0d493ac8a785017c8 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Sun, 27 Aug 2023 17:24:54 +0200 Subject: [PATCH 2/8] remove a last lower case --- .../src/main/java/btools/expressions/BExpressionContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index eff1bbb..cc1ab29 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -627,7 +627,7 @@ public abstract class BExpressionContext implements IByteArrayUnifier { value = String.format(Locale.US, "%3.1f", cm / 100f); } else if (value.contains("meter")) { value = value.substring(0, value.indexOf("m")); - } else if (value.toLowerCase().contains("mph")) { + } else if (value.contains("mph")) { String[] sa = value.split("mph"); if (sa.length >= 1) value = sa[0]; float mph = Float.parseFloat(value); From e954d2174baa5ba6206b7e1715f7540941ec20a1 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Tue, 29 Aug 2023 16:49:29 +0200 Subject: [PATCH 3/8] added check for from-to units --- .../main/java/btools/expressions/BExpressionContext.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index cc1ab29..c2f1ad6 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -573,8 +573,13 @@ public abstract class BExpressionContext implements IByteArrayUnifier { value = value.replaceAll("’", "'"); value = value.replaceAll("”", "\""); if (value.indexOf("-") == 0) value = value.substring(1); - if (value.contains("-")) { // replace eg. 1.4-1.6 m but also 1'-6" - value = value.substring(0, value.indexOf("-")); // + tmp; + if (value.contains("-")) { + // replace eg. 1.4-1.6 m to 1.4m + // but also 1'-6" to 1' + // keep the unit of measure + String tmp = value.substring(value.indexOf("-") + 1).replaceAll("[0-9.,-]", ""); + value = value.substring(0, value.indexOf("-")); + if (value.matches("\\d+(\\.\\d+)?")) value += tmp; } value = value.toLowerCase(Locale.US); From d26f77380d45b6680a408e7f86cdef05b095aaab Mon Sep 17 00:00:00 2001 From: afischerdev Date: Tue, 29 Aug 2023 16:51:59 +0200 Subject: [PATCH 4/8] replaced windows characters --- .../src/main/java/btools/expressions/BExpressionContext.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index c2f1ad6..25b90eb 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -569,9 +569,8 @@ public abstract class BExpressionContext implements IByteArrayUnifier { value = value.replaceAll(">", ""); value = value.replaceAll("_", ""); value = value.replaceAll(" ", ""); - //value = value.replaceAll(" ", ""); // nbsp - value = value.replaceAll("’", "'"); - value = value.replaceAll("”", "\""); + value = value.replace((char) 8217, '\''); + value = value.replace((char) 8221, '"'); if (value.indexOf("-") == 0) value = value.substring(1); if (value.contains("-")) { // replace eg. 1.4-1.6 m to 1.4m From 2b17ae9255d3f748f0ad75b30b2ac3f5b8f3920c Mon Sep 17 00:00:00 2001 From: afischerdev Date: Tue, 29 Aug 2023 16:55:41 +0200 Subject: [PATCH 5/8] added new character check --- .../src/main/java/btools/expressions/BExpressionContext.java | 1 + 1 file changed, 1 insertion(+) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index 25b90eb..13482dd 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -569,6 +569,7 @@ public abstract class BExpressionContext implements IByteArrayUnifier { value = value.replaceAll(">", ""); value = value.replaceAll("_", ""); value = value.replaceAll(" ", ""); + value = value.replaceAll("~", ""); value = value.replace((char) 8217, '\''); value = value.replace((char) 8221, '"'); if (value.indexOf("-") == 0) value = value.substring(1); From 093d400c5bc165e4b9976bc9174b03ffaded0bbb Mon Sep 17 00:00:00 2001 From: afischerdev Date: Tue, 29 Aug 2023 16:58:52 +0200 Subject: [PATCH 6/8] added from/to check in test --- .../src/test/java/btools/expressions/EncodeDecodeTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brouter-expressions/src/test/java/btools/expressions/EncodeDecodeTest.java b/brouter-expressions/src/test/java/btools/expressions/EncodeDecodeTest.java index 6979387..b731ea0 100644 --- a/brouter-expressions/src/test/java/btools/expressions/EncodeDecodeTest.java +++ b/brouter-expressions/src/test/java/btools/expressions/EncodeDecodeTest.java @@ -29,7 +29,7 @@ public class EncodeDecodeTest { "depth=1'6\"", // "depth=6 feet", "maxheight=5.1m", - "maxdraft=~3 mt", + "maxdraft=~3 m - 4 m", "reversedirection=yes" }; From 9d22709017d8dbb88228d2936bba4409849400d8 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Wed, 30 Aug 2023 16:59:47 +0200 Subject: [PATCH 7/8] added to if-else-tree --- .../src/main/java/btools/expressions/BExpressionContext.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index 13482dd..d542a29 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -596,8 +596,7 @@ public abstract class BExpressionContext implements IByteArrayUnifier { foot += inch / 12f; } value = String.format(Locale.US, "%3.1f", foot * 0.3048f); - } - if (value.contains("'")) { + } else if (value.contains("'")) { float foot = 0f; int inch = 0; String[] sa = value.split("'"); From 8f793150b0f378e2514935eb6ada5229b738e11e Mon Sep 17 00:00:00 2001 From: afischerdev Date: Wed, 30 Aug 2023 17:03:45 +0200 Subject: [PATCH 8/8] changed wording for foot/feet --- .../btools/expressions/BExpressionContext.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java index d542a29..786439a 100644 --- a/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java +++ b/brouter-expressions/src/main/java/btools/expressions/BExpressionContext.java @@ -585,30 +585,30 @@ public abstract class BExpressionContext implements IByteArrayUnifier { // do some value conversion if (value.contains("ft")) { - float foot = 0f; + float feet = 0f; int inch = 0; String[] sa = value.split("ft"); - if (sa.length >= 1) foot = Float.parseFloat(sa[0]); + if (sa.length >= 1) feet = Float.parseFloat(sa[0]); if (sa.length == 2) { value = sa[1]; if (value.indexOf("in") > 0) value = value.substring(0, value.indexOf("in")); inch = Integer.parseInt(value); - foot += inch / 12f; + feet += inch / 12f; } - value = String.format(Locale.US, "%3.1f", foot * 0.3048f); + value = String.format(Locale.US, "%3.1f", feet * 0.3048f); } else if (value.contains("'")) { - float foot = 0f; + float feet = 0f; int inch = 0; String[] sa = value.split("'"); - if (sa.length >= 1) foot = Float.parseFloat(sa[0]); + if (sa.length >= 1) feet = Float.parseFloat(sa[0]); if (sa.length == 2) { value = sa[1]; if (value.indexOf("''") > 0) value = value.substring(0, value.indexOf("''")); if (value.indexOf("\"") > 0) value = value.substring(0, value.indexOf("\"")); inch = Integer.parseInt(value); - foot += inch / 12f; + feet += inch / 12f; } - value = String.format(Locale.US, "%3.1f", foot * 0.3048f); + value = String.format(Locale.US, "%3.1f", feet * 0.3048f); } else if (value.contains("in") || value.contains("\"")) { float inch = 0f; if (value.indexOf("in") > 0) value = value.substring(0, value.indexOf("in"));