parse static method
Implementation
static List<Atom> parse(String string) {
List<Atom> atoms = [];
List<String> atomsStr = [];
List<String> dirs = [];
List<String> funcs = [];
int range = 1;
Modality modality = Modality.both;
void add() {
for (String a in atomsStr) {
Atom atom = Atom(
base: a,
dirMods: dirs,
funcMods: funcs,
range: range,
modality: modality,
);
atoms.add(atom);
}
atomsStr = [];
dirs = [];
funcs = [];
range = 1;
modality = Modality.both;
}
for (int i = 0; i < string.length; i++) {
String c = string[i];
if (isNumeric(c)) {
range = int.parse(c);
}
if (atomsStr.isNotEmpty) {
add();
}
if (dirModifiers.contains(c)) {
dirs.add(c);
} else if (funcModifiers.contains(c)) {
funcs.add(c);
} else if (modalities.containsKey(c)) {
modality = modalities[c]!;
} else if (shorthands.contains(c)) {
if (c != 'K') range = 0;
if (c != 'R') atomsStr.add('F');
if (c != 'B') atomsStr.add('W');
} else if (atomMap.containsKey(c)) {
atomsStr.add(c);
} else {
final m = _matchLongDirAtom(string.substring(i));
if (m != null) {
String a = m.group(0)!;
atomsStr.add(a);
i += a.length - 1;
}
}
}
if (atomsStr.isNotEmpty) add();
return atoms;
}