private IEnumerable <KeyValuePair <string, TemplateArgument> > EnumNameArgumentPairs(bool reverse) { int unnamedCounter = reverse ? this.Count(arg => arg.Name == null) : 1; // for positional arguments foreach (var arg in reverse ? Reverse() : this) { if (arg.Name == null) { yield return(new KeyValuePair <string, TemplateArgument>(unnamedCounter.ToString(), arg)); if (reverse) { unnamedCounter--; } else { unnamedCounter++; } } else { yield return(new KeyValuePair <string, TemplateArgument>( MwParserUtility.NormalizeTemplateArgumentName(arg.Name), arg)); } } }
public static string ArgumentName(this TemplateArgument arg) { if (arg.Name != null) { return(MwParserUtility.NormalizeTemplateArgumentName(arg.Name)); } var parent = arg.ParentNode as Template; if (parent == null) { return(null); } var unnamedCt = 0; foreach (var a in parent.Arguments) { if (a.Name == null) { unnamedCt++; } if (a == arg) { return(unnamedCt.ToString()); } } return(null); }
private static string WikiArgumentMd(Node node) { var text = node?.ToPlainText(); if (string.IsNullOrEmpty(text)) { return("…"); } return(EscapeMd(MwParserUtility.NormalizeTemplateArgumentName(node))); }
public void TemplateArgumentsTest2() { var root = ParseWikitext("{{\ttest_T |A=1|B=2| c\n=3}}"); var t = root.EnumDescendants().OfType <Template>().First(); var arg2 = t.Arguments.ElementAt(2); Assert.Equal("Test T", MwParserUtility.NormalizeTitle(t.Name)); Assert.Equal("c", MwParserUtility.NormalizeTemplateArgumentName(arg2.Name)); t.Arguments["B"].Remove(); Assert.Equal(2, t.Arguments.Count); Assert.Equal(arg2, t.Arguments.ElementAt(1)); }
static void SimpleDemo() { // Fills the missing template parameters. var parser = new WikitextParser(); var templateNames = new [] { "Expand section", "Cleanup" }; var text = @"==Hello==<!--comment--> {{Expand section| date=2010-10-05 }} {{Cleanup}} This is a nice '''paragraph'''. ==References== {{Reflist}} "; var ast = parser.Parse(text); // Convert the code snippets to nodes var dateName = parser.Parse("date"); var dateValue = parser.Parse(DateTime.Now.ToString("yyyy-MM-dd")); Console.WriteLine("Issues:"); // Search and set foreach (var t in ast.EnumDescendants().OfType <Template>() .Where(t => templateNames.Contains(MwParserUtility.NormalizeTemplateArgumentName(t.Name)))) { // Get the argument by name. var date = t.Arguments["date"]; if (date != null) { // To print the wikitext instead of user-friendly text, use ToString() Console.WriteLine("{0} ({1})", t.Name.ToPlainText(), date.Value.ToPlainText()); } // Update/Add the argument t.Arguments.SetValue(dateName, dateValue); } Console.WriteLine(); Console.WriteLine("Wikitext:"); Console.WriteLine(ast.ToString()); }