Skip to content

Commit 0afc2ec

Browse files
committed
Fixed the bug when deciding the argument name for positional arguments.
1 parent cb381fe commit 0afc2ec

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

MwParserFromScratch/Nodes/TemplateArgumentCollection.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,18 @@ internal TemplateArgumentCollection(Node owner) : base(owner)
2222

2323
private IEnumerable<KeyValuePair<string, TemplateArgument>> EnumNameArgumentPairs(bool reverse)
2424
{
25-
int index = 1; // for positional arguments
25+
int index = this.Count(arg => arg.Name == null); // for positional arguments
2626
foreach (var arg in reverse ? Reverse() : this)
2727
{
2828
if (arg.Name == null)
2929
{
3030
yield return new KeyValuePair<string, TemplateArgument>(index.ToString(), arg);
31-
index++;
31+
index--;
3232
}
3333
else
3434
{
35-
yield return new KeyValuePair<string, TemplateArgument>(MwParserUtility.NormalizeTemplateArgumentName(arg.Name), arg);
35+
yield return new KeyValuePair<string, TemplateArgument>(
36+
MwParserUtility.NormalizeTemplateArgumentName(arg.Name), arg);
3637
}
3738
}
3839
}

UnitTestProject1/NodeTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,16 @@ public void EnumDescendantsTest()
3131
}
3232

3333
[TestMethod]
34-
public void TemplateArgumentsTest()
34+
public void TemplateArgumentsTest1()
35+
{
36+
var root = Utility.ParseWikitext("{{test|a|b}}");
37+
var t = root.EnumDescendants().OfType<Template>().First();
38+
Assert.AreEqual("a", t.Arguments[1].ToString());
39+
Assert.AreEqual("b", t.Arguments[2].ToString());
40+
}
41+
42+
[TestMethod]
43+
public void TemplateArgumentsTest2()
3544
{
3645
var root = Utility.ParseWikitext("{{\ttest_T |A=1|B=2| c\n=3}}");
3746
var t = root.EnumDescendants().OfType<Template>().First();

0 commit comments

Comments
 (0)