stylelint-bundle-worker.js
function(type, openRegex, closeRegex, fn) {
    this.sets[type] = this.sets[type] || [];

    /**
     * Open
     */

    this.set(type + '.open', function() {
      var parsed = this.parsed;
      var pos = this.position();
      var m = this.match(openRegex);
      if (!m || !m[0]) return;

      var val = m[0];
      this.setCount++;
      this.specialChars = true;
      var open = pos({
        type: type + '.open',
        val: val,
        rest: this.input
      });

      if (typeof m[1] !== 'undefined') {
        open.inner = m[1];
      }

      var prev = this.prev();
      var node = pos({
        type: type,
        nodes: [open]
      });

      define(node, 'rest', this.input);
      define(node, 'parsed', parsed);
      define(node, 'prefix', m[1]);
      define(node, 'parent', prev);
      define(open, 'parent', node);

      if (typeof fn === 'function') {
        fn.call(this, open, node);
      }

      this.push(type, node);
      prev.nodes.push(node);
    });

    /**
     * Close
     */

    this.set(type + '.close', function() {
      var pos = this.position();
      var m = this.match(closeRegex);
      if (!m || !m[0]) return;

      var parent = this.pop(type);
      var node = pos({
        type: type + '.close',
        rest: this.input,
        suffix: m[1],
        val: m[0]
      });

      if (!this.isType(parent, type)) {
        if (this.options.strict) {
          throw new Error('missing opening "' + type + '"');
        }

        this.setCount--;
        node.escaped = true;
        return node;
      }

      if (node.suffix === '\\') {
        parent.escaped = true;
        node.escaped = true;
      }

      parent.nodes.push(node);
      define(node, 'parent', parent);
    });

    return this;
  }
function(type, openRegex, closeRegex, fn) {
    this.sets[type] = this.sets[type] || [];

    /**
     * Open
     */

    this.set(type + '.open', function() {
      var parsed = this.parsed;
      var pos = this.position();
      var m = this.match(openRegex);
      if (!m || !m[0]) return;

      var val = m[0];
      this.setCount++;
      this.specialChars = true;
      var open = pos({
        type: type + '.open',
        val: val,
        rest: this.input
      });

      if (typeof m[1] !== 'undefined') {
        open.inner = m[1];
      }

      var prev = this.prev();
      var node = pos({
        type: type,
        nodes: [open]
      });

      define(node, 'rest', this.input);
      define(node, 'parsed', parsed);
      define(node, 'prefix', m[1]);
      define(node, 'parent', prev);
      define(open, 'parent', node);

      if (typeof fn === 'function') {
        fn.call(this, open, node);
      }

      this.push(type, node);
      prev.nodes.push(node);
    });

    /**
     * Close
     */

    this.set(type + '.close', function() {
      var pos = this.position();
      var m = this.match(closeRegex);
      if (!m || !m[0]) return;

      var parent = this.pop(type);
      var node = pos({
        type: type + '.close',
        rest: this.input,
        suffix: m[1],
        val: m[0]
      });

      if (!this.isType(parent, type)) {
        if (this.options.strict) {
          throw new Error('missing opening "' + type + '"');
        }

        this.setCount--;
        node.escaped = true;
        return node;
      }

      if (node.suffix === '\\') {
        parent.escaped = true;
        node.escaped = true;
      }

      parent.nodes.push(node);
      define(node, 'parent', parent);
    });

    return this;
  }
function ( type , openRegex , closeRegex , fn ) { this . sets [ type ] = this . sets [ type ] || [ ] ; /**
     * Open
     */ this . set ( type + '.open' , function ( ) { var parsed = this . parsed ; var pos = this . position ( ) ; var m = this . match ( openRegex ) ; if ( ! m || ! m [ 0 ] ) return ; var val = m [ 0 ] ; this . setCount ++ ; this . specialChars = true ; var open = pos ( { type : type + '.open' , val : val , rest : this . input } ) ; if ( typeof m [ 1 ] !== 'undefined' ) { open . inner = m [ 1 ] ; } var prev = this . prev ( ) ; var node = pos ( { type : type , nodes : [ open ] } ) ; define ( node , 'rest' , this . input ) ; define ( node , 'parsed' , parsed ) ; define ( node , 'prefix' , m [ 1 ] ) ; define ( node , 'parent' , prev ) ; define ( open , 'parent' , node ) ; if ( typeof fn === 'function' ) { fn . call ( this , open , node ) ; } this . push ( type , node ) ; prev . nodes . push ( node ) ; } ) ; /**
     * Close
     */ this . set ( type + '.close' , function ( ) { var pos = this . position ( ) ; var m = this . match ( closeRegex ) ; if ( ! m || ! m [ 0 ] ) return ; var parent = this . pop ( type ) ; var node = pos ( { type : type + '.close' , rest : this . input , suffix : m [ 1 ] , val : m [ 0 ] } ) ; if ( ! this . isType ( parent , type ) ) { if ( this . options . strict ) { throw new Error ( 'missing opening "' + type + '"' ) ; } this . setCount -- ; node . escaped = true ; return node ; } if ( node . suffix === '\\' ) { parent . escaped = true ; node . escaped = true ; } parent . nodes . push ( node ) ; define ( node , 'parent' , parent ) ; } ) ; return this ; }
Create a parser with open and close for parens,
brackets or braces
Create a parser with open and close for parens brackets or braces