sbool mmo_match_parsedPattern(MMOPattern pattern, S s) { S s2 = trim(s); if (pattern == null) false; if (pattern cast MMOPattern.Phrase) { S p = pattern.phrase; ret startsWith(p, "#") ? eqic(p, s2) : find3(p, s2); } if (pattern cast MMOPattern.And) ret all(pattern.l, pat -> mmo_match_parsedPattern(pat, s2)); if (pattern cast MMOPattern.Or) ret any(pattern.l, pat -> mmo_match_parsedPattern(pat, s2)); if (pattern cast MMOPattern.Not) ret !mmo_match_parsedPattern(pattern.p, s2); fail("what. " + pattern); } sbool mmo_match_parsedPattern(S pattern, S s) { ret mmo_match_parsedPattern(mmo_parsePattern(pattern), s); }