Skip to content

Commit d6d808d

Browse files
authored
Merge pull request #114 from patricklx/patch-1
allow elements to start with non-alpha chars to align with js vars
2 parents 15b1d6e + 7e385d4 commit d6d808d

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

src/evented-tokenizer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ export default class EventedTokenizer {
170170
this.transitionTo(TokenizerState.markupDeclarationOpen);
171171
} else if (char === '/') {
172172
this.transitionTo(TokenizerState.endTagOpen);
173-
} else if (char === '@' || char === ':' || isAlpha(char)) {
173+
} else if (!isSpace(char)) {
174174
this.transitionTo(TokenizerState.tagName);
175175
this.tagNameBuffer = '';
176176
this.delegate.beginStartTag();
@@ -671,7 +671,7 @@ export default class EventedTokenizer {
671671
endTagOpen() {
672672
let char = this.consume();
673673

674-
if (char === '@' || char === ':' || isAlpha(char)) {
674+
if (!isSpace(char)) {
675675
this.transitionTo(TokenizerState.endTagName);
676676
this.tagNameBuffer = '';
677677
this.delegate.beginEndTag();

tests/tokenizer-tests.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,32 @@ QUnit.test('A simple tag', function(assert) {
169169
assert.deepEqual(tokens, [startTag('div')]);
170170
});
171171

172+
QUnit.test('A simple tag with leading non alpha chars', function(assert) {
173+
let tokens = tokenize('<_div>');
174+
assert.deepEqual(tokens, [startTag('_div')]);
175+
176+
tokens = tokenize('<$div>');
177+
assert.deepEqual(tokens, [startTag('$div')]);
178+
179+
tokens = tokenize('<:div>');
180+
assert.deepEqual(tokens, [startTag(':div')]);
181+
182+
tokens = tokenize('<@div>');
183+
assert.deepEqual(tokens, [startTag('@div')]);
184+
185+
tokens = tokenize('<üdiv>');
186+
assert.deepEqual(tokens, [startTag('üdiv')]);
187+
188+
tokens = tokenize('<€div>');
189+
assert.deepEqual(tokens, [startTag('€div')]);
190+
191+
tokens = tokenize('<div😀>');
192+
assert.deepEqual(tokens, [startTag('div😀')]);
193+
194+
tokens = tokenize('<di😀v>');
195+
assert.deepEqual(tokens, [startTag('di😀v')]);
196+
});
197+
172198
QUnit.test('A simple tag with trailing spaces', function(assert) {
173199
let tokens = tokenize('<div \t\n>');
174200
assert.deepEqual(tokens, [startTag('div')]);
@@ -179,6 +205,32 @@ QUnit.test('A simple closing tag', function(assert) {
179205
assert.deepEqual(tokens, [endTag('div')]);
180206
});
181207

208+
QUnit.test('A simple closing tag with leading non alpha chars', function(assert) {
209+
let tokens = tokenize('</_div>');
210+
assert.deepEqual(tokens, [endTag('_div')]);
211+
212+
tokens = tokenize('</$div>');
213+
assert.deepEqual(tokens, [endTag('$div')]);
214+
215+
tokens = tokenize('</:div>');
216+
assert.deepEqual(tokens, [endTag(':div')]);
217+
218+
tokens = tokenize('</@div>');
219+
assert.deepEqual(tokens, [endTag('@div')]);
220+
221+
tokens = tokenize('</üdiv>');
222+
assert.deepEqual(tokens, [endTag('üdiv')]);
223+
224+
tokens = tokenize('</€div>');
225+
assert.deepEqual(tokens, [endTag('€div')]);
226+
227+
tokens = tokenize('</di😀v>');
228+
assert.deepEqual(tokens, [endTag('di😀v')]);
229+
230+
tokens = tokenize('</div😀>');
231+
assert.deepEqual(tokens, [endTag('div😀')]);
232+
});
233+
182234
QUnit.test('A simple closing tag with trailing spaces', function(assert) {
183235
let tokens = tokenize('</div \t\n>');
184236
assert.deepEqual(tokens, [endTag('div')]);

0 commit comments

Comments
 (0)