diff options
Diffstat (limited to 'vanilla/node_modules/css-tree/lib/syntax/create.js')
| -rw-r--r-- | vanilla/node_modules/css-tree/lib/syntax/create.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/vanilla/node_modules/css-tree/lib/syntax/create.js b/vanilla/node_modules/css-tree/lib/syntax/create.js new file mode 100644 index 0000000..9bb32c5 --- /dev/null +++ b/vanilla/node_modules/css-tree/lib/syntax/create.js @@ -0,0 +1,55 @@ +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)); |
