public static void InsertCode <T>(this ICodeBuilder codeBuilder, string code, Tag <T> tag, T conceptInfo) where T : IConceptInfo { string code1 = code; string code2 = code; if (!string.IsNullOrEmpty(tag.FirstEvaluationContext)) { code1 = string.Format(CultureInfo.InvariantCulture, tag.FirstEvaluationContext, code); } if (!string.IsNullOrEmpty(tag.NextEvaluationContext)) { code2 = string.Format(CultureInfo.InvariantCulture, tag.NextEvaluationContext, code); } var conceptInfoKeyProperties = conceptInfo.GetKeyProperties(); string tagPattern = string.Format(CultureInfo.InvariantCulture, tag.Format, conceptInfoKeyProperties); if (tag.TagType == TagType.Single) { codeBuilder.ReplaceCode(code1, tagPattern); } else if (tag.NextFormat == null) { codeBuilder.InsertCode(code1, tagPattern, tag.TagType == TagType.Reverse); } else { string nextTagPattern = string.Format(CultureInfo.InvariantCulture, tag.NextFormat, conceptInfoKeyProperties); codeBuilder.InsertCode(code1, code2, tagPattern, nextTagPattern, tag.TagType == TagType.Reverse); } }