// Copyright (c) 2015, Christopher "BlayTheNinth" Baker
package net.blay09.mods.eirairc.irc;
import com.google.common.collect.Lists;
import java.util.List;
public class IRCParser {
private final List<String> args = Lists.newArrayList();
private String data;
private int idx;
public IRCMessageImpl parse(String data) {
this.data = data;
String tags = null;
if(data.startsWith("@")) {
skip(1);
tags = next();
}
String prefix = "";
String cmd;
if(data.startsWith(":", idx)) {
skip(1);
prefix = next();
}
cmd = next();
String arg;
while((arg = next()) != null) {
args.add(arg);
}
IRCMessageImpl msg = new IRCMessageImpl(tags != null ? tags.split(";") : null, prefix, cmd, args.toArray(new String[args.size()]));
reset();
return msg;
}
public void reset() {
data = null;
idx = 0;
args.clear();
}
public void skip(int x) {
idx += x;
}
public String next() {
if(idx >= data.length() - 1) {
return null;
}
int nextIdx = data.indexOf(' ', idx);
if(nextIdx == -1) {
nextIdx = data.length();
}
if(data.charAt(idx) == ':') {
idx++;
nextIdx = data.length();
}
String s = data.substring(idx, nextIdx);
idx = nextIdx + 1;
return s;
}
}