svoid gazelle_addDerivedRules(S ruleID, Set transformedTexts, S extractedComment, S comments) { LS allComments = tlft(comments); gazelle_addDerivedRules(ruleID, transformedTexts, extractedComment, "", allComments, allComments); } svoid gazelle_addDerivedRules(S ruleID, Set transformedTexts, S extractedComment, S deployedPrefix, LS allComments, LS coreComments) { Set textsNeeded = cloneSet(transformedTexts); L rules = dm_gazelle_allRulesWithComment(extractedComment); LS coreComments2 = empty(deployedPrefix) ? coreComments : withoutStartingWithIC(coreComments, deployedPrefix); S commentsForDeployed = lines_rtrim(listPlus(coreComments2, extractedComment)); 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); if (nempty(deployedPrefix)) { LS allComments2 = withoutStartingWithIC(allComments, deployedPrefix); for (S deployedID : deployed) allComments2.add(deployedPrefix + deployedID); gazelle_setRuleComment(ruleID, allComments2); } }