From 4cd54b738f33ed5a69085916113fecdc568a5493 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Sun, 15 Oct 2023 16:18:37 +0200 Subject: [PATCH] String in tokenizer --- .../peeratcode/parser/java/JavaParser.java | 39 +++++++++---------- .../peeratcode/parser/java/ValueTests.java | 2 +- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index caa92db..223fb55 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -23,7 +23,6 @@ import be.jeffcheasey88.peeratcode.parser.TokenValidator; import be.jeffcheasey88.peeratcode.parser.Tokenizer; import be.jeffcheasey88.peeratcode.parser.java.Annotation.Annotable; import be.jeffcheasey88.peeratcode.parser.java.Function.FunctionContainer; -import be.jeffcheasey88.peeratcode.parser.java.Value.BiValue; import be.jeffcheasey88.peeratcode.parser.java.Variable.VariableContainer; import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree; import be.jeffcheasey88.peeratcode.parser.state.InitialStateTree; @@ -71,6 +70,24 @@ public class JavaParser extends Parser { i = j-1; }else if(Character.isWhitespace(c)) continue; else{ + if(c == '"'){ + String value = ""; + int j = i; + for(; j < line.length(); j++){ + c = line.charAt(j); + if(c == '"'){ + value+=c; + j++; + break; + }else if(c == '\\'){ + value+=c+line.charAt(++j); + }else{ + value+=c; + } + } + token = new Token(lineNumber, i+1, value, TokenType.STRING); + i = j-1; + } if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '/')) break; if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '*')){ longCommentary = true; @@ -373,25 +390,7 @@ public class JavaParser extends Parser { } return false; }).end(); - value.then((validator) -> { - if(validator.validate((token) -> token.getValue().equals("\""))){ - while(validator.validate( - (token) -> !token.getValue().equals("\""), - (bag, token) -> { - Token current = bag.get(); - if(current == null) current = token; - else current = current.concat(token); - bag.set(current); - })); - return validator.validate((token) -> token.getValue().equals("\""), (bag, token) -> { - Token current = bag.get(); - if(current == null) current = token; - else current = current.concat(token); - bag.set(current); - }); - } - return false; - }).end((parent,bag) -> { + value.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.STRING))).end((parent,bag) -> { bag.set(new Value(bag.get())); return null; }); diff --git a/test/be/jeffcheasey88/peeratcode/parser/java/ValueTests.java b/test/be/jeffcheasey88/peeratcode/parser/java/ValueTests.java index 3ce0d1c..5aadc04 100644 --- a/test/be/jeffcheasey88/peeratcode/parser/java/ValueTests.java +++ b/test/be/jeffcheasey88/peeratcode/parser/java/ValueTests.java @@ -265,6 +265,6 @@ public class ValueTests { @Test void doubleInDouble() throws Exception{ - JavaElement result = testCase("(jeffcheasey88 == goefra) || (yuzzu == yugs)"); + JavaElement result = testCase("(jeffcheasey88 == goefra) || (yuzzu == yugs) || (test == \"Content-Disposition: form-data; name=\\\"?\\\"\")"); } }