| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { tokenize } from '../tokenizer/index.js';
- const astToTokens = {
- decorator(handlers) {
- const tokens = [];
- let curNode = null;
- return {
- ...handlers,
- node(node) {
- const tmp = curNode;
- curNode = node;
- handlers.node.call(this, node);
- curNode = tmp;
- },
- emit(value, type, auto) {
- tokens.push({
- type,
- value,
- node: auto ? null : curNode
- });
- },
- result() {
- return tokens;
- }
- };
- }
- };
- function stringToTokens(str) {
- const tokens = [];
- tokenize(str, (type, start, end) =>
- tokens.push({
- type,
- value: str.slice(start, end),
- node: null
- })
- );
- return tokens;
- }
- export default function(value, syntax) {
- if (typeof value === 'string') {
- return stringToTokens(value);
- }
- return syntax.generate(value, astToTokens);
- };
|