1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- var List = require('../utils/list');
- var Tokenizer = require('../tokenizer');
- var Lexer = require('../lexer/Lexer');
- var grammar = require('../lexer/grammar');
- 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 assign(dest, src) {
- for (var key in src) {
- dest[key] = src[key];
- }
- return dest;
- }
- function createSyntax(config) {
- var parse = createParser(config);
- var walk = createWalker(config);
- var generate = createGenerator(config);
- var convert = createConvertor(walk);
- var syntax = {
- List: List,
- Tokenizer: Tokenizer,
- Lexer: Lexer,
- vendorPrefix: names.vendorPrefix,
- keyword: names.keyword,
- property: names.property,
- isCustomProperty: names.isCustomProperty,
- grammar: grammar,
- lexer: null,
- createLexer: function(config) {
- return new Lexer(config, syntax, syntax.lexer.structure);
- },
- parse: parse,
- walk: walk,
- generate: generate,
- 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, assign)
- : mix(base, extension)
- );
- }
- };
- syntax.lexer = new Lexer({
- generic: true,
- types: config.types,
- properties: config.properties,
- node: config.node
- }, syntax);
- return syntax;
- };
- exports.create = function(config) {
- return createSyntax(mix({}, config));
- };
|