From 8a5f96d27e87438fb25aa336e2f51d9d17788c5e Mon Sep 17 00:00:00 2001 From: Prince Jain Date: Tue, 20 Oct 2026 10:27:26 +0530 Subject: [PATCH] fix(lexer): accept identifiers that start with digits --- .../jknack/handlebars/internal/HbsLexer.g4 | 2 + .../jknack/handlebars/issues/Issue1078.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue1078.java diff --git a/handlebars/src/main/antlr4/com/github/jknack/handlebars/internal/HbsLexer.g4 b/handlebars/src/main/antlr4/com/github/jknack/handlebars/internal/HbsLexer.g4 index bc6727a7b..ef1127dd7 100644 --- a/handlebars/src/main/antlr4/com/github/jknack/handlebars/internal/HbsLexer.g4 +++ b/handlebars/src/main/antlr4/com/github/jknack/handlebars/internal/HbsLexer.g4 @@ -334,6 +334,8 @@ ID : ID_START ID_SUFFIX* | ID_ESCAPE ID_SUFFIX* + // digit-leading identifiers such as 24Hr, which handlebars.js accepts + | [0-9]+ ID_START ID_SUFFIX* ; fragment diff --git a/handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue1078.java b/handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue1078.java new file mode 100644 index 000000000..fbf0c8b2d --- /dev/null +++ b/handlebars/src/test/java/com/github/jknack/handlebars/issues/Issue1078.java @@ -0,0 +1,37 @@ +/* + * Handlebars.java: https://github.com/jknack/handlebars.java + * Apache License Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 + * Copyright (c) 2012 Edgar Espina + */ +package com.github.jknack.handlebars.issues; + +import java.io.IOException; + +import org.junit.jupiter.api.Test; + +import com.github.jknack.handlebars.v4Test; + +public class Issue1078 extends v4Test { + + @Test + public void shouldResolveIdentifiersThatStartWithDigits() throws IOException { + shouldCompileTo( + "

{{24HrServicePh}}

", + $("hash", $("24HrServicePh", "1-800-000-0000")), + "

1-800-000-0000

"); + } + + @Test + public void shouldResolveDigitLeadingIdentifiersInBlocks() throws IOException { + shouldCompileTo( + "{{#if 24Hr}}yes{{/if}}", $("hash", $("24Hr", true)), "yes"); + } + + @Test + public void shouldStillParseNumericLiteralsAsParameters() throws IOException { + shouldCompileTo( + "{{foo 24}} {{foo 24.5}}", + $("helpers", $("foo", "ok")), + "ok ok"); + } +}