diff --git a/Nustache.Core.Tests/Describe_Helpers.cs b/Nustache.Core.Tests/Describe_Helpers.cs index f7501e0..88b3827 100644 --- a/Nustache.Core.Tests/Describe_Helpers.cs +++ b/Nustache.Core.Tests/Describe_Helpers.cs @@ -1,5 +1,5 @@ -using System.Collections; -using NUnit.Framework; +using NUnit.Framework; +using System.Collections; namespace Nustache.Core.Tests { @@ -72,7 +72,7 @@ public void It_passes_arguments_into_block_helpers() } [Test] - public void It_parses_quoted_arguments_as_literal_strings() + public void It_parses_double_quoted_arguments_as_literal_strings() { Helpers.Register("link", (ctx, args, opts, fn, inverse) => ctx.Write(string.Format("{1}", args[1], args[0]))); @@ -81,6 +81,16 @@ public void It_parses_quoted_arguments_as_literal_strings() Assert.AreEqual("TEXT", result); } + [Test] + public void It_parses_single_quoted_arguments_as_literal_strings() + { + Helpers.Register("link", (ctx, args, opts, fn, inverse) => ctx.Write(string.Format("{1}", args[1], args[0]))); + + var result = Render.StringToString("{{link 'TEXT' 'URL'}}", new {}); + + Assert.AreEqual("TEXT", result); + } + [Test] public void It_parses_quoted_options_as_literal_strings() { @@ -91,6 +101,16 @@ public void It_parses_quoted_options_as_literal_strings() Assert.AreEqual("TEXT", result); } + [Test] + public void It_parses_quoted_options_with_spaces_as_literal_strings() + { + Helpers.Register("link", (ctx, args, opts, fn, inverse) => ctx.Write(string.Format("{1}", opts["url"], opts["text"]))); + + var result = Render.StringToString("{{link text=\"ANCHOR TEXT\" url=\"URL\"}}", new { }); + + Assert.AreEqual("ANCHOR TEXT", result); + } + [Test] public void It_registers_each_by_default() { diff --git a/Nustache.Core/Helpers.cs b/Nustache.Core/Helpers.cs index fd07f93..9fbaa83 100644 --- a/Nustache.Core/Helpers.cs +++ b/Nustache.Core/Helpers.cs @@ -1,6 +1,6 @@ -using System; -using System.Collections; +using System.Collections; using System.Collections.Generic; +using System.Text.RegularExpressions; namespace Nustache.Core { @@ -43,7 +43,7 @@ static Helpers() public static void EachHelper(RenderContext context, IList arguments, IDictionary options, RenderBlock fn, RenderBlock inverse) { - foreach (var item in (IEnumerable) arguments[0]) + foreach (var item in (IEnumerable)arguments[0]) { fn(item); } @@ -73,6 +73,18 @@ public static void WithHelper(RenderContext context, IList arguments, ID fn(arguments[0]); } + private static IEnumerable ExtractCaptureValues(MatchCollection matches, string groupName) + { + foreach (var match in matches) + { + var m = match as Match; + if (m.Groups[groupName].Captures.Count != 0) + { + yield return m.Value; + } + } + } + public static void Parse(RenderContext ctx, string path, out string name, out IList arguments, out IDictionary options) { name = path; @@ -81,57 +93,59 @@ public static void Parse(RenderContext ctx, string path, out string name, out IL if (path.Contains(" ")) { - var splits = path.Split(); - name = splits[0]; - ParseArguments(ctx, splits, out arguments); - ParseOptions(ctx, splits, out options); + // unescaped: (?