diff --git a/src/main/java/de/prob2/jupyter/CommandUtils.java b/src/main/java/de/prob2/jupyter/CommandUtils.java index cd77b5107727d973b893a9d00c84abebb9e127cf..1078400eec1377c5d409709e286af69e1cb5e2e7 100644 --- a/src/main/java/de/prob2/jupyter/CommandUtils.java +++ b/src/main/java/de/prob2/jupyter/CommandUtils.java @@ -94,10 +94,10 @@ public final class CommandUtils { final SplitArguments splitArgs = new SplitArguments(Collections.emptyMap()); PositionedString remainingArgs = new PositionedString(argString, 0); if (parameters.getBodyParam().isPresent()) { - final Matcher bodySplitMatcher = BODY_SPLIT_PATTERN.matcher(argString); + final Matcher bodySplitMatcher = BODY_SPLIT_PATTERN.matcher(remainingArgs.getValue()); if (bodySplitMatcher.find()) { - remainingArgs = new PositionedString(argString.substring(0, bodySplitMatcher.start()), remainingArgs.getStartPosition()); - final PositionedString bodyValue = new PositionedString(argString.substring(bodySplitMatcher.end()), bodySplitMatcher.end()); + remainingArgs = remainingArgs.substring(0, bodySplitMatcher.start()); + final PositionedString bodyValue = remainingArgs.substring(bodySplitMatcher.end()); splitArgs.add(parameters.getBodyParam().get(), bodyValue); } } diff --git a/src/main/java/de/prob2/jupyter/Parameter.java b/src/main/java/de/prob2/jupyter/Parameter.java index e13803e664cbbc91f11a03f1cfe612194ed94175..9ef386900195073779bd735df317c948eb2e9a46 100644 --- a/src/main/java/de/prob2/jupyter/Parameter.java +++ b/src/main/java/de/prob2/jupyter/Parameter.java @@ -34,15 +34,15 @@ public interface Parameter<T> { final PositionedString splitArg; final PositionedString remainingArgString; if (argSplitMatcher.find()) { - splitArg = new PositionedString(argString.getValue().substring(0, argSplitMatcher.start()), argString.getStartPosition()); - remainingArgString = new PositionedString(argString.getValue().substring(argSplitMatcher.end()), argString.getStartPosition() + argSplitMatcher.end()); + splitArg = argString.substring(0, argSplitMatcher.start()); + remainingArgString = argString.substring(argSplitMatcher.end()); } else { splitArg = argString; - remainingArgString = new PositionedString("", argString.getStartPosition() + argString.getValue().length()); + remainingArgString = argString.substring(argString.getValue().length()); } return new SplitResult(splitArg, remainingArgString); }; - public static final @NotNull Parameter.Splitter REMAINDER = argString -> new SplitResult(argString, new PositionedString("", argString.getStartPosition() + argString.getValue().length())); + public static final @NotNull Parameter.Splitter REMAINDER = argString -> new SplitResult(argString, argString.substring(argString.getValue().length())); public abstract Parameter.SplitResult split(final @NotNull PositionedString argString); } diff --git a/src/main/java/de/prob2/jupyter/PositionedString.java b/src/main/java/de/prob2/jupyter/PositionedString.java index 94c6b0dcf94b75c1bfe1a5d2f09f37de4a5eba7b..494748c7a281bbeb9ea8a7c770cca0c1e50cf2a6 100644 --- a/src/main/java/de/prob2/jupyter/PositionedString.java +++ b/src/main/java/de/prob2/jupyter/PositionedString.java @@ -23,6 +23,14 @@ public final class PositionedString { return this.startPosition; } + public PositionedString substring(final int beginIndex, final int endIndex) { + return new PositionedString(this.getValue().substring(beginIndex, endIndex), this.getStartPosition() + beginIndex); + } + + public PositionedString substring(final int beginIndex) { + return this.substring(beginIndex, this.getValue().length()); + } + @Override public String toString() { return MoreObjects.toStringHelper(this)