peer-at-code-framework/src/dev/peerat/framework/utils/json/JsonTokenizer.java
2024-04-14 14:36:47 +02:00

65 lines
1.5 KiB
Java

package dev.peerat.framework.utils.json;
import be.jeffcheasey88.peeratcode.parser.Token;
import be.jeffcheasey88.peeratcode.parser.TokenType;
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
public class JsonTokenizer extends Tokenizer{
@Override
public void parse(String line){
for(int i = 0; i < line.length(); i++){
char c = line.charAt(i);
if(isValidName(c)){
String buffer = ""+c;
int j = i+1;
for(; j < line.length(); j++){
c = line.charAt(j);
if(isValidName(c)) buffer+=c;
else break;
}
getTokens().add(new Token(1, i+1, buffer, TokenType.NAME));
i=j-1;
}else if(Character.isWhitespace(c)) continue;
else{
if(c == '"'){
String buffer = "";
int j = i+1;
for(; j < line.length(); j++){
c = line.charAt(j);
if(c == '\\'){
c = line.charAt(++j);
switch(c){
case 'n':
buffer+='\n';
break;
case 'r':
buffer+='\r';
break;
case 't':
buffer+='\t';
break;
default:
buffer+=c;
break;
}
continue;
}
if(c == '\"') break;
buffer+=c;
}
getTokens().add(new Token(1, i+1, buffer, TokenType.STRING));
i=j;
continue;
}
getTokens().add(new Token(1, i+1, ""+c, TokenType.DELIMITER));
}
}
}
private boolean isValidName(char c){
return c == '_' || c == '-' || c == '$' || Character.isAlphabetic(c) || Character.isDigit(c);
}
}