diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java index 4c54c780bd..56c8a08ea3 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ReaderStateImpl.java @@ -3,8 +3,10 @@ package com.rusefi; import com.devexperts.logging.Logging; import com.opensr5.ini.RawIniFile; import com.opensr5.ini.field.EnumIniField; +import com.rusefi.core.Pair; import com.rusefi.enum_reader.Value; import com.rusefi.output.*; +import com.rusefi.parse.TokenUtil; import com.rusefi.parse.TypesHelper; import com.rusefi.util.LazyFile; import com.rusefi.util.SystemOut; @@ -146,20 +148,20 @@ public class ReaderStateImpl implements ReaderState { } private void handleCustomLine(String customLineWithPrefix) { - String line = customLineWithPrefix.substring(CUSTOM.length() + 1).trim(); - int index = line.indexOf(' '); - String name = line.substring(0, index); + String withoutPrefix = customLineWithPrefix.substring(CUSTOM.length() + 1).trim(); + Pair nameAndRest = TokenUtil.grabFirstTokenAndTheRest(withoutPrefix); + String name = nameAndRest.first; String autoEnumOptions = variableRegistry.getEnumOptionsForTunerStudio(enumsReader, name); if (autoEnumOptions != null) { variableRegistry.register(name + VariableRegistry.AUTO_ENUM_SUFFIX, autoEnumOptions); } - line = line.substring(index).trim(); - index = line.indexOf(' '); - String customSize = line.substring(0, index); + String line = nameAndRest.second; + Pair sizeAndRest = TokenUtil.grabFirstTokenAndTheRest(line); + String customSize = sizeAndRest.first; - String tunerStudioLine = line.substring(index).trim(); + String tunerStudioLine = sizeAndRest.second; tunerStudioLine = variableRegistry.applyVariables(tunerStudioLine); int size = parseSize(customSize, line); tsCustomSize.put(name, size); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/parse/TokenUtil.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/parse/TokenUtil.java new file mode 100644 index 0000000000..a1bfb3c8e0 --- /dev/null +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/parse/TokenUtil.java @@ -0,0 +1,21 @@ +package com.rusefi.parse; + +import com.rusefi.core.Pair; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class TokenUtil { + private static final Pattern pattern = Pattern.compile("\\s"); + + public static Pair grabFirstTokenAndTheRest(String line) { + Matcher matcher = pattern.matcher(line); + if (!matcher.find()) + throw new IllegalStateException("whitespace expected in [" + line + "]"); + int index = matcher.start(); + String first = line.substring(0, index); + + String second = line.substring(index).trim(); + return new Pair<>(first, second); + } +} diff --git a/java_tools/configuration_definition_base/src/test/java/com/rusefi/parse/TokenUtilTest.java b/java_tools/configuration_definition_base/src/test/java/com/rusefi/parse/TokenUtilTest.java new file mode 100644 index 0000000000..da598547c2 --- /dev/null +++ b/java_tools/configuration_definition_base/src/test/java/com/rusefi/parse/TokenUtilTest.java @@ -0,0 +1,14 @@ +package com.rusefi.parse; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class TokenUtilTest { + @Test + public void test() { + assertEquals("first", TokenUtil.grabFirstTokenAndTheRest("first s").first); + assertEquals("second", TokenUtil.grabFirstTokenAndTheRest("f second \t").second); + assertEquals("second", TokenUtil.grabFirstTokenAndTheRest("f\tsecond\t ").second); + } +}