sS englishToConceptLanguage_xyz(S s, O preprocess) { assertNotNull("Input", s); s = postProcess(preprocess, s); Map concepts = aiConceptsMap_cached(); new Matches m; for (AIConcept c : values(concepts)) { if (empty(c.name)) { print("Warning, empty name: " + c.globalID); continue; } S name = postProcess(preprocess, c.name); L tok = javaTokC(name); int iX = tok.indexOf("X"); if (iX >= 0) { int iY = tok.indexOf("Y"); if (iY >= 0) { S pat = formatXYZ(name, "*", "*"); bool complicated = jfind(pat, "X Y"); if (complicate ? jmatch(pat, s, m) : flexMatchIC(pat, s, m)) { assertEquals(name, 2, l(m.m)); S a = englishToConceptLanguage_xyz_sub($1); S b = englishToConceptLanguage_xyz_sub($2); ret c.globalID + " " + (iX < iY ? a + " " + b : b + " " + a); } } else { S pat = formatXYZ(name, "*"); if (flexMatchIC(pat, s, m)) { assertEquals(name, 1, l(m.m)); S a = englishToConceptLanguage_xyz_sub($1); ret c.globalID + " " + a; } } } } null; } sS englishToConceptLanguage_xyz_sub(S s) { ret conceptQuote(or2(englishToConceptLanguage(s), s)); }