public static string ToHtml(this IList <PublicationEntry> entries, PublicationLanguage lang = PublicationLanguage.English) { var builder = new StringBuilder(); var years = entries.Select(it => it.GetYear()).Distinct().OrderByDescending(it => it); foreach (var year in years) { builder.AppendLine($"<h4>{year}</h4>"); var localEntries = entries.WithYear(year); builder.Append(localEntries.WithType(PublicationEntryType.PhdThesis) .ToHtmlSection(Resolve(lang, "Phd thesis", "Диссертационные работы"))); builder.Append(localEntries.WithType(PublicationEntryType.Book) .ToHtmlSection(Resolve(lang, "Books", "Книги"))); builder.Append(localEntries.WithType(PublicationEntryType.Article) .ToHtmlSection(Resolve(lang, "Articles", "Статьи"))); builder.Append(localEntries.WithType(PublicationEntryType.Inproceedings) .ToHtmlSection(Resolve(lang, "Inproceedings", "Тезисы"))); builder.Append(localEntries.WithType(PublicationEntryType.TechReport) .ToHtmlSection(Resolve(lang, "Technical reports", "Технические отчёты"))); } return(builder.ToString()); }
private static string Resolve(PublicationLanguage lang, string en, string ru) => lang == PublicationLanguage.English ? en : ru;
public static string ToToml(this IList <PublicationEntry> entries, PublicationLanguage lang = PublicationLanguage.English) { string culture = lang == PublicationLanguage.English ? "en-us" : "ru-ru"; var builder = new StringBuilder(); builder.AppendLine("Indexer = true"); builder.AppendLine(); var years = entries.Select(it => it.GetYear()).Distinct().OrderByDescending(it => it); int counter = entries.Count; foreach (var year in years) { foreach (var entry in entries.Where(e => e.GetYear() == year)) { builder.AppendLine("[[item]]"); builder.AppendLine($"Group = \"{year}\""); builder.AppendLine($"Html = \"{Util.Escape(entry.ToHtml())}\""); builder.AppendLine($"Index = {counter--}"); builder.AppendLine(" [[item.badge]]"); builder.AppendLine($" Label = \"{entry.GetLanguage().ToString().Substring(0, 2).ToUpper()}\""); builder.AppendLine(" [[item.badge]]"); builder.AppendLine($" Label = \"{entry.Type.ToLabel(culture)}\""); bool isVak = entry.GetKeywords().Contains("Vak"); if (isVak) { builder.AppendLine(" [[item.badge]]"); var label = lang == PublicationLanguage.Russian ? "ВАК" : "VAK"; builder.AppendLine($" Label = \"{label}\""); } var doi = entry.GetDoi(); if (!string.IsNullOrEmpty(doi)) { builder.AppendLine(" [[item.link]]"); builder.AppendLine($" Label = \"DOI\""); builder.AppendLine($" Url = \"http://dx.doi.org/{doi}\""); } foreach (var url in entry.GetUrls()) { var title = Resolve(lang, "Link", "Ссылка"); if (url.EndsWith(".pdf")) { title = "Pdf"; } else if (url.Contains("ieeexplore.ieee.org")) { title = "IEEE"; } else if (url.Contains("apps.webofknowledge.com")) { title = "Web of Science"; } else if (url.Contains("www.scopus.com")) { title = "Scopus"; } else if (url.Contains("elibrary.ru")) { title = Resolve(lang, "RSCI", "РИНЦ"); } else if (url.Contains("mathnet.ru")) { title = "MathNet"; } else if (url.Contains("link.springer.com")) { title = "Springer"; } else if (url.Contains("www.packtpub.com")) { title = "PacktPub"; } else if (url.Contains("conf.nsc.ru") || url.Contains("uni-bielefeld.de") || url.Contains("cmb.molgen.mpg.de") || url.Contains("sites.google.com")) { title = Resolve(lang, "Conference site", "Сайт конференции"); } else if (url.Contains("authorea")) { title = url.Substring(url.IndexOf("authorea.com", StringComparison.Ordinal)) .TrimEnd('/'); } else if (url.Contains("scholar.google.ru")) { title = "Google Scholar"; } builder.AppendLine(" [[item.link]]"); builder.AppendLine($" Label = \"{title}\""); builder.AppendLine($" Url = \"{url}\""); } } } return(builder.ToString()); }