docs: private void handleShortAndLongOption(String token) throws ParseException
      {
          String t = Util.stripLeadingHyphens(token);
  
          int pos = t.indexOf('=');
  
          if (t.length() == 1)
          {
              // -S
              if (options.hasShortOption(t))
              {
                  handleOption(options.getOption(t));
              }
              else
              {
                  handleUnknownToken(token);
              }
          }
          else if (pos == -1)
          {
              // no equal sign found (-xxx)
              if (options.hasShortOption(t))
              {
                  handleOption(options.getOption(t));
              }
              else if (!options.getMatchingOptions(t).isEmpty())
              {
                  // -L or -l
                  handleLongOptionWithoutEqual(token);
              }
              else
              {
                  // look for a long prefix (-Xmx512m)
                  String opt = getLongPrefix(t);
  
                  if (opt != null && options.getOption(opt).acceptsArg())
                  {
                      handleOption(options.getOption(opt));
                      currentOption.addValueForProcessing(t.substring(opt.length()));
                      currentOption = null;
                  }
                  else if (isJavaProperty(t))
                  {
                      // -SV1 (-Dflag)
                      handleOption(options.getOption(t.substring(0, 1)));
                      currentOption.addValueForProcessing(t.substring(1));
                      currentOption = null;
                  }
                  else
                  {
                      // -S1S2S3 or -S1S2V
                      handleConcatenatedOptions(token);
                  }
              }
          }
          else
          {
              // equal sign found (-xxx=yyy)
              String opt = t.substring(0, pos);
              String value = t.substring(pos + 1);
  
              if (opt.length() == 1)
              {
                  // -S=V
                  Option option = options.getOption(opt);
                  if (option != null && option.acceptsArg())
                  {
                      handleOption(option);
                      currentOption.addValueForProcessing(value);
                      currentOption = null;
                  }
                  else
                  {
                      handleUnknownToken(token);
                  }
              }
              else if (isJavaProperty(opt))
              {
                  // -SV1=V2 (-Dkey=value)
                  handleOption(options.getOption(opt.substring(0, 1)));
                  currentOption.addValueForProcessing(opt.substring(1));
                  currentOption.addValueForProcessing(value);
                  currentOption = null;
              }
              else
              {
                  // -L=V or -l=V
                  handleLongOptionWithEqual(token);
              }
          }
      }