code: function Theme(file, options) {
          options = options || {};
          var fileName = file.name;
  
          // If no options.name is provided, then we derive the name of the theme from whichever we find
          // first, the options.title or the filename.
          if (!options.name) {
              if (options.title) {
                  options.name = options.title;
              } else {
                  // Remove the file extension when the filename is used as the theme name. This is to
                  // follow CodeMirror conventions where themes are just a CSS file and the filename
                  // (without the extension) is used to build CSS rules.  Also handle removing .min
                  // in case the ".min" is part of the file name.
                  options.name = FileUtils.getFilenameWithoutExtension(fileName).replace(/\.min$/, "");
              }
  
              // We do a bit of string treatment here to make sure we generate theme names that can be
              // used as a CSS class name by CodeMirror.
              options.name = options.name.toLocaleLowerCase().replace(/[\W]/g, '-');
          }
  
          this.file           = file;
          this.name           = options.name;
          this.displayName    = options.title || toDisplayName(fileName);
          this.dark           = options.theme !== undefined && options.theme.dark === true;
          this.addModeClass   = options.theme !== undefined && options.theme.addModeClass === true;
      }
docs: @constructor
  Theme contains all the essential bit to load a theme from disk, display a theme in the settings
  dialog, and to properly add a theme into CodeMirror along with the rest of brackets.
  
  @param {File} file for the theme
  @param {{name: string, title: string}} options to configure different
  properties in the theme