parse static method

List<Atom> parse(
  1. String string
)

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;
}