static L parsePoem(S input) { if (isSnippetID(input)) ret loadPoemAndParse(input); ret parsePoem(toLinesFullTrim(input)); } static L parsePoem(L lines) { char mode = ' '; new L entries; for (S line : lines) { new E e; if (line.startsWith("!")) { e.test = true; line = line.substring(1).trim(); } if (swicAny(line, litlist("Q:", "U:", "Usr:"))) { mode = 'q'; line = line.substring(line.indexOf(':')+1).trim(); } else if (swicAny(line, litlist("A:", "B:", "Bot:"))) { mode = 'a'; line = line.substring(line.indexOf(':')+1).trim(); } else if (startsWith(line, "[")) mode = 's'; if (mode == 'q') e.q = line; else if (mode == 'a') e.a = line; else { e.comment = getJavaLineComment(line); S s = javaDropComments(line).trim(); e.state = dropPrefix("[", dropSuffix("]", s)).trim(); } entries.add(e); } ret entries; }