static T3 ai_tripelize_howLongEtc(S s) { ret ai_tripelize_howLongEtc(s, ai_tripelize_prepare(s)); } static T3 ai_tripelize_howLongEtc(S s, L tok) { //printStruct(tok); if (eqicGetOneOf(tok, 1, "how", "what")) { // e.g. how long is the string "bla"? int verb = indexOfFirstVerb(tok); S v = get(tok, verb); if (eqicOneOf(v, "does", "do", "have")) { // e.g. How many characters does the string "abcd" contain? int verb2 = indexOfFirstVerbOrPastParticiple(tok, verb+2); if (verb2 >= 0) { S a = v; // helper verb v = get(tok, verb2); print("verb: " + v); S middle = trimJoinSubList(tok, verb+2, verb2); S rest = trimJoinSubList(tok, verb2+1); v = ai_tripelize_helperVerb(a, v); ret t3( middle, dropSuffix("?", v), trim(trimJoinSubList(tok, 0, verb) + " " + rest) + "?"); } } ret t3( trimJoinSubList(tok, verb+1), v, trimJoinSubList(tok, 0, verb) + "?"); } null; }