docs: static String[] translateCommandline(String toProcess) {
          if (toProcess == null || toProcess.length() == 0) {
              //no command? no string
              return new String[0];
          }
          // parse with a simple finite state machine
  
          final int normal = 0;
          final int inQuote = 1;
          final int inDoubleQuote = 2;
          int state = normal;
          final StringTokenizer tok = new StringTokenizer(toProcess, "\"\' ", true);
          final ArrayList<String> result = new ArrayList<String>();
          final StringBuilder current = new StringBuilder();
          boolean lastTokenHasBeenQuoted = false;
  
          while (tok.hasMoreTokens()) {
              String nextTok = tok.nextToken();
              switch (state) {
                  case inQuote:
                      if ("\'".equals(nextTok)) {
                          lastTokenHasBeenQuoted = true;
                          state = normal;
                      } else {
                          current.append(nextTok);
                      }
                      break;
                  case inDoubleQuote:
                      if ("\"".equals(nextTok)) {
                          lastTokenHasBeenQuoted = true;
                          state = normal;
                      } else {
                          current.append(nextTok);
                      }
                      break;
                  default:
                      if ("\'".equals(nextTok)) {
                          state = inQuote;
                      } else if ("\"".equals(nextTok)) {
                          state = inDoubleQuote;
                      } else if (" ".equals(nextTok)) {
                          if (lastTokenHasBeenQuoted || current.length() != 0) {
                              result.add(current.toString());
                              current.setLength(0);
                          }
                      } else {
                          current.append(nextTok);
                      }
                      lastTokenHasBeenQuoted = false;
                      break;
              }
          }
          if (lastTokenHasBeenQuoted || current.length() != 0) {
              result.add(current.toString());
          }
          if (state == inQuote || state == inDoubleQuote) {
              throw new ParseException("unbalanced quotes in " + toProcess);
          }
          return result.toArray(new String[0]);
      }