diff --git a/src/parser/htmlScanner.ts b/src/parser/htmlScanner.ts
index 80f45db..69cf50c 100644
--- a/src/parser/htmlScanner.ts
+++ b/src/parser/htmlScanner.ts
@@ -172,7 +172,7 @@ export function createScanner(input: string, initialOffset = 0, initialState: Sc
let lastTypeValue: string | undefined;
function nextElementName(): string {
- return stream.advanceIfRegExp(/^[_:\w][_:\w-.\d]*/).toLowerCase();
+ return stream.advanceIfRegExp(/^[_:\w][_:\w.\d-]*/).toLowerCase();
}
function nextAttributeName(): string {
diff --git a/src/test/scanner.test.ts b/src/test/scanner.test.ts
index 93b2558..0928a12 100644
--- a/src/test/scanner.test.ts
+++ b/src/test/scanner.test.ts
@@ -831,4 +831,49 @@ suite('HTML Scanner', () => {
}]);
});
+ test('Tag with Hyphenated Name (Vue custom element)', () => {
+ assertTokens([{
+ input: 'content',
+ tokens: [
+ { offset: 0, type: TokenType.StartTagOpen },
+ { offset: 1, type: TokenType.StartTag, content: 's-c-feature' },
+ { offset: 12, type: TokenType.StartTagClose },
+ { offset: 13, type: TokenType.Content },
+ { offset: 20, type: TokenType.EndTagOpen },
+ { offset: 22, type: TokenType.EndTag, content: 's-c-feature' },
+ { offset: 33, type: TokenType.EndTagClose }
+ ]
+ }
+ ]);
+ });
+
+ test('Self-closing Tag with Hyphenated Name', () => {
+ assertTokens([{
+ input: '',
+ tokens: [
+ { offset: 0, type: TokenType.StartTagOpen },
+ { offset: 1, type: TokenType.StartTag, content: 'my-component' },
+ { offset: 13, type: TokenType.Whitespace },
+ { offset: 14, type: TokenType.StartTagSelfClose }
+ ]
+ }
+ ]);
+ });
+
+ test('Tag with Hyphenated Name and Attributes', () => {
+ assertTokens([{
+ input: '',
+ tokens: [
+ { offset: 0, type: TokenType.StartTagOpen },
+ { offset: 1, type: TokenType.StartTag, content: 'el-button' },
+ { offset: 10, type: TokenType.Whitespace },
+ { offset: 11, type: TokenType.AttributeName },
+ { offset: 15, type: TokenType.DelimiterAssign },
+ { offset: 16, type: TokenType.AttributeValue },
+ { offset: 25, type: TokenType.StartTagClose }
+ ]
+ }
+ ]);
+ });
+
});
\ No newline at end of file