svoid gazelle_splitMultiRule(S ruleID) { PairS p = dm_textAndCommentForRule(ruleID); if (p == null || !cic(p.b, "multi-rule")) ret; LPair lines = ai_findDoubleArrowRulesAsPairs(p.a); S extractedComment = "extracted from multi-rule " + ruleID; L rules = dm_gazelle_allRulesWithComment(extractedComment); LS allComments = withoutStartingWithIC(tlft(p.b), "deployed as rule "); S commentsForDeployed = lines_rtrim(listPlus(listMinus(allComments, "multi-rule"), extractedComment)); Set textsNeeded = asSet(mapPairsToList gazelle_constructRuleText(lines)); new LS deployed; for (T3S t : rules) if (!textsNeeded.remove(t.a)) gazelle_deleteRule(t.c); else { gazelle_setRuleComment(t.c, commentsForDeployed); deployed.add(t.c); } for (S text : textsNeeded) deployed.add(dm_gazelle_addRuleWithComment(text, commentsForDeployed).a); for (S deployedID : deployed) allComments.add("deployed as rule " + deployedID); gazelle_setRuleComment(ruleID, allComments); }