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.
|
|
'use strict';
var nanomatch = require('nanomatch'); var extglob = require('extglob');
module.exports = function(snapdragon) { var compilers = snapdragon.compiler.compilers; var opts = snapdragon.options;
// register nanomatch compilers
snapdragon.use(nanomatch.compilers);
// get references to some specific nanomatch compilers before they
// are overridden by the extglob and/or custom compilers
var escape = compilers.escape; var qmark = compilers.qmark; var slash = compilers.slash; var star = compilers.star; var text = compilers.text; var plus = compilers.plus; var dot = compilers.dot;
// register extglob compilers or escape exglobs if disabled
if (opts.extglob === false || opts.noext === true) { snapdragon.compiler.use(escapeExtglobs); } else { snapdragon.use(extglob.compilers); }
snapdragon.use(function() { this.options.star = this.options.star || function(/*node*/) { return '[^\\\\/]*?'; }; });
// custom micromatch compilers
snapdragon.compiler
// reset referenced compiler
.set('dot', dot) .set('escape', escape) .set('plus', plus) .set('slash', slash) .set('qmark', qmark) .set('star', star) .set('text', text); };
function escapeExtglobs(compiler) { compiler.set('paren', function(node) { var val = ''; visit(node, function(tok) { if (tok.val) val += (/^\W/.test(tok.val) ? '\\' : '') + tok.val; }); return this.emit(val, node); });
/** * Visit `node` with the given `fn` */
function visit(node, fn) { return node.nodes ? mapVisit(node.nodes, fn) : fn(node); }
/** * Map visit over array of `nodes`. */
function mapVisit(nodes, fn) { var len = nodes.length; var idx = -1; while (++idx < len) { visit(nodes[idx], fn); } } }
|