private string DewikifyLinkIn(string pageIn, string linkToDewikify, ParserUtils parser) { var links = ParserUtils.FindLinksTo(pageIn, linkToDewikify); var found = new List <WikiLink>(); var isDisambig = parser.FindTemplates(pageIn, DisambigTemplateName).Any() || parser.FindTemplates(pageIn, NamesakeListTemplateName).Any(); foreach (var link in links.ToArray()) { if (isDisambig || GetSectionName(links, link) == SeeAlsoSectionName) { found.Add(link); // whole line will be removed later (see below) } else { links.Update(link, link.Text ?? link.Link); } } var text = links.Text; // now removing whole lines return(text.Remove(found.Select(x => ParserUtils.GetWholeLineAt(links, x)).Distinct())); }
private string RemoveTransclusionsIn(string pageIn, string templateName, ParserUtils parser) { var templates = parser.FindTemplates(pageIn, templateName, false); foreach (var template in templates.ToArray()) { templates.Update(template, ""); } var text = templates.Text; var emptyLines = templates .Select(t => ParserUtils.GetWholeLineAt(templates, t)) .Where(r => r.Get(text).Trim() == ""); return(text.Remove(emptyLines)); }
private static async Task UpdateTemplate(MediaWiki wiki, UserInfo user, string title, string page, JObject settings) { var template = new Template { Name = settings.Value <string>("name") }; var args = settings.Value <JArray>("args"); foreach (var arg in args.Values <JObject>()) { foreach (var prop in arg.Properties()) { prop.Value = prop.Value.Value <string>().Replace("%user.name%", user.Username); } template.Args.Add(arg.ToObject <Template.Argument>()); } var templateString = template + "\n"; if (settings.Value <bool>("talkPage")) { title = "Talk:" + title; page = await wiki.GetPage(title) ?? ""; } var existing = ParserUtils.FindTemplates(page, template.Name); if (existing.Count == 0) { page = page.Insert(0, templateString); } else { var regions = existing.Values.OrderByDescending(r => r.Offset).ToArray(); foreach (var r in regions) { var region = ParserUtils.ExpandToWholeLine(page, r); page = page.Remove(region.Offset, region.Length); } page = page.Insert(regions.Last().Offset, templateString); } await wiki.EditPage(title, page, "Automatically adding template"); }
private static async Task UpdateTemplate(MediaWiki wiki, UserInfo user, string title, string page, TemplateConfig settings, string message) { var template = new Template { Name = settings.Name }; foreach (var arg in settings.Args) { template.Args.Add(new Template.Argument { Name = arg.Name, Value = arg.Value.Replace("%user.name%", user.Username), }); } if (settings.TalkPage) { title = "Talk:" + title; page = await wiki.GetPage(title) ?? ""; } var templateString = template + "\n"; var existing = ParserUtils.FindTemplates(page, template.Name); if (existing.Count == 0) { page = page.Insert(0, templateString); } else { var regions = existing.Values.OrderByDescending(r => r.Offset).ToArray(); foreach (var r in regions) { var region = ParserUtils.ExpandToWholeLine(page, r); page = page.Remove(region.Offset, region.Length); } page = page.Insert(regions.Last().Offset, templateString); } await wiki.EditPage(title, page, message); }