mirror of https://github.com/sveltejs/svelte
parent
66b64e254d
commit
a85b09ea97
@ -0,0 +1,10 @@
|
|||||||
|
// Adapted from https://github.com/acornjs/acorn/blob/6584815dca7440e00de841d1dad152302fdd7ca5/src/tokenize.js
|
||||||
|
// Reproduced under MIT License https://github.com/acornjs/acorn/blob/master/LICENSE
|
||||||
|
|
||||||
|
export default function fullCharCodeAt(str: string, i: number): number {
|
||||||
|
let code = str.charCodeAt(i)
|
||||||
|
if (code <= 0xd7ff || code >= 0xe000) return code;
|
||||||
|
|
||||||
|
let next = str.charCodeAt(i + 1);
|
||||||
|
return (code << 10) + next - 0x35fdc00;
|
||||||
|
}
|
@ -1,10 +1,14 @@
|
|||||||
import { isIdentifierStart, isIdentifierChar } from 'acorn';
|
import { isIdentifierStart, isIdentifierChar } from 'acorn';
|
||||||
|
import fullCharCodeAt from './fullCharCodeAt';
|
||||||
|
|
||||||
export default function isValidIdentifier(str: string): boolean {
|
export default function isValidIdentifier(str: string): boolean {
|
||||||
if (!isIdentifierStart(str.charCodeAt(0), true)) return false;
|
let i = 0;
|
||||||
|
|
||||||
for (let i = 0; i < str.length; i += 1) {
|
while (i < str.length) {
|
||||||
if (!isIdentifierChar(str.charCodeAt(i), true)) return false;
|
const code = fullCharCodeAt(str, i);
|
||||||
|
if (!(i === 0 ? isIdentifierStart : isIdentifierChar)(code, true)) return false;
|
||||||
|
|
||||||
|
i += code <= 0xffff ? 1 : 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
{{#each things as 𐊧}}
|
||||||
|
<p>𐊧</p>
|
||||||
|
{{/each}}
|
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"hash": 2991613308,
|
||||||
|
"html": {
|
||||||
|
"start": 0,
|
||||||
|
"end": 43,
|
||||||
|
"type": "Fragment",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"start": 0,
|
||||||
|
"end": 43,
|
||||||
|
"type": "EachBlock",
|
||||||
|
"expression": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start": 8,
|
||||||
|
"end": 14,
|
||||||
|
"name": "things"
|
||||||
|
},
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"start": 24,
|
||||||
|
"end": 33,
|
||||||
|
"type": "Element",
|
||||||
|
"name": "p",
|
||||||
|
"attributes": [],
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"start": 27,
|
||||||
|
"end": 29,
|
||||||
|
"type": "Text",
|
||||||
|
"data": "𐊧"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"context": "𐊧"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"css": null,
|
||||||
|
"js": null
|
||||||
|
}
|
Loading…
Reference in new issue