code: function (type, updater, supportedLanguages, initializer) {
  		this._elt = null;
  		this._type = type;
  		this._clsRegexp = RegExp('(?:^|\\s)' + type + '(?=$|\\s)');
  		this._token = null;
  		this.updater = updater;
  		this._mouseout = this.mouseout.bind(this);
  		this.initializer = initializer;
  
  		var self = this;
  
  		if (!supportedLanguages) {
  			supportedLanguages = ['*'];
  		}
  		if (!Array.isArray(supportedLanguages)) {
  			supportedLanguages = [supportedLanguages];
  		}
  		supportedLanguages.forEach(function (lang) {
  			if (typeof lang !== 'string') {
  				lang = lang.lang;
  			}
  			if (!Previewer.byLanguages[lang]) {
  				Previewer.byLanguages[lang] = [];
  			}
  			if (Previewer.byLanguages[lang].indexOf(self) < 0) {
  				Previewer.byLanguages[lang].push(self);
  			}
  		});
  		Previewer.byType[type] = this;
  	}
docs: Previewer constructor
  @param {string} type Unique previewer type
  @param {function} updater Function that will be called on mouseover.
  @param {string[]|string=} supportedLanguages Aliases of the languages this previewer must be enabled for. Defaults to "*", all languages.
  @param {function=} initializer Function that will be called on initialization.
  @constructor