78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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));
 | 
						|
};
 |