Esempio n. 1
0
        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));
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 5
0
        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());
        }