private static void RunPattern(IYateDataContext dataContext, object model, CQ domObjects, IPattern pattern) { //try/finally leaves the data context in the same state as when we started with it hopefully. try { dataContext.PushValue(model); foreach (var domObject in domObjects) { var htmlFragment = CQ.CreateFragment(pattern.HtmlFragment); foreach (var atRule in pattern.AtRules) { atRule.Render(htmlFragment, dataContext); } foreach (var ruleSet in pattern.RuleSets) { ruleSet.Render(htmlFragment, dataContext); } //append those mama jammas foreach(var frag in htmlFragment) { domObject.AppendChild(frag); } } } finally { dataContext.PopValue(); } }