| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | var List = require('../common/List');var SyntaxError = require('../common/SyntaxError');var TokenStream = require('../common/TokenStream');var Lexer = require('../lexer/Lexer');var definitionSyntax = require('../definition-syntax');var tokenize = require('../tokenizer');var createParser = require('../parser/create');var createGenerator = require('../generator/create');var createConvertor = require('../convertor/create');var createWalker = require('../walker/create');var clone = require('../utils/clone');var names = require('../utils/names');var mix = require('./config/mix');function createSyntax(config) {    var parse = createParser(config);    var walk = createWalker(config);    var generate = createGenerator(config);    var convert = createConvertor(walk);    var syntax = {        List: List,        SyntaxError: SyntaxError,        TokenStream: TokenStream,        Lexer: Lexer,        vendorPrefix: names.vendorPrefix,        keyword: names.keyword,        property: names.property,        isCustomProperty: names.isCustomProperty,        definitionSyntax: definitionSyntax,        lexer: null,        createLexer: function(config) {            return new Lexer(config, syntax, syntax.lexer.structure);        },        tokenize: tokenize,        parse: parse,        walk: walk,        generate: generate,        find: walk.find,        findLast: walk.findLast,        findAll: walk.findAll,        clone: clone,        fromPlainObject: convert.fromPlainObject,        toPlainObject: convert.toPlainObject,        createSyntax: function(config) {            return createSyntax(mix({}, config));        },        fork: function(extension) {            var base = mix({}, config); // copy of config            return createSyntax(                typeof extension === 'function'                    ? extension(base, Object.assign)                    : mix(base, extension)            );        }    };    syntax.lexer = new Lexer({        generic: true,        types: config.types,        atrules: config.atrules,        properties: config.properties,        node: config.node    }, syntax);    return syntax;};exports.create = function(config) {    return createSyntax(mix({}, config));};
 |