/// <summary> /// Method that cna be override to control how an individual <see cref="SnippetGroup"/> is rendered. /// </summary> public void AppendGroup(SnippetGroup snippetGroup, TextWriter writer) { Guard.AgainstNull(snippetGroup, "snippetGroup"); Guard.AgainstNull(writer, "writer"); foreach (var versionGroup in snippetGroup) { AppendVersionGroup(writer, versionGroup,snippetGroup.Language); } }
static bool TryGetGroup(string key, List<ReadSnippet> readSnippets, out SnippetGroup snippetGroup, out string error) { var requiredLanguage = readSnippets.Select(x => x.Language).First(); if (readSnippets.Any(x => x.Language != requiredLanguage)) { error = $"All languages of a give key must be equivalent. Key='{key}'."; snippetGroup = null; return false; } foreach (var snippet in readSnippets) { var snippetVersion = snippet.Version; var snippets = readSnippets.Where(x => x.Version.Equals(snippetVersion)) .ToList(); if (snippets.Count > 1) { var files = string.Join("\r\n", snippets.Select(x => x.FileLocation)); error = $"Duplicate key detected. Key='{key}'. Version='{snippets.First().Version.PrettyPrint()}'. Files=\r\n{files}"; snippetGroup = null; return false; } } var containsAllVersionRanges = readSnippets.Any(x=>x.Version.Equals(VersionRange.All)); var containsNonAllVersionRanges = readSnippets.Any(x=>!x.Version.Equals(VersionRange.All)); if (containsAllVersionRanges && containsNonAllVersionRanges) { var files = string.Join("\r\n", readSnippets.Select(x => x.FileLocation)); error = $"Cannot mix 'all' versions and specific versions. Key='{key}'. Files=\r\n{files}"; snippetGroup = null; return false; } var keyGroup = ProcessKeyGroup(readSnippets) .OrderByDescending(x => x.Version.VersionForCompare()); snippetGroup = new SnippetGroup( key: key, language: requiredLanguage, versions: keyGroup); error = null; return true; }