You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.6 KiB
56 lines
1.6 KiB
'use strict'; |
|
|
|
const index = require('../tokenizer/index.cjs'); |
|
const create = require('../parser/create.cjs'); |
|
const create$2 = require('../generator/create.cjs'); |
|
const create$3 = require('../convertor/create.cjs'); |
|
const create$1 = require('../walker/create.cjs'); |
|
const Lexer = require('../lexer/Lexer.cjs'); |
|
const mix = require('./config/mix.cjs'); |
|
|
|
function createSyntax(config) { |
|
const parse = create.createParser(config); |
|
const walk = create$1.createWalker(config); |
|
const generate = create$2.createGenerator(config); |
|
const { fromPlainObject, toPlainObject } = create$3.createConvertor(walk); |
|
|
|
const syntax = { |
|
lexer: null, |
|
createLexer: config => new Lexer.Lexer(config, syntax, syntax.lexer.structure), |
|
|
|
tokenize: index.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, Object.assign) |
|
: mix(base, extension) |
|
); |
|
} |
|
}; |
|
|
|
syntax.lexer = new Lexer.Lexer({ |
|
generic: true, |
|
types: config.types, |
|
atrules: config.atrules, |
|
properties: config.properties, |
|
node: config.node |
|
}, syntax); |
|
|
|
return syntax; |
|
} |
|
const createSyntax$1 = config => createSyntax(mix({}, config)); |
|
|
|
module.exports = createSyntax$1;
|
|
|