Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions source/Handlebars.Test/IssueTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -726,6 +726,20 @@ public void UnrecognisedExpressionThrowsOutOfMemoryException()
Assert.Throws<HandlebarsCompilerException>(()=> Handlebars.Compile(source));
}

// Issue: https://github.com/Handlebars-Net/Handlebars.Net/issues/416
// Non-ASCII characters not supported as the first character of a placeholder identifier
[Fact]
public void Issue416_UnicodeFirstCharacterInIdentifier()
{
var config = new HandlebarsConfiguration { TextEncoder = new HtmlEncoder() };
var handlebars = Handlebars.Create(config);
// Japanese characters as identifiers — first char is non-ASCII
var template = handlebars.Compile("Hello {{姓}} {{名}},");
var data = new Dictionary<string, object> { { "姓", "山田" }, { "名", "太郎" } };
var result = template(data);
Assert.Equal("Hello 山田 太郎,", result);
}

// Issue: https://github.com/Handlebars-Net/Handlebars.Net/issues/545
// Partial registered on an instance should be found during render on that same instance
[Fact]
Expand Down
4 changes: 3 additions & 1 deletion source/Handlebars/Compiler/Lexer/Parsers/WordParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ public override Token Parse(ExtendedStringReader reader)
private static bool IsWord(ExtendedStringReader reader)
{
var peek = reader.Peek();
return ValidWordStartCharacters.Contains((char) peek);
if (peek == -1) return false;
var c = (char) peek;
return ValidWordStartCharacters.Contains(c) || char.IsLetter(c);
}

private static string AccumulateWord(ExtendedStringReader reader)
Expand Down
Loading