docs: function getThemeFromPath(dir, program, cb) {
          var configPath = path.resolve(dir, "theme.json");
          program.log(2, constants.LOG_SEV_INFO, "Attempting to read " + configPath);
          fs.readFile(configPath, { encoding: 'utf-8' }, function (err, data) {
              if (err) {
                  program.log(1, constants.LOG_SEV_ERROR, "Error reading " + configPath);
                  return cb(err);
              }
              var config;
              try {
                  config = eval('(' + data + ')');
              } catch (e) {
                  program.log(1, constants.LOG_SEV_ERROR, "Error parsing " + configPath + ".");
                  program.log(2, constants.LOG_SEV_ERROR, "\n\n" + data);
                  return cb(e);
              }
              var themeConf = config.about;
              if (!themeConf) {
                  var errorStr = "No about section found in " + configPath;
                  program.log(1, constants.LOG_SEV_ERROR, errorStr);
                  return cb(new Error(errorStr));
              }
              themeConf.baseDir = dir;
              themeConf.program = program;
              cb(null, new Theme(themeConf));
          });
      }