| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import { tokenize } from '../tokenizer/index.js';
- import { createParser } from '../parser/create.js';
- import { createGenerator } from '../generator/create.js';
- import { createConvertor } from '../convertor/create.js';
- import { createWalker } from '../walker/create.js';
- import { Lexer } from '../lexer/Lexer.js';
- import mix from './config/mix.js';
- function createSyntax(config) {
- const parse = createParser(config);
- const walk = createWalker(config);
- const generate = createGenerator(config);
- const { fromPlainObject, toPlainObject } = createConvertor(walk);
- const syntax = {
- lexer: null,
- createLexer: config => new Lexer(config, syntax, syntax.lexer.structure),
- tokenize,
- parse,
- generate,
- walk,
- find: walk.find,
- findLast: walk.findLast,
- findAll: walk.findAll,
- fromPlainObject,
- toPlainObject,
- fork(extension) {
- const base = mix({}, config); // copy of config
- return createSyntax(
- typeof extension === 'function'
- ? extension(base) // TODO: remove Object.assign as second parameter
- : mix(base, extension)
- );
- }
- };
- syntax.lexer = new Lexer({
- generic: config.generic,
- cssWideKeywords: config.cssWideKeywords,
- units: config.units,
- types: config.types,
- atrules: config.atrules,
- properties: config.properties,
- node: config.node
- }, syntax);
- return syntax;
- };
- export default config => createSyntax(mix({}, config));
|