protected Map.Entry<String, List<String>> parseMapEntry(String entry) {
        // Trim whitespace and return null if empty
        entry = entry.trim();
        if(entry.isEmpty()) return null;

        // Check if this is a switch
        if(entry.startsWith("-")) {
            // Get the rest of the string
            String switchName = entry.substring(1);

            // Return a map entry with the value as null, implying a switch
            return new AbstractMap.SimpleEntry(switchName, null);
        }

        String name = null; // Name
        List<String> pairs = new LinkedList<String>();  // List of pairs
        List<String> values = new LinkedList<String>(); // List of values

        // If there is a pipe character, then add all the pairs to the list
        if(entry.indexOf('|') != -1) {
            String[] subEntries = entry.split("\\|");
            for(String subEntry : subEntries) {
                if(!subEntry.isEmpty()) pairs.add(subEntry);
            }
        } else {
            pairs.add(entry);
        }

        // Loop through all of the pairs
        for(String pair : pairs) {
            // Skip if there is not an equal sign
            if(pair.indexOf('=') == -1) continue;

            // Split by equal sign
            String[] nameValue = pair.split("=");

            // Set the name of the entry
            if(name == null) name = nameValue[0];

            // Unescape the value and add to the list of values
            values.add(unescape(nameValue[1]));
        }

        // Return map entry
        return new AbstractMap.SimpleEntry<String, List<String>>(name, values);
    }