reader.js
function unuse_dialect(dialectName, lexer, options) {
  options = options || {};
  if(dialectName && options.validate &&
    lexer.dialects[0].name !== dialectName)
  {
    lexer.error('Attempt to exit dialect "' + dialectName + '" while "' +
      lexer.dialects[0].name + '" was still active');
  }

  slinfo('removing dialect', dialectName ? ": " + dialectName : "");
  var removedDialect = lexer.pop_dialect(dialectName);
  if(!removedDialect) {
    lexer.error('The dialect ' + (dialectName ? '"' + dialectName + '"': '') +
        ' has never been used');
  }

}
function unuse_dialect(dialectName, lexer, options) {
  options = options || {};
  if(dialectName && options.validate &&
    lexer.dialects[0].name !== dialectName)
  {
    lexer.error('Attempt to exit dialect "' + dialectName + '" while "' +
      lexer.dialects[0].name + '" was still active');
  }

  slinfo('removing dialect', dialectName ? ": " + dialectName : "");
  var removedDialect = lexer.pop_dialect(dialectName);
  if(!removedDialect) {
    lexer.error('The dialect ' + (dialectName ? '"' + dialectName + '"': '') +
        ' has never been used');
  }

}
function unuse_dialect ( dialectName , lexer , options ) { options = options || { } ; if ( dialectName && options . validate && lexer . dialects [ 0 ] . name !== dialectName ) { lexer . error ( 'Attempt to exit dialect "' + dialectName + '" while "' + lexer . dialects [ 0 ] . name + '" was still active' ) ; } slinfo ( 'removing dialect' , dialectName ? ": " + dialectName : "" ) ; var removedDialect = lexer . pop_dialect ( dialectName ) ; if ( ! removedDialect ) { lexer . error ( 'The dialect ' + ( dialectName ? '"' + dialectName + '"' : '' ) + ' has never been used' ) ; } }
stop using a dialect

Whereas "use_dialect" enters the scope of a dialect, "unuse_dialect"
exits that scope.

@params dialectName = the name of the dialect to stop using, or if
undefined the most recent dialect "used" in the one that's "unused"
@params lexer = the lexer for the file being "unused" from.

note:  if options.validate is true, the function will *only* "unuse"
the most recent dialect and it's name must match the name you've
given, otherwise an error is thrown.  This validates that you
haven't (accidentally) failed to "unuse" an inner dialect nested
inside another one, leaving the dialect stack in a different state
than you think.
stop using a dialect