/**
   * Set the command line options supported by this configuration.
   *
   * @param options the two dimensional array of options.
   */
  public void setOptions(String[][] options) {
    LinkedHashSet customTagStrs = new LinkedHashSet();
    for (int oi = 0; oi < options.length; ++oi) {
      String[] os = options[oi];
      String opt = os[0].toLowerCase();
      if (opt.equals("-d")) {
        destDirName = addTrailingFileSep(os[1]);
        docFileDestDirName = destDirName;
      } else if (opt.equals("-docfilessubdirs")) {
        copydocfilesubdirs = true;
      } else if (opt.equals("-docencoding")) {
        docencoding = os[1];
      } else if (opt.equals("-encoding")) {
        encoding = os[1];
      } else if (opt.equals("-author")) {
        showauthor = true;
      } else if (opt.equals("-version")) {
        showversion = true;
      } else if (opt.equals("-nodeprecated")) {
        nodeprecated = true;
      } else if (opt.equals("-sourcepath")) {
        sourcepath = os[1];
      } else if (opt.equals("-classpath") && sourcepath.length() == 0) {
        sourcepath = os[1];
      } else if (opt.equals("-excludedocfilessubdir")) {
        addToSet(excludedDocFileDirs, os[1]);
      } else if (opt.equals("-noqualifier")) {
        addToSet(excludedQualifiers, os[1]);
      } else if (opt.equals("-linksource")) {
        linksource = true;
      } else if (opt.equals("-sourcetab")) {
        linksource = true;
        try {
          sourcetab = Integer.parseInt(os[1]);
        } catch (NumberFormatException e) {
          // Set to -1 so that warning will be printed
          // to indicate what is valid argument.
          sourcetab = -1;
        }
        if (sourcetab <= 0) {
          message.warning("doclet.sourcetab_warning");
          sourcetab = DocletConstants.DEFAULT_TAB_STOP_LENGTH;
        }
      } else if (opt.equals("-notimestamp")) {
        notimestamp = true;
      } else if (opt.equals("-nocomment")) {
        nocomment = true;
      } else if (opt.equals("-tag") || opt.equals("-taglet")) {
        customTagStrs.add(os);
      } else if (opt.equals("-tagletpath")) {
        tagletpath = os[1];
      } else if (opt.equals("-keywords")) {
        keywords = true;
      } else if (opt.equals("-serialwarn")) {
        serialwarn = true;
      } else if (opt.equals("-group")) {
        group.checkPackageGroups(os[1], os[2]);
      } else if (opt.equals("-link")) {
        String url = os[1];
        extern.url(url, url, root, false);
      } else if (opt.equals("-linkoffline")) {
        String url = os[1];
        String pkglisturl = os[2];
        extern.url(url, pkglisturl, root, true);
      }
    }
    if (sourcepath.length() == 0) {
      sourcepath =
          System.getProperty("env.class.path") == null ? "" : System.getProperty("env.class.path");
    }
    if (docencoding == null) {
      docencoding = encoding;
    }

    classDocCatalog = new ClassDocCatalog(root.specifiedClasses());
    initTagletManager(customTagStrs);
  }