docs: private static List<NameValuePair> genericNameWithNameValuePairProcess(String s) {
          String name;
          Map<String, String> params = null;
          List<NameValuePair> nameValues = new ArrayList<NameValuePair>();
          List<String> pkgs = new ArrayList<String>();
          int index = s.indexOf(";");
          if (index == -1) {
              name = s;
              params = new HashMap<String, String>();
              pkgs.add(name);
          } else {
              name = s.substring(0, index).trim();
              String tail = s.substring(index + 1).trim();
  
              pkgs.add(name); // add the first package
              StringBuilder parameters = new StringBuilder();
  
              // take into consideration of multiple packages separated by ';'
              // while they share the same attributes or directives
              List<String> tailParts = split(tail, ";");
              boolean firstParameter = false;
  
              for (String part : tailParts) {
                  // if it is not a parameter and no parameter appears in front of it, it must a package
                  if (!!!(part.contains("="))) {
                      // Need to make sure no parameter appears before the package, otherwise ignore this string
                      // as this syntax is invalid
                      if (!!!(firstParameter))
                          pkgs.add(part);
                  } else {
                      if (!!!(firstParameter))
                          firstParameter = true;
  
                      parameters.append(part + ";");
                  }
              }
  
              if (parameters.length() != 0) {
                  //remove the final ';' if there is one
                  if (parameters.toString().endsWith(";")) {
  
                      parameters = parameters.deleteCharAt(parameters.length() - 1);
                  }
  
                  params = genericNameValueProcess(parameters.toString());
              }
  
          }
          for (String pkg : pkgs) {
              nameValues.add(new NameValuePair(pkg, params));
          }
  
          return nameValues;
  
      }