function registerLangHandler(handler, fileExtensions) {
    for (var i = fileExtensions.length; --i >= 0;) {
      var ext = fileExtensions[i];
      if (!langHandlerRegistry.hasOwnProperty(ext)) {
        langHandlerRegistry[ext] = handler;
      } else if (win['console']) {
        console['warn']('cannot override language handler %s', ext);
      }
    }
  }
function registerLangHandler(handler, fileExtensions) {
    for (var i = fileExtensions.length; --i >= 0;) {
      var ext = fileExtensions[i];
      if (!langHandlerRegistry.hasOwnProperty(ext)) {
        langHandlerRegistry[ext] = handler;
      } else if (win['console']) {
        console['warn']('cannot override language handler %s', ext);
      }
    }
  }
function registerLangHandler ( handler , fileExtensions ) { for ( var i = fileExtensions . length ; -- i >= 0 ; ) { var ext = fileExtensions [ i ] ; if ( ! langHandlerRegistry . hasOwnProperty ( ext ) ) { langHandlerRegistry [ ext ] = handler ; } else if ( win [ 'console' ] ) { console [ 'warn' ] ( 'cannot override language handler %s' , ext ) ; } } }
Register a language handler for the given file extensions.
@param {function (JobT)} handler a function from source code to a list
of decorations.  Takes a single argument job which describes the
state of the computation and attaches the decorations to it.
@param {Array.<string>} fileExtensions
Register a language handler for the given file extensions .
Register a language handler for a file extension